diff --git a/MF06-PRA06.md b/MF06-PRA06.md index 1d490608..a43bdab6 100644 --- a/MF06-PRA06.md +++ b/MF06-PRA06.md @@ -12,6 +12,8 @@ This practical exercise will guide you through setting up an AWS environment to 2. Follow the registration process, providing necessary information 3. Choose a support plan (Basic is free and sufficient for this exercise) +![](PRA06_ANSWER/screenshots/1-create-an-aws-account.png) + #### 2. Set Up AWS Budget and Billing Alerts 1. Navigate to AWS Budgets in the AWS Management Console @@ -20,6 +22,20 @@ This practical exercise will guide you through setting up an AWS environment to 4. Configure alerts for 80% of your budgeted amount[5] 5. Set up an action to automatically apply an IAM policy restricting resource creation when the budget is exceeded[3] +![](PRA06_ANSWER/screenshots/2-1-set-up-aws-budget-and-billing-alerts.png) + + +Having problems during the budget creation: +![](PRA06_ANSWER/screenshots/2-2-problems-creation-budget.png) + + +Solved by creating a role who has full access to AWS Budget Actions: +![](PRA06_ANSWER/screenshots/2-3-creation-role-with-budget-permssion.png) + + +The budget has been created successfully: +![](PRA06_ANSWER/screenshots/2-4-budget-created.png) + #### 3. Create AWS Services for Spring Boot Docker Deployment ##### Set up Amazon Elastic Container Registry (ECR) @@ -29,6 +45,8 @@ This practical exercise will guide you through setting up an AWS environment to 3. Name your repository (e.g., "spring-boot-app") 4. Configure repository settings and create +![](PRA06_ANSWER/screenshots/3-1-elastic-container-registry.png) + ##### Configure Amazon Elastic Container Service (ECS) 1. Open the Amazon ECS console @@ -36,6 +54,8 @@ This practical exercise will guide you through setting up an AWS environment to 3. Choose "Networking only" for Fargate compatibility 4. Name your cluster and create +![](PRA06_ANSWER/screenshots/3-2-cluster-creation.png) + ##### Set up AWS Fargate 1. In the ECS console, create a new task definition @@ -43,29 +63,84 @@ This practical exercise will guide you through setting up an AWS environment to 3. Configure task size (CPU and memory) 4. Add container details using the ECR image +New task definition: +![](PRA06_ANSWER/screenshots/3-3-task-definition.png) + +Container creation: +![](PRA06_ANSWER/screenshots/3-4-container-creation.png) + +Service creation: +- Enviroment +![](PRA06_ANSWER/screenshots/3-5-1-service-creation-enviroment.png) + +- Deployment +![](PRA06_ANSWER/screenshots/3-5-2-service-creation-deployment-configuration.png) + +- Networking +![](PRA06_ANSWER/screenshots/3-5-3-service-creation-networking.png) + +- Load Balancing +![](PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-1.png) +![](PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-2.png) + + + + #### 4. Update Jenkins Pipeline for AWS Deployment -Modify your Jenkins pipeline to include AWS deployment steps: +Modified Jenkins pipeline to include AWS deployment steps: ```groovy pipeline { agent any - + environment { - AWS_ACCOUNT_ID="your-account-id" - AWS_DEFAULT_REGION="your-region" - IMAGE_REPO_NAME="spring-boot-app" + AWS_ACCOUNT_ID="954976290202" + AWS_DEFAULT_REGION="eu-central-1" + IMAGE_REPO_NAME="books/booksback" IMAGE_TAG="${env.BUILD_ID}" REPOSITORY_URI = "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}" + IMAGE_NAME = 'books/booksback' + } + + + tools { + maven 'M3' + jdk 'JDK21' } stages { - // Previous stages (build, test) here + stage('Checkout') { + steps { + git 'https://github.com/AlbertProfe/BooksPageable.git' + } + } + + stage('Build') { + steps { + sh 'mvn clean package' + } + } + stage('Archive') { + steps { + archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true + } + } + + stage('Build Docker Image') { + steps { + script { + // Build the Docker image and tag it with both BUILD_NUMBER and latest + sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} -t ${IMAGE_NAME}:latest ." + } + } + } + stage('Push to ECR') { steps { script { - sh "aws ecr get-login-password --region ${AWS_DEFAULT_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com" + sh "aws ecr-public get-login-password --region eu-central-1 | docker login --username AWS --password-stdin public.ecr.aws/c3d9t1n8" sh "docker tag ${IMAGE_REPO_NAME}:${IMAGE_TAG} ${REPOSITORY_URI}:${IMAGE_TAG}" sh "docker push ${REPOSITORY_URI}:${IMAGE_TAG}" } @@ -75,49 +150,61 @@ pipeline { stage('Deploy to ECS') { steps { script { - sh "aws ecs update-service --cluster your-cluster-name --service your-service-name --force-new-deployment" + sh "aws ecs update-service --cluster booksback --booksbackSpringService --force-new-deployment" } } } } -} + + post { + always { + // Logout from DockerHub and remove images + sh "docker logout" + sh "docker rmi ${IMAGE_NAME}:${IMAGE_TAG} || true" + sh "docker rmi ${IMAGE_NAME}:latest || true" + } + } + } ``` #### 5. Deploy Spring Boot Application -1. Run the Jenkins pipeline to build and push the Docker image to ECR -2. The pipeline will trigger a new deployment in ECS using Fargate - -### Additional Notes - -- Ensure proper IAM roles and permissions are set for Jenkins to interact with AWS services -- Configure network settings in ECS task definition for your Spring Boot application -- Set up an Application Load Balancer if needed for routing traffic to your Fargate tasks - -### Submission Guidelines - -- Fork the repository or create a new one on GitHub -- Create a branch named `MF06-PRA06-YourNameAndSurname` -- Implement the required changes and add necessary configuration files -- Commit with clear messages -- Push your branch and create a pull request titled `MF06-PRA06-YourNameAndSurname-AWSDeployment` -- Create a `PRA06_ANSWER` folder to save the answer, docs, and images - -### Evaluation Criteria - -- Successful creation and configuration of AWS account with proper budget controls -- Correct setup of ECR, ECS, and Fargate services -- Proper modification of Jenkins pipeline for AWS deployment -- Successful deployment of Spring Boot application to AWS -- Clear documentation and commit messages - -Citations: -[1] https://repost.aws/es/questions/QU3DjdqNvwSnW1maqrMxseuw/how-to-add-a-total-monthly-spend-limit-in-2023 -[2] https://docs.aws.amazon.com/cost-management/latest/userguide/management-limits.html -[3] https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-controls.html -[4] https://www.youtube.com/watch?v=SX6LoXTmpdM -[5] https://aws.amazon.com/getting-started/hands-on/control-your-costs-free-tier-budgets/ -[6] https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html?icmpid=docs_costmanagement_hp-choose-type -[7] https://www.youtube.com/watch?v=zt6Dur9fVGk -[8] https://www.reddit.com/r/aws/comments/l362qg/is_there_a_tool_for_limiting_aws_spending/ -[9] https://curc.readthedocs.io/en/latest/cloud/aws/lca1/billing/budget-actions.html \ No newline at end of file +1.Access key creation: +![](PRA06_ANSWER/screenshots/5-1-access-key.png) + + +2.Errors and Changes + +Error 1: +![](PRA06_ANSWER/screenshots/5-4-error-1.png) + +Change: +![](PRA06_ANSWER/screenshots/5-4-change-1.png) + + +Error 2: +![](PRA06_ANSWER/screenshots/5-4-error-2.png) + +Change: +![](PRA06_ANSWER/screenshots/5-4-change-2.png) + + +Error 3: +![](PRA06_ANSWER/screenshots/5-4-error-3.png) + +Changes: +![](PRA06_ANSWER/screenshots/5-4-change-3.1.png) + +![](PRA06_ANSWER/screenshots/5-4-change-3.2.png) + + +Error 4: +![](PRA06_ANSWER/screenshots/5-4-error-4.png) + +Change: +![](PRA06_ANSWER/screenshots/5-4-change-4.png) + + + + +I could not find a solution yet. \ No newline at end of file diff --git a/PRA06_ANSWER/output.txt b/PRA06_ANSWER/output.txt new file mode 100644 index 00000000..00218bd7 --- /dev/null +++ b/PRA06_ANSWER/output.txt @@ -0,0 +1,228 @@ +Started by user Marc Fernández + +[Pipeline] Start of Pipeline +[Pipeline] node +Running on Jenkins + in /var/jenkins_home/workspace/Pipeline for AWS Deployment +[Pipeline] { +[Pipeline] withEnv +[Pipeline] { +[Pipeline] stage +[Pipeline] { (Declarative: Tool Install) +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] } +[Pipeline] // stage +[Pipeline] withEnv +[Pipeline] { +[Pipeline] stage +[Pipeline] { (Checkout) +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] withEnv +[Pipeline] { +[Pipeline] git +The recommended git tool is: NONE +No credentials specified + > git rev-parse --resolve-git-dir /var/jenkins_home/workspace/Pipeline for AWS Deployment/.git # timeout=10 +Fetching changes from the remote Git repository + > git config remote.origin.url https://github.com/AlbertProfe/BooksPageable.git # timeout=10 +Fetching upstream changes from https://github.com/AlbertProfe/BooksPageable.git + > git --version # timeout=10 + > git --version # 'git version 2.39.5' + > git fetch --tags --force --progress -- https://github.com/AlbertProfe/BooksPageable.git +refs/heads/*:refs/remotes/origin/* # timeout=10 + > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 +Checking out Revision 9a7a31ad1a82a34a4c870b6aaf5f506c832f968b (refs/remotes/origin/master) + > git config core.sparsecheckout # timeout=10 + > git checkout -f 9a7a31ad1a82a34a4c870b6aaf5f506c832f968b # timeout=10 + > git branch -a -v --no-abbrev # timeout=10 + > git branch -D master # timeout=10 + > git checkout -b master 9a7a31ad1a82a34a4c870b6aaf5f506c832f968b # timeout=10 +Commit message: "Dockerfile" + > git rev-list --no-walk 9a7a31ad1a82a34a4c870b6aaf5f506c832f968b # timeout=10 +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // stage +[Pipeline] stage +[Pipeline] { (Build) +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] withEnv +[Pipeline] { +[Pipeline] sh ++ mvn clean package +[INFO] Scanning for projects... +[INFO] +[INFO] ----------------------< io.company:BooksPageable >---------------------- +[INFO] Building library6 0.0.1-SNAPSHOT +[INFO] from pom.xml +[INFO] --------------------------------[ jar ]--------------------------------- +[INFO] +[INFO] --- clean:3.2.0:clean (default-clean) @ BooksPageable --- +[INFO] Deleting /var/jenkins_home/workspace/Pipeline for AWS Deployment/target +[INFO] +[INFO] --- resources:3.3.1:resources (default-resources) @ BooksPageable --- +[INFO] Copying 1 resource from src/main/resources to target/classes +[INFO] Copying 1 resource from src/main/resources to target/classes +[INFO] +[INFO] --- compiler:3.11.0:compile (default-compile) @ BooksPageable --- +[INFO] Changes detected - recompiling the module! :source +[INFO] Compiling 7 source files with javac [debug release 21] to target/classes +[INFO] Annotation processing is enabled because one or more processors were found + on the class path. A future release of javac may disable annotation processing + unless at least one processor is specified by name (-processor), or a search + path is specified (--processor-path, --processor-module-path), or annotation + processing is enabled explicitly (-proc:only, -proc:full). + Use -Xlint:-options to suppress this message. + Use -proc:none to disable annotation processing. +[INFO] +[INFO] --- resources:3.3.1:testResources (default-testResources) @ BooksPageable --- +[INFO] skip non existing resourceDirectory /var/jenkins_home/workspace/Pipeline for AWS Deployment/src/test/resources +[INFO] +[INFO] --- compiler:3.11.0:testCompile (default-testCompile) @ BooksPageable --- +[INFO] No sources to compile +[INFO] +[INFO] --- surefire:3.0.0:test (default-test) @ BooksPageable --- +[INFO] No tests to run. +[INFO] +[INFO] --- jar:3.3.0:jar (default-jar) @ BooksPageable --- +[INFO] Building jar: /var/jenkins_home/workspace/Pipeline for AWS Deployment/target/BooksPageable-0.0.1-SNAPSHOT.jar +[INFO] +[INFO] --- spring-boot:3.1.12:repackage (repackage) @ BooksPageable --- +[INFO] Replacing main artifact /var/jenkins_home/workspace/Pipeline for AWS Deployment/target/BooksPageable-0.0.1-SNAPSHOT.jar with repackaged archive, adding nested dependencies in BOOT-INF/. +[INFO] The original artifact has been renamed to /var/jenkins_home/workspace/Pipeline for AWS Deployment/target/BooksPageable-0.0.1-SNAPSHOT.jar.original +[INFO] ------------------------------------------------------------------------ +[INFO] BUILD SUCCESS +[INFO] ------------------------------------------------------------------------ +[INFO] Total time: 7.201 s +[INFO] Finished at: 2024-12-15T23:28:04Z +[INFO] ------------------------------------------------------------------------ +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // stage +[Pipeline] stage +[Pipeline] { (Archive) +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] withEnv +[Pipeline] { +[Pipeline] archiveArtifacts +Archiving artifacts +Recording fingerprints +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // stage +[Pipeline] stage +[Pipeline] { (Build Docker Image) +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] withEnv +[Pipeline] { +[Pipeline] script +[Pipeline] { +[Pipeline] sh ++ docker build -t books/booksback:12 -t books/booksback:latest . +#0 building with "default" instance using docker driver + +#1 [internal] load build definition from Dockerfile +#1 transferring dockerfile: 168B done +#1 DONE 0.0s + +#2 [internal] load metadata for docker.io/library/openjdk:21-slim +#2 DONE 0.9s + +#3 [internal] load .dockerignore +#3 transferring context: 2B done +#3 DONE 0.0s + +#4 [1/3] FROM docker.io/library/openjdk:21-slim@sha256:7072053847a8a05d7f3a14ebc778a90b38c50ce7e8f199382128a53385160688 +#4 DONE 0.0s + +#5 [internal] load build context +#5 transferring context: 49.46MB 0.7s done +#5 DONE 0.7s + +#6 [2/3] WORKDIR /app +#6 CACHED + +#7 [3/3] COPY target/*.jar app.jar +#7 DONE 2.0s + +#8 exporting to image +#8 exporting layers +#8 exporting layers 0.4s done +#8 writing image sha256:6221d5e4f147edcd1d179b73077549e48957eac12bedeb2103b4a6cbf28ada7c done +#8 naming to docker.io/books/booksback:12 0.0s done +#8 naming to docker.io/books/booksback:latest 0.0s done +#8 DONE 0.6s +[Pipeline] } +[Pipeline] // script +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // stage +[Pipeline] stage +[Pipeline] { (Push to ECR) +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] tool +[Pipeline] envVarsForTool +[Pipeline] withEnv +[Pipeline] { +[Pipeline] script +[Pipeline] { +[Pipeline] sh ++ aws ecr-public get-login-password --region eu-central-1 ++ docker login --username AWS --password-stdin public.ecr.aws/c3d9t1n8 + +Unable to locate credentials. You can configure credentials by running "aws configure". +Error: Cannot perform an interactive login from a non TTY device +[Pipeline] } +[Pipeline] // script +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // stage +[Pipeline] stage +[Pipeline] { (Deploy to ECS) +Stage "Deploy to ECS" skipped due to earlier failure(s) +[Pipeline] getContext +[Pipeline] } +[Pipeline] // stage +[Pipeline] stage +[Pipeline] { (Declarative: Post Actions) +[Pipeline] sh ++ docker logout +Removing login credentials for https://index.docker.io/v1/ +[Pipeline] sh ++ docker rmi books/booksback:12 +Untagged: books/booksback:12 +[Pipeline] sh ++ docker rmi books/booksback:latest +Untagged: books/booksback:latest +Deleted: sha256:6221d5e4f147edcd1d179b73077549e48957eac12bedeb2103b4a6cbf28ada7c +[Pipeline] } +[Pipeline] // stage +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // withEnv +[Pipeline] } +[Pipeline] // node +[Pipeline] End of Pipeline +ERROR: script returned exit code 1 +Finished: FAILURE + diff --git a/PRA06_ANSWER/pipeline.groovy b/PRA06_ANSWER/pipeline.groovy new file mode 100644 index 00000000..980716d7 --- /dev/null +++ b/PRA06_ANSWER/pipeline.groovy @@ -0,0 +1,74 @@ +pipeline { + agent any + + environment { + AWS_ACCOUNT_ID="954976290202" + AWS_DEFAULT_REGION="eu-central-1" + IMAGE_REPO_NAME="books/booksback" + IMAGE_TAG="${env.BUILD_ID}" + REPOSITORY_URI = "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_REPO_NAME}" + IMAGE_NAME = 'books/booksback' + } + + + tools { + maven 'M3' + jdk 'JDK21' + } + + stages { + stage('Checkout') { + steps { + git 'https://github.com/AlbertProfe/BooksPageable.git' + } + } + + stage('Build') { + steps { + sh 'mvn clean package' + } + } + + stage('Archive') { + steps { + archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true + } + } + + stage('Build Docker Image') { + steps { + script { + // Build the Docker image and tag it with both BUILD_NUMBER and latest + sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} -t ${IMAGE_NAME}:latest ." + } + } + } + + stage('Push to ECR') { + steps { + script { + sh "aws ecr-public get-login-password --region eu-central-1 | docker login --username AWS --password-stdin public.ecr.aws/c3d9t1n8" + sh "docker tag ${IMAGE_REPO_NAME}:${IMAGE_TAG} ${REPOSITORY_URI}:${IMAGE_TAG}" + sh "docker push ${REPOSITORY_URI}:${IMAGE_TAG}" + } + } + } + + stage('Deploy to ECS') { + steps { + script { + sh "aws ecs update-service --cluster booksback --booksbackSpringService --force-new-deployment" + } + } + } + } + + post { + always { + // Logout from DockerHub and remove images + sh "docker logout" + sh "docker rmi ${IMAGE_NAME}:${IMAGE_TAG} || true" + sh "docker rmi ${IMAGE_NAME}:latest || true" + } + } +} diff --git a/PRA06_ANSWER/screenshots/1-create-an-aws-account.png b/PRA06_ANSWER/screenshots/1-create-an-aws-account.png new file mode 100644 index 00000000..63bf9dfb Binary files /dev/null and b/PRA06_ANSWER/screenshots/1-create-an-aws-account.png differ diff --git a/PRA06_ANSWER/screenshots/2-1-set-up-aws-budget-and-billing-alerts.png b/PRA06_ANSWER/screenshots/2-1-set-up-aws-budget-and-billing-alerts.png new file mode 100644 index 00000000..19559c1a Binary files /dev/null and b/PRA06_ANSWER/screenshots/2-1-set-up-aws-budget-and-billing-alerts.png differ diff --git a/PRA06_ANSWER/screenshots/2-2-problems-creation-budget.png b/PRA06_ANSWER/screenshots/2-2-problems-creation-budget.png new file mode 100644 index 00000000..fb74d053 Binary files /dev/null and b/PRA06_ANSWER/screenshots/2-2-problems-creation-budget.png differ diff --git a/PRA06_ANSWER/screenshots/2-3-creation-role-with-budget-permssion.png b/PRA06_ANSWER/screenshots/2-3-creation-role-with-budget-permssion.png new file mode 100644 index 00000000..af52275e Binary files /dev/null and b/PRA06_ANSWER/screenshots/2-3-creation-role-with-budget-permssion.png differ diff --git a/PRA06_ANSWER/screenshots/2-4-budget-created.png b/PRA06_ANSWER/screenshots/2-4-budget-created.png new file mode 100644 index 00000000..79f3dfe4 Binary files /dev/null and b/PRA06_ANSWER/screenshots/2-4-budget-created.png differ diff --git a/PRA06_ANSWER/screenshots/3-1-elastic-container-registry.png b/PRA06_ANSWER/screenshots/3-1-elastic-container-registry.png new file mode 100644 index 00000000..79c0355e Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-1-elastic-container-registry.png differ diff --git a/PRA06_ANSWER/screenshots/3-2-cluster-creation.png b/PRA06_ANSWER/screenshots/3-2-cluster-creation.png new file mode 100644 index 00000000..392d95a7 Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-2-cluster-creation.png differ diff --git a/PRA06_ANSWER/screenshots/3-3-task-definition.png b/PRA06_ANSWER/screenshots/3-3-task-definition.png new file mode 100644 index 00000000..8a587dcf Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-3-task-definition.png differ diff --git a/PRA06_ANSWER/screenshots/3-4-container-creation.png b/PRA06_ANSWER/screenshots/3-4-container-creation.png new file mode 100644 index 00000000..24e237ed Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-4-container-creation.png differ diff --git a/PRA06_ANSWER/screenshots/3-5-1-service-creation-enviroment.png b/PRA06_ANSWER/screenshots/3-5-1-service-creation-enviroment.png new file mode 100644 index 00000000..97ac8052 Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-5-1-service-creation-enviroment.png differ diff --git a/PRA06_ANSWER/screenshots/3-5-2-service-creation-deployment-configuration.png b/PRA06_ANSWER/screenshots/3-5-2-service-creation-deployment-configuration.png new file mode 100644 index 00000000..baad625f Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-5-2-service-creation-deployment-configuration.png differ diff --git a/PRA06_ANSWER/screenshots/3-5-3-service-creation-networking.png b/PRA06_ANSWER/screenshots/3-5-3-service-creation-networking.png new file mode 100644 index 00000000..d2203f30 Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-5-3-service-creation-networking.png differ diff --git a/PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-1.png b/PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-1.png new file mode 100644 index 00000000..d81660c6 Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-1.png differ diff --git a/PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-2.png b/PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-2.png new file mode 100644 index 00000000..08f3dea5 Binary files /dev/null and b/PRA06_ANSWER/screenshots/3-5-4-service-creation-load-balancing-2.png differ diff --git a/PRA06_ANSWER/screenshots/5-1-access-key.png b/PRA06_ANSWER/screenshots/5-1-access-key.png new file mode 100644 index 00000000..df7d7785 Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-1-access-key.png differ diff --git a/PRA06_ANSWER/screenshots/5-3-aws-access-key.png b/PRA06_ANSWER/screenshots/5-3-aws-access-key.png new file mode 100644 index 00000000..6f5f4093 Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-3-aws-access-key.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-change-1.png b/PRA06_ANSWER/screenshots/5-4-change-1.png new file mode 100644 index 00000000..b693a149 Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-change-1.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-change-2.png b/PRA06_ANSWER/screenshots/5-4-change-2.png new file mode 100644 index 00000000..0f496be3 Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-change-2.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-change-3.1.png b/PRA06_ANSWER/screenshots/5-4-change-3.1.png new file mode 100644 index 00000000..2c15482b Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-change-3.1.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-change-3.2.png b/PRA06_ANSWER/screenshots/5-4-change-3.2.png new file mode 100644 index 00000000..58c6cee0 Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-change-3.2.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-change-4.png b/PRA06_ANSWER/screenshots/5-4-change-4.png new file mode 100644 index 00000000..d2a1380d Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-change-4.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-error-1.png b/PRA06_ANSWER/screenshots/5-4-error-1.png new file mode 100644 index 00000000..6582360a Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-error-1.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-error-2.png b/PRA06_ANSWER/screenshots/5-4-error-2.png new file mode 100644 index 00000000..b420750f Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-error-2.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-error-3.png b/PRA06_ANSWER/screenshots/5-4-error-3.png new file mode 100644 index 00000000..0dea90f9 Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-error-3.png differ diff --git a/PRA06_ANSWER/screenshots/5-4-error-4.png b/PRA06_ANSWER/screenshots/5-4-error-4.png new file mode 100644 index 00000000..6fcbaa4b Binary files /dev/null and b/PRA06_ANSWER/screenshots/5-4-error-4.png differ