├── 10_backend_for_frontend ├── README.md ├── module_focus.png └── task.md ├── 1_cloud_introduction ├── README.md └── task.md ├── 2_serving_spa ├── README.md ├── module_focus.png └── task.md ├── 3_serverless_api ├── README.md ├── module_focus.png └── task.md ├── 4_integration_with_nosql_database ├── README.md ├── module_focus.png └── task.md ├── 5_integration_with_s3 ├── README.md ├── module_focus.png └── task.md ├── 6_async_microservices_communication ├── README.md ├── module_focus.png └── task.md ├── 7_authorization ├── README.md ├── module_focus.png └── task.md ├── 8_integration_with_sql_database ├── README.md ├── module_focus.png └── task.md ├── 9_containerization ├── README.md ├── module_focus.png └── task.md ├── Architecture.pdf └── README.md /10_backend_for_frontend/README.md: -------------------------------------------------------------------------------- 1 | # Backend For Frontend 2 | 3 | # Goal 4 | 5 | - Learn what AWS Elastic Beanstalk is all about 6 | - Explore different AWS Elastic Beanstalk configuration details. 7 | - Set up a new AWS Elastic Beanstalk environment 8 | 9 | # Topics 10 | 11 | - Backend for Frontend overview 12 | - BFF as Pattern 13 | - API Gateway as BFF 14 | - AWS Elastic Beanstalk configuration 15 | 16 | # Materials 17 | 18 | ## Video 19 | 20 |
21 | Must Watch 22 | 23 | The following content provides enough info to complete the task. 24 | 25 |
26 | 27 |
28 | In English 29 | 30 |
31 | 32 | - [TBD](https://videoportal.epam.com/), ~0 mins 33 |
34 |
35 | 36 |
37 | In Russian 38 | 39 |
40 | 41 | - [RU Introduction](https://videoportal.epam.com/video/MRwdYoVdkwMXOOXNa3bL), ~1 mins 42 | - [RU Theory and concepts](https://videoportal.epam.com/video/9w0kaE2kl6xxezp5YeLn), ~16 mins 43 | - [RU Elastic Beanstalk](https://videoportal.epam.com/video/59pZaAyDzMrVM49yaNzq), ~7 mins 44 | - [RU Demo](https://videoportal.epam.com/video/njDdYP6ERkrdkG6872Xb), ~15 mins 45 | - [RU Deploy and delete an application with AWS Elastic Beanstalk](https://videoportal.epam.com/video/9w0kaEMkgADoxK5aeLnD), ~55mins 46 | - [RU Questions](https://videoportal.epam.com/video/nDBqYL4xgvk00oZdYXER), ~7 mins 47 |
48 |
49 | 50 |
51 | 52 |
53 | 54 |
55 | Additional 56 | 57 | The following content provides more info for further studies. 58 | 59 |
60 | 61 | - [Backends For Frontends Pattern](https://www.youtube.com/watch?v=wgD9t3R3x-w), ~12 mins 62 | - [Why Backend for Frontend Is Key to Your Microservices Journey](https://www.youtube.com/watch?v=PwgQZ8eCGxA), ~43 mins 63 | - [Deploy your code, scale, and lower cloud costs using Elastic Beanstalk](https://www.youtube.com/watch?v=o4clRJuH9xU), ~56 mins 64 | - [Microservices on AWS: Lambda VS Elastic Beanstalk](https://www.youtube.com/watch?v=UknlE_OMobY), ~64 mins 65 |
66 | 67 |
68 | 69 | ## Reading 70 | 71 |
72 | Must Read 73 | 74 | The following content provides enough info to complete the task. 75 | 76 |
77 | 78 | - [Service roles, instance profiles, and user policies](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-roles.html) 79 | - [Managing environments](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.html) 80 | - [Deploying Node.js applications to Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.html) 81 |
82 | 83 |
84 | 85 |
86 | Additional 87 | 88 | The following content provides more info for further studies. 89 | 90 |
91 | 92 | - [Deploying an Express application to Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_express.html) 93 | - [Basic health reporting](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.healthstatus.html) 94 | - [AWS Elastic Beanstalk security](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/security.html) 95 |
96 | 97 |
98 | 99 | # Assignments 100 | 101 | [Backend For Frontend](./task.md) 102 | -------------------------------------------------------------------------------- /10_backend_for_frontend/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/10_backend_for_frontend/module_focus.png -------------------------------------------------------------------------------- /10_backend_for_frontend/task.md: -------------------------------------------------------------------------------- 1 | # Task 10 (Backend For Frontend) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | - The task is a continuation of Homework 8 8 | - The task should be done in the backend repo - the same repo with `product-service` and `import-service` services 9 | - Product Service and Cart Service services should exist and work in your application 10 | 11 | ## Architecture 12 | 13 | Find the entire program architecture: [here](../Architecture.pdf). 14 | 15 |
16 | Task Focus 17 | 18 | The following image provides more info about task focus. 19 | 20 | 21 | 22 |
23 | 24 | ## Tasks 25 | 26 | --- 27 | 28 | ### Task 10.1 29 | 30 | 1. Create a new service called `bff-service` at the same level as Product Service and Import Service. The backend project structure should look like this: 31 | 32 | ``` 33 | backend-repository 34 | product-service 35 | import-service 36 | bff-service 37 | ``` 38 | 39 | 2. Create an `Express` application in this folder, that listens for all requests and redirects those requests to the appropriate services based on variables provided by the `.env` file. 40 | 41 | 3. Here's the workflow example that BFF Service should support: 42 | 43 | - Make requests to BFF Service with URL in the following format: `{bff-service-url}/{recipient-service-name}?var1=someValue` 44 | 45 | - `{bff-service-url}` - for example, http://localhost:3000 46 | - `{recipient-service-name}` - "cart" or "product" (you can use any other mapping of your choice) 47 | - `?var1=someValue` - query string 48 | 49 | - Get `recipientURL` from the env variables using `{recipient-service-name}` as a key 50 | - Get request `method` (GET, POST, etc.) 51 | - Make a new request to the needed service using the appropriate `method` and `recipientURL` 52 | - BFF Service should return the result of the recipient’s request 53 | 54 | 4. If BFF Service cannot find `recipientURL` by the `{recipient-service-name}`, return a "Cannot process request" error message with status 502. 55 | 5. BFF Service should return the same status code and error message that the recipient service returns to the BFF Service in case of any error on the recipient service side. 56 | 57 | ### Task 10.2 58 | 59 | 1. Deploy BFF Service with Elastic Beanstalk. 60 | 61 | - Platform should be _Node.js_ 62 | - Application name must follow the following convention `{yours_github_account_login}-bff-api` 63 | - Use the `--cname` option `{yours_github_account_login}-bff-api-{environment_name}` 64 | - Use the `--single` option 65 | 66 | 2. BFF Service should work only with requests from the Product Service and Cart Service. 67 | 3. All Product Service and Cart Service methods should work correctly if requested via BFF Service 68 | 69 | ### Task 10.3 70 | 71 | 1. Commit all your work to separate branch (e.g. `task-9` from the latest `master`) in your own repository. 72 | 2. Create a pull request to the `master` branch. 73 | 3. Submit the link to the pull request for crosscheck 74 | 75 | ## Evaluation criteria (70 points for covering all criteria) 76 | 77 | --- 78 | 79 | Provide your reviewers with the following information: 80 | 81 | - link to the repo 82 | - Product Service API URL 83 | - Cart Service API URL 84 | - BFF Service API URL 85 | - example of how to call `createProduct` labmda with all needed information: URL, payload, headers, etc. 86 | - example how to call Product Service and Cart Service via BFF Service URL 87 | 88 | --- 89 | 90 | - A working and correct `Express` application should be in the `bff-service` folder. Reviewer can start this application locally with any valid configuration in the `.env` file and this application should works as described in the Task 9.1 91 | - The BFF Service should be deployed with Elastic Beanstalk. The BFF Service call should be redirected to the appropriate service : Product Service or Cart Service. The response from the BFF Service should be the same as if Product Service or Cart Service services were called directly. 92 | 93 | ## Application Functionality (**MUST HAVE**) 94 | 95 | --- 96 | 97 | By this point your application must be able to do: 98 | 99 | 1. Products representation on Home page should be based on Product Service API. 100 | 2. Products are coming from Product DB. 101 | 3. Product images are not randomly generated on client side. Product image, same as another product model information should be stored on BE side in Product DB. 102 | 4. Products might be created through CSV product file import from client side. 103 | 5. Cart might be created with appropriate product set. 104 | 6. Auth logic should be in place 105 | 106 | ## Additional (optional) tasks 107 | 108 | --- 109 | 110 | - **+15** - Add a cache at the BFF Service level for a request to the `getProductsList` lambda function of the Product Service. The cache should expire in 2 minutes. 111 | How to test: 112 | - Get products list 113 | - Create new product 114 | - Get products list - result shouldn’t have new product 115 | - Wait more than 2 minutes 116 | - Get products list - result should have new product 117 | - **+15g** - Use `NestJS` to create BFF Service instead of `Express` 118 | 119 | ## Description Template for PRs 120 | 121 | --- 122 | 123 | The follwoing should be present in PR's description field: 124 | 125 | 1. What was done? 126 | 127 | Example: 128 | 129 | ``` 130 | Service is done, but FE is not working... 131 | 132 | Additional scope - webpack, swagger, unit tests 133 | ``` 134 | 135 | 2. Link to BFF Service API - ..... 136 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 137 | 138 | 4. In case SWAGGER file is not provided - please provide product schema in PR description 139 | -------------------------------------------------------------------------------- /1_cloud_introduction/README.md: -------------------------------------------------------------------------------- 1 | # Cloud Introduction 2 | 3 | # Goal 4 | 5 | - Learn what Cloud Development is all about 6 | - Explore different Cloud Sevice Models and architecture approaches 7 | - Set up AWS account and development environment 8 | 9 | # Topics 10 | 11 | - Fundamental Theory about Cloud Computing 12 | - Cloud Service Models, Cloud Deployment Models, Infrastructure-as-Code 13 | - Monolith vs Microservices vs Serverless 14 | - AWS Intro, Registration, Cloud Watch, IAM 15 | - Repository structure 16 | 17 | # Materials 18 | 19 | ## Video 20 | 21 |
22 | Must Watch 23 | 24 | The following content provides enough info to complete the task. 25 | 26 |
27 | 28 |
29 | In English 30 | 31 |
32 | 33 | - [Introduction - part1](https://videoportal.epam.com/video/MNnV7g03KrNAqdMva0b3), ~1 mins 34 | - [Introduction - part2](https://videoportal.epam.com/video/4MNVYj1Exvx2dmv5a0eE), ~1 mins 35 | - [Introduction - part3](https://videoportal.epam.com/video/gkXbYq1XdKdxNOABYelw), ~2 mins 36 | - [Introduction - part4 - AWS essentials](https://videoportal.epam.com/video/VKQwJWkPqVqXRvEqJ1EW), ~1 mins 37 | - [Introduction - part5](https://videoportal.epam.com/video/2qOL7xxLPEPGq9dx7483), ~3 mins 38 | - [Introduction - part6](https://videoportal.epam.com/video/1g5mYRkg2pyRwK10JWoD), ~2 mins 39 | - [Introduction - part7 - hometask overview](https://videoportal.epam.com/video/vbdGYloMlrdgLVXEaWqy), ~3 mins 40 | - [Introduction - part8 - SPA boilerplate overview](https://videoportal.epam.com/video/MRwdYoVgQm6A58pZa3bL), ~1 mins 41 | - [Introduction - part9 - registration in AWS](https://videoportal.epam.com/video/XmRlaydZ0Qwy5Ex67jno), ~2 mins 42 | - [Introduction - part10 - registration in AWS](https://videoportal.epam.com/video/286VYGZzDpKKOr6Eav1E), ~1 mins 43 | - [Introduction - part11 - registration issues overview](https://videoportal.epam.com/video/4MNVYj1ExvQ0r3vga0eE), ~1 mins 44 | - [Introduction - part12 - AWS support case for registration](https://videoportal.epam.com/video/XmRlaydZ0QwjZ63R7jno), ~1 mins 45 | - [Introduction - part13 - configuring budget alert](https://videoportal.epam.com/video/1g5mYRkg2pyD2gdPJWoD), ~4 mins 46 | - [Introduction - part14 - IAM and module 1 summary](https://videoportal.epam.com/video/6g2qJXQ0qpbQmQwg7wbz), ~2 mins 47 |
48 |
49 | 50 |
51 | In Russian 52 | 53 |
54 | 55 | - [RU Basic Part](https://videoportal.epam.com/video/lNZRYplXZ6knZbkdYyXQ), ~40 mins 56 | - [RU Advanced Part](https://videoportal.epam.com/video/59pZaAyL6Aw1B16laNzq), ~20 mins 57 | - [RU Practical Part](https://videoportal.epam.com/video/vbdGYlod08Wg11pbaWqy), ~24 mins 58 |
59 |
60 | 61 |
62 | 63 |
64 | 65 |
66 | Additional 67 | 68 | The following content provides more info for further studies. 69 | 70 |
71 | 72 | - [AWS IAM Core Concepts](https://www.youtube.com/watch?v=_ZCTvmaPgao), ~21 mins 73 | - [AWS IAM Hands-On Tutorial](https://www.youtube.com/watch?v=UqKWHZ36yEM), ~46 mins 74 | - [AWS IAM Best Practices](https://www.youtube.com/watch?v=_wiGpBQGCjU), ~53 mins 75 | - [Getting Started with the IAM Policy Simulator](https://www.youtube.com/watch?v=1IIhVcXhvcE), ~6 mins 76 |
77 | 78 |
79 | 80 | ## Reading 81 | 82 |
83 | Must Read 84 | 85 | The following content provides enough info to complete the task. 86 | 87 |
88 | 89 | - [AWS Fundamentals. Core Concepts](https://aws.amazon.com/getting-started/fundamentals-core-concepts) 90 | - [How do I create and activate a new AWS account?](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) 91 | - [Using the AWS Free Tier](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-free-tier.html) 92 | - [What is IAM?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 93 | - [AWS account root user credentials and IAM user credentials](https://docs.aws.amazon.com/general/latest/gr/root-vs-iam.html) 94 |
95 | 96 |
97 | 98 |
99 | Additional 100 | 101 | The following content provides more info for further studies. 102 | 103 |
104 | 105 | - [Security best practices in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) 106 | - [Policies and permissions in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) 107 | - [AWS IAM FAQs](https://aws.amazon.com/iam/faqs/) 108 | - [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 109 | - [Named profiles for the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) 110 |
111 | 112 |
113 | 114 | # Assignments 115 | 116 | [Cloud Introduction](./task.md) 117 | -------------------------------------------------------------------------------- /1_cloud_introduction/task.md: -------------------------------------------------------------------------------- 1 | # Task 1 (Cloud Introduction) 2 | 3 | ## Application Functionality (**MUST HAVE**) 4 | 5 | --- 6 | 7 | By the end of the program your application must be able to do: 8 | 9 | 1. Products representation on Home page should be based on Product Service API. 10 | 2. Products are coming from Product DB. 11 | 3. Product images are not randomly generated on client side. Product image, same as another product model information should be stored on BE side in Product DB. 12 | 4. Products might be created through CSV product file import from client side. 13 | 5. Cart might be created with appropriate product set. 14 | 6. Auth logic should be in place 15 | 16 | ## Tasks 17 | 18 | --- 19 | 20 | ### Task 1.1 21 | 22 | 1. Join our communication channel 23 | 24 | - [CloudX AWS Practitioner for JS](https://teams.microsoft.com/l/channel/19%3a73dafd02206d421896229364386d7bd2%40thread.skype/CloudX%2520AWS%2520Practitioner%2520for%2520JS?groupId=a91a4b92-98b1-4d0d-9e21-bd706bd68ed5&tenantId=b41b72d0-4e9f-4c26-8a69-f949f367c91d) 25 | 26 | ### Task 1.2 27 | 28 | 1. Revise: 29 | 30 | - What is REST; what are the main principles of it. 31 | - How to create a basic REST API service using Express. 32 | 33 | 2. Read about (if you would like to learn beyond the curriculum): 34 | 35 | - On-Premise architecture 36 | - Cloud Architecture 37 | - Cloud benefits 38 | - What do the region, availability zone, IAM mean? 39 | - How to use cloud solutions (Read about possible showcases)? 40 | - What is a serverless architecture? 41 | 42 | ### Task 1.3 43 | 44 | 1. Decide which FE framework will be used: 45 | 46 | - [React Front app](https://github.com/EPAM-JS-Competency-center/shop-react-redux-cloudfront). 47 | - [Angular Front app](https://github.com/EPAM-JS-Competency-center/shop-angular-cloudfront). 48 | - [Vue Front app](https://github.com/EPAM-JS-Competency-center/shop-vue-vuex-cloudfront). 49 | 50 | 2. Clone the selected repo, install dependencies, run the app and check if everything is okay 51 | 52 | - Check `package.json` and/or `README.md` for additional details. 53 | 54 | 3. Since you're going to be building an E-Commerce solution, decide which commodities will be sold in your shop. 55 | 56 | - Mixed, Games, Toys, Electronic devices, etc - you name it! 57 | 58 | ### Task 1.4 59 | 60 | 1. Register in AWS following best practices. 61 | 62 | - Do be careful with your root credentials and make sure to protect it properly. 63 | 64 | 2. Create an IAM user and assign AdministratorAccess policy to it. 65 | 3. Using CLI, connect to your AWS account and get the created IAM user information 66 | 67 | - Do remember about AWS credentials setup on your local machine 68 | - Command example that needs to work from your terminal: `aws iam get-user --user-name=MyUser` 69 | 70 | 4. Wait for the next task to be announced and help others in the chat if they have any issues 71 | -------------------------------------------------------------------------------- /2_serving_spa/README.md: -------------------------------------------------------------------------------- 1 | # Serving SPA in AWS 2 | 3 | # Goal 4 | 5 | - Learn what serving an SPA is all about 6 | - Explore different hosting related concepts like object storage, CDN, etc. 7 | - Set up a static website hosting via AWS S3 8 | 9 | # Topics 10 | 11 | - AWS Simple Storage Service overview 12 | - Services & Tools overview 13 | - AWS CloudFront overview 14 | - Basic overview of deployment process to CloudFront and S3 15 | - Serverless Framework overview 16 | - AWS CLI overview 17 | 18 | # Materials 19 | 20 | ## Video 21 | 22 |
23 | Must Watch 24 | 25 | The following content provides enough info to complete the task. 26 | 27 |
28 | 29 |
30 | In English 31 | 32 |
33 | 34 | - [AWS Simple storage service (S3) - part1. Introduction](https://videoportal.epam.com/video/GoPjaNyQqBlvyn1d76AN), ~1 mins 35 | - [AWS Simple storage service (S3) - part2. Basic theory](https://videoportal.epam.com/video/wPQe73OQkA2XOln7Aqnr), ~11 mins 36 | - [AWS Simple storage service (S3) - part3. Advanced features](https://videoportal.epam.com/video/MRwdYoVgQmdAWB84a3bL), ~13 mins 37 | - [Website hosting with S3 and CloudFront - part 1](https://videoportal.epam.com/video/lNdwY9xWNBgG96kbay2G), ~4 mins 38 | - [Website hosting with S3 and CloudFront - part 2. Using AWS Cloud Development Kit (CDK)](https://videoportal.epam.com/video/59pZaAyWXBDLD29laNzq), ~5 mins 39 |
40 |
41 | 42 |
43 | In Russian 44 | 45 |
46 | 47 | - [RU Introduction](https://videoportal.epam.com/video/1g5mYRkyL8KMd4oPJWoD), ~3 mins 48 | - [RU S3 Intro](https://videoportal.epam.com/video/wPQe73vEnLBglxqOJAqn), ~2 mins 49 | - [RU CloudFront Intro](https://videoportal.epam.com/video/MNnV7g033NDoBklWa0b3), ~4 mins 50 | - [RU Serverless Framework Intro](https://videoportal.epam.com/video/4MNVYj1EEMm3Lgv5a0eE), ~2 mins 51 | - [RU Manual Deployment to S3](https://videoportal.epam.com/video/MRwdYoVggXxDNDr4a3bL), ~16 mins 52 | - [RU Deploy to S3 with serverless](https://videoportal.epam.com/video/elN67KVllzb99gb3JVZz), ~32 mins 53 | - [RU AWS CLI Intro](https://videoportal.epam.com/video/Dj6qaB2WWGqqk06ragPW), ~1 mins 54 | - [RU Serverless & CloudFront](https://videoportal.epam.com/video/B9Ry76DWWwVng509Y8xq), ~20 mins 55 | - [RU Homework](https://videoportal.epam.com/video/Vr9Q7zywwrmgVG9mJMpG), ~3 mins 56 |
57 |
58 | 59 |
60 | 61 |
62 | 63 |
64 | Additional 65 | 66 | The following content provides more info for further studies. 67 | 68 |
69 | 70 | - [Free and Easy guide how to host website on AWS Cloud in 5 minutes](https://youtu.be/4AYF_Vo36sU), ~4mins 71 | - [AWS S3 Core Concepts](https://www.youtube.com/watch?v=tfU0JEZjcsg), 27 mins 72 | - [AWS S3 Hands-On Tutorial](https://www.youtube.com/watch?v=XGcoeEyt2UM), ~45 mins 73 | - [AWS CloudFront Hands-On Tutorial](https://www.youtube.com/watch?v=Vr4N_ZA-uGo), ~15 mins 74 | - [React App on AWS S3 with Static Hosting + Cloudfront](https://www.youtube.com/watch?v=mls8tiiI3uc), ~35 mins 75 | - [Getting Started with Serverless Framework](https://www.youtube.com/watch?v=KQRGM9_eqIw), ~20mins 76 |
77 | 78 |
79 | 80 | ## Reading 81 | 82 |
83 | Must Read 84 | 85 | The following content provides enough info to complete the task. 86 | 87 |
88 | 89 | - [What is Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 90 | - [Getting started with Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html) 91 | - [AWS S3 FAQs](https://aws.amazon.com/s3/faqs/) 92 | - [Setting Up Serverless Framework With AWS](https://www.serverless.com/framework/docs/getting-started) 93 | - [Serverless Framework Concepts](https://www.serverless.com/framework/docs/providers/aws/guide/intro) 94 |
95 | 96 |
97 | 98 |
99 | Additional 100 | 101 | The following content provides more info for further studies. 102 | 103 |
104 | 105 | - [Tutorial: Configuring a static website on Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html) 106 | - [What AWS service should you use to publish a web site](https://adrianhall.github.io/cloud/2019/01/31/which-aws-service-for-hosting/) 107 | - [Tutorial: Your First Serverless Framework Project](https://www.serverless.com/framework/docs/tutorial) 108 | - [AWS S3 Buckets Overview](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) 109 | - [Pseudo Parameters Reference](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html) 110 | - [What is the AWS CDK?](https://docs.aws.amazon.com/cdk/v2/guide/home.html) 111 | - [Example of deploying static site with AWS CDK](https://github.com/EPAM-JS-Competency-center/nodejs-aws-cdk-starter) 112 |
113 | 114 |
115 | 116 | # Assignments 117 | 118 | [Serve SPA in AWS S3 and Cloudfront Services](./task.md) 119 | -------------------------------------------------------------------------------- /2_serving_spa/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/2_serving_spa/module_focus.png -------------------------------------------------------------------------------- /2_serving_spa/task.md: -------------------------------------------------------------------------------- 1 | # Task 2 (Serve SPA in AWS S3 and Cloudfront Services) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | _NOTE: This should have already been done in Task 1, but as a reminder._ 8 | 9 | - **Install** the latest version of Serverless Framework (https://www.serverless.com/). 10 | - **Configure** credentials for AWS to make them accessible by Serverless. 11 | - **Fork** Any (React, Angular, Vue) Shop single page app from https://github.com/EPAM-JS-Competency-center 12 | - **Install** dependencies… 13 | - **Check** if everything works for you... 14 | 15 | ## Architecture 16 | 17 | Find the entire program architecture: [here](../Architecture.pdf). 18 | 19 |
20 | Task Focus 21 | 22 | The following image provides more info about task focus. 23 | 24 | 25 | 26 |
27 | 28 | ## Tasks 29 | 30 | --- 31 | 32 | ### Task 2.1 33 | 34 | **Manual Deployment** 35 | 36 | 1. In the AWS Console **create** and **configure** an S3 bucket where you will host your app (follow instructions in training materials). 37 | 2. **Build** and **manually upload** the MyShop! app to the created S3 bucket. **Check** if the app is available through the Internet over `http://{your-bucket-name}.s3-website-{aws-region}.amazonaws.com` . 38 | 3. **Create** a CloudFront distribution for your app as it was described in training materials. **Check** your S3 bucket policy changes. **Check** if the app is available through the Internet over given CloudFront URL. 39 | 4. **Make** some minor but visible changes in the app, **build** and **upload** them to your bucket, and create CloudFront distribution invalidation. 40 | 41 | ### Task 2.2 42 | 43 | **Automated Deployment** 44 | 45 | 1. **Add** and **configure** _serverless_ and _serverless-finch_ plugin. Add necessary npm script(s) to build and deploy your app from your machine in an automated way. **Check** if everything works correctly for you. 46 | Here's a [Demo repo](https://github.com/boale/serverlessTestApp) as an example. 47 | 48 | _NOTE: After uploading an application's build to the S3 bucket you need to manually create a CloudFront invalidation._ 49 | 50 | 2. **Destroy** the created AWS infrastructure (S3 bucket and CloudFront distribution) from the previous part and steps. **Make sure** nothing is left. 51 | 3. **Add** and **configure** `serverless-single-page-app-plugin` as it is implemented in the demo repository. **Add** necessary npm script(s) to build, upload to your S3 bucket, and invalidate CloudFront cache from your machine in an automated way. **Check** if everything works fine and all changes appear on the Web. 52 | 53 | _NOTE: Now that you have this plugin you don’t need to manually create CloudFront invalidations any more._ 54 | 55 | ### Task 2.3 56 | 57 | 1. Store the links to CloudFront URL and S3-website in README.md file. 58 | 2. Commit all your work to separate branch (e.g. `task-2` from the latest `master`) in your own repository. 59 | 3. Create a pull request to the `master` branch. 60 | 4. Submit the link to the pull request for crosscheck 61 | 62 | ## Evaluation criteria (70 points for covering all criteria) 63 | 64 | --- 65 | - S3 bucket has been created and configured properly. The app has been uploaded to the bucket and is available though the Internet. Nothing else has been done. 66 | _(Link to S3 bucket/website is provided. There is no Pull Request in the YOUR OWN frontend repository.)_ 67 | - In addition to the previous work a CloudFront distribution is created and configured properly and the site is served now with CloudFront and is available through the Internet over CloudFront URL, not S3-website link (due to changes in bucket’s policy...). 68 | _(Link to CloudFront website is provided. S3-website shows 403 Access Denied error. There is no Pull Request in the YOUR OWN frontend repository.)_ 69 | 70 | ## Additional (optional) tasks 71 | 72 | --- 73 | - **30** - `Serverless-finch` and `serverless-single-page-app` plugins are added and configured. The app can be built and deployed by running npm script command. 74 | _(Link to CloudFront website is provided. PR with all changes is submitted in the YOUR OWN frontend repository and its link is provided for review.)_ 75 | 76 | NOTE: YOU SHOULD WORK IN YOUR OWN FORKED REPOSITORY, NOT IN COMMON 77 | 78 | ## Description Template for PRs 79 | 80 | --- 81 | 82 | The follwoing should be present in PR's description field: 83 | 84 | 1. What was done? 85 | 86 | Example: 87 | 88 | ``` 89 | Service is done, but FE is not working... 90 | 91 | Additional scope - webpack, swagger, unit tests 92 | ``` 93 | 94 | 2. Link to FE PR (YOUR OWN REPOSITORY) - ... 95 | -------------------------------------------------------------------------------- /3_serverless_api/README.md: -------------------------------------------------------------------------------- 1 | # Serverless API 2 | 3 | # Goal 4 | 5 | - Learn what Serverless is all about 6 | - Explore different serverless related services like Lambda, API Gateway, etc. 7 | - Set up an API Gateway and Lambda based architecture 8 | 9 | # Topics 10 | 11 | - AWS Lambda Overview 12 | - Serverless Framework and Lambda 13 | - Introduction to Collecting logs with AWS CloudWatch 14 | - Lambda Advanced Features and Configuration 15 | 16 | # Materials 17 | 18 | ## Video 19 | 20 |
21 | Must Watch 22 | 23 | The following content provides enough info to complete the task. 24 | 25 |
26 | 27 |
28 | In English 29 | 30 |
31 | 32 | - [AWS Lambda & API Gateway - part 1. Basics](https://videoportal.epam.com/video/4MNVYj1Exvl0On3Da0eE), ~15 mins 33 | - [AWS Lambda & API Gateway - part2. Practice](https://videoportal.epam.com/video/VN2Qa1XWm83E0PQn7kwG), ~21 mins 34 | - [AWS Lambda & API Gateway - part3 . Practice continued](https://videoportal.epam.com/video/VKQwJWkPqVXRmRNGJ1EW), ~15 mins 35 | - [AWS Lambda & API Gateway - part4. Advanced Lambda](https://videoportal.epam.com/video/oybzJ0oWebWXLqX4Y4dG), ~11 mins 36 | - [AWS Lambda & API Gateway - part 5. Advanced practice](https://videoportal.epam.com/video/v0Aba28WRBWvZwejJkz9), ~17 mins 37 | - [AWS Lambda & API Gateway - part 6. Advanced practice continued](https://videoportal.epam.com/video/vbdGYloMlrMKpq4naWqy), ~14 mins 38 | - [AWS Lambda & API Gateway - part7. Hometask review](https://videoportal.epam.com/video/Dj6qaBMwxW5k1P87gPWA), ~5 mins 39 |
40 |
41 | 42 |
43 | In Russian 44 | 45 |
46 | 47 | - [RU Lambda Intro](https://videoportal.epam.com/video/elN67KV30zeZvdl0JVZz), ~20 mins 48 | - [RU Basic practice in AWS](https://videoportal.epam.com/video/lNdwY9x6pwOnwgvpay2G), ~27 mins 49 | - [RU Advanced Theory](https://videoportal.epam.com/video/XmRlaydwkn94NzNR7jno), ~11 mins 50 | - [RU How to create Rest API using Serverless framework and Lambda](https://videoportal.epam.com/video/lNZRYplXNbrx8LA1YyXQ), ~34 mins 51 | - [RU Homework](https://videoportal.epam.com/video/9w0kaE2mNwKn6w6GYeLn), ~27 mins 52 |
53 |
54 | 55 |
56 | 57 |
58 | 59 |
60 | Additional 61 | 62 | The following content provides more info for further studies. 63 | 64 |
65 | 66 | - [How I spent 400$ on lambdas in just one evening ](https://youtu.be/58M6g4BhSxU), ~8mins 67 | - [AWS Lambda Core Concepts](https://www.youtube.com/watch?v=iUIWG0h2D84), ~7 mins 68 | - [Introduction to AWS Lambda & Serverless Applications](https://www.youtube.com/watch?v=EBSdyoO3goc), ~56 mins 69 | - [Building APIs with Amazon API Gateway](https://www.youtube.com/watch?v=XwfpPEFHKtQ), ~43 mins 70 | - [Top 5 Use Cases For AWS Lambda](https://www.youtube.com/watch?v=K-nnzpgrzwM), ~13 mins 71 |
72 | 73 |
74 | 75 | ## Reading 76 | 77 |
78 | Must Read 79 | 80 | The following content provides enough info to complete the task. 81 | 82 |
83 | 84 | - [What is AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 85 | - [Getting started with Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) 86 | - [AWS Lambda Features](https://aws.amazon.com/lambda/features/) 87 | - [AWS Lambda FAQs](https://aws.amazon.com/lambda/faqs/) 88 | - [What is Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 89 | - [Serverless Framework: Deploying to AWS](https://www.serverless.com/framework/docs/providers/aws/guide/deploying) 90 | - [Serverless Framework: AWS Lambda Functions](https://www.serverless.com/framework/docs/providers/aws/guide/functions) 91 | - [Serverless Framework: AWS Lambda Events](https://www.serverless.com/framework/docs/providers/aws/guide/events) 92 |
93 | 94 |
95 | 96 |
97 | Additional 98 | 99 | The following content provides more info for further studies. 100 | 101 |
102 | 103 | - [Best practices for working with AWS Lambda functions](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) 104 | - [AWS Lambda Pricing](https://aws.amazon.com/lambda/pricing/) 105 | - [Amazon API Gateway concepts](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-basic-concept.html) 106 | - [Tutorial: Build a Hello World REST API with Lambda proxy integration](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html) 107 | - [Enabling CORS for a REST API resource](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html) 108 | - [Serverless Framework: CORS and API Gateway Survival Guide](https://www.serverless.com/blog/cors-api-gateway-survival-guide) 109 | - [Serverless.yml Reference](https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml) 110 |
111 | 112 |
113 | 114 | # Assignments 115 | 116 | [First API with AWS API Gateway and AWS Lambda](./task.md) 117 | -------------------------------------------------------------------------------- /3_serverless_api/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/3_serverless_api/module_focus.png -------------------------------------------------------------------------------- /3_serverless_api/task.md: -------------------------------------------------------------------------------- 1 | # Task 3 (First API with AWS API Gateway and AWS Lambda) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | - **Install** the latest version of Serverless Framework (https://www.serverless.com/). 8 | - **Configure** credentials for AWS to make them accessible by Serverless. 9 | - **Create** your **own public Github repository** for all future backend work (you might call it how you would like). You will have 2 repos - 1 for frontend, 1 for backend till the end of course. 10 | 11 | _NOTE: You should create branch from master and work in branch (f.e. branch name - task-3) in BE (backend) and in FE (frontend) repositories._ 12 | 13 | _NOTE: Don't forget to add dynamic product representation on FE side._ 14 | 15 | _NOTE: This microservice needs to be created using Serverless Framework, AWS API Gateway, AWS Lambda._ 16 | 17 | ## Architecture 18 | 19 | Find the entire program architecture: [here](../Architecture.pdf). 20 | 21 |
22 | Task Focus 23 | 24 | The following image provides more info about task focus. 25 | 26 | 27 | 28 |
29 | 30 | ## Tasks 31 | 32 | --- 33 | 34 | ### Task 3.1 35 | 36 | 1. Create a lambda function called `getProductsList` under the same Serverless config file (i.e. `serverless.yaml`) of Product Service which will be triggered by the HTTP GET method. 37 | 2. The requested URL should be `/products`. 38 | 3. The response from the lambda should be a _full_ array of products (mock data should be used - this mock data should be stored in Product Service). 39 | 4. This endpoint should be integrated with Frontend app for _PLP_ (Product List Page) representation. 40 | 41 | ### Task 3.2 42 | 43 | 1. Create a lambda function called `getProductsById` under the same Serverless config file (i.e. `serverless.yaml`) of Product Service which will be triggered by the HTTP GET method. 44 | 2. The requested URL should be `/products/{productId}` (what `productId` is in your application is up to you - productName, UUID, etc.). 45 | 3. The response from the lambda should be 1 searched product from an array of products (mock data should be used - this mock data should be stored in Product Service). 46 | 4. This endpoint is not needed to be integrated with Frontend right now. 47 | 48 | ### Task 3.3 49 | 50 | 1. Commit all your work to separate branch (e.g. `task-3` from the latest `master`) in your own repository. 51 | 2. Create a pull request to the `master` branch. 52 | 3. Submit the link to the pull request for crosscheck 53 | 54 | ## Evaluation criteria (70 points for covering all criteria) 55 | 56 | --- 57 | 58 | Reviewers should verify the lambda functions by invoking them through provided URLs. 59 | 60 | - Product Service Serverless config contains configuration for 2 lambda functions, API is not working at all, but YAML configuration is correct 61 | - The `getProductsList` OR `getProductsById` lambda function returns a correct response (POINT1) 62 | - The `getProductsById` AND `getProductsList` lambda functions return a correct response code (POINT2) 63 | - Your own Frontend application is integrated with Product Service (`/products` API) and products from Product Service are represented on Frontend. AND POINT1 and POINT2 are done. 64 | 65 | ## Additional (optional) tasks 66 | 67 | --- 68 | 69 | - **+5** - Async/await is used in lambda functions 70 | - **+5** - ES6 modules are used for Product Service implementation 71 | - **+4** - Custom Webpack/ESBuild/etc is manually configured for Product Service. Not applicable for preconfigured/built-in bundlers that come with templates, plugins, etc. 72 | - **+4** **(All languages)** - SWAGGER documentation is created for Product Service 73 | - **+4** **(All languages)** - Lambda handlers are covered by basic UNIT tests (NO infrastructure logic is needed to be covered) 74 | - **+4** **(All languages)** - Lambda handlers (`getProductsList`, `getProductsById`) code is written not in 1 single module (file) and separated in codebase. 75 | - **+4** **(All languages)** - Main error scenarios are handled by API ("Product not found" error). 76 | 77 | ## Description Teamplate for PRs 78 | 79 | --- 80 | 81 | The following should be present in PR's description field: 82 | 83 | 1. What was done? 84 | 85 | Example: 86 | 87 | ``` 88 | Service is done, but FE is not working... 89 | 90 | Additional scope - webpack, swagger, unit tests 91 | ``` 92 | 93 | 2. Link to Product Service API - ..... 94 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 95 | 96 | 4. In case SWAGGER file is not provided - please provide product schema in PR description 97 | -------------------------------------------------------------------------------- /4_integration_with_nosql_database/README.md: -------------------------------------------------------------------------------- 1 | # Integration with DynamoDB 2 | 3 | # Goal 4 | 5 | - Explore different database concepts and services 6 | - Set up an integration with DynamoDB 7 | 8 | # Topics 9 | 10 | - Easy way to store data in Cloud 11 | - AWS DynamoDB and how to use it 12 | 13 | # Materials 14 | 15 | ## Video 16 | 17 |
18 | Must Watch 19 | 20 | The following content provides enough info to complete the task. 21 | 22 |
23 | 24 |
25 | In English 26 | 27 |
28 | 29 | - [AWS Cloud Databases - part1. Creating DynamoDB table](https://videoportal.epam.com/video/GoPjaNyQq3Q3Zb9r76AN), ~4 mins 30 | - [AWS Cloud Databases - part2. Manipulating Data in DynamoDB Table](https://videoportal.epam.com/video/QDNRY5V9oB9Kbp3lJo2O), ~5 mins 31 | - [AWS Cloud Databases - part3. Accessing Data from Lambda](https://videoportal.epam.com/video/MNnV7g03KryZqMrNa0b3), ~4 mins 32 |
33 |
34 | 35 |
36 | In Russian 37 | 38 |
39 | 40 | - [RU Databases Intro](https://videoportal.epam.com/video/EKz1JeNKNODrw0vZ7v5Q), ~55 mins 41 | - [RU Databases in AWS](https://videoportal.epam.com/video/pZWva8oyobZWbRwB71m3), ~26 mins 42 |
43 |
44 | 45 |
46 | 47 |
48 | 49 |
50 | Additional 51 | 52 | The following content provides more info for further studies. 53 | 54 |
55 | 56 | - [Journey to the Cloud - The Why](https://youtu.be/ot7joOiUG3o), ~24mins 57 | - [SQL vs NoSQL Explained](https://www.youtube.com/watch?v=ruz-vK8IesE), ~12 mins 58 | - [How to Choose a Database on AWS](https://www.youtube.com/watch?v=eK_umMYxZfM), ~7 mins 59 |
60 | 61 |
62 | 63 | ## Reading 64 | 65 |
66 | Must Read 67 | 68 | The following content provides enough info to complete the task. 69 | 70 |
71 | 72 | - [What is AWS Dynamo DB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) 73 | - [Setting up DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) 74 | - [AWS DynamoDB FAQs](https://aws.amazon.com/ru/dynamodb/faqs/) 75 |
76 | 77 |
78 | 79 |
80 | Additional 81 | 82 | The following content provides more info for further studies. 83 | 84 |
85 | 86 | - [Best practices for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html) 87 | - [Using Amazon RDS with Amazon VPC](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html) 88 | - [A guide to understanding database scaling patterns](https://www.freecodecamp.org/news/understanding-database-scaling-patterns/) 89 |
90 | 91 |
92 | 93 | # Assignments 94 | 95 | [Cloud Databases Overview and integration with Database](./task.md) 96 | -------------------------------------------------------------------------------- /4_integration_with_nosql_database/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/4_integration_with_nosql_database/module_focus.png -------------------------------------------------------------------------------- /4_integration_with_nosql_database/task.md: -------------------------------------------------------------------------------- 1 | # Task 4 (Integration with NoSQL Database) 2 | 3 | ## Architecture 4 | 5 | Find the entire program architecture: [here](../Architecture.pdf). 6 | 7 |
8 | Task Focus 9 | 10 | The following image provides more info about task focus. 11 | 12 | 13 | 14 |
15 | 16 | ## Tasks 17 | 18 | --- 19 | 20 | ### Task 4.1 21 | 22 | 1. Use AWS Console to create two database tables in DynamoDB. Expected schemas for products and stock: 23 | 24 | Product model: 25 | 26 | ``` 27 | products: 28 | id - uuid (Primary key) 29 | title - text, not null 30 | description - text 31 | price - integer 32 | ``` 33 | 34 | Stock model: 35 | 36 | ``` 37 | stock: 38 | product_id - uuid (Foreign key from products.id) 39 | count - integer (Total number of products in stock, can't be exceeded) 40 | ``` 41 | 42 | 2. Write a script to fill tables with test examples. Store it in your Github repository. Execute it for your DB to fill data. 43 | 44 | ### Task 4.2 45 | 46 | 1. Extend your `serverless.yml` file with data about your database table and pass it to lambda’s environment variables section. 47 | 2. Integrate the `getProductsList` lambda to return via GET `/products` request a list of products from the database (joined stock and products tables). 48 | 3. Implement a Product model on FE side as a joined model of product and stock by `productId`. For example: 49 | 50 | _BE: Separate tables in DynamoDB_ 51 | 52 | ``` 53 | Stock model example in DB: 54 | { 55 | product_id: '19ba3d6a-f8ed-491b-a192-0a33b71b38c4', 56 | count: 2 57 | } 58 | 59 | 60 | Product model example in DB: 61 | { 62 | id: '19ba3d6a-f8ed-491b-a192-0a33b71b38c4' 63 | title: 'Product Title', 64 | description: 'This product ...', 65 | price: 200 66 | } 67 | ``` 68 | 69 | _FE: One product model as a result of BE models join (product and it's stock)_ 70 | 71 | ``` 72 | Product model example on Frontend side: 73 | { 74 | id: '19ba3d6a-f8ed-491b-a192-0a33b71b38c4', 75 | count: 2 76 | price: 200, 77 | title: ‘Product Title’, 78 | description: ‘This product ...’ 79 | } 80 | ``` 81 | 82 | _NOTE: This setup means User cannot buy more than `product.count` (no more items in stock) - but this is future functionality on FE side._ 83 | 84 | 4. Integrate the `getProductsById` lambda to return via GET `/products/{productId}` request a single product from the database. 85 | 86 | ### Task 4.3 87 | 88 | 1. Create a lambda function called `createProduct` under the same Serverless config file (i.e. `serverless.yaml`) of Product Service which will be triggered by the HTTP POST method. 89 | 2. The requested URL should be `/products`. 90 | 3. Implement its logic so it will be creating a new item in a Products table. 91 | 4. Save the URL (API Gateway URL) to execute the implemented lambda functions for later - you'll need to provide it in the PR (e.g in PR's description) when submitting the task. 92 | 93 | ### Task 4.4 94 | 95 | 1. Commit all your work to separate branch (e.g. `task-4` from the latest `master`) in BE (backend) and if needed in FE (frontend) repositories. 96 | 2. Create a pull request to the `master` branch. 97 | 3. Submit the link to the pull request for crosscheck 98 | 99 | ## Evaluation criteria (70 points for covering all criteria) 100 | 101 | --- 102 | 103 | Reviewers should verify the lambda functions by invoking them through provided URLs. 104 | 105 | - Task 4.1 is implemented 106 | - Task 4.2 is implemented lambda links are provided and returns data 107 | - Task 4.3 is implemented lambda links are provided and products is stored in DB (call Task 4.2 to see the product) 108 | - Your own Frontend application is integrated with Product Service (`/products` API) and products from Product Service are represented on Frontend. Link to a working Frontend application is provided for cross-check reviewer. 109 | 110 | ## Additional (optional) tasks 111 | 112 | --- 113 | 114 | - **+6** **(All languages)** - POST `/products` lambda functions returns error 400 status code if product data is invalid 115 | - **+6** **(All languages)** - All lambdas return error 500 status code on any error (DB connection, any unhandled error in code) 116 | - **+6** **(All languages)** - All lambdas do `console.log` for each incoming requests and their arguments 117 | - **+6** **(All languages)** - Use RDS instance instead fo DynamoDB tables. **Do not commit your environment variables in serverless.yml to github!** 118 | - **+6** **(All languages)** - Transaction based creation of product (in case stock creation is failed then related to this stock product is not created and not ready to be used by the end user and vice versa) (https://devcenter.kinvey.com/nodejs/tutorials/bl-transactional-support, https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html) 119 | 120 | ## Description Template for PRs 121 | 122 | --- 123 | 124 | The following should be present in PR's description field: 125 | 126 | 1. What was done? 127 | 128 | Example: 129 | 130 | ``` 131 | Service is done, but FE is not working... 132 | 133 | Additional scope - logger, swagger, unit tests, transaction 134 | ``` 135 | 136 | 2. Link to Product Service API - ..... 137 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 138 | 4. In case SWAGGER file is not provided - please provide product schema in PR description 139 | -------------------------------------------------------------------------------- /5_integration_with_s3/README.md: -------------------------------------------------------------------------------- 1 | # Integration with S3 2 | 3 | # Goal 4 | 5 | - Learn what Simple Storage Service is all about 6 | - Explore different S3 related concepts like storage classes, object lifecycle, etc. 7 | - Set up an integration with AWS S3 and AWS Lambda 8 | 9 | # Topics 10 | 11 | - AWS S3 In-depth Introduction 12 | - S3 Storage Classes and their Use Cases 13 | - S3 Access Control & Encryption 14 | - S3 Versioning, Lifecycle Management & Events 15 | - Integration with S3 and Lambda Overview 16 | 17 | # Materials 18 | 19 | ## Video 20 | 21 |
22 | Must Watch 23 | 24 | The following content provides enough info to complete the task. 25 | 26 |
27 | 28 |
29 | In English 30 | 31 |
32 | 33 | - [AWS S3 & Lambda. Practical task overview](https://videoportal.epam.com/video/lNZRYpl6MR6RAv0dYyXQ), ~2 mins 34 | - [AWS S3 & Lambda - part2. Practice](https://videoportal.epam.com/video/G0XV7rxbyzb2Gg1zYnmo), ~24 mins 35 | - [AWS S3 & Lambda - part3. Serverless configuration](https://videoportal.epam.com/video/430e7n2yEey0BdwQ76PM), ~3 mins 36 | - [AWS S3 & Lambda - part4. Hometask review](https://videoportal.epam.com/video/GoPjaNWobQNQ9o5Y6ANz), ~5 mins 37 |
38 |
39 | 40 |
41 | In Russian 42 | 43 |
44 | 45 | - [RU Introduction](https://videoportal.epam.com/video/PoBNYOZMMlgLxBjma4Gn), ~1 mins 46 | - [RU Task and Lecture Goal](https://videoportal.epam.com/video/GoPjaNyQQ34eo3vj76AN), ~2 mins 47 | - [RU Basic Theory](https://videoportal.epam.com/video/elN67KVllz52pyOmJVZz), ~13 mins 48 | - [RU Theory of S3 Advanced Features](https://videoportal.epam.com/video/9w0kaEMOOprd0b2aeLnD), ~15 mins 49 | - [RU Live Practice](https://videoportal.epam.com/video/zXWOJMdEEx1Aqxw2YnDv), ~30 mins 50 | - [RU Needed configurations (Serverless configuration)](https://videoportal.epam.com/video/elN67KVllz5K2PomJVZz), ~3 mins 51 | - [RU Homework](https://videoportal.epam.com/video/qQB2JwKWWZ1QvyGJMwGk), ~8 mins 52 |
53 |
54 | 55 |
56 | 57 |
58 | 59 |
60 | Additional 61 | 62 | The following content provides more info for further studies. 63 | 64 |
65 | 66 | - [Journey to the Cloud - The How](https://youtu.be/meIIRwq5sjc), 49mins 67 | - [AWS S3 Best Practices](https://www.youtube.com/watch?v=rHeTn9pHNKo), ~62 mins 68 | - [AWS S3 APIs Walkthrough](https://www.youtube.com/watch?v=AAOJ0BAJVJs), ~22 mins 69 | - [AWS S3 Lifecycle Rules](https://www.youtube.com/watch?v=CPUjRhrsMiI), ~5 mins 70 | - [Deep dive on Amazon S3](https://www.youtube.com/watch?v=FJJxcwSfWYg), ~47 mins 71 | - [AWS S3 File Upload + Lambda Trigger Tutorial](https://www.youtube.com/watch?v=OJrxbr9ebDE), 13mins 72 | - [AWS S3 Signed URL Visual Explanation](https://www.youtube.com/watch?v=cog0r-PvGM4), 6mins 73 | - [Serverless Framework and AWS S3 Signed URL with](https://www.youtube.com/watch?v=rIQM30rz_0c), 16mins 74 |
75 | 76 |
77 | 78 | ## Reading 79 | 80 |
81 | Must Read 82 | 83 | The following content provides enough info to complete the task. 84 | 85 |
86 | 87 | - [AWS IAM in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html) 88 | - [Amazon S3 Storage Classes](https://aws.amazon.com/s3/storage-classes/) 89 | - [Managing your storage lifecycle](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) 90 | - [Tutorial: Transforming data for your application with S3 Object Lambda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/tutorial-s3-object-lambda-uppercase.html) 91 | - [Using presigned URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html) 92 |
93 | 94 |
95 | 96 |
97 | Additional 98 | 99 | The following content provides more info for further studies. 100 | 101 |
102 | 103 | - [Security Best Practices](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) 104 | - [Protecting data using encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html) 105 | - [Monitoring tools](https://docs.aws.amazon.com/AmazonS3/latest/userguide/monitoring-automated-manual.html) 106 | - [Amazon S3 Event Notifications](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html) 107 | - [AWS S3 and CORS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html) 108 | - [Generating a presigned URL to upload an object](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html) 109 |
110 | 111 |
112 | 113 | # Assignments 114 | 115 | [AWS Simple Storage Service - S3](./task.md) 116 | -------------------------------------------------------------------------------- /5_integration_with_s3/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/5_integration_with_s3/module_focus.png -------------------------------------------------------------------------------- /5_integration_with_s3/task.md: -------------------------------------------------------------------------------- 1 | # Task 5 (Integration with S3) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | - The task is a continuation of Homework 4 and should be done in the same repos 8 | - **(for JS only)** Install the latest version of AWS SDK (https://aws.amazon.com/ru/sdk-for-node-js/) 9 | - **(for JS only)** Install the CSV parser package (https://www.npmjs.com/package/csv-parser) 10 | 11 | ## Architecture 12 | 13 | Find the entire program architecture: [here](../Architecture.pdf). 14 | 15 |
16 | Task Focus 17 | 18 | The following image provides more info about task focus. 19 | 20 | 21 | 22 |
23 | 24 | ## Tasks 25 | 26 | --- 27 | 28 | ### Task 5.1 29 | 30 | 1. Create a new service called `import-service` at the same level as Product Service with a its own `serverless.yml` file. The backend project structure should look like this: 31 | 32 | ``` 33 | backend-repository 34 | product-service 35 | import-service 36 | ``` 37 | 38 | 2. In the AWS Console **create** and **configure** a new S3 bucket with a folder called `uploaded`. 39 | 40 | ### Task 5.2 41 | 42 | 1. Create a lambda function called `importProductsFile` under the same Serverless config file (i.e. `serverless.yaml`) of the Import Service which will be triggered by the HTTP GET method. 43 | 2. The requested URL should be `/import`. 44 | 3. Implement its logic so it will be expecting a request with a name of CSV file with products and creating a new **Signed URL** with the following key: `uploaded/${fileName}`. 45 | 4. The name will be passed in a _query string_ as a `name` parameter and should be described in the `serverless.yml` file as a _request parameter_. 46 | 5. Update `serverless.yml` with policies to allow lambda functions to interact with S3. 47 | 6. The response from the lambda should be the created **Signed URL**. 48 | 7. The lambda endpoint should be integrated with the frontend by updating `import` property of the API paths configuration. 49 | 50 | ### Task 5.3 51 | 52 | 1. Create a lambda function called `importFileParser` under the same `serverless.yml` file which will be triggered by an S3 event. 53 | 2. The event should be `s3:ObjectCreated:*` 54 | 3. Configure the event to be fired only by changes in the `uploaded` folder in S3. 55 | 4. The lambda function should use a _readable stream_ to get an object from S3, parse it using `csv-parser` package and log each record to be shown in CloudWatch. 56 | 57 | ### Task 5.4 58 | 59 | 1. Commit all your work to separate branch (e.g. `task-5` from the latest `master`) in your own repository. 60 | 2. Create a pull request to the `master` branch. 61 | 3. Submit the link to the pull request for crosscheck 62 | 63 | ## Evaluation criteria (70 points for covering all criteria) 64 | 65 | --- 66 | 67 | Reviewers should verify the lambda functions by invoking them through provided URLs. 68 | 69 | - File `serverless.yml` contains configuration for `importProductsFile` function 70 | - The `importProductsFile` lambda function returns a correct response which can be used to upload a file into the S3 bucket 71 | - Frontend application is integrated with `importProductsFile` lambda 72 | - The `importFileParser` lambda function is implemented and `serverless.yml` contains configuration for the lambda 73 | 74 | ## Additional (optional) tasks 75 | 76 | --- 77 | 78 | - **+10** **(for JS only)** - **async/await** is used in lambda functions 79 | - **+10** **(All languages)** - `importProductsFile` lambda is covered by _unit tests_. 80 | (for JS only) [aws-sdk-mock](https://www.npmjs.com/package/aws-sdk-mock) can be used to mock S3 methods 81 | - **+10** **(All languages)** - At the end of the stream the lambda function should move the file from the `uploaded` folder into the `parsed` folder (`move the file` means that file should be copied into a new folder in the same bucket called `parsed`, and then deleted from `uploaded` folder) 82 | 83 | ## Description Teamplate for PRs 84 | 85 | --- 86 | 87 | The follwoing should be present in PR's description field: 88 | 89 | 1. What was done? 90 | 91 | Example: 92 | 93 | ``` 94 | Service is done, but FE is not working... 95 | 96 | Additional scope - webpack, swagger, unit tests 97 | ``` 98 | 99 | 2. Link to Import Service API - ..... 100 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 101 | 102 | 4. In case SWAGGER file is not provided - please provide product schema in PR description 103 | -------------------------------------------------------------------------------- /6_async_microservices_communication/README.md: -------------------------------------------------------------------------------- 1 | # SQS & SNS, Async Microservices Communication 2 | 3 | # Goal 4 | 5 | - Learn what async microservices communication is all about 6 | - Explore different async services like SNS, SQS, etc. 7 | - Set up an integration with AWS SNS and AWS SQS 8 | 9 | # Topics 10 | 11 | - Async Messaging Overview 12 | - AWS SQS Overview 13 | - AWS SNS Overview 14 | - Integration with SQS, SNS and Lambda Overview 15 | 16 | # Materials 17 | 18 | ## Video 19 | 20 |
21 | Must Watch 22 | 23 | The following content provides enough info to complete the task. 24 | 25 |
26 | 27 |
28 | In English 29 | 30 |
31 | 32 | - [Async Microservices Communication](https://videoportal.epam.com/video/qYLd4wYX), ~1 hour 32 mins 33 |
34 |
35 | 36 |
37 | In Russian 38 | 39 |
40 | 41 | - [RU Message Queue Introduction](https://videoportal.epam.com/video/VKQwJWkXoMG6yEL3J1EW), ~11 mins 42 | - [RU SQS Introduction](https://videoportal.epam.com/video/Vr9Q7zyL5l9KA4KmJMpG), ~11 mins 43 | - [RU Basic Practice (manual integration)](https://videoportal.epam.com/video/MRwdYoVdZ9pEN09Da3bL), ~18 mins 44 | - [RU Practice (Using Serverless framework)](https://videoportal.epam.com/video/zXWOJMd35Dj9NgnLYnDv), ~29 mins 45 | - [RU Homework](https://videoportal.epam.com/video/Vr9Q7zyL5lMAWMV8JMpG), ~6 mins 46 |
47 |
48 | 49 |
50 | 51 |
52 | 53 |
54 | Additional 55 | 56 | The following content provides more info for further studies. 57 | 58 |
59 | 60 | - [AWS SQS Overview](https://www.youtube.com/watch?v=CyYZ3adwboc), ~29 mins 61 | - [AWS SNS Overview](https://www.youtube.com/watch?v=bktTomENEX8), ~17 mins 62 | - [SNS vs SQS Comparison](https://www.youtube.com/watch?v=mXk0MNjlO7A), ~11 mins 63 | - [AWS SQS to Lambda Hands-On Tutorial](https://www.youtube.com/watch?v=JJQrVBRzlPg), ~30 mins 64 | - [Choosing the Right Messaging Service for Your Distributed App](https://www.youtube.com/watch?v=4-JmX6MIDDI), ~53 mins 65 | - [Build High-Throughput, Bursty Data Apps with Amazon SQS, SNS, & Lambda](https://www.youtube.com/watch?v=YwHxvKhBQ_g), ~55 mins 66 |
67 | 68 |
69 | 70 | ## Reading 71 | 72 |
73 | Must Read 74 | 75 | The following content provides enough info to complete the task. 76 | 77 |
78 | 79 | - [What is Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 80 | - [Getting started with Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html) 81 | - [Common Amazon SNS scenarios](https://docs.aws.amazon.com/sns/latest/dg/sns-common-scenarios.html) 82 | - [AWS SNS FAQs](https://aws.amazon.com/sns/faqs/) 83 | - [What is Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 84 | - [Getting started with Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html) 85 |
86 | 87 |
88 | 89 |
90 | Additional 91 | 92 | The following content provides more info for further studies. 93 | 94 |
95 | 96 | - [Basic Amazon SQS architecture](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-basic-architecture.html) 97 | - [AWS SQS FAQs](https://aws.amazon.com/sqs/faqs/) 98 | - [Configuring a queue to trigger an AWS Lambda function](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-lambda-function-trigger.html) 99 | - [Using Amazon SNS for application-to-person (A2P) messaging](https://docs.aws.amazon.com/sns/latest/dg/sns-user-notifications.html) 100 | - [Serverless Framework: SQS](https://www.serverless.com/framework/docs/providers/aws/events/sqs) 101 | - [Serverless Framework: SNS](https://www.serverless.com/framework/docs/providers/aws/events/sns) 102 |
103 | 104 |
105 | 106 | # Assignments 107 | 108 | [AWS SQS/SNS](./task.md) 109 | -------------------------------------------------------------------------------- /6_async_microservices_communication/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/6_async_microservices_communication/module_focus.png -------------------------------------------------------------------------------- /6_async_microservices_communication/task.md: -------------------------------------------------------------------------------- 1 | # Task 6 (SQS & SNS, Async Microservices Communication) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | - The task is a continuation of Homework 5 and should be done in the same repo 8 | - Task goal is to create a service to be able to save products which were provided in csv file in database. 9 | 10 | ## Architecture 11 | 12 | Find the entire program architecture: [here](../Architecture.pdf). 13 | 14 |
15 | Task Focus 16 | 17 | The following image provides more info about task focus. 18 | 19 | 20 | 21 |
22 | 23 | ## Tasks 24 | 25 | --- 26 | 27 | ### Task 6.1 28 | 29 | 1. Create a lambda function called `catalogBatchProcess` under the same Serverless config file (i.e. `serverless.yaml`) of the Product Service which will be triggered by an SQS event. 30 | 2. Create an SQS queue called `catalogItemsQueue`, in the resources section of the same `serverless.yml` file. 31 | 3. Configure the SQS to trigger lambda `catalogBatchProcess` with _5 messages_ at once via `batchSize` property. 32 | 4. The lambda function should iterate over all SQS messages and create corresponding products in the products table. 33 | 34 | ### Task 6.2 35 | 36 | 1. Update the `importFileParser` lambda function in the Import Service to send each CSV record into SQS. 37 | 2. It should no longer log entries from the _readable stream_ to CloudWatch. 38 | 39 | ### Task 6.3 40 | 41 | 1. Create an SNS topic `createProductTopic` and email subscription in the resources section in `serverless.yml` of the Product Service. 42 | 2. Create a subscription for this SNS topic with an `email` endpoint type with your own email in there. 43 | 3. Update the `catalogBatchProcess` lambda function in the Product Service to send an event to the SNS topic once it creates products. 44 | 45 | ### Task 6.4 46 | 47 | 1. Commit all your work to separate branch (e.g. `task-6` from the latest `master`) in your own repository. 48 | 2. Create a pull request to the `master` branch. 49 | 3. Submit the link to the pull request for crosscheck 50 | 51 | ## Evaluation criteria (70 points for covering all criteria) 52 | 53 | --- 54 | 55 | Reviewers should verify the lambda functions, SQS and SNS topic and subscription in PR. 56 | 57 | - File `serverless.yml` contains configuration for `catalogBatchProcess` function 58 | - File `serverless.yml` contains policies to allow lambda `catalogBatchProcess` function to interact with SNS and SQS 59 | - File `serverless.yml` contains configuration for SQS `catalogItemsQueue` 60 | - File `serverless.yml` contains configuration for SNS Topic `createProductTopic` and email subscription 61 | 62 | ## Additional (optional) tasks 63 | 64 | --- 65 | 66 | - **+15** **(All languages)** - `catalogBatchProcess` lambda is covered by **unit** tests 67 | - **+15** **(All languages)** - set a Filter Policy for SNS `createProductTopic` in `serverless.yml` and create an additional email subscription to distribute messages to different emails depending on the filter for any product attribute 68 | 69 | ## Description Teamplate for PRs 70 | 71 | --- 72 | 73 | The follwoing should be present in PR's description field: 74 | 75 | 1. What was done? 76 | 77 | Example: 78 | 79 | ``` 80 | Service is done, but FE is not working... 81 | 82 | Additional scope - webpack, swagger, unit tests 83 | ``` 84 | 85 | 2. Link to Product Service and Import Service APIs - ..... 86 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 87 | 88 | 4. In case SWAGGER file is not provided - please provide product schema in PR description 89 | -------------------------------------------------------------------------------- /7_authorization/README.md: -------------------------------------------------------------------------------- 1 | # Authorization 2 | 3 | # Goal 4 | 5 | - Learn what authorization in AWS is all about 6 | - Explore different authorization concepts and services like Cognito, user pool, etc. 7 | - Set up an authorization via AWS Lambda and AWS Cognito 8 | 9 | # Topics 10 | 11 | - Authentication & Authorization overview 12 | - Lambda Authorizer & API Gateway 13 | - AWS Cognito overview 14 | - Cognito User Pool 15 | - Cognito Identity Pool 16 | 17 | # Materials 18 | 19 | ## Video 20 | 21 |
22 | Must Watch 23 | 24 | The following content provides enough info to complete the task. 25 | 26 |
27 | 28 |
29 | In English 30 | 31 |
32 | 33 | - [Authorization](https://videoportal.epam.com/video/mYQroEJp), ~93 mins 34 |
35 |
36 | 37 |
38 | In Russian 39 | 40 |
41 | 42 | - [RU Introduction](https://videoportal.epam.com/video/vbdGYloE9zAppoZDaWqy), ~2 mins 43 | - [RU Authorization Process in General](https://videoportal.epam.com/video/lNdwY9MyyQelBepYy2Gk), ~24 mins 44 | - [RU Lambda Authorization](https://videoportal.epam.com/video/njDdYP6E9eQ0o8Vz72Xb), ~3 mins 45 | - [RU Lambda Authorization Practice](https://videoportal.epam.com/video/59pZaAyDpPzPmPv6aNzq), ~28 mins 46 | - [RU Hometask](https://videoportal.epam.com/video/wPQe73vNZg0qAXW6JAqn), ~16 mins 47 | - [RU Cognito Authorization](https://videoportal.epam.com/video/1g5mYRWy2OQNg6jJWoDG), ~8 mins 48 | - [RU Cognito Authorization Practice](https://videoportal.epam.com/video/MRwdYoVdbPkXv65Wa3bL), ~22 mins 49 |
50 |
51 | 52 |
53 | 54 |
55 | 56 |
57 | Additional 58 | 59 | The following content provides more info for further studies. 60 | 61 |
62 | 63 | - [Secure your API Gateway with Amazon Cognito User Pools](https://www.youtube.com/watch?v=oFSU6rhFETk), ~31 mins 64 | - [Secure your API Gateway with Lambda Authorizer](https://www.youtube.com/watch?v=al5I9v5Y-kA), ~25 mins 65 | - [Beyond authentication: Guide to secure Amazon Cognito applications](https://www.youtube.com/watch?v=QDR-pX7Ho8k), ~26 mins 66 | - [Fine-grained Access Control with Amazon Cognito Identity Pools](https://www.youtube.com/watch?v=tAUmz94O2Qo), ~20 mins 67 | - [Serverless Authentication and Authorization](https://www.youtube.com/watch?v=VZqG7HjT2AQ), 53mins 68 |
69 | 70 |
71 | 72 | ## Reading 73 | 74 |
75 | Must Read 76 | 77 | The following content provides enough info to complete the task. 78 | 79 |
80 | 81 | - [What is Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) 82 | - [Getting started with Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) 83 | - [Amazon Cognito user pools](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) 84 |
85 | 86 |
87 | 88 |
89 | Additional 90 | 91 | The following content provides more info for further studies. 92 | 93 |
94 | 95 | - [Customizing user pool workflows with Lambda triggers](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools-working-with-aws-lambda-triggers.html) 96 | - [Use API Gateway Lambda authorizers](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) 97 | - [Control access to a REST API using Amazon Cognito user pools as authorizer](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) 98 |
99 | 100 |
101 | 102 | # Assignments 103 | 104 | [Lambda Authorizer + Cognito Authorization](./task.md) 105 | -------------------------------------------------------------------------------- /7_authorization/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/7_authorization/module_focus.png -------------------------------------------------------------------------------- /7_authorization/task.md: -------------------------------------------------------------------------------- 1 | # Task 7 (Authorization) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | - The task is a continuation of Homework 6 and should be done in the same repo. 8 | 9 | ## Architecture 10 | 11 | Find the entire program architecture: [here](../Architecture.pdf). 12 | 13 |
14 | Task Focus 15 | 16 | The following image provides more info about task focus. 17 | 18 | 19 | 20 |
21 | 22 | ## Tasks 23 | 24 | --- 25 | 26 | ### Task 7.1 27 | 28 | 1. Create a new service called `authorization-service` at the same level as Product and Import services with its own `serverless.yml` file. The backend project structure should look like this: 29 | 30 | ``` 31 | backend-repository 32 | product-service 33 | import-service 34 | authorization-service 35 | ``` 36 | 37 | 2. Create a lambda function called `basicAuthorizer` under the same Serverless config file (i.e. `serverless.yaml`) of the Authorization Service. 38 | 3. This lambda should have at least one environment variable with the following credentials: 39 | 40 | ``` 41 | {yours_github_account_login}=TEST_PASSWORD 42 | ``` 43 | 44 | - `{yours_github_account_login}` - your GitHub account name. Login for test user should be your GitHub account name 45 | - `TEST_PASSWORD` - password string. Password for test user must be "TEST_PASSWORD" 46 | - example: `johndoe=TEST_PASSWORD` 47 | 48 | 3. This `basicAuthorizer` lambda should take _Basic Authorization_ token, decode it and check that credentials provided by token exist in the lambda environment variable. 49 | 4. This lambda should return 403 HTTP status if access is denied for this user (invalid `authorization_token`) and 401 HTTP status if Authorization header is not provided. 50 | 51 | _NOTE: Do not send your credentials to the GitHub. Use `.env` file and `serverless-dotenv-plugin` serverless plugin to add environment variables to the lambda. Add `.env` file to `.gitignore` file._ 52 | 53 | ``` 54 | .env file example: 55 | vasiapupkin=TEST_PASSWORD 56 | ``` 57 | 58 | ### Task 7.2 59 | 60 | 1. Add Lambda authorization to the `/import` path of the Import Service API Gateway. 61 | 2. Use your `basicAuthorizer` lambda as the Lambda authorizer 62 | 63 | ### Task 7.3 64 | 65 | 1. Request from the client application to the `/import` path of the Import Service should have _Basic Authorization_ header: 66 | 67 | ``` 68 | Authorization: Basic {authorization_token} 69 | ``` 70 | 71 | - `{authorization_token}` is a base64-encoded `{yours_github_account_login}:TEST_PASSWORD` 72 | - example: `Authorization: Basic sGLzdRxvZmw0ZXs0UGFzcw==` 73 | 74 | 2. Client should get `authorization_token` value from browser [localStorage](https://developer.mozilla.org/ru/docs/Web/API/Window/localStorage) 75 | 76 | ``` 77 | const authorization_token = localStorage.getItem('authorization_token') 78 | ``` 79 | 80 | ### Task 7.4 81 | 82 | 1. Commit all your work to separate branch (e.g. `task-7` from the latest `master`) in your own repository. 83 | 2. Create a pull request to the `master` branch. 84 | 3. Submit the link to the pull request for crosscheck 85 | 86 | ## Evaluation criteria (70 points for covering all criteria) 87 | 88 | --- 89 | 90 | Provide your reviewers with the link to the repo, client application and URLs to execute the `/import` path of the Import Service` 91 | 92 | - `authorization-service` is added to the repo, has correct `basicAuthorizer` lambda and correct `serverless.yaml` file 93 | - Import Service `serverless.yaml` file has authorizer configuration for the `importProductsFile` lambda. Request to the `importProductsFile` lambda should work only with correct `authorization_token` being decoded and checked by `basicAuthorizer` lambda. Response should be in 403 HTTP status if access is denied for this user (invalid `authorization_token`) and in 401 HTTP status if Authorization header is not provided. 94 | - Client application is updated to send "Authorization: Basic `authorization_token`" header on import. Client should get `authorization_token` value from browser [localStorage](https://developer.mozilla.org/ru/docs/Web/API/Window/localStorage) 95 | 96 | ## Additional (optional) tasks 97 | 98 | --- 99 | 100 | _NOTE: Recommended for personal growth and further interviews, but this part would not be evauated on cross-check._ 101 | 102 | - **+30** - Client application should display alerts for the responses in 401 and 403 HTTP statuses. This behavior should be added to the `nodejs-aws-fe-main/src/index.tsx` file. 103 | - **Just Practice, No Evaluation** - Add Login page and protect `getProductsList` lambda by the Cognito Authorizer 104 | - Create Cognito User Pool using a demo from the lecture. Leave `email` in a list of standard required attributes. Checkbox `Allow users to sign themselves up` should be checked. Also, set `email` as an attribute that you want to verify. 105 | - Add `App Client` to the User Pool 106 | - In the `App Client Settings` section select all `Identity Providers`. Fill the `Callback URL(s)` field with your Client Application URL (i.e. `http://localhost:3000/`). Allow only `Authorization code grant` OAuth Flow. Allow all `OAuth Scopes` 107 | - Create Domain name 108 | - After all of these manipulations, you can open your `Login Page` by clicking on the `Launch Hosted UI` link in the `App Client Settings` 109 | - Provide this link to your reviewers. The reviewer can just confirm that everything works for him too. 110 | - Add Cognito authorizer to the `getProductsList` lambda. Use `Authorization` as a `Token Source` 111 | - How to make sure that everything works as expected: 112 | - Open Login Page and `Sign Up` a new user. Use a real email address to create this user 113 | - Verify user using code from the email 114 | - After verification and after every login you will be redirected to the Client application. URL should contain `id_token` which can be used to access the `getProductsList` lambda 115 | - Call `getProductsList` lambda using `id_token` as a value for the `Authorization` header 116 | - Remove authorization from the `getProductsList` after your task will be checked 117 | -------------------------------------------------------------------------------- /8_integration_with_sql_database/README.md: -------------------------------------------------------------------------------- 1 | # Integration with RDS 2 | 3 | # Goal 4 | 5 | - Explore different database concepts and services 6 | - Set up an integration with AWS RDS 7 | 8 | # Topics 9 | 10 | - Relational Databases Theory 11 | - SQL Overview 12 | - Overview of AWS database offering 13 | - AWS RDS and its engines 14 | - Serveless functions & AWS RDS 15 | 16 | # Materials 17 | 18 | ## Video 19 | 20 |
21 | Must Watch 22 | 23 | The following content provides enough info to complete the task. 24 | 25 |
26 | 27 |
28 | In English 29 | 30 |
31 | 32 | - [AWS Cloud Databases - part4. Creating RDS instance](https://videoportal.epam.com/video/5dVAaZODqrm2ANBWY9vo), ~5 mins 33 | - [AWS Cloud Databases - part5. Data manipulation with DBeaver and PSQL](https://videoportal.epam.com/video/wPQe73vAKB1oE1bgJAqn), ~16 mins 34 | - [AWS Cloud Databases - part6. Using database from nest.js application](https://videoportal.epam.com/video/EKz1JeNomrMvmy9Q7v5Q), ~17 mins 35 |
36 |
37 | 38 |
39 | In Russian 40 | 41 |
42 | 43 | - [RU Databases Intro](https://videoportal.epam.com/video/EKz1JeNKNODrw0vZ7v5Q), ~55 mins 44 | - [RU Databases in AWS](https://videoportal.epam.com/video/pZWva8oyobZWbRwB71m3), ~26 mins 45 | - [RU AWS Practice with Databases](https://videoportal.epam.com/video/VKQwJWzqPLl4MnAY1EWv), ~46 mins 46 |
47 |
48 | 49 |
50 | 51 |
52 | 53 |
54 | Additional 55 | 56 | The following content provides more info for further studies. 57 | 58 |
59 | 60 | - [Journey to the Cloud - The Why](https://youtu.be/ot7joOiUG3o), ~24mins 61 | - [What is Amazon RDS and How It Works](https://www.youtube.com/watch?v=tLp8pPNdDXQ), ~13 mins 62 | - [Amazon Relational Database Service (Amazon RDS)](https://www.youtube.com/watch?v=igRfulrrYCo), ~63 mins 63 | - [SQL vs NoSQL Explained](https://www.youtube.com/watch?v=ruz-vK8IesE), ~12 mins 64 | - [How to Choose a Database on AWS](https://www.youtube.com/watch?v=eK_umMYxZfM), ~7 mins 65 |
66 | 67 |
68 | 69 | ## Reading 70 | 71 |
72 | Must Read 73 | 74 | The following content provides enough info to complete the task. 75 | 76 |
77 | 78 | - [What is AWS RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) 79 | - [Getting started with Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.html) 80 | - [AWS RDS FAQs](https://aws.amazon.com/rds/faqs/) 81 |
82 | 83 |
84 | 85 |
86 | Additional 87 | 88 | The following content provides more info for further studies. 89 | 90 |
91 | 92 | - [Best practices for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_BestPractices.html) 93 | - [Using Amazon RDS with Amazon VPC](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html) 94 | - [A guide to understanding database scaling patterns](https://www.freecodecamp.org/news/understanding-database-scaling-patterns/) 95 |
96 | 97 |
98 | 99 | # Assignments 100 | 101 | [Cloud Databases Overview and integration with Database](./task.md) 102 | -------------------------------------------------------------------------------- /8_integration_with_sql_database/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/8_integration_with_sql_database/module_focus.png -------------------------------------------------------------------------------- /8_integration_with_sql_database/task.md: -------------------------------------------------------------------------------- 1 | # Task 8 (Integration with SQL Database) 2 | 3 | ## Architecture 4 | 5 | Find the entire program architecture: [here](../Architecture.pdf). 6 | 7 |
8 | Task Focus 9 | 10 | The following image provides more info about task focus. 11 | 12 | 13 | 14 |
15 | 16 | ## Tasks 17 | 18 | --- 19 | 20 | ### Task 8.1 21 | 22 | 1. Fork a copy of [Cart Service template repository](https://github.com/boale/rs-cart-api) 23 | 2. Use the guide (https://docs.nestjs.com/faq/serverless) to integrate Nest.js application with serverless. 24 | 3. Deploy your code to AWS Lambda 25 | 26 | _Actually, it's not recommended having routing inside AWS Lambda, since it can be done by other services such as API Gateway. 27 | But it's the easiest way to deploy application, and it's done only for educational approaches._ 28 | 29 | 30 | ### Task 8.2 31 | 32 | 1. Use AWS Console to create a database instance in RDS with PostgreSQL and default configuration. 33 | 2. Connect to database instance via a tool called [DBeaver](https://dbeaver.io/download/) or any other similar tools like DataGrip/PgAdmin 34 | 3. Create the following tables: 35 | 36 | Cart model: 37 | 38 | ``` 39 | carts: 40 | id - uuid (Primary key) 41 | user_id - uuid, not null (It's not Foreign key, because there is no user entity in DB) 42 | created_at - date, not null 43 | updated_at - date, not null 44 | status - enum ("OPEN", "ORDERED") 45 | 46 | ``` 47 | 48 | Cart Item model: 49 | 50 | ``` 51 | cart_items: 52 | cart_id - uuid (Foreign key from carts.id) 53 | product_id - uuid 54 | count - integer (Number of items in a cart) 55 | ``` 56 | 57 | 58 | 4. Write SQL script to fill tables with test examples. Store it in your Github repository. Execute it for your DB to fill data. 59 | 60 | ### Task 8.3 61 | 62 | 1. Update source code in the application to use PostgreSQL instead of memory storage. 63 | - [Here](https://github.com/nestjs/nest/tree/master/sample/07-sequelize) you can find example of itegration with typeorm. 64 | - Or you can use a simpler library such as [pg](https://www.npmjs.com/package/pg). 65 | 2. Integrate with RDS 66 | 3. Extend your `serverless.yml` file with credentials to your database instance and pass it to lambda’s environment variables section. 67 | 68 | 69 | ### Task 8.4 70 | 71 | 1. Commit all your work to separate branch (e.g. `task-8` from the latest `master`) in your new repository. 72 | 2. Create a pull request to the `master` branch. 73 | 3. Submit the link to the pull request for crosscheck 74 | 75 | 76 | ## Evaluation criteria (70 points for covering all criteria) 77 | 78 | --- 79 | 80 | Reviewers should verify the lambda functions by invoking them through provided URLs. 81 | 82 | - Task 8.1 is implemented 83 | - Task 8.2 is implemented 84 | - Task 8.3 is implemented lambda links are provided and cart's data is stored in DB 85 | 86 | ## Additional (optional) tasks 87 | 88 | --- 89 | 90 | - **+20** **(All languages)** - Create orders table and integrated with it 91 | Order model: 92 | ``` 93 | orders: 94 | id - uuid 95 | user_id - uuid 96 | cart_id - uuid (Foreign key from carts.id) 97 | payment - JSON 98 | delivery - JSON 99 | comments - text 100 | status - ENUM or text 101 | total - number 102 | ``` 103 | Set `status` to 'ORDERED' after checkout instead of cart deletion. 104 | - **+4** **(All languages)** - Create users table and integrate with it 105 | - **+3** **(All languages)** - Transaction based creation of checkout 106 | - **+3** **(All languages)** - Integrate Cart service with FE repository 107 | 108 | ## Description Template for PRs 109 | 110 | --- 111 | 112 | The following should be present in PR's description field: 113 | 114 | 1. What was done? 115 | 116 | Example: 117 | 118 | ``` 119 | Service is done, but creation is not working... 120 | 121 | Additional scope - transaction, FE 122 | ``` 123 | 124 | 2. Link to Cart Service API - ..... 125 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 126 | -------------------------------------------------------------------------------- /9_containerization/README.md: -------------------------------------------------------------------------------- 1 | # Containerization 2 | 3 | # Goal 4 | 5 | - Learn what Docker is all about 6 | - Explore different Docker related concepts and AWS Elastic Beanstalk service. 7 | - Set up a Dockerfile and an integration with AWS Elastic Beanstalk 8 | 9 | # Topics 10 | 11 | - Docker overview 12 | - Dockerfiles & Images 13 | - Containers & VMs 14 | - Docker Build Optimizations 15 | - AWS Elastic Beanstalk overview 16 | - AWS EB CLI 17 | 18 | # Materials 19 | 20 | ## Video 21 | 22 |
23 | Must Watch 24 | 25 | The following content provides enough info to complete the task. 26 | 27 |
28 | 29 |
30 | In English 31 | 32 |
33 | 34 | - [TBD](https://videoportal.epam.com/), ~0 mins 35 |
36 |
37 | 38 |
39 | In Russian 40 | 41 |
42 | 43 | - [RU Introduction](https://videoportal.epam.com/video/zXWOJMdEVE9OVpbkYnDv), ~3 mins 44 | - [RU Docker is for Everyone](https://videoportal.epam.com/video/PoBNYOZMnM5nZ4Rra4Gn), ~6 mins 45 | - [RU Docker Ecosystem](https://videoportal.epam.com/video/nDBqYL4NON01E6OxYXER), ~32 mins 46 | - [RU Advanced Dockerfile Techniques](https://videoportal.epam.com/video/elN67KVlplQ5q6lWJVZz), ~12 mins 47 | - [RU Dockerizing a Simple Application](https://videoportal.epam.com/video/4MNVYj1EbEd099b1a0eE), ~3 mins 48 | - [RU Introduction to AWS Elastic Beanstalk](https://videoportal.epam.com/video/lNdwY9xWEWK3R5jQay2G), ~6 mins 49 | - [RU Deploy and Delete an Application with AWS Elastic Beanstalk](https://videoportal.epam.com/video/9w0kaEMkgADoxK5aeLnD), ~55 mins 50 | - [RU Homework](https://videoportal.epam.com/video/430e7n2y1y9LEbQX76PM), ~6 mins 51 |
52 |
53 | 54 |
55 | 56 |
57 | 58 |
59 | Additional 60 | 61 | The following content provides more info for further studies. 62 | 63 |
64 | 65 | - [Docker Containers 101](https://www.youtube.com/watch?v=eGz9DS-aIeY), ~23 mins 66 | - [AWS Elastic Beanstalk Hands-On Tutorial](https://www.youtube.com/watch?v=jnMUp2c9AzA), ~29 mins 67 | - [PaaS – From Code to Running Application using AWS Elastic Beanstalk](https://www.youtube.com/watch?v=lmT7QI8IIiM), ~54 mins 68 | - [Elastic Beanstalk Features & Config](https://www.youtube.com/watch?v=PKjbuxnispM), ~19 mins 69 |
70 | 71 |
72 | 73 | ## Reading 74 | 75 |
76 | Must Read 77 | 78 | The following content provides enough info to complete the task. 79 | 80 |
81 | 82 | - [What is AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) 83 | - [Getting started using Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.html) 84 | - [Elastic Beanstalk concepts](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.html) 85 |
86 | 87 |
88 | 89 |
90 | Additional 91 | 92 | The following content provides more info for further studies. 93 | 94 |
95 | 96 | - [Configuring your development machine for use with Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/chapter-devenv.html) 97 | - [Learning Containers From The Bottom Up](https://iximiuz.com/en/posts/container-learning-path/) 98 | - [Web application Development with AWS Elastic Beanstalk](https://aws-elastic-beanstalk-webapp.workshop.aws) 99 |
100 | 101 |
102 | 103 | # Assignments 104 | 105 | [Docker. AWS Elastic Beanstalk](./task.md) 106 | -------------------------------------------------------------------------------- /9_containerization/module_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/9_containerization/module_focus.png -------------------------------------------------------------------------------- /9_containerization/task.md: -------------------------------------------------------------------------------- 1 | # Task 9 (Docker and AWS Elastic Beanstalk) 2 | 3 | ## Prerequisites 4 | 5 | --- 6 | 7 | - [AWS EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) must be installed 8 | - [Docker](https://docs.docker.com/get-docker/) must be installed 9 | 10 | ## Architecture 11 | 12 | Find the entire program architecture: [here](../Architecture.pdf). 13 | 14 |
15 | Task Focus 16 | 17 | The following image provides more info about task focus. 18 | 19 | 20 | 21 |
22 | 23 | ## Tasks 24 | 25 | --- 26 | 27 | ### Task 8.1 28 | 29 | 1. Fork a copy of [Cart Service template repository](https://github.com/boale/rs-cart-api) 30 | 31 | 2. **Create** Dockerfile that will build a docker image to run the Cart Service. 32 | 33 | 3. Make sure to perform the following steps: 34 | 35 | - Add `.dockerignore` file to minimize build context. 36 | - Files and folders generated by the application or npm should be excluded. 37 | - Provide explanations to why the folder was ignored. 38 | 39 | 3. **Optimize** your image/container 40 | 41 | - Minimize docker image size to be `less than 500 MB`. 42 | - Optimize image build times. Dockerfile commands that run npm install should not depend on typescript files. 43 | - _OPTIONAL: add more folders to `.dockerignore` with explanations_ 44 | - _OPTIONAL: Minimize docker image size to `about 100 MB`._ 45 | - _OPTIONAL: Optimize build times by utilizing multistage builds._ 46 | - _OPTIONAL: Lint Dockerfile._ 47 | 48 | ### Task 8.2 49 | 50 | 1. Prepare Cart Service infrastructure with Elastic Beanstalk. 51 | 52 | - **Use** a `Dockerfile` from previous subtask to deploy your Cart Service using AWS Beanstalk CLI. 53 | - **Initiate** an Elastic Beanstalk application using the `eb init` command. Application name must follow the following convention `{yours_github_account_login}-cart-api`. 54 | - **Create** a new environment using the `eb create` command. An environment name must be short _but not less then four signs_ (e.g _develop_, _test_, _prod_, etc). Use the `--cname` option `{yours_github_account_login}-cart-api-{environment_name}` so that Elastic Beanstalk will use it to create a proper domain name. Use the `--single` option to not use any Load Balancer for this environment. 55 | 56 | 2. Deploy Cart Service with Elastic Beanstalk 57 | 58 | - **Investigate** AWS Elastic Beanstalk service in the AWS Console. 59 | - **Walk through** EC2 resources that were created by Elastic Beanstalk 60 | - **Update** the app and deploy changes using the `eb deploy` command. 61 | 62 | 3. Update FE app 63 | 64 | - **Pull** the latest version of the app from repo 65 | - **Replace** Cart Service placeholder in `src/constants/apiPaths.ts` using a Cart Service API URL you get after successful deployment. 66 | - **Make sure** your app starts to call Cart Service API when you add or remove items. 67 | 68 | _NOTE: Now after page refresh cart’s content might remain the same._ 69 | 70 | ### Task 8.3 71 | 72 | 1. Commit all your work to separate branch (e.g. `task-8` from the latest `master`) in your own repository. 73 | 2. Create a pull request to the `master` branch. 74 | 3. Submit the link to the pull request for crosscheck 75 | 76 | ## Evaluation criteria (70 points for covering all criteria) 77 | 78 | --- 79 | 80 | - `Dockerfile` is prepared, image is building. Image size is minimized to be less than 500 MB. 81 | - `Dockerfile` is optimized. Files that change more often and commands that depend on them should be included later, files and commands that change less should be at the top. 82 | - Folders are added to .dockerignore, with explanations. At least 2 big directories should be excluded from build context. Elastic Beanstalk application is initialized. 83 | 84 | ## Additional (optional) tasks 85 | 86 | --- 87 | - **15** - Environment is created and the app is deployed to the AWS cloud. You must provide a link to your GitHub repo with Cart Service API or PR with created `Dockerfile` and related configurations. 88 | - **15** - FE application is updated with Cart API endpoint. You must provide a PR with updates in your FE repository and OPTIONALLY link to deployed front-end app which makes proper API calls to your Cart Service. 89 | 90 | ## Description Teamplate for PRs 91 | 92 | --- 93 | 94 | The follwoing should be present in PR's description field: 95 | 96 | 1. What was done? 97 | 98 | Example: 99 | 100 | ``` 101 | Service is done, but FE is not working... 102 | 103 | Additional scope - webpack, swagger, unit tests 104 | ``` 105 | 106 | 2. Link to Cart Service API - ..... 107 | 3. Link to FE PR (YOUR OWN REPOSITORY) - ... 108 | 109 | 4. In case SWAGGER file is not provided - please provide product schema in PR description 110 | -------------------------------------------------------------------------------- /Architecture.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EPAM-JS-Competency-center/cloud-development-course-initial/de4fca15051f0d2cdd72502288e39430db80a389/Architecture.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWS JavaScript Developer 2 | First steps in modern cloud development with Node.js 3 | 4 | ## Description 5 | 6 | Cross-country global mentoring program which aims at improving corresponding hands-on skills of full-stack development with a main focus on NodeJS in AWS Cloud from e2e application perspective. 7 | 8 | The program consists of more than 10 step-by-step practice tasks that will result in practical experience working with Node.js artifacts implementing partials of RESTful API web server and relevant components, deploying and hosting micro-service application in AWS Cloud, and hands-on experience working with Cloud Databases. 9 | 10 | ## What you should know before starting 11 | 12 | ### Required before the start 13 | 14 | - Good knowledge of HTML, CSS, Javascript is highly recommended before starting the course. 15 | - Basic knowledge of Git, GitHub, Typescript is highly recommended before starting the course. 16 | - Basic computer science theory (data structures, algorithms, maths) is recommended before starting the course. 17 | - English language level: Intermediate (B1) and up. 18 | - Being able to spend **at least 20 hours** per week studing 19 | 20 | ### What to do if you lack base knowledge 21 | 22 | - Take a course in [Computer Science](https://rkhaslarov.github.io/computer-science-introduction). 23 | - Read a good [Javascript tutorial](https://javascript.info/). 24 | - Use [Codewars platform](https://www.codewars.com/kata/search/javascript) to solve practical tasks. You can start with [simple ones](https://www.codewars.com/kata/search/javascript?q=&r%5B%5D=-8&beta=false). 25 | - Take free online courses: 26 | - [Learn the Command Line](https://www.codecademy.com/learn/learn-the-command-line) 27 | - [Learn Git](https://www.codecademy.com/learn/learn-git) 28 | - [Intro to Computer Science](https://www.udacity.com/course/cs101) 29 | - [Algorithms](https://www.coursera.org/course/algs4partI) 30 | - Believe in your strength! 31 | 32 | ## Course Goal 33 | 34 | By completing this program a participant will be able to: 35 | 36 | 1. Get hands-on experience in e2e application development (full-stack) 37 | 2. Get hands-on experience with AWS (S3, SNS, SQS, and so on) and NodeJS 38 | 3. Obtain intermediate knowledge about micro-service architecture, serverless architecture, etc. 39 | 40 | ## Course Architecture 41 | 42 | This program covers a wide range of topics according to the following [architecture](./Architecture.pdf). 43 | 44 | ## Course Curriculum 45 | 46 | This program will have theory and practice on the following topics: 47 | 48 | ### Module 1 - [Cloud Introduction](./1_cloud_introduction/README.md) 49 | - Fundamental Theory about Cloud Computing 50 | - Cloud Service Models, Cloud Deployment Models, Infrastructure-as-Code 51 | - Monolith vs Microservices vs Serverless 52 | - AWS Intro, Registration, Cloud Watch, IAM 53 | - Repository structure 54 | 55 | ### Module 2 - [Serving SPA](./2_serving_spa/README.md) 56 | - AWS Simple Storage Service overview 57 | - Services & Tools overview 58 | - AWS CloudFront overview 59 | - Basic overview of deployment process to CloudFront and S3 60 | - Serverless Framework overview 61 | - AWS CLI overview 62 | 63 | ### Module 3 - [Serverless API](./3_serverless_api/README.md) 64 | - AWS Lambda Overview 65 | - Serverless Framework and Lambda 66 | - Introduction to Collecting logs with AWS CloudWatch 67 | - Lambda Advanced Features and Configuration 68 | 69 | ### Module 4 - [Integration with Database](4_integration_with_nosql_database/README.md) 70 | - Relational Databases Theory 71 | - SQL Overview 72 | - Overview of AWS database offering 73 | - AWS RDS and its engines 74 | - Serveless functions & AWS RDS 75 | 76 | ### Module 5 - [Integration with S3](./5_integration_with_s3/README.md) 77 | - AWS S3 In-depth Introduction 78 | - S3 Storage Classes and their Use Cases 79 | - S3 Access Control & Encryption 80 | - S3 Versioning, Lifecycle Management & Events 81 | - Integration with S3 and Lambda Overview 82 | 83 | ### Module 6 - [Async Microservices Communication](./6_async_microservices_communication/README.md) 84 | - Async Messaging Overview 85 | - AWS SQS Overview 86 | - AWS SNS Overview 87 | - Integration with SQS, SNS and Lambda Overview 88 | 89 | ### Module 7 - [Authorization](./7_authorization/README.md) 90 | - Authentication & Authorization overview 91 | - Lambda Authorizer & API Gateway 92 | - AWS Cognito overview 93 | - Cognito User Pool 94 | - Cognito Identity Pool 95 | 96 | ### Module 8 - [Containerization](9_containerization/README.md) 97 | - Docker overview 98 | - Dockerfiles & Images 99 | - Containers & VMs 100 | - Docker Build Optimizations 101 | - AWS Elastic Beanstalk overview 102 | - AWS EB CLI 103 | 104 | ### Module 9 - [Backend For Frontend](10_backend_for_frontend/README.md) 105 | - Backend for Frontend overview 106 | - BFF as Pattern 107 | - API Gateway as BFF 108 | - AWS Elastic Beanstalk configuration 109 | --------------------------------------------------------------------------------