2022-12-03
Menghilangkan Manajemen Ganda Definisi Task ECS dalam Terraform dan GitHub Actions
Masalah Manajemen Ganda Definisi Task ECS dalam Terraform dan GitHub Actions
Dalam konfigurasi yang umum, definisi task ECS dikelola di dua tempat:
- Saat membuat resource ECS menggunakan Terraform
- Saat menyiapkan alur kerja CI/CD menggunakan GitHub Actions
Dua pengelolaan ini dapat menyebabkan kompleksitas dalam pengelolaan dan potensi ketidaksesuaian definisi task di Terraform dan GitHub, yang menimbulkan tantangan bagi tim yang mengelola proses-proses ini.
Mengimplementasikan CI/CD dengan GitHub Actions
Untuk penyebaran ECS, file task-definition.json
ditempatkan di repositori dan diacu dalam alur kerja GitHub Actions.
Potongan kode berikut adalah implementasi umum di mana GitHub Actions menggunakan task-definition.json
untuk merender definisi task Amazon ECS, kemudian menyalinnya ke layanan Amazon ECS:
.
.
.
- name: Render Amazon ECS task definition
id: render-container
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: container_name
image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/repo:latest
- name: Deploy to Amazon ECS service
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.render-container.outputs.task-definition }}
service: sample-service
cluster: sample-cluster
Konfigurasi ini menjadi dasar dari masalah pengelolaan ganda, di mana definisi task dikelola baik di Terraform maupun di GitHub Actions, menyebabkan potensi kesulitan dan ketidaksesuaian.
Pendekatan Solusi
Solusi untuk masalah ini diusulkan dalam dokumentasi AWS untuk GitHub Action amazon-ecs-deploy-task-definition
.
If you do not wish to store your task definition as a file in your git repository, your GitHub Actions workflow can download the existing task definition.
Definisi task tidak perlu disimpan sebagai file di repositori Git. Sebaliknya, definisi task yang ada dapat diunduh langsung dari AWS ECS menggunakan AWS CLI dalam alur kerja GitHub Actions:
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition my-task-definition-family --query taskDefinition > task-definition.json
Modifikasi dalam GitHub Actions
Akibatnya, modifikasi dalam GitHub Actions akan terlihat seperti ini:
.
.
.
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition sample-definition --query taskDefinition > task-definition.json
- name: Deploy to Amazon ECS service
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: task-definition.json
service: sample-service
cluster: sample-cluster
Dengan perubahan ini, pengelolaan definisi task menjadi lebih sederhana. Anda tidak perlu lagi mengelola file task-definition.json
di repositori GitHub. Definisi task sekarang dapat dikelola sepenuhnya melalui Terraform, menghilangkan risiko ketidaksesuaian definisi antara Terraform dan GitHub.
Referensi