FossilRepo

Deploy via SSM to EC2 instead of ECS

lmata 2026-04-07 05:57 trunk
Commit b7351515943e82e58d50a98a78230696a339747aada3cd8eb3fe03ef00af6c7e
1 file changed +14 -40
--- .github/workflows/deploy.yaml
+++ .github/workflows/deploy.yaml
@@ -9,13 +9,11 @@
99
- '*.md'
1010
1111
env:
1212
AWS_REGION: ${{ secrets.AWS_REGION }}
1313
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 }}
1715
1816
jobs:
1917
ci:
2018
uses: ./.github/workflows/ci.yaml
2119
@@ -48,42 +46,18 @@
4846
-t $ECR_REGISTRY/$ECR_REPO:latest \
4947
.
5048
docker push $ECR_REGISTRY/$ECR_REPO:$IMAGE_TAG
5149
docker push $ECR_REGISTRY/$ECR_REPO:latest
5250
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"
9064
--- .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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button