FossilRepo
Deploy via SSM to EC2 instead of ECS
Commit
b7351515943e82e58d50a98a78230696a339747aada3cd8eb3fe03ef00af6c7e
Parent
7de9c1146785aa7…
1 file changed
+14
-40
+14
-40
| --- .github/workflows/deploy.yaml | ||
| +++ .github/workflows/deploy.yaml | ||
| @@ -9,13 +9,11 @@ | ||
| 9 | 9 | - '*.md' |
| 10 | 10 | |
| 11 | 11 | env: |
| 12 | 12 | AWS_REGION: ${{ secrets.AWS_REGION }} |
| 13 | 13 | ECR_REPO: fossilrepo |
| 14 | - ECS_CLUSTER: dev-fossilrepo | |
| 15 | - ECS_SERVICE: dev-fossilrepo-app | |
| 16 | - TASK_FAMILY: dev-fossilrepo-app | |
| 14 | + INSTANCE_ID: ${{ secrets.EC2_INSTANCE_ID }} | |
| 17 | 15 | |
| 18 | 16 | jobs: |
| 19 | 17 | ci: |
| 20 | 18 | uses: ./.github/workflows/ci.yaml |
| 21 | 19 | |
| @@ -48,42 +46,18 @@ | ||
| 48 | 46 | -t $ECR_REGISTRY/$ECR_REPO:latest \ |
| 49 | 47 | . |
| 50 | 48 | docker push $ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG |
| 51 | 49 | docker push $ECR_REGISTRY/$ECR_REPO:latest |
| 52 | 50 | |
| 53 | - - name: Deploy to ECS | |
| 54 | - env: | |
| 55 | - ECR_REGISTRY: ${{ steps.ecr.outputs.registry }} | |
| 56 | - IMAGE_TAG: ${{ github.sha }} | |
| 57 | - run: | | |
| 58 | - TASK_DEF=$(aws ecs describe-task-definition \ | |
| 59 | - --task-definition $TASK_FAMILY \ | |
| 60 | - --query 'taskDefinition' \ | |
| 61 | - --output json) | |
| 62 | - | |
| 63 | - NEW_TASK_DEF=$(echo "$TASK_DEF" | jq \ | |
| 64 | - --arg IMAGE "$ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG" \ | |
| 65 | - '.containerDefinitions[0].image = $IMAGE | | |
| 66 | - del(.taskDefinitionArn, .revision, .status, | |
| 67 | - .requiresAttributes, .compatibilities, | |
| 68 | - .registeredAt, .registeredBy, .deregisteredAt)') | |
| 69 | - | |
| 70 | - NEW_TASK_ARN=$(aws ecs register-task-definition \ | |
| 71 | - --cli-input-json "$NEW_TASK_DEF" \ | |
| 72 | - --query 'taskDefinition.taskDefinitionArn' \ | |
| 73 | - --output text) | |
| 74 | - | |
| 75 | - aws ecs update-service \ | |
| 76 | - --cluster $ECS_CLUSTER \ | |
| 77 | - --service $ECS_SERVICE \ | |
| 78 | - --task-definition "$NEW_TASK_ARN" \ | |
| 79 | - --force-new-deployment | |
| 80 | - | |
| 81 | - echo "Deployed $NEW_TASK_ARN to $ECS_SERVICE" | |
| 82 | - | |
| 83 | - - name: Wait for deployment to stabilize | |
| 84 | - run: | | |
| 85 | - echo "Waiting for ECS service to reach steady state..." | |
| 86 | - aws ecs wait services-stable \ | |
| 87 | - --cluster $ECS_CLUSTER \ | |
| 88 | - --services $ECS_SERVICE | |
| 89 | - echo "Deployment stable." | |
| 51 | + - name: Deploy to EC2 via SSM | |
| 52 | + run: | | |
| 53 | + aws ssm send-command \ | |
| 54 | + --instance-ids "$INSTANCE_ID" \ | |
| 55 | + --document-name "AWS-RunShellScript" \ | |
| 56 | + --parameters 'commands=[ | |
| 57 | + "aws ecr get-login-password --region '${{ env.AWS_REGION }}' | docker login --username AWS --password-stdin '${{ steps.ecr.outputs.registry }}'", | |
| 58 | + "cd /opt/fossilrepo && docker compose pull app && docker compose up -d app", | |
| 59 | + "sleep 10 && docker compose exec -T app python manage.py migrate --noinput" | |
| 60 | + ]' \ | |
| 61 | + --timeout-seconds 300 \ | |
| 62 | + --output text | |
| 63 | + echo "Deploy command sent to $INSTANCE_ID" | |
| 90 | 64 |
| --- .github/workflows/deploy.yaml | |
| +++ .github/workflows/deploy.yaml | |
| @@ -9,13 +9,11 @@ | |
| 9 | - '*.md' |
| 10 | |
| 11 | env: |
| 12 | AWS_REGION: ${{ secrets.AWS_REGION }} |
| 13 | ECR_REPO: fossilrepo |
| 14 | ECS_CLUSTER: dev-fossilrepo |
| 15 | ECS_SERVICE: dev-fossilrepo-app |
| 16 | TASK_FAMILY: dev-fossilrepo-app |
| 17 | |
| 18 | jobs: |
| 19 | ci: |
| 20 | uses: ./.github/workflows/ci.yaml |
| 21 | |
| @@ -48,42 +46,18 @@ | |
| 48 | -t $ECR_REGISTRY/$ECR_REPO:latest \ |
| 49 | . |
| 50 | docker push $ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG |
| 51 | docker push $ECR_REGISTRY/$ECR_REPO:latest |
| 52 | |
| 53 | - name: Deploy to ECS |
| 54 | env: |
| 55 | ECR_REGISTRY: ${{ steps.ecr.outputs.registry }} |
| 56 | IMAGE_TAG: ${{ github.sha }} |
| 57 | run: | |
| 58 | TASK_DEF=$(aws ecs describe-task-definition \ |
| 59 | --task-definition $TASK_FAMILY \ |
| 60 | --query 'taskDefinition' \ |
| 61 | --output json) |
| 62 | |
| 63 | NEW_TASK_DEF=$(echo "$TASK_DEF" | jq \ |
| 64 | --arg IMAGE "$ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG" \ |
| 65 | '.containerDefinitions[0].image = $IMAGE | |
| 66 | del(.taskDefinitionArn, .revision, .status, |
| 67 | .requiresAttributes, .compatibilities, |
| 68 | .registeredAt, .registeredBy, .deregisteredAt)') |
| 69 | |
| 70 | NEW_TASK_ARN=$(aws ecs register-task-definition \ |
| 71 | --cli-input-json "$NEW_TASK_DEF" \ |
| 72 | --query 'taskDefinition.taskDefinitionArn' \ |
| 73 | --output text) |
| 74 | |
| 75 | aws ecs update-service \ |
| 76 | --cluster $ECS_CLUSTER \ |
| 77 | --service $ECS_SERVICE \ |
| 78 | --task-definition "$NEW_TASK_ARN" \ |
| 79 | --force-new-deployment |
| 80 | |
| 81 | echo "Deployed $NEW_TASK_ARN to $ECS_SERVICE" |
| 82 | |
| 83 | - name: Wait for deployment to stabilize |
| 84 | run: | |
| 85 | echo "Waiting for ECS service to reach steady state..." |
| 86 | aws ecs wait services-stable \ |
| 87 | --cluster $ECS_CLUSTER \ |
| 88 | --services $ECS_SERVICE |
| 89 | echo "Deployment stable." |
| 90 |
| --- .github/workflows/deploy.yaml | |
| +++ .github/workflows/deploy.yaml | |
| @@ -9,13 +9,11 @@ | |
| 9 | - '*.md' |
| 10 | |
| 11 | env: |
| 12 | AWS_REGION: ${{ secrets.AWS_REGION }} |
| 13 | ECR_REPO: fossilrepo |
| 14 | INSTANCE_ID: ${{ secrets.EC2_INSTANCE_ID }} |
| 15 | |
| 16 | jobs: |
| 17 | ci: |
| 18 | uses: ./.github/workflows/ci.yaml |
| 19 | |
| @@ -48,42 +46,18 @@ | |
| 46 | -t $ECR_REGISTRY/$ECR_REPO:latest \ |
| 47 | . |
| 48 | docker push $ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG |
| 49 | docker push $ECR_REGISTRY/$ECR_REPO:latest |
| 50 | |
| 51 | - name: Deploy to EC2 via SSM |
| 52 | run: | |
| 53 | aws ssm send-command \ |
| 54 | --instance-ids "$INSTANCE_ID" \ |
| 55 | --document-name "AWS-RunShellScript" \ |
| 56 | --parameters 'commands=[ |
| 57 | "aws ecr get-login-password --region '${{ env.AWS_REGION }}' | docker login --username AWS --password-stdin '${{ steps.ecr.outputs.registry }}'", |
| 58 | "cd /opt/fossilrepo && docker compose pull app && docker compose up -d app", |
| 59 | "sleep 10 && docker compose exec -T app python manage.py migrate --noinput" |
| 60 | ]' \ |
| 61 | --timeout-seconds 300 \ |
| 62 | --output text |
| 63 | echo "Deploy command sent to $INSTANCE_ID" |
| 64 |