This subject aims to challenge your understanding of DevOps and cloud technologies by providing hands-on experience in deploying and managing a microservices-based application on a cloud platform, your mission is to:
The objective of this project is to challenge your understanding of DevOps and cloud technologies by providing hands-on experience in deploying and managing a microservices-based application on a cloud platform. Your mission is to:
- Set up and configure a cloud environment for deploying microservices.
- Set up and configure a cloud environment for deploying microservices.
- Deploy the provided microservices application to the cloud environment.
- Deploy the provided microservices application to the cloud environment.
- Implement monitoring, logging, and scaling to ensure the application runs efficiently.
- Implement monitoring, logging, and scaling to ensure that the application runs efficiently.
- Optimize the application to handle varying workloads and unexpected events.
- Optimize the application to handle varying workloads and unexpected events.
### Tips
Before starting this project, you should know the following:
- Basic DevOps concepts and practices.
- Familiarity with containerization and orchestration tools, such as Docker and Kubernetes.
- Understanding of cloud platforms, such as AWS, Azure, or GCP.
- Familiarity with Infrastructure as Code (IaC) tools, such as Terraform or CloudFormation.
- Knowledge of monitoring and logging tools, such as Prometheus, Grafana, and ELK stack.
> Any lack of understanding of the concepts of this project may affect the difficulty of future projects, take your time to understand all concepts.
> Be curious and never stop searching!
### Cloud Certification Preparation (optional)
Choose a popular cloud platform certification to pursue, based on the platform you will for this project or your area of interest. Study the core concepts, services, and best practices for the chosen platform, and use the provided resources to help prepare for the certification exam.
#### Popular Fundamental Cloud Platform Certifications:
1. `AWS Certified Cloud Practitioner`: This certification covers the fundamentals of AWS cloud services, architecture, and cost management. It is intended for individuals who want to validate their understanding of the AWS platform.
2. `Microsoft Azure Fundamentals (AZ-900)`: This certification covers the basics of Microsoft Azure cloud services, architecture, and security. It is designed for individuals who want to demonstrate their understanding of the Azure platform.
3. `Google Cloud Platform Associate Cloud Engineer`: This certification covers the fundamentals of the Google Cloud Platform (GCP) services, architecture, and security. It is intended for individuals who want to validate their understanding of the GCP platform.
To further enhance the learning experience and assess your knowledge, a roleplay question session will be included as part of the Cloud-Design Project. This section will involve your answering a series of questions in a simulated real-world scenario, where you will assume the role of a Cloud engineer explaining your solution to a team or a stakeholder.
To further enhance the learning experience and assess your knowledge, a roleplay question session will be included as part of the Cloud-Design Project. This section will involve your answering a series of questions in a simulated real-world scenario, where you will assume the role of a Cloud engineer explaining your solution to a team or a stakeholder.
To enhance the learning experience and assess your knowledge, a roleplay question session will be included as part of the Cloud-Design Project. This section will involve answering a series of questions in a simulated real-world scenario where you assume the role of a Cloud engineer explaining your solution to a team or stakeholder.
The goal of the roleplay question session is to:
The goal of the roleplay question session is to:
- Assess your understanding of the concepts and technologies used in the project.
- Assess your understanding of the concepts and technologies used in the project.
@ -62,14 +29,14 @@ Prepare for a roleplay question session where you will assume the role of a Clou
### Architecture
### Architecture
By using your solutions in your previous projects `crud-master`, `play-with-containers`, and `orchestrator` you have to design and deploy infrastructure in a cloud platform of your choice and you must respect the requirements for the project consisting of the following components:
By using your solutions in your previous projects `crud-master`, `play-with-containers`, and `orchestrator` you have to design and deploy the infrastructure in a cloud platform of your choice and you must respect the requirements for the project consisting of the following components:
- `inventory-database container` is a PostgreSQL database server that contains your inventory database, it must be accessible via port `5432`.
- `inventory-database container` is a PostgreSQL database server that contains your inventory database, it must be accessible via port `5432`.
- `billing-database container` is a PostgreSQL database server that contains your billing database, it must be accessible via port `5432`.
- `billing-database container` is a PostgreSQL database server that contains your billing database, it must be accessible via port `5432`.
- `inventory-app container` is a Node.js server that contains your inventory-app code running and connected to the inventory database and accessible via port `8080`.
- `inventory-app container` is a Node.js server that contains your inventory-app code running and connected to the inventory database and accessible via port `8080`.
- `billing-app container` is a Node.js server that contains your billing-app code running and connected to the billing database and consuming the messages from the RabbitMQ queue, and it can be accessed via port `8080`.
- `billing-app container` is a Node.js server that contains your billing-app code running and connected to the billing database and consuming the messages from the RabbitMQ queue, and it can be accessed via port `8080`.
- `RabbitMQ container` is a RabbitMQ server that contains the queue.
- `RabbitMQ container` is a RabbitMQ server that contains the queue.
- `api-gateway-app container` is a Node.js server that contains your api-gateway-app code running and forwarding the requests to the other services and it's accessible via port `3000`.
- `api-gateway-app container` is a Node.js server that contains your "api-gateway-app" code running and forwarding the requests to the other services and it's accessible via port `3000`.
Design the architecture for your cloud-based microservices application. You are free to choose the services and architectural patterns that best suit your needs, as long as they meet the project requirements and remain within a reasonable cost range. Consider the following when designing your architecture:
Design the architecture for your cloud-based microservices application. You are free to choose the services and architectural patterns that best suit your needs, as long as they meet the project requirements and remain within a reasonable cost range. Consider the following when designing your architecture:
@ -89,6 +56,30 @@ Select a cloud provider (AWS, Azure, GCP, or any other provider of your choice)
> While working on this project, it is essential to be aware of the potential costs associated with using cloud resources. Each cloud provider offers various services with different pricing models, and it can be easy to incur unexpected charges if you don't carefully manage your resources.
> While working on this project, it is essential to be aware of the potential costs associated with using cloud resources. Each cloud provider offers various services with different pricing models, and it can be easy to incur unexpected charges if you don't carefully manage your resources.
### Cloud Certification Preparation (optional)
Choose a popular cloud platform certification to pursue, based on the platform you will use for this project or your area of interest. Study the core concepts, services, and best practices for the chosen platform, and use the provided resources to help prepare for the certification exam.
#### Popular Fundamental Cloud Platform Certifications:
1. `AWS Certified Cloud Practitioner`: This certification covers the fundamentals of AWS cloud services, architecture, and cost management. It is intended for individuals who want to validate their understanding of the AWS platform.
2. `Microsoft Azure Fundamentals (AZ-900)`: This certification covers the basics of Microsoft Azure cloud services, architecture, and security. It is designed for individuals who want to demonstrate their understanding of the Azure platform.
3. `Google Cloud Platform Associate Cloud Engineer`: This certification covers the fundamentals of the Google Cloud Platform (GCP) services, architecture, and security. It is intended for individuals who want to validate their understanding of the GCP platform.
1. `Understand the pricing model`: Familiarize yourself with the pricing model of the cloud provider and services you are using. Be aware of any free tiers, usage limits, and pay-as-you-go pricing structures.
1. `Understand the pricing model`: Familiarize yourself with the pricing model of the cloud provider and services you are using. Be aware of any free tiers, usage limits, and pay-as-you-go pricing structures.
@ -133,17 +124,31 @@ Implement security best practices, such as using HTTPS, securing API endpoints,
### Documentation
### Documentation
In a `README.md` file create clear and concise documentation for your architecture, including diagrams, descriptions of the components, and the rationale behind your design choices.
Create a `README.md` file that provides comprehensive documentation for your architecture, which must include well-structured diagrams, thorough descriptions of components, and an explanation of your design decisions, presented in a clear and concise manner. Make sure it contains all the necessary information about the solution (prerequisites, setup, configuration, usage, ...). This file must be submitted as part of the solution for the project.
### Hints
Before starting this project, you should know the following:
- Basic DevOps concepts and practices.
- Familiarity with containerization and orchestration tools, such as Docker and Kubernetes.
- Understanding of cloud platforms, such as AWS, Azure, or GCP.
- Familiarity with Infrastructure as Code (IaC) tools, such as Terraform or CloudFormation.
- Knowledge of monitoring and logging tools, such as Prometheus, Grafana, and ELK stack.
> Any lack of understanding of the concepts of this project may affect the difficulty of future projects, take your time to understand all concepts.
> Be curious and never stop searching!
### Bonus
### Bonus
If you complete the mandatory part successfully and you still have free time, you can implement anything that you feel deserves to be a bonus, for example:
If you complete the mandatory part successfully and you still have free time, you can implement anything that you feel deserves to be a bonus, for example:
- Use Function as a Service in your solution.
- Use `Function as a Service (FaaS)` in your solution.
- Use CDN to optimize your solution.
- Use `Content Delivery Network (CDN)` to optimize your solution.
- Alerts.
- Implementing alert systems to ensure your application runs smoothly.
- Source code for the microservices and any scripts used for deployment.
- Source code for the microservices and any scripts used for deployment.
- Configuration files for the Infrastructure as Code (IaC), containerization, and orchestration tools.
- Configuration files for your Infrastructure as Code (IaC), containerization, and orchestration tools.
###### Are all the required files present?
###### Are all the required files present?
##### Play the role of a stakeholder
##### Play the role of a stakeholder.
Conduct a roleplay question session with the students, asking them to explain their solution as if they were presenting it to a team or a stakeholder. Evaluate their understanding of the concepts and technologies used in the project, as well as their ability to communicate effectively and think critically about their solution.
As part of the evaluation process, conduct a simulated real-world scenario where the students assume the role of a Cloud engineer and explain their solution to a team or stakeholder. Evaluate their understanding of the concepts and technologies used in the project, as well as their ability to communicate effectively and think critically about their solution.
You can ask them the following questions:
- What is cloud and what are its benefits?
During the roleplay, ask them the following questions:
- Why we should deploy the solution in the cloud instead of on-premises?
- What is the cloud, and what are its benefits?
- Why should we deploy the solution in the cloud, instead of on-premises?
- How did you decide on the cloud provider for this project, and what factors did you consider when making that decision?
- How did you decide on the cloud provider for this project, and what factors did you consider when making that decision?
- Can you explain the architecture of your cloud-based microservices application and how the different components interact with each other?
- Can you explain the architecture of your cloud-based microservices application and how the different components interact with each other?
- Can you explain the cost of the solution and how you control it and make sense of it?
- How did you manage the cost of your solution, and what strategies did you use to optimize it?
- How did you ensure that the application is secure, and what security best practices did you implement?
- How did you ensure that the application is secure, and what security best practices did you implement to protect your application?
- What monitoring and logging tools did you use, and how do they help you identify and troubleshoot issues with the application?
- What monitoring and logging tools did you use, and how did they help you identify and troubleshoot issues with your application?
- Can you describe the auto-scaling policies you implemented and how they help the application handle varying workloads?
- Can you explain the auto-scaling policies you implemented and how they allow your application to handle varying workloads?
- How did you optimize the Docker images for each microservice, and how did it impact build times and image sizes?
- How did you optimize the Docker images for each microservice, and how did it impact build times and image sizes?
@ -37,7 +38,7 @@ You can ask them the following questions:
- How can your solution be extended or modified to handle future requirements, such as adding new microservices or migrating to a different cloud provider?
- How can your solution be extended or modified to handle future requirements, such as adding new microservices or migrating to a different cloud provider?
- Can you discuss any challenges you faced during the project and how you overcame them?
- What challenges did you encounter during the project, and how did you overcome them?
- How did you ensure that your documentation is clear and complete, and what steps did you take to make it easy for others to understand and maintain your solution?
- How did you ensure that your documentation is clear and complete, and what steps did you take to make it easy for others to understand and maintain your solution?
@ -45,11 +46,9 @@ You can ask them the following questions:
###### Did the students have the ability to communicate effectively and explain their decisions?
###### Did the students have the ability to communicate effectively and explain their decisions?
###### Did the students are capable to think critically about their solution and consider alternative approaches?
###### Are the students capable to think critically about their solution and consider alternative approaches?
Provide feedback to the student on their performance in the roleplay question session, highlighting their strengths and areas for improvement. Offer suggestions for further learning and resources to help them continue to develop their DevOps, cloud, and communication skills.
##### Review the Architecture Design
##### Review the Architecture Design.
Review the student's architecture design, ensuring that it meets the project requirements:
Review the student's architecture design, ensuring that it meets the project requirements:
@ -69,17 +68,13 @@ Review the student's architecture design, ensuring that it meets the project req
###### Did the choice of services and architectural patterns align with best practices for scalability, availability, and security?
###### Did the choice of services and architectural patterns align with best practices for scalability, availability, and security?
Provide feedback on their design choices, highlighting areas where they excelled and areas where improvements can be made.
##### Check the student documentation in the `README.md` file.
##### Check the Student Documentation
The Documentation must exist in the `README.md` file!
###### Did the README.md file contains all the required information about the solution (prerequisites, configuration, setup, usage, ...)?
###### Does the `README.md` file contain all the necessary information about the solution (prerequisites, setup, configuration, usage, ...)?
###### Is the documentation provided by the student clear and complete, including well-structured diagrams and thorough descriptions?
###### Is the documentation provided by the student clear and complete, including well-structured diagrams and thorough descriptions?
##### Verify the deployment
##### Verify the deployment.
###### Are all the microservices running as expected in the cloud environment, with no errors or connectivity issues?
###### Are all the microservices running as expected in the cloud environment, with no errors or connectivity issues?
@ -87,37 +82,33 @@ The Documentation must exist in the `README.md` file!
###### Are the microservices communicating with each other securely, using proper authentication and encryption methods?
###### Are the microservices communicating with each other securely, using proper authentication and encryption methods?
##### Evaluate the infrastructure setup
##### Evaluate the infrastructure setup.
###### Are the Infrastructure as Code (IaC) tools, such as Terraform or CloudFormation, used effectively to provision and manage resources in the cloud environment?
###### Are the `Infrastructure as Code (IaC)` tools, such as `Terraform` or `CloudFormation`, used effectively to provision and manage resources in the cloud environment?
###### Does the infrastructure setup follow best practices for security and resource management?
###### Does the infrastructure setup follow the best practices for security and resource management?
##### Assess containerization and orchestration
##### Assess containerization and orchestration.
###### Are the Dockerfiles optimized for efficient container builds, and do they follow best practices?
###### Are the Dockerfiles optimized for efficient container builds, and do they follow best practices?
###### Is the orchestration setup (e.g., Kubernetes manifests or AWS ECS task definitions) configured correctly and according to best practices?
###### Is the orchestration setup (e.g., Kubernetes manifests or AWS ECS task definitions) configured correctly and according to best practices?
##### Evaluate monitoring and logging
##### Evaluate monitoring and logging.
###### Do the monitoring and logging dashboards provide useful insights into the application's performance and health?
###### Do monitoring and logging dashboards provide useful insights into the application performance and health?
###### Are alerting mechanisms in place to notify the team of potential issues on time?
##### Assess optimization efforts.
##### Assess optimization efforts
###### Are the auto-scaling policies configured correctly to handle varying workloads?
###### Are the auto-scaling policies configured correctly to handle varying workloads?
###### Do the application and resource allocation remain efficient under different load scenarios?
###### Does the application and resource allocation remain efficient under different load scenarios?
##### Check security best practices
##### Check security best practices.
###### Has the student implemented security best practices, such as using HTTPS, securing API endpoints, and regularly scanning for vulnerabilities?
###### Has the student implemented security best practices, such as using HTTPS, securing API endpoints, and regularly scanning for vulnerabilities?
##### Give your Feedback
#### Bonus
Provide constructive feedback to the student on their solution, highlighting areas where they excelled and areas where improvements can be made. Offer suggestions for further learning and resources to help them continue to develop their DevOps and cloud skills.