├── .DS_Store ├── LICENSE ├── README.md ├── hello-app-runner ├── .dockerignore ├── .github │ └── workflows │ │ └── main.yml ├── .gitignore ├── ATTRIBUTION.md ├── Dockerfile ├── LICENSE ├── Notice.txt ├── Pipfile ├── Pipfile.lock ├── README.md ├── app.py ├── apprunner.yaml ├── banner_base_dark.png ├── banner_base_light.png ├── cf.yaml ├── requirements.txt ├── static │ ├── apprunner_icon.svg │ ├── background-mobile.svg │ ├── background.bak.svg │ ├── background.svg │ ├── banner.svg │ ├── banner_sample.png │ ├── banner_satellite.svg │ ├── banner_stars.svg │ ├── docs_icon.svg │ ├── external_link_icon.svg │ ├── favicon.svg │ ├── fonts │ │ ├── open-sans-v18-latin-regular.eot │ │ ├── open-sans-v18-latin-regular.svg │ │ ├── open-sans-v18-latin-regular.ttf │ │ ├── open-sans-v18-latin-regular.woff │ │ └── open-sans-v18-latin-regular.woff2 │ ├── git_icon.svg │ ├── twitter_icon.svg │ └── workshop_icon.svg └── templates │ ├── index.html │ └── index.txt ├── images ├── acknowledge-stack-capabilities.png ├── after-change.png ├── alb-ingress-controller.png ├── before-change.png ├── cloud9-terminal.png ├── configure-service.png ├── configure-source-deployment.png ├── create-cloud9-stack.png ├── disable-cloud9-credentials.png ├── how_it_works.png ├── locate-cloud9-instance.png ├── service-create-service.png ├── set-instance-role.png ├── source-deployment-final.png ├── stack-cloud9-output.png ├── transition.png ├── v1.png └── v2.png └── setup └── cloud9.yaml /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/.DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 phongle 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Deploy Containerized Application To AWS App Runner 2 | 3 | This lab is provided as part of **[AWS Innovate Modern Applications Edition](https://aws.amazon.com/events/aws-innovate/apj/modern-apps/)**. 4 | 5 | ℹ️ You will run this lab in your own AWS account. Please follow directions at the end of the lab to remove resources to avoid future costs. 6 | 7 | ### About this lab 8 | 9 | [AWS App Runner](https://aws.amazon.com/apprunner/) is a fully managed service that makes it easy for developers to quickly deploy containerized web applications and APIs, at scale and with no prior infrastructure experience required. Start with your source code or a container image. App Runner automatically builds and deploys the web application and load balances traffic with encryption. App Runner also scales up or down automatically to meet your traffic needs. With App Runner, rather than thinking about servers or scaling, you have more time to focus on your applications. 10 | 11 | ![aws-app-runner](./images/how_it_works.png) 12 | 13 | In this lab, we will build a container image which we will push to [Amazon Elastic Container Registry (ECR)](https://aws.amazon.com/ecr/), a fully managed container registry. The container image we have built will then be deployed to AWS App Runner. 14 | 15 | ## Setup 16 | 17 | ### Step 1 - Create Cloud9 environment via AWS CloudFormation 18 | 19 | 1. Log in your AWS Account 20 | 1. Click [this link](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?stackName=AWS-App-Runner&templateURL=https://awsinnovatefea2022.s3.amazonaws.com/aws-app-runner/cloud9.yaml) and open a new browser tab 21 | 1. Click *Next* again to the stack review page, tick **I acknowledge that AWS CloudFormation might create IAM resources** box and click *Create stack*. 22 | 23 | ![Acknowledge Stack Capabilities](./images/acknowledge-stack-capabilities.png) 24 | 25 | 4. Wait for a few minutes for stack creation to complete. 26 | 5. Select the stack and note down the outputs (*Cloud9EnvironmentId* & *InstanceProfile*) on *outputs* tab for next step. 27 | 28 | ![Cloud9 Stack Output](./images/stack-cloud9-output.png) 29 | 30 | ### Step 2 - Assign instance role to Cloud9 instance 31 | 32 | 1. Launch [AWS EC2 Console](https://console.aws.amazon.com/ec2/v2/home?#Instances). 33 | 2. Use stack output value of *Cloud9EnvironmentId* as filter to find the Cloud9 instance. 34 | 35 | ![Locate Cloud9 Instance](./images/locate-cloud9-instance.png) 36 | 37 | 3. Right click the instance, *Security* -> *Modify IAM Role*. 38 | 4. Choose the profile name matches to the *InstanceProfile* value from the stack output, and click *Apply*. 39 | 40 | ![Set Instance Role](./images/set-instance-role.png) 41 | 42 | ### Step 3 - Disable Cloud9 Managed Credentials 43 | 44 | 1. Launch [AWS Cloud9 Console](https://us-west-2.console.aws.amazon.com/cloud9control/home?region=us-west-2#/) 45 | 1. Locate the Cloud9 environment created for this lab and click "Open IDE". The environment title should start with *AppRunnerCloud9*. 46 | 1. At top menu of Cloud9 IDE, click *AWS Cloud9* and choose *Preferences*. 47 | 1. At left menu *AWS SETTINGS*, click *Credentials*. 48 | 1. Disable AWS managed temporary credentials: 49 | 50 | ![Disable Cloud 9 Managed Credentials](./images/disable-cloud9-credentials.png) 51 | 52 | ### Step 4 - Prepare lab environment on Cloud9 IDE 53 | 54 | Run commands below on Cloud9 Terminal to clone this lab repository: 55 | 56 | ``` 57 | git clone https://github.com/phonghuule/aws-app-runner.git 58 | ``` 59 | ### Step 5 - Configure AWS Cli 60 | Run commands below on Cloud9 Terminal to configure the settings that AWS Cli will use to interact with AWS: 61 | ``` 62 | aws configure 63 | ``` 64 | Provide inputs as follows: 65 | ``` 66 | AWS Access Key ID [None]: 67 | AWS Secret Access Key [None]: 68 | Default region name [us-west-2]: us-west-2 69 | Default output format [≈]: 70 | ``` 71 | 72 | ## Lab 73 | 74 | ### Create ECR Repository 75 | Our first step will be to create a repository in ECR, this is where we later will store our container image once it’s been built. 76 | 77 | Use the following command: 78 | ``` 79 | aws ecr create-repository --repository-name hello-app-runner 80 | ``` 81 | We are interested in using the repositoryUri later, so that we can tag and push images to the repository, let’s go ahead and store that as an environment variable for easy access later on. 82 | 83 | ``` 84 | export ECR_REPOSITORY_URI=$(aws ecr describe-repositories --repository-names hello-app-runner --query 'repositories[?repositoryName==`hello-app-runner`].repositoryUri' --output text) 85 | echo $ECR_REPOSITORY_URI 86 | ``` 87 | Expected Output: 88 | ``` 89 | 948779419420.dkr.ecr.us-west-2.amazonaws.com/hello-app-runner 90 | ``` 91 | Note down the ECR_REPOSITORY_URI 92 | 93 | ### Building The Image 94 | It’s time to build our image, but before we can do that, we need to retrieve login credentials for our local container engine, so that we can push the image 95 | ``` 96 | export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text) 97 | export AWS_REGION=us-west-2 # Change this to the region you are using, for example eu-west-1 98 | aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com 99 | ``` 100 | The Dockerfile contains the instructions for assembling our container image. Ours is relatively straight forward, it contains a basic splash page with links to relevant App Runner content. Let's have a look 101 | ``` 102 | cd ~/environment/aws-app-runner/hello-app-runner 103 | cat Dockerfile 104 | ``` 105 | Let’s go ahead and build our image. 106 | 107 | ``` 108 | cd ~/environment/aws-app-runner/hello-app-runner 109 | docker build -t hello-app-runner:demo . 110 | ``` 111 | Let's tag the image and push it to ECR: 112 | ``` 113 | docker tag hello-app-runner:demo $ECR_REPOSITORY_URI:demo 114 | docker push $ECR_REPOSITORY_URI:demo 115 | ``` 116 | ### Configure App Runner ECR Access 117 | Before we create our App Runner service, we need to setup permissions so that App Runner can read from our ECR repository. 118 | Let’s start by creating an IAM role that App Runner will use, and the roles corresponding trust policy. 119 | ``` 120 | export TP_FILE=$(mktemp) 121 | export ROLE_NAME=AppRunnerWorkshopAccessRole 122 | cat <hello-app-runner, and leave the rest with default values 164 | 165 | ![configure-service](./images/configure-service.png) 166 | 167 | Review our settings, and if everything looks good, click Create & Deploy. 168 | Your application will be deployed behind a managed load balancer with a TLS certificate. Automatic scaling is based on concurrent requests. Each service also provides CloudWatch metrics and logs for your container. You can focus on building your application while AWS handles the infrastructure. 169 | 170 | Once status has moved to “Complete", you can click on the url listed below “Default domain” in order to view the actual web application you have just deployed. 171 | 172 | ![v1](./images/v1.png) 173 | 174 | ### Automatic Deployment On Code Change 175 | 176 | In this section, we will introduce a change to app, build a new version of our container image, and see how AWS App Runner automatically the change, and deploys the new version. 177 | 178 | Let’s introduce a change to our code that we will be able to visually inspect. 179 | Open templates/index.html in the Cloud9 editor, and change some text. 180 | 181 | Before: 182 | 183 | ![before-change](./images/before-change.png) 184 | 185 | After, added "And we have automatic deployment": 186 | 187 | ![after-change](./images/after-change.png) 188 | 189 | Let’s build a new image with our code changes: 190 | 191 | ``` 192 | cd ~/environment/aws-app-runner/hello-app-runner 193 | docker build -t hello-app-runner:demo . 194 | docker tag hello-app-runner:demo $ECR_REPOSITORY_URI:demo 195 | docker push $ECR_REPOSITORY_URI:demo 196 | ``` 197 | Our service will now transition into Operation in progress while the deployment occurs, once it is finished, the status will transtion to Running. 198 | 199 | ![transition](./images/transition.png) 200 | 201 | We can then validate that our deployment have succeeded, as we should now see different text when visiting the url 202 | 203 | ![v2](./images/v2.png) 204 | 205 | ## Clean up 206 | ### Step 1 207 | Navigate to [Amazon ECR Console](https://console.aws.amazon.com/ecr/) and delete hello-app-runner repository 208 | 209 | ### Step 2 210 | Navigate to [AWS App Runner Console](https://console.aws.amazon.com/apprunner/) and delete hello-app-runner service 211 | 212 | ### Step 3 213 | Delete the Cloud 9 CloudFormation stack named **AWS-App-Runner** from AWS Console: 214 | 215 | - Launch [AWS CloudFormation Console](https://console.aws.amazon.com/cloudformation/home) 216 | - Select stack **AWS-App-Runner**. 217 | - In the stack details pane, choose *Delete*. 218 | - Select *Delete* stack when prompted. 219 | -------------------------------------------------------------------------------- /hello-app-runner/.dockerignore: -------------------------------------------------------------------------------- 1 | static/social.png 2 | static/banner_sample.png 3 | avatar.png 4 | __pycache__ 5 | -------------------------------------------------------------------------------- /hello-app-runner/.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: main 2 | 3 | on: 4 | push: 5 | branches: main 6 | 7 | jobs: 8 | login: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Check Out Repo 12 | uses: actions/checkout@v2 13 | 14 | - name: Set up Docker Buildx 15 | uses: docker/setup-buildx-action@v1 16 | 17 | - name: Login to Public ECR 18 | uses: docker/login-action@v1 19 | with: 20 | registry: public.ecr.aws 21 | username: ${{ secrets.AWS_ACCESS_KEY_ID }} 22 | password: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 23 | env: 24 | AWS_REGION: us-east-1 25 | 26 | - name: Build and push container 27 | uses: docker/build-push-action@v2 28 | with: 29 | context: . 30 | push: true 31 | tags: public.ecr.aws/aws-containers/hello-app-runner:latest 32 | -------------------------------------------------------------------------------- /hello-app-runner/.gitignore: -------------------------------------------------------------------------------- 1 | static/social.png 2 | avatar.png 3 | __pycache__ 4 | .vscode 5 | -------------------------------------------------------------------------------- /hello-app-runner/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM public.ecr.aws/amazonlinux/amazonlinux:2 2 | 3 | ENV PATH=/usr/local/bin:$PATH \ 4 | LC_ALL=C.UTF-8 \ 5 | LANG=C.UTF-8 \ 6 | WEB_CONCURRENCY=2 7 | 8 | EXPOSE 8000 9 | WORKDIR /srv 10 | COPY . /srv 11 | 12 | RUN yum update -y \ 13 | && amazon-linux-extras enable python3.8 \ 14 | && yum groupinstall -y "Development tools" \ 15 | && yum install -y \ 16 | python38-devel \ 17 | pycairo \ 18 | python38 \ 19 | libffi-devel \ 20 | && python3.8 -m pip install pip --upgrade \ 21 | && ln -s /usr/local/bin/pip3 /usr/bin/pip3 \ 22 | && ln -s /usr/bin/pydoc3.8 /usr/local/bin/pydoc \ 23 | && ln -s /usr/bin/python3.8 /usr/local/bin/python \ 24 | && ln -s /usr/bin/python3.8-config /usr/local/bin/python-config \ 25 | && yum -y clean all --enablerepo='*' \ 26 | && rm -rf /var/cache/yum 27 | 28 | RUN pip3 install -r requirements.txt 29 | 30 | CMD ["python", "./app.py"] 31 | -------------------------------------------------------------------------------- /hello-app-runner/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 4 | software and associated documentation files (the "Software"), to deal in the Software 5 | without restriction, including without limitation the rights to use, copy, modify, 6 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 7 | permit persons to whom the Software is furnished to do so. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 10 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 11 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 12 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 13 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 14 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /hello-app-runner/Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.org/simple" 3 | verify_ssl = true 4 | name = "pypi" 5 | 6 | [packages] 7 | py-avataaars = "*" 8 | pillow = "*" 9 | requests = "*" 10 | starlette = "*" 11 | uvicorn = "*" 12 | starlette-exporter = "*" 13 | 14 | [dev-packages] 15 | 16 | [requires] 17 | python_version = "3.8" 18 | -------------------------------------------------------------------------------- /hello-app-runner/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "041b0d469c4d74d20abb647cc097091aef20b489979703485ce14c5e01919d6a" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.8" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "cairocffi": { 20 | "hashes": [ 21 | "sha256:9a979b500c64c8179fec286f337e8fe644eca2f2cd05860ce0b62d25f22ea140" 22 | ], 23 | "markers": "python_version >= '3.6'", 24 | "version": "==1.2.0" 25 | }, 26 | "cairosvg": { 27 | "hashes": [ 28 | "sha256:98c276b7e4f0caf01e5c7176765c104ffa1aa1461d63b2053b04ab663cf7052b", 29 | "sha256:b0b9929cf5dba005178d746a8036fcf0025550f498ca54db61873322384783bc" 30 | ], 31 | "markers": "python_version >= '3.5'", 32 | "version": "==2.5.2" 33 | }, 34 | "certifi": { 35 | "hashes": [ 36 | "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", 37 | "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" 38 | ], 39 | "version": "==2020.12.5" 40 | }, 41 | "cffi": { 42 | "hashes": [ 43 | "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813", 44 | "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06", 45 | "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea", 46 | "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee", 47 | "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396", 48 | "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73", 49 | "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315", 50 | "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1", 51 | "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49", 52 | "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892", 53 | "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482", 54 | "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058", 55 | "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5", 56 | "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53", 57 | "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045", 58 | "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3", 59 | "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5", 60 | "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e", 61 | "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c", 62 | "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369", 63 | "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827", 64 | "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053", 65 | "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa", 66 | "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4", 67 | "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322", 68 | "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132", 69 | "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62", 70 | "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa", 71 | "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0", 72 | "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396", 73 | "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e", 74 | "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991", 75 | "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6", 76 | "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1", 77 | "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406", 78 | "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d", 79 | "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c" 80 | ], 81 | "version": "==1.14.5" 82 | }, 83 | "chardet": { 84 | "hashes": [ 85 | "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", 86 | "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5" 87 | ], 88 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 89 | "version": "==4.0.0" 90 | }, 91 | "click": { 92 | "hashes": [ 93 | "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", 94 | "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" 95 | ], 96 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 97 | "version": "==7.1.2" 98 | }, 99 | "cssselect2": { 100 | "hashes": [ 101 | "sha256:2f4a9f20965367bae459e3bb42561f7927e0cfe5b7ea1692757cf67ef5d7dace", 102 | "sha256:93fbb9af860e95dd40bf18c3b2b6ed99189a07c0f29ba76f9c5be71344664ec8" 103 | ], 104 | "markers": "python_version >= '3.6'", 105 | "version": "==0.4.1" 106 | }, 107 | "defusedxml": { 108 | "hashes": [ 109 | "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", 110 | "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" 111 | ], 112 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 113 | "version": "==0.7.1" 114 | }, 115 | "h11": { 116 | "hashes": [ 117 | "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6", 118 | "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042" 119 | ], 120 | "markers": "python_version >= '3.6'", 121 | "version": "==0.12.0" 122 | }, 123 | "idna": { 124 | "hashes": [ 125 | "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", 126 | "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" 127 | ], 128 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 129 | "version": "==2.10" 130 | }, 131 | "jinja2": { 132 | "hashes": [ 133 | "sha256:2f2de5285cf37f33d33ecd4a9080b75c87cd0c1994d5a9c6df17131ea1f049c6", 134 | "sha256:ea8d7dd814ce9df6de6a761ec7f1cac98afe305b8cdc4aaae4e114b8d8ce24c5" 135 | ], 136 | "markers": "python_version >= '3.6'", 137 | "version": "==3.0.0" 138 | }, 139 | "markupsafe": { 140 | "hashes": [ 141 | "sha256:007dc055dbce5b1104876acee177dbfd18757e19d562cd440182e1f492e96b95", 142 | "sha256:031bf79a27d1c42f69c276d6221172417b47cb4b31cdc73d362a9bf5a1889b9f", 143 | "sha256:161d575fa49395860b75da5135162481768b11208490d5a2143ae6785123e77d", 144 | "sha256:24bbc3507fb6dfff663af7900a631f2aca90d5a445f272db5fc84999fa5718bc", 145 | "sha256:2efaeb1baff547063bad2b2893a8f5e9c459c4624e1a96644bbba08910ae34e0", 146 | "sha256:32200f562daaab472921a11cbb63780f1654552ae49518196fc361ed8e12e901", 147 | "sha256:3261fae28155e5c8634dd7710635fe540a05b58f160cef7713c7700cb9980e66", 148 | "sha256:3b54a9c68995ef4164567e2cd1a5e16db5dac30b2a50c39c82db8d4afaf14f63", 149 | "sha256:3c352ff634e289061711608f5e474ec38dbaa21e3e168820d53d5f4015e5b91b", 150 | "sha256:3fb47f97f1d338b943126e90b79cad50d4fcfa0b80637b5a9f468941dbbd9ce5", 151 | "sha256:441ce2a8c17683d97e06447fcbccbdb057cbf587c78eb75ae43ea7858042fe2c", 152 | "sha256:45535241baa0fc0ba2a43961a1ac7562ca3257f46c4c3e9c0de38b722be41bd1", 153 | "sha256:4aca81a687975b35e3e80bcf9aa93fe10cd57fac37bf18b2314c186095f57e05", 154 | "sha256:4cc563836f13c57f1473bc02d1e01fc37bab70ad4ee6be297d58c1d66bc819bf", 155 | "sha256:4fae0677f712ee090721d8b17f412f1cbceefbf0dc180fe91bab3232f38b4527", 156 | "sha256:58bc9fce3e1557d463ef5cee05391a05745fd95ed660f23c1742c711712c0abb", 157 | "sha256:664832fb88b8162268928df233f4b12a144a0c78b01d38b81bdcf0fc96668ecb", 158 | "sha256:70820a1c96311e02449591cbdf5cd1c6a34d5194d5b55094ab725364375c9eb2", 159 | "sha256:79b2ae94fa991be023832e6bcc00f41dbc8e5fe9d997a02db965831402551730", 160 | "sha256:83cf0228b2f694dcdba1374d5312f2277269d798e65f40344964f642935feac1", 161 | "sha256:87de598edfa2230ff274c4de7fcf24c73ffd96208c8e1912d5d0fee459767d75", 162 | "sha256:8f806bfd0f218477d7c46a11d3e52dc7f5fdfaa981b18202b7dc84bbc287463b", 163 | "sha256:90053234a6479738fd40d155268af631c7fca33365f964f2208867da1349294b", 164 | "sha256:a00dce2d96587651ef4fa192c17e039e8cfab63087c67e7d263a5533c7dad715", 165 | "sha256:a08cd07d3c3c17cd33d9e66ea9dee8f8fc1c48e2d11bd88fd2dc515a602c709b", 166 | "sha256:a19d39b02a24d3082856a5b06490b714a9d4179321225bbf22809ff1e1887cc8", 167 | "sha256:d00a669e4a5bec3ee6dbeeeedd82a405ced19f8aeefb109a012ea88a45afff96", 168 | "sha256:dab0c685f21f4a6c95bfc2afd1e7eae0033b403dd3d8c1b6d13a652ada75b348", 169 | "sha256:df561f65049ed3556e5b52541669310e88713fdae2934845ec3606f283337958", 170 | "sha256:e4570d16f88c7f3032ed909dc9e905a17da14a1c4cfd92608e3fda4cb1208bbd", 171 | "sha256:e77e4b983e2441aff0c0d07ee711110c106b625f440292dfe02a2f60c8218bd6", 172 | "sha256:e79212d09fc0e224d20b43ad44bb0a0a3416d1e04cf6b45fed265114a5d43d20", 173 | "sha256:f58b5ba13a5689ca8317b98439fccfbcc673acaaf8241c1869ceea40f5d585bf", 174 | "sha256:fef86115fdad7ae774720d7103aa776144cf9b66673b4afa9bcaa7af990ed07b" 175 | ], 176 | "markers": "python_version >= '3.6'", 177 | "version": "==2.0.0" 178 | }, 179 | "pillow": { 180 | "hashes": [ 181 | "sha256:01425106e4e8cee195a411f729cff2a7d61813b0b11737c12bd5991f5f14bcd5", 182 | "sha256:031a6c88c77d08aab84fecc05c3cde8414cd6f8406f4d2b16fed1e97634cc8a4", 183 | "sha256:083781abd261bdabf090ad07bb69f8f5599943ddb539d64497ed021b2a67e5a9", 184 | "sha256:0d19d70ee7c2ba97631bae1e7d4725cdb2ecf238178096e8c82ee481e189168a", 185 | "sha256:0e04d61f0064b545b989126197930807c86bcbd4534d39168f4aa5fda39bb8f9", 186 | "sha256:12e5e7471f9b637762453da74e390e56cc43e486a88289995c1f4c1dc0bfe727", 187 | "sha256:22fd0f42ad15dfdde6c581347eaa4adb9a6fc4b865f90b23378aa7914895e120", 188 | "sha256:238c197fc275b475e87c1453b05b467d2d02c2915fdfdd4af126145ff2e4610c", 189 | "sha256:3b570f84a6161cf8865c4e08adf629441f56e32f180f7aa4ccbd2e0a5a02cba2", 190 | "sha256:463822e2f0d81459e113372a168f2ff59723e78528f91f0bd25680ac185cf797", 191 | "sha256:4d98abdd6b1e3bf1a1cbb14c3895226816e666749ac040c4e2554231068c639b", 192 | "sha256:5afe6b237a0b81bd54b53f835a153770802f164c5570bab5e005aad693dab87f", 193 | "sha256:5b70110acb39f3aff6b74cf09bb4169b167e2660dabc304c1e25b6555fa781ef", 194 | "sha256:5cbf3e3b1014dddc45496e8cf38b9f099c95a326275885199f427825c6522232", 195 | "sha256:624b977355cde8b065f6d51b98497d6cd5fbdd4f36405f7a8790e3376125e2bb", 196 | "sha256:63728564c1410d99e6d1ae8e3b810fe012bc440952168af0a2877e8ff5ab96b9", 197 | "sha256:66cc56579fd91f517290ab02c51e3a80f581aba45fd924fcdee01fa06e635812", 198 | "sha256:6c32cc3145928c4305d142ebec682419a6c0a8ce9e33db900027ddca1ec39178", 199 | "sha256:8bb1e155a74e1bfbacd84555ea62fa21c58e0b4e7e6b20e4447b8d07990ac78b", 200 | "sha256:95d5ef984eff897850f3a83883363da64aae1000e79cb3c321915468e8c6add5", 201 | "sha256:a013cbe25d20c2e0c4e85a9daf438f85121a4d0344ddc76e33fd7e3965d9af4b", 202 | "sha256:a787ab10d7bb5494e5f76536ac460741788f1fbce851068d73a87ca7c35fc3e1", 203 | "sha256:a7d5e9fad90eff8f6f6106d3b98b553a88b6f976e51fce287192a5d2d5363713", 204 | "sha256:aac00e4bc94d1b7813fe882c28990c1bc2f9d0e1aa765a5f2b516e8a6a16a9e4", 205 | "sha256:b91c36492a4bbb1ee855b7d16fe51379e5f96b85692dc8210831fbb24c43e484", 206 | "sha256:c03c07ed32c5324939b19e36ae5f75c660c81461e312a41aea30acdd46f93a7c", 207 | "sha256:c5236606e8570542ed424849f7852a0ff0bce2c4c8d0ba05cc202a5a9c97dee9", 208 | "sha256:c6b39294464b03457f9064e98c124e09008b35a62e3189d3513e5148611c9388", 209 | "sha256:cb7a09e173903541fa888ba010c345893cd9fc1b5891aaf060f6ca77b6a3722d", 210 | "sha256:d68cb92c408261f806b15923834203f024110a2e2872ecb0bd2a110f89d3c602", 211 | "sha256:dc38f57d8f20f06dd7c3161c59ca2c86893632623f33a42d592f097b00f720a9", 212 | "sha256:e98eca29a05913e82177b3ba3d198b1728e164869c613d76d0de4bde6768a50e", 213 | "sha256:f217c3954ce5fd88303fc0c317af55d5e0204106d86dea17eb8205700d47dec2" 214 | ], 215 | "index": "pypi", 216 | "version": "==8.2.0" 217 | }, 218 | "prometheus-client": { 219 | "hashes": [ 220 | "sha256:030e4f9df5f53db2292eec37c6255957eb76168c6f974e4176c711cf91ed34aa", 221 | "sha256:b6c5a9643e3545bcbfd9451766cbaa5d9c67e7303c7bc32c750b6fa70ecb107d" 222 | ], 223 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 224 | "version": "==0.10.1" 225 | }, 226 | "py-avataaars": { 227 | "hashes": [ 228 | "sha256:8f50e838f98bad406b16ae8754d4ae5f755123113f67760775f774a58a21ae77", 229 | "sha256:d0ac3892264e7fb1a8572a29617e0d9eadf6928f70faaadc5adcfac8e0877106" 230 | ], 231 | "index": "pypi", 232 | "version": "==1.1.2" 233 | }, 234 | "pycparser": { 235 | "hashes": [ 236 | "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", 237 | "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" 238 | ], 239 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", 240 | "version": "==2.20" 241 | }, 242 | "requests": { 243 | "hashes": [ 244 | "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", 245 | "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" 246 | ], 247 | "index": "pypi", 248 | "version": "==2.25.1" 249 | }, 250 | "starlette": { 251 | "hashes": [ 252 | "sha256:3c8e48e52736b3161e34c9f0e8153b4f32ec5d8995a3ee1d59410d92f75162ed", 253 | "sha256:7d49f4a27f8742262ef1470608c59ddbc66baf37c148e938c7038e6bc7a998aa" 254 | ], 255 | "index": "pypi", 256 | "version": "==0.14.2" 257 | }, 258 | "starlette-exporter": { 259 | "hashes": [ 260 | "sha256:042f23893bc586a986255e3adac1108bf86a8d1fd13ca4513d8475630596c165", 261 | "sha256:fff933db78c13caef62a5bcf23f852b563717927306162d66fb704ed7a841d0a" 262 | ], 263 | "index": "pypi", 264 | "version": "==0.8.1" 265 | }, 266 | "tinycss2": { 267 | "hashes": [ 268 | "sha256:0353b5234bcaee7b1ac7ca3dea7e02cd338a9f8dcbb8f2dcd32a5795ec1e5f9a", 269 | "sha256:fbdcac3044d60eb85fdb2aa840ece43cf7dbe798e373e6ee0be545d4d134e18a" 270 | ], 271 | "markers": "python_version >= '3.6'", 272 | "version": "==1.1.0" 273 | }, 274 | "urllib3": { 275 | "hashes": [ 276 | "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df", 277 | "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937" 278 | ], 279 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'", 280 | "version": "==1.26.4" 281 | }, 282 | "uvicorn": { 283 | "hashes": [ 284 | "sha256:3292251b3c7978e8e4a7868f4baf7f7f7bb7e40c759ecc125c37e99cdea34202", 285 | "sha256:7587f7b08bd1efd2b9bad809a3d333e972f1d11af8a5e52a9371ee3a5de71524" 286 | ], 287 | "index": "pypi", 288 | "version": "==0.13.4" 289 | }, 290 | "webencodings": { 291 | "hashes": [ 292 | "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", 293 | "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923" 294 | ], 295 | "version": "==0.5.1" 296 | } 297 | }, 298 | "develop": {} 299 | } 300 | -------------------------------------------------------------------------------- /hello-app-runner/README.md: -------------------------------------------------------------------------------- 1 | # Hello App Runner 2 | 3 | ![](/static/banner_sample.png) 4 | 5 | This is a example web service for [AWS App Runner](https://aws.amazon.com/apprunner/). 6 | You can use this repo to automatically build and deploy or use pre-built images at [ECR Public](https://gallery.ecr.aws/aws-containers/hello-app-runner). 7 | 8 | You can read about AWS App Runner in the [launch blog](https://aws.amazon.com/blogs/containers/introducing-aws-app-runner/) 9 | 10 | ## Deploy to App Runner 11 | 12 | If you want to deploy this container make sure you have the latest release of the [`awscli`](https://github.com/aws/aws-cli) and run 13 | 14 | ```bash 15 | SERVICE_NAME=hello-app-runner 16 | 17 | cat > hello-app-runner.json < 2 | 3 | Icon-Service/64/AWS-Fusion_64_White 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /hello-app-runner/static/background-mobile.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hello-app-runner/static/background.bak.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hello-app-runner/static/background.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hello-app-runner/static/banner.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hello-app-runner/static/banner_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/hello-app-runner/static/banner_sample.png -------------------------------------------------------------------------------- /hello-app-runner/static/banner_satellite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hello-app-runner/static/banner_stars.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hello-app-runner/static/docs_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | docs_icon_padding 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /hello-app-runner/static/external_link_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | external_link_icon 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /hello-app-runner/static/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Icon-Service/32/AWS-Fusion_32 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /hello-app-runner/static/fonts/open-sans-v18-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/hello-app-runner/static/fonts/open-sans-v18-latin-regular.eot -------------------------------------------------------------------------------- /hello-app-runner/static/fonts/open-sans-v18-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/hello-app-runner/static/fonts/open-sans-v18-latin-regular.ttf -------------------------------------------------------------------------------- /hello-app-runner/static/fonts/open-sans-v18-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/hello-app-runner/static/fonts/open-sans-v18-latin-regular.woff -------------------------------------------------------------------------------- /hello-app-runner/static/fonts/open-sans-v18-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/hello-app-runner/static/fonts/open-sans-v18-latin-regular.woff2 -------------------------------------------------------------------------------- /hello-app-runner/static/git_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | git_icon_padding 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /hello-app-runner/static/twitter_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | twitter_icon_padding 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /hello-app-runner/static/workshop_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | workshop_icon_padding 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /hello-app-runner/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% set request_url = request.url | string() %} 5 | {% if ( '0.0' in request_url or 'localhost' in request_url ) %} 6 | {% set full_url = request.url | string() %} 7 | {% else %} 8 | {% set full_url = request.url | replace("http:", "https:") | string() %} 9 | {% endif %} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | Hello AWS App Runner 30 | 176 | 177 | 178 | 179 |
180 | 183 | 184 |

And we're live!

185 | 195 |
196 |
197 |
198 | {% if ( '0.0' in full_url or 'localhost' in full_url ) %} 199 | 200 | {% else %} 201 | 202 | {% endif %} 203 |
204 |
205 | 206 |
207 |
208 | 209 |
210 |
211 |
212 |
213 | {% if ( '0.0' in full_url or 'localhost' in full_url ) %} 214 |

See the code

215 |

Check out the code to run this site in
AWS App Runner.

216 | Github 217 | {% else %} 218 |

Share on Twitter

219 |

A unique image has been generated for your service.
Share to see yours!

220 | Share 221 | {% endif %} 222 |
223 |
224 |

Learn more in the workshop

225 |

Deploy with automated CI/CD and additional examples.

226 | Learn more 227 |
228 |
229 |

Explore App Runner docs

230 |

Leverage App Runner for production services.

231 | Visit docs 232 |
233 |
234 |
235 |
236 | 237 | 238 | -------------------------------------------------------------------------------- /hello-app-runner/templates/index.txt: -------------------------------------------------------------------------------- 1 | 2 |    ______                             __        __      __  _                  __ 3 |   / ____/___  ____  ____ __________ _/ /___  __/ /___ _/ /_(_)___  ____  _____/ / 4 |  / /   / __ \/ __ \/ __ `/ ___/ __ `/ __/ / / / / __ `/ __/ / __ \/ __ \/ ___/ /  5 | / /___/ /_/ / / / / /_/ / /  / /_/ / /_/ /_/ / / /_/ / /_/ / /_/ / / / (__  )_/   6 | \____/\____/_/ /_/\__, /_/   \__,_/\__/\__,_/_/\__,_/\__/_/\____/_/ /_/____(_)    7 |                  /____/                                                           8 | {% set host_url = request.url | string() %} 9 | {% if ( '0.0' in host_url or 'localhost' in host_url ) %} 10 | This container is not running in AWS App Runner. 11 | Try one of the links below to find out how you can deploy it. 12 | {% else %} 13 | Congratulations, your service has successfully deployed on AWS App Runner. 14 | {% endif %} 15 | 16 | {% if ( '0.0' in host_url or 'localhost' in host_url ) %} 17 | Open it in your browser at {{host_url}} 18 | {% else %} 19 | Open it in your browser at {{host_url|replace('http:', 'https:')}} 20 | {% endif %} 21 | Try the workshop at https://apprunnerworkshop.com 22 | Read the docs at https://docs.aws.amazon.com/apprunner 23 | 24 | -------------------------------------------------------------------------------- /images/acknowledge-stack-capabilities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/acknowledge-stack-capabilities.png -------------------------------------------------------------------------------- /images/after-change.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/after-change.png -------------------------------------------------------------------------------- /images/alb-ingress-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/alb-ingress-controller.png -------------------------------------------------------------------------------- /images/before-change.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/before-change.png -------------------------------------------------------------------------------- /images/cloud9-terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/cloud9-terminal.png -------------------------------------------------------------------------------- /images/configure-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/configure-service.png -------------------------------------------------------------------------------- /images/configure-source-deployment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/configure-source-deployment.png -------------------------------------------------------------------------------- /images/create-cloud9-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/create-cloud9-stack.png -------------------------------------------------------------------------------- /images/disable-cloud9-credentials.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/disable-cloud9-credentials.png -------------------------------------------------------------------------------- /images/how_it_works.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/how_it_works.png -------------------------------------------------------------------------------- /images/locate-cloud9-instance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/locate-cloud9-instance.png -------------------------------------------------------------------------------- /images/service-create-service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/service-create-service.png -------------------------------------------------------------------------------- /images/set-instance-role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/set-instance-role.png -------------------------------------------------------------------------------- /images/source-deployment-final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/source-deployment-final.png -------------------------------------------------------------------------------- /images/stack-cloud9-output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/stack-cloud9-output.png -------------------------------------------------------------------------------- /images/transition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/transition.png -------------------------------------------------------------------------------- /images/v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/v1.png -------------------------------------------------------------------------------- /images/v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phonghuule/aws-app-runner/f68a5a30fadf378dad0c1d621589a81d79de36fc/images/v2.png -------------------------------------------------------------------------------- /setup/cloud9.yaml: -------------------------------------------------------------------------------- 1 | AWSTemplateFormatVersion: 2010-09-09 2 | Description: Create a Cloud9 environment and EC2 Admin role (create the stack in the AWS Console) 3 | 4 | Resources: 5 | AppRunnerCloud9: 6 | Type: AWS::Cloud9::EnvironmentEC2 7 | Properties: 8 | AutomaticStopTimeMinutes: 30 9 | Description: "AWS App Runner Workshop Cloud9 environment" 10 | InstanceType: t3.small 11 | AdminRole: 12 | Type: "AWS::IAM::Role" 13 | Properties: 14 | AssumeRolePolicyDocument: 15 | Version: "2012-10-17" 16 | Statement: 17 | - 18 | Effect: "Allow" 19 | Principal: 20 | Service: 21 | - "ec2.amazonaws.com" 22 | Action: 23 | - "sts:AssumeRole" 24 | Path: "/" 25 | RolePolicy: 26 | Type: "AWS::IAM::Policy" 27 | Properties: 28 | PolicyName: "Admin" 29 | PolicyDocument: 30 | Version: "2012-10-17" 31 | Statement: 32 | - 33 | Effect: "Allow" 34 | Action: "*" 35 | Resource: "*" 36 | Roles: 37 | - 38 | Ref: "AdminRole" 39 | AdminInstanceProfile: 40 | Type: "AWS::IAM::InstanceProfile" 41 | Properties: 42 | Path: "/" 43 | Roles: 44 | - 45 | Ref: "AdminRole" 46 | 47 | Outputs: 48 | InstanceProfile: 49 | Description: EC2 instance profile for the App Runner Cloud9 instance 50 | Value: !Ref "AdminInstanceProfile" 51 | Cloud9EnvironmentId: 52 | Description: Cloud 9 Environment ID 53 | Value: !Ref "AppRunnerCloud9" --------------------------------------------------------------------------------