If you only need the result, run the following commands in AWS CloudShell with Docker support.
#
# Start AWS CloudShell
#
# 1. Create ECR repository
aws ecr create-repository --repository-name 'my-flask-app'
# 2. Create docker image
git clone https://github.com/stknohg/app-runner-flask-sample.git --depth 1
cd ./app-runner-flask-sample/
docker build -t my-flask-app .
# 3. Push docker image to ECR
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)
aws ecr get-login-password | docker login --username AWS --password-stdin "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com"
docker tag my-flask-app:latest "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/my-flask-app:latest"
docker push "$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/my-flask-app:latest"
# 4. Create App Runner service
aws cloudformation create-stack --stack-name my-flask-app --template-body file://./app-runner.yaml --capabilities CAPABILITY_NAMED_IAM
# Bash
export FLASK_APP="./app/app.py"
export AWS_PROFILE="<your AWS profile>"
export POSTGRES_URL="<your PostgreSQL connection URL>"
flask run --host=0.0.0.0 --port=5000 --debug
# Bash
docker build -t my-flask-app .
# Bash
docker run -it -p 5000:5000 --rm my-flask-app
# Bash
export AWS_PROFILE="<your AWS profile>"
aws ecr create-repository --repository-name 'my-flask-app'
# Bash
export AWS_PROFILE="<your AWS profile>"
accountId=$(aws sts get-caller-identity --query 'Account' --output text)
region=$(aws ec2 describe-availability-zones --output text --query 'AvailabilityZones[0].[RegionName]')
# docker login
aws ecr get-login-password --region $region | docker login --username AWS --password-stdin "$accountId.dkr.ecr.$region.amazonaws.com"
# docker tag and push
docker tag my-flask-app:latest "$accountId.dkr.ecr.$region.amazonaws.com/my-flask-app:latest"
docker push "$accountId.dkr.ecr.$region.amazonaws.com/my-flask-app:latest"
Use CloudFormation stack app-runner.yaml.
# Bash
export AWS_PROFILE="<your AWS profile>"
aws cloudformation create-stack --stack-name my-flask-app \
--template-body file://./app-runner.yaml \
--capabilities CAPABILITY_NAMED_IAM
# Bash
export service_name='my-flask-app'
service_arn=$(aws apprunner list-services --query "ServiceSummaryList[?ServiceName==\`$service_name\`].ServiceArn" --output text)
aws apprunner start-deployment --service-arn $service_arn