├── README.md ├── projects ├── cloud-developer │ └── linktree-clone-barebones.md ├── cloud-native │ ├── k8s-mindfulness-service.md │ ├── k8s-mindfulness.png │ └── placeholder.png └── linktree-clone.md └── requirements ├── architectual-diagrams.md ├── cost-anaylsis.md ├── presentation.md ├── project-journal.md ├── security-anaylsis.md └── showcase.md /README.md: -------------------------------------------------------------------------------- 1 | # Cloud Projects 2 | 3 | ## Why do I need to build a Cloud Project? 4 | In order to obtain a cloud role at a technology company, it is strongly recommended to build your own Cloud Project so that during your interview process you can demostrate practical working knowledge of cloud workloads. 5 | 6 | ## What does this projects repository provide? 7 | 8 | This repository contains "project blueprints" to help guide you towards building a well rounded cloud project. 9 | 10 | A blueprint is a just checklist of suggested requirements accompanied with additional information to get you started. 11 | 12 | ## Are their accompanying videos with these cloud projects? 13 | 14 | This projects repository does not contain one-to-one instructional steps to build a cloud project end to end. 15 | 16 | The value of a cloud project is you attempting to figure out how to complete a project without video instruction. 17 | 18 | # Cloud Project Requirements 19 | 20 | Your project needs to contain the following requirements: 21 | 22 | - [Project Journal](requirements/project-journal.md) 23 | - [Architectual Diagram(s)](requirements/architectual-diagrams.md) 24 | - [Presentation](requirements/presentation.md) 25 | - [Cost Anaylsis](requirements/cost-anaylsis.md) 26 | - [Security Anaylsis](requirements/security-anaylsis.md) 27 | - [Project Showcase (Codebase, Live Demo, IaC)](requirements/showcase.md) 28 | 29 | Please explore each of the requirements above before proceeding to create your Cloud Project. 30 | 31 | # Cloud Projects by Cloud Role 32 | 33 | ## Cloud Engineer Projects 34 | 35 | | Project Name | Difficulty | 36 | |---|---| 37 | | | Easy | 38 | | | Medium | 39 | | | Hard | 40 | 41 | ## Cloud Developer Projects 42 | 43 | | Project Name | Difficulty | 44 | |---|---| 45 | | [Linktr.ee Clone - Bare Bones](projects/cloud-developer/linktree-clone-bare-bones.md) | Beginner | 46 | | [Linktr.ee Clone - Data Driven](projects/cloud-developer/linktree-clone.md) | Associate | 47 | | [Linktr.ee Clone - Multi-Tenant SaaS](projects/cloud-developer/linktree-clone.md) | Professional | 48 | 49 | ## Cloud Architect Projects 50 | 51 | | Project Name | Difficulty | 52 | |---|---| 53 | | | Easy | 54 | | | Medium | 55 | | | Hard | 56 | 57 | ## DevOps Engineer Projects 58 | 59 | | Project Name | Difficulty | 60 | |---|---| 61 | | | Easy | 62 | | | Medium | 63 | | | Hard | 64 | 65 | ## Site Reliability Engineer (SRE) Projects 66 | 67 | | Project Name | Difficulty | 68 | |---|---| 69 | | | Easy | 70 | | | Medium | 71 | | | Hard | 72 | 73 | ## Data Analytics Projects 74 | 75 | | Project Name | Difficulty | 76 | |---|---| 77 | | | Easy | 78 | | | Medium | 79 | | | Hard | 80 | 81 | ## Data Engineer Projects 82 | 83 | | Project Name | Difficulty | 84 | |---|---| 85 | | | Easy | 86 | | | Medium | 87 | | | Hard | 88 | 89 | ## DevSecOps Projects 90 | 91 | | Project Name | Difficulty | 92 | |---|---| 93 | | | Easy | 94 | | | Medium | 95 | | | Hard | 96 | 97 | ## Cloud Security Engineer Projects 98 | 99 | | Project Name | Difficulty | 100 | |---|---| 101 | | | Easy | 102 | | | Medium | 103 | | | Hard | 104 | 105 | ## Cloud-Native Engineer 106 | 107 | | Project Name | Difficulty | 108 | |---|---| 109 | | [Free Mindfuless Service](projects/cloud-native/k8s-mindfulness-service.md) | Beginner | 110 | | | Associate | 111 | | | Professional | -------------------------------------------------------------------------------- /projects/cloud-developer/linktree-clone-barebones.md: -------------------------------------------------------------------------------- 1 | # Link.tree Clone - Bare Bones 2 | 3 | Linktree is a Software as a Service (SaaS) to create a social media landing page around your personal brand. 4 | 5 | ## Cloud Project Scope 6 | 7 | The scope of this project is to: 8 | - build a static website 9 | - driven by static data 10 | - deployed to a cloud storage service 11 | - served by a Content Delivery Network 12 | - register a domain name and direct to your website 13 | 14 | ## Frontend (Static Website) 15 | 16 | You will neeed to build a frontend. 17 | 18 | [ Linktree HTML and CSS Clone Tutorial](https://www.youtube.com/watch?v=lUo6O_L-V-4) by Danny Thompson 19 | 20 | ## Cloud Storage 21 | 22 | - [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 23 | - [Azure Blob Storage](https://docs.microsoft.com/en-us/azure/storage/blobs/) 24 | - [Google Cloud Storage](https://cloud.google.com/storage/docs) 25 | 26 | ## Content Delivery Network 27 | 28 | - [AWS CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) 29 | - [Azure Content Delivery Network](https://docs.microsoft.com/en-us/azure/cdn/) 30 | - [Google Cloud CDN](https://cloud.google.com/cdn) 31 | - [Fastly](https://www.fastly.com/) 32 | 33 | ## Domain Name Service 34 | 35 | We will need to purchase or obtain a free domain. 36 | 37 | ## Deployment 38 | 39 | Deployment will be a manual process. In future versions of this projoect we will create a deployment pipeline. -------------------------------------------------------------------------------- /projects/cloud-native/k8s-mindfulness-service.md: -------------------------------------------------------------------------------- 1 | ![Kubernetes Mindfulness Service](k8s-mindfulness.png) 2 | 3 | # Kubernetes Mindfulness Service 4 | 5 | ## Contributors 6 | 7 | The following people helped in the developement and finetuning of this community project idea. 8 | 9 | 10 | 11 | 19 | 20 |
12 | 13 | 14 |
15 | Andrew Brown 16 |
17 |
18 |
21 | 22 | ## Hall of Completion 23 | 24 | This is a list of people who have succcesfully completed this project. 25 | 26 | 27 | 28 | 36 | 37 |
29 | 30 | 31 |
32 | This could be you! 33 |
34 |
35 |
38 | 39 | To submit your project to the Hall of Completion, open a Github Issue and share your public repository for review and consideration of approval. 40 | 41 | ## Technical Goal 42 | 43 | This project aims to demonstrate you can deploy a simple production web application to Kubernetes to a managed service provider utilizing standard Kubernetes components and third-party services. 44 | 45 | ## Scenario 46 | 47 | A non-profit organization has received government funding to leverage cloud-native services for building public services accessible online. The org has hired you as their (only) Cloud-Native/Kubernetes Engineer. 48 | 49 | ### Feature Requirements 50 | 51 | The mindfulness app is accessible via any web browser. 52 | The mindfulness app consists of a single page that displays a breathing exercise that the user can perform. 53 | 54 | eg. two deep breaths, one short breath 55 | 56 | The breathing excerise must change every 15 minutes. 57 | 58 | There should be between 50 to 100 different breathing excerises 59 | 60 | ### Business Requirements 61 | 62 | The government funding works in two parts: 63 | 1. The non-profit will be provided funding to hire an engineer (that's you) to build a production-ready prototype 64 | 2. The non-profit will only receive ongoing funding to retain the engineer and maintain the service cost if the organization submits a: Architectural Diagram, a Technical Journal, a Cost Analysis, A Security Analysis. 65 | 66 | #### Architectural Diagram 67 | 68 | A PDF architectural diagram showing as much possible detail of the final architecture will need to be submitted to the government to obtain funding. 69 | 70 | #### Technical Journal 71 | 72 | There is concern that if the engineer (you) were to leave the project, the next person would not know what to do to carry on the project or may not understand your decisions. 73 | 74 | Another concern is that the service in question is only a production prototype and will be pulled down while the organization awaits approval for the second level of funding. 75 | 76 | A Technical Journal is required to mitigate the concerns 77 | The Technical journal is composed of different digital documents, Work Log, Technical Steps: 78 | 79 | ##### Technical Steps 80 | 81 | In the technical steps digital document, you need to write out all the technical steps taken. Similar to writing a tutorial. 82 | 83 | ##### Work Log 84 | 85 | In this document, every day you decide to work on the project, you describe what you plan to do today, what you think the solution will be, and the outcome (regardless of whether it was successful or failure.) 86 | 87 | #### Security Analysis 88 | 89 | While the app does not contain any sensitive organizational data or stores user data, you must describe the security of your service. Do your best here to meet what you think are the requirements. 90 | 91 | #### Cost Anaylsis 92 | 93 | The government needs to know the monthly spending to receive funding for ongoing costs. 94 | 95 | For two years out, a detailed breakdown of cost for three years out with the assumption there will be an increase in traffic and usage. (It is up to you to describe what the increase in capacity will be) 96 | 97 | You can factor in extra labour if it's not as simple as scaling to more machines. 98 | 99 | ## Third-Party Consultant Recommedations 100 | 101 | To obtain the initial funding, the organization had to by requirement consult a third-party Cloud-Native Engineer on how the service should be built. Therefore, you need to try and meet these requirements. 102 | 103 | 🚨 📖 Please Read All Requirements before getting started 104 | 105 | - [1. Building the application](#1-building-the-application) 106 | - [2. Managed database service](#2-managed-database-service) 107 | - [3. Containerizing the application](#3-containerizing-the-application) 108 | - [4. Managed Cloud Service Provider (CSPs)](#4-managed-cloud-service-provider-csps) 109 | - [5. External Load Balanacer](#5-external-load-balanacer) 110 | - [6. Domain Name](#6-domain-name) 111 | - [7. Encyption-in-Transit](#7-encyption-in-transit) 112 | - [8. Scheduled CronJob](#8-scheduled-cronjob) 113 | - [9. General Availability and AutoScaling](#9-general-availability-and-autoscaling) 114 | - [10. Right-sizing Pods](#10-right-sizing-pods) 115 | - [11. Multiple Fault Zones (Optional, Bonus Points)](#11-multiple-fault-zones-optional-bonus-points) 116 | - [12. Cluster Autoscaling (Optional Big Bonus Points](#12-cluster-autoscaling-optional-big-bonus-points) 117 | - [13. Block Storage and Snapshots](#13-block-storage-and-snapshots) 118 | - [14. Namespace](#14-namespace) 119 | - [15. Role Based Acess Controls (RBAC)](#15-role-based-acess-controls-rbac) 120 | - [16. Deployment](#16-deployment) 121 | - [17. Service Mesh](#17-service-mesh) 122 | 123 | ### 1. Building the application 124 | 125 | The web-application requirements is single web-app. 126 | 127 | You can build this web-application using any web-framework. Here are some examples. 128 | - Ruby on Rails 129 | - Sinatra 130 | - Laravel 131 | - Flask 132 | 133 | The web-application needs to retrieve a record from a single table of a relational database. 134 | You can either use: 135 | - MySQL 136 | - Postgres 137 | - MariaDB 138 | 139 | ### 2. Managed database service 140 | 141 | While you could use Stateful Sets to deploy the database within the cluster, the consultant specifically said to use a managed service by a Cloud Service Provider (CSPs). 142 | 143 | Examples of managed relational database services: 144 | - Amazon Relational Database Service (RDS) 145 | - Azure Database for MySQL or Postgres 146 | - Google Cloud SQL for MySQL or Postgres 147 | 148 | You will need to use a Kubernetes ExternalName Service 149 | 150 | ### 3. Containerizing the application 151 | 152 | Once you have built the web-application you need to ensure it can run in its own container. 153 | 154 | - You need to find an existing base container image that can run your web-framework. 155 | - You need create your own Dockerfile an extend that base image. 156 | - You need to build that image and store it in a container repository. 157 | 158 | ### 4. Managed Cloud Service Provider (CSPs) 159 | 160 | You need to host the cluster on a managed kuberenetes service. 161 | The following were suggested: 162 | 163 | - Elastic Kubernetes Service (EKS) 164 | - Azure Kuberenetes Service (AKS) 165 | - Google Kuberentes Engine (GKE) 166 | - IBM Kubrenetes Service (IKS) 167 | - CIVO Kubernetes Service (CKS) 168 | - Digital Ocean Kubernetes Service (DOKS) 169 | 170 | > CIVO does not have a managed relational database service so in this case you'll need to use CIVO alongside another Cloud Service Provider. 171 | 172 | Some CSPs have two different options for nodes, Virtual Machines, or Serverless Containers. 173 | You must avoid using serverless containers for the underyling compute for this project. 174 | 175 | ### 5. External Load Balanacer 176 | 177 | In order for traffic to reach the service you will need to leverage the Cloud Service Providers (CSPs) load balanacer. 178 | 179 | - You'll need to install an Ingress Controller 180 | - You'll need to create an Kubernetes Ingress 181 | 182 | > Make sure you are using the CSPs load balancer, and not the Nginx Ingress Controller. 183 | 184 | ### 6. Domain Name 185 | 186 | You need a domain name, purchase it or get a free domain name and point it to your service. 187 | 188 | ### 7. Encyption-in-Transit 189 | 190 | The web application needs to run on HTTPS. 191 | 192 | ### 8. Scheduled CronJob 193 | 194 | A Kubernetes CronJob should run every 15 minutes, and it should update your ConfigMap that stores a reference to the current record that should be retrieved from the database. 195 | 196 | ### 9. General Availability and AutoScaling 197 | 198 | There should always be at least three pods of the web-application running. 199 | 200 | You need to create a HorizontalPodAutoscaler and then use a Load-Testing Tool 201 | 202 | ### 10. Right-sizing Pods 203 | 204 | Use an AutoPodVertical scaler to right-size your pods to determine the best CPU and Memory usage. 205 | 206 | ### 11. Multiple Fault Zones (Optional, Bonus Points) 207 | 208 | Run your pods across at least three different fault zones. 209 | A fault zone is a collection of datacenters running in a different location. 210 | 211 | eg. AWS calls the Availability Zones. 212 | 213 | > You will have to run at leaast 3 nodes and this will greatly increase cost. 214 | 215 | ### 12. Cluster Autoscaling (Optional Big Bonus Points) 216 | 217 | Implement Cluster Autoscaling so more nodes will be added when using a Load Testing Tool. 218 | 219 | ### 13. Block Storage and Snapshots 220 | 221 | Your pods should utilize Block Storage from a cloud service provide. 222 | 223 | You must perform a Kubernetes Volume Snapshot 224 | 225 | ### 14. Namespace 226 | 227 | You need to namespace your web-application in a namespace called "mindfulness" 228 | 229 | ### 15. Role Based Acess Controls (RBAC) 230 | 231 | You need to create a user that can gain access to the cluster but only have read access to all components in the "mindfulness" namespace 232 | 233 | ### 16. Deployment 234 | 235 | You need setup a deployment tool that supports GitOps: 236 | - Argo 237 | - Flux 238 | 239 | You need to demostrate that it works with any kind of superfical change to your code to a git repository. 240 | 241 | Use need to use a *Blue/Green* deployment strategy 242 | 243 | ### 16. Service Mesh 244 | 245 | Implement a service mesh: 246 | - Istio 247 | - LinkerD 248 | 249 | Show that you can view service mesh information from Grapha and Promethous. -------------------------------------------------------------------------------- /projects/cloud-native/k8s-mindfulness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/100DaysOfCloud/CloudProjects/48e64ead969cea7aa5aef1215ee5b35c05f54d34/projects/cloud-native/k8s-mindfulness.png -------------------------------------------------------------------------------- /projects/cloud-native/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/100DaysOfCloud/CloudProjects/48e64ead969cea7aa5aef1215ee5b35c05f54d34/projects/cloud-native/placeholder.png -------------------------------------------------------------------------------- /projects/linktree-clone.md: -------------------------------------------------------------------------------- 1 | # Linktree Clone 2 | 3 | ## Project Summary 4 | 5 | Linktree is a tool that allows you to share multiple links on social media. 6 | 7 | Builda clone of Linktree. 8 | 9 | ## Certifications 10 | 11 | Choose one of the follow cloud certifications to use as your general study path, and build this cloud project while you study or after you have passed your exam. 12 | 13 | - [Azure Developer Associate](https://docs.microsoft.com/en-us/learn/certifications/azure-developer/) 14 | - [AWS Developer Associate](https://aws.amazon.com/certification/certified-developer-associate/) 15 | - [Google Cloud Associate Cloud Engineer](https://cloud.google.com/certification/cloud-engineer) 16 | 17 | ## Project Requirements 18 | 19 | - [ ] Build a frontend and deploy to it to a cloud storage service served by a Content Delivery Network (CDN) 20 | - [ ] Build an api backend and deploy it to a cloud computing service 21 | - [ ] Implement a decenteralized authenication service for signup, login and reset password 22 | 23 | ### Frontend 24 | 25 | You will need to build a frontend. 26 | 27 | [ Linktree HTML and CSS Clone Tutorial](https://www.youtube.com/watch?v=lUo6O_L-V-4) by Danny Thompson 28 | 29 | ## Backend 30 | 31 | You will need to build a backend 32 | 33 | ## Cloud Storage -------------------------------------------------------------------------------- /requirements/architectual-diagrams.md: -------------------------------------------------------------------------------- 1 | # Architectual Diagrams 2 | 3 | ## What is an architectual diagram? 4 | 5 | An architectual diagram in the context of cloud is a visual representation of cloud services interconnected with other cloud services that make up a cloud workload. 6 | 7 | ## What is the point of an architectual diagram? 8 | 9 | An architectual diagram is used to quickly communicate a proposed or an existing cloud workload and its accompanying infrastructure to other team members or stakeholders. 10 | 11 | 12 | ## Why do I need to create an architectual diagram for my cloud project? 13 | 14 | Creating Architectual diagrams is a fundemental skill for any cloud role and during the interview process it is very common to be asked to draw an architectual diagram on a whiteboard to showcase or describe a cloud workload. 15 | 16 | # Architectual Diagrams Resources 17 | 18 | ## Architecture Icon Kits 19 | You can download Cloud Service Provider icons from the following links: 20 | 21 | - [AWS Architecture Icons](https://aws.amazon.com/architecture/icons/) 22 | - [Azure Architecture Icons](https://docs.microsoft.com/en-us/azure/architecture/icons/) 23 | - [Google Cloud Architecture Icons](https://cloud.google.com/icons) 24 | - [CNCF Architecture Icons](https://github.com/cncf/artwork) 25 | - [CISCO Network Topology Icons](https://www.cisco.com/c/en/us/about/brand-center/network-topology-icons.html) 26 | 27 | ## Graphical Software 28 | 29 | You will need some kind of graphical software to assemble your architectual diagrams. Here are your possible options: 30 | 31 | - [LucidChart](https://lucidchart.com) 32 | - [Draw.io](https://draw.io) 33 | - [PowerPoint](https://office.live.com/start/powerpoint.aspx) 34 | - [Google Slides](https://www.google.ca/slides/about/) 35 | - [System Architect](https://www.teamblue.unicomsi.com/products/system-architect/) 36 | - [OmniGraffle](https://www.omnigroup.com/omnigraffle) 37 | - [Microsoft Visio](https://www.microsoft.com/en-ca/microsoft-365/visio/flowchart-software) 38 | 39 | ## The C4 Model 40 | 41 | C4 Model is a lean graphical notation technique for modelling the architecture of software systems. 42 | 43 | C4 Model is not specific to cloud architectual diagrams but is appicable to any software systems including cloud workloads. 44 | 45 | C4 Model will help you understand what information is important to capture and what should be left out in your architectual diagrams. 46 | 47 | - [C4 Model Wikipedia Article](https://en.wikipedia.org/wiki/C4_model) 48 | - [C4 Model Website](https://c4model.com/) 49 | - [C4 Model Tech Talk by Simon Brown](https://youtu.be/x2-rSnhpw0g) 50 | 51 | ## Diagrams as Code 52 | 53 | Diagrams as Code allows you to programmatically generate architectual diagrams usingg python code. 54 | 55 | [Diagram as Code](https://diagrams.mingrammer.com/) -------------------------------------------------------------------------------- /requirements/cost-anaylsis.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/100DaysOfCloud/CloudProjects/48e64ead969cea7aa5aef1215ee5b35c05f54d34/requirements/cost-anaylsis.md -------------------------------------------------------------------------------- /requirements/presentation.md: -------------------------------------------------------------------------------- 1 | # Presentation -------------------------------------------------------------------------------- /requirements/project-journal.md: -------------------------------------------------------------------------------- 1 | # Project Journal 2 | 3 | ## What is a Technical Narrative? 4 | 5 | A Technical Narrative is a document that shows the incremental history of the research and development you undertook during your project. 6 | 7 | For our purpose we'll call our Technical Narrative a "Project Journal". 8 | 9 | ## What should be written in a Project Journal? 10 | 11 | - A hypothesis for the technical solution 12 | - Outline the current limitations eg. Knowledge, Budget, Time 13 | - The documentation and education resources you used 14 | - The challenges you faces 15 | - The outcomes you were able to achieve (success or failures) 16 | - The evolution of your architectual diagram 17 | 18 | ## Why can't I just build the project, why bother with a Project Journal? 19 | 20 | The process you undertook to build your Cloud Project is equal or more important then the outcome of your Cloud Project. 21 | 22 | - A project journal will demostrate strong documentation skills 23 | - A project journal will help you recall and 24 | - A project journal will prove -------------------------------------------------------------------------------- /requirements/security-anaylsis.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/100DaysOfCloud/CloudProjects/48e64ead969cea7aa5aef1215ee5b35c05f54d34/requirements/security-anaylsis.md -------------------------------------------------------------------------------- /requirements/showcase.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/100DaysOfCloud/CloudProjects/48e64ead969cea7aa5aef1215ee5b35c05f54d34/requirements/showcase.md --------------------------------------------------------------------------------