Traffine I/O

Bahasa Indonesia

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.

https://github.com/aws-actions/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

https://github.com/aws-actions/amazon-ecs-deploy-task-definition

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!