Skip to content

Deploy to Amazon ECS #59

Deploy to Amazon ECS

Deploy to Amazon ECS #59

Workflow file for this run

name: Deploy to Amazon ECS
on:
push:
branches:
- main
env:
AWS_REGION: eu-central-1
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
role-to-assume: arn:aws:iam::${{ secrets.AWS_ROLE_ID }}:role/roleAdmin
role-skip-session-tagging: true
role-duration-seconds: 14400
- name: Use default docker context
run: |
docker context use default
shell: bash
- name: Checkout latest repo
uses: actions/checkout@master
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Set environment variables
run: |
echo "REGISTRY=${{ steps.login-ecr.outputs.registry }}" >> $GITHUB_ENV
echo "AWS_ROLE_ID=${{ secrets.AWS_ROLE_ID }}" >> $GITHUB_ENV
echo "MAL_API_URL=${{ secrets.MAL_API_URL }}" >> $GITHUB_ENV
echo "SQLALCHEMY_DATABASE_URI_PROD=${{ secrets.SQLALCHEMY_DATABASE_URI_PROD }}" >> $GITHUB_ENV
echo "X_MAL_CLIENT_ID=${{ secrets.X_MAL_CLIENT_ID }}" >> $GITHUB_ENV
echo "REACT_APP_API_URL=${{ secrets.REACT_APP_API_URL }}" >> $GITHUB_ENV
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
docker compose -f docker-compose.yml pull --ignore-pull-failures --include-deps
# Build
docker compose -f docker-compose.yml build
# Tag and push the backend image
docker tag anime-recommender-flask-backend:latest ${ECR_REGISTRY}/anime-recommender-backend:${IMAGE_TAG}
docker push ${ECR_REGISTRY}/anime-recommender-backend:${IMAGE_TAG}
# Tag and push the frontend image
docker tag anime-recommender-frontend:latest ${ECR_REGISTRY}/anime-recommender-frontend:${IMAGE_TAG}
docker push ${ECR_REGISTRY}/anime-recommender-frontend:${IMAGE_TAG}
- name: Prepare task definition
run: |
sed -e "s|<IMAGE>|${{ steps.login-ecr.outputs.registry }}/anime-recommender-backend:${{ github.sha }}|;s|<EXECUTION_ROLE_ARN>|arn:aws:iam::${{ secrets.AWS_ROLE_ID }}:role/roleAdmin|;s|<TASK_ROLE_ARN>|arn:aws:iam::${{ secrets.AWS_ROLE_ID }}:role/roleAdmin|" flask-backend/task-definition-template.json > .github/workflows/backend-task-definition.json
sed -e "s|<IMAGE>|${{ steps.login-ecr.outputs.registry }}/anime-recommender-frontend:${{ github.sha }}|;s|<EXECUTION_ROLE_ARN>|arn:aws:iam::${{ secrets.AWS_ROLE_ID }}:role/roleAdmin|;s|<TASK_ROLE_ARN>|arn:aws:iam::${{ secrets.AWS_ROLE_ID }}:role/roleAdmin|" frontend/task-definition-template.json > .github/workflows/frontend-task-definition.json
- name: Deploy Backend to Amazon ECS
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: .github/workflows/backend-task-definition.json
service: backend
cluster: anime-recommender
- name: Deploy Frontend to Amazon ECS
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: .github/workflows/frontend-task-definition.json
service: frontend
cluster: anime-recommender