Blog AWS Indonesia
Blue/Green Deployment dengan Amazon ECS Menggunakan Amazon CodeCatalyst
Amazon CodeCatalyst adalah layanan pengembangan software modern yang memberdayakan tim untuk deliver software di AWS dengan mudah dan cepat. Amazon CodeCatalyst menyediakan satu tempat di mana Anda dapat melakukan plan, build, test serta mendeploy aplikasi container Anda dengan continuous integration/continuous delivery (CI/CD).
Dalam posting ini, kita akan membahas bagaimana Anda dapat mengkonfigurasi Blue/Green deployment dan canary untuk workload container Anda di dalam Amazon CodeCatalyst.
Prasyarat
Untuk mengikuti panduan ini, Anda memerlukan:
- Akun AWS. Jika Anda belum memiliki akun AWS, Anda dapat membuat akun AWS baru.
- Layanan Amazon Elastic Container Service (Amazon ECS) menggunakan tipe Blue/Green deployment. Jika Anda belum memilikinya, ikuti tutorial Amazon ECS dan selesaikan langkah 1-5.
- Repository Amazon Elastic Container Registry (Amazon ECR) bernama
codecatalyst-ecs-image-repo
. Ikuti Amazon ECR user guide untuk membuat repository. - Sebuah Space Amazon CodeCatalyst, dengan project Amazon CodeCatalyst kosong bernama
codecatalyst-ecs-project
dan environment Amazon CodeCatalyst bernamacodecatalyst-ecs-environment
. Ikuti tutorial Amazon CodeCatalyst untuk menyiapkan ini. - Ikuti Amazon CodeCatalyst user guide untuk menghubungkan akun Anda ke environment tersebut.
Panduan
Sekarang setelah Anda telah menyiapkan cluster Amazon ECS dan mengkonfigurasi Amazon CodeCatalyst untuk melakukan deployment, Anda dapat mengkonfigurasi Blue/Green deployment untuk workload Anda. Berikut ini adalah langkah-langkah garis besarnya:
- Kumpulkan detail environment Amazon ECS yang telah Anda buat pada langkah prasyarat.
- Tambahkan source file untuk aplikasi contanainer ke Amazon CodeCatalyst.
- Buat Amazon CodeCatalyst Workflow.
- Validasi pengaturan.
Langkah 1: Kumpulkan detail dari Amazon ECS dan Amazon CodeCatalyst role
Pada langkah ini, Anda akan mengumpulkan informasi dari prasyarat yang akan digunakan untuk konfigurasi Blue/Green deployment Amazon CodeCatalyst pada keseluruhan posting ini.
Jika Anda mengikuti tutorial pada langkah Prasyarat, berikut adalah perintah AWS CLI untuk mengekstrak nilai yang akan digunakan pada posting ini. Anda dapat menjalankan ini pada mesin lokal Anda atau melalui AWS CloudShell di region yang sama dimana Anda membuat Amazon ECS cluster.
Langkah 2: Tambahkan Amazon IAM Role ke Amazon CodeCatalyst
Pada langkah ini, Anda akan membuat sebuah role dengan nama CodeCatalystWorkflowDevelopmentRole-spacename untuk memberikan Amazon CodeCatalyst permission untuk melakukan build dan deploy aplikasi. Role ini hanya direkomendasikan untuk penggunaan akun development dan role ini menggunakan AWS managed policy bernama AdministratorAccess, yang memberikan full akses untuk membuat resource dan policy pada akun AWS ini.
- Pada Amazon CodeCatalyst, masuk ke space Anda. Pilih tab Settings.
- Pada halaman Navigasi, pilih AWS accounts. Akan muncul daftar koneksi akun. Pilih akun yang dimana Anda telah membuatkan role build dan deploy.
- Pilih Manage roles from AWS management console.
- Akan muncul halaman Add IAM role to Amazon CodeCatalyst space. Anda mungkin butuh untuk sign in untuk mengaksesnya.
- Pilih Create CodeCatalyst development administrator role in IAM. Pilihan ini akan membuat service role yang memiliki permission policy dan trust policy untuk development role.
- Catat nama role tersebut. Pilih Create development role.
Langkah 3: Buat repository Amazon CodeCatalyst
Pada langkah ini, Anda akan membuat sebuah repository pada CodeCatalyst. Repository ini akan menyimpan file-file tutorial, seperti file task definition.
- Pada Amazon CodeCatalyst, masuk ke project Anda.
- Pada bagian navigasi, pilih Code, kemudian pilih Source repositories.
- Pilih Add repository, kemudian pilih Create repository.
- Pada Repository name, masukkan:
codecatalyst-advanced-deployment
- Pilih Create.
Langkah 4: Membuat Dev Environment Amazon CodeCatalyst
Pada langkah ini, Anda akan membuat sebuah Amazon CodeCatalyst Dev environment untuk mulai bekerja pada contoh kode aplikasi dan konfigurasi yang ada di repository codecatalyst-advanced-deployment. Pelajari lebih lanjut tentang Amazon CodeCatalyst dev environment di Amazon CodeCatalyst user guide.
- Pada Amazon CodeCatalyst, masuk ke project Anda.
- Pada bagian navigasi, pilih Code, kemudian pilih Source repositories.
- Pilih source repository yang ingin Anda buat untuk environment dev.
- Pilih Create Dev Environment.
- Pilih AWS Cloud9 dari drop-down menu.
- Pada halaman Create Dev Environment and open with AWS Cloud9 (gambar 1), pilih Create untuk membuat Cloud9 development environment.
AWS Cloud9 akan membuka browser tab baru. Tetap pada window AWS Cloud9 untuk melanjutkan ke Langkah 5.
Langkah 5: Menambahkan file ke repository Amazon CodeCatalyst
Pada langkah ini, Anda akan menambahkan file dari contoh aplikasi di GitHub ke repository Amazon CodeCatalyst. Anda akan menggunakan aplikasi ini untuk mengkonfigurasi dan tes blue/green deployment.
- Pada menu bar di bagian atas AWS Cloud9 IDE, pilih Window, New Terminal atau gunakan terminal window yang sudah ada.
- Download project GitHub sebagai zip file, ekstrak dan pindahkan ke folder project Anda dengan menjalankan perintah berikut:
- Update file task definition pada aplikasi contoh. Buka task.json pada direktori aktif. Temukan dan ganti
<arn:aws:iam::<account_ID>:role/AppRole>
dengan nilai yang didapat dari Langkah 1:<TaskExecutionRoleArn>
. - Amazon CodeCatalyst dapat bekerja dengan AWS CodeDeploy untuk melakukan Blue/Green deployment pada Amazon ECS. Buat sebuah file Application Specification, yang akan digunakan oleh CodeDeploy untuk memanage deployment. Buat sebuah file bernama
appsec.yaml
didalam direktoricodecatalyst-advanced-deployment
. Update <TaskDefinitionArn> dengan nilai yang didapat dari Langkah 1.
version: 0.0
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: "<TaskDefinitionArn>"
LoadBalancerInfo:
ContainerName: "MyContainer"
ContainerPort: 80
PlatformVersion: "LATEST"
- Commit perubahan ke repository Amazon CodeCatalyst dengan mengikuti perintah berikut. Update <your_name> dan <your_email> dengan nama dan email Anda.
Langkah 6: Buat Workflow Amazon CodeCatalyst
Pada langkah ini, Anda akan membuat workflow Amazon CodeCatalyst yang akan menjalankan proses build pada source code ketika ada perubahan. Sebuah workflow adalah prosedur otomatis yang mendeskripsikan bagaimana proses build, test dan deploy dari kode Anda sebagai bagian dari continuous integration dan continuous delivery (CI/CD).
- Pada bagian navigasi, pilih CI/CD kemudian pilih Workflows.
- Pilih Create workflow. Pilih
codecatalyst-advanced-deployment
dari Source repository dropdown. - Pilih main pada branch. Pilih Create (Gambar 2). File workflow definition akan muncul di YAML editor Amazon CodeCatalyst.
- Update workflow tersebut dengan mengganti isi pada YAML editor dengan kode dibawah. Ganti <Account_ID> dengan ID akun AWS Anda. Ganti <EcsRegionName>, <EcsClusterArn>, <EcsServiceName> dengan nilai yang didapat dari Langkah 1. Ganti <CodeCatalyst-Dev-Admin-Role> dengan yang didapat dari Langkah 3.
Name: BuildAndDeployToECS
SchemaVersion: "1.0"
# Set automatic triggers on code push.
Triggers:
- Type: Push
Branches:
- main
Actions:
Build_application:
Identifier: aws/build@v1
Inputs:
Sources:
- WorkflowSource
Variables:
- Name: region
Value: <EcsRegionName>
- Name: registry
Value: <Account_ID>.dkr.ecr.<EcsRegionName>.amazonaws.com
- Name: image
Value: codecatalyst-ecs-image-repo
Outputs:
AutoDiscoverReports:
Enabled: false
Variables:
- IMAGE
Compute:
Type: EC2
Environment:
Connections:
- Role: <CodeCatalystPreviewDevelopmentAdministrator role>
Name: "<Account_ID>"
Name: codecatalyst-ecs-environment
Configuration:
Steps:
- Run: export account=`aws sts get-caller-identity --output text | awk '{ print $1 }'`
- Run: aws ecr get-login-password --region ${region} | docker login --username AWS --password-stdin ${registry}
- Run: docker build -t appimage .
- Run: docker tag appimage ${registry}/${image}:${WorkflowSource.CommitId}
- Run: docker push --all-tags ${registry}/${image}
- Run: export IMAGE=${registry}/${image}:${WorkflowSource.CommitId}
RenderAmazonECStaskdefinition:
Identifier: aws/ecs-render-task-definition@v1
Configuration:
image: ${Build_application.IMAGE}
container-name: MyContainer
task-definition: task.json
Outputs:
Artifacts:
- Name: TaskDefinition
Files:
- task-definition*
DependsOn:
- Build_application
Inputs:
Sources:
- WorkflowSource
DeploytoAmazonECS:
Identifier: aws/ecs-deploy@v1
Configuration:
task-definition: /artifacts/DeploytoAmazonECS/TaskDefinition/${RenderAmazonECStaskdefinition.task-definition}
service: <EcsServiceName>
cluster: <EcsClusterArn>
region: <EcsRegionName>
codedeploy-appspec: appspec.yaml
codedeploy-application: tutorial-bluegreen-app
codedeploy-deployment-group: tutorial-bluegreen-dg
codedeploy-deployment-description: "Blue-green deployment for sample app"
Compute:
Type: EC2
Fleet: Linux.x86-64.Large
Environment:
Connections:
- Role: <CodeCatalyst-Dev-Admin-Role>
# Add account id within quotes. Eg: "12345678"
Name: "<Account_ID>"
Name: codecatalyst-ecs-environment
DependsOn:
- RenderAmazonECStaskdefinition
Inputs:
Artifacts:
- TaskDefinition
Sources:
- WorkflowSource
Workflow diatas melakukan hal berikut:
- Ketika terjadi perubahan kode yang di-push ke repository, Build action akan dijalankan. Build action akan melakukan build container image dan melakukan push image ke repository Amazon ECR yang dibuat pada Langkah 1.
- Ketika stage Build selesai, task definition dari Amazon ECS diupdate dengan menunjuk pada image terbaru pada repository Amazon ECR.
- DeploytoECS action akan melakukan deploy image ke Amazon ECS menggunakan pendekatan Blue/Green.
Untuk memastikan semua dikonfigurasi dengan benar, tekan tombol Validate. Itu akan menampilkan sebuah banner hijau diatas dengan tulisan The workflow definition is valid.
Pilih Commit untuk menambahkan workflow ke repository (Gambar 3).
Workflow file diletakkan di root folder ~/.codecatalyst/workflows/
dari source repository Anda. File ini dapat berupa ekstensi .yml atau .yaml.
Mari mereview langkah kita, paste URL load balancer yang dibuat dilangkah Prasyarat pada browser. Anda harusnya melihat halaman yang mirip seperti (Gambar 4).
Langkah 7: Validasi pengaturan
Untuk memvalidasi, Anda perlu membuat perubahan kecil pada contoh aplikasi.
- Buka Amazon CodeCatalyst dev environment yang Anda buat pada Langkah 4.
- Update salinan repository local Anda. Pada terminal jalankan perintah berikut.
Pada terminal, navigasi ke folder /templates
. Buka index.html dan cari tulisan “Las Vegas”. Ganti dengan “New York”. Simpan file tersebut.
Commit perubahan pada repository dengan perintah berikut.
Setelah perubahan di-commit, workflow harusnya berjalan secara otomatis. Anda dapat memonitor workflow yang berjalan pada Amazon CodeCatalyst console (Gambar 5).
Anda juga dapat melihat status deployment pada halaman AWS CodeDeploy (Gambar 6)
- Kembali ke halaman AWS console
- Pada bagian search bar, ketikkan “CodeDeploy”.
- Pada menu bagian kiri, pilih Deployments.
Mari kita review update yang dilakukan, paste load balancer URL yang dibuat pada bagian prasyarat. Halaman harusnya akan terlihat seperti gambar 7.
Pembersihan
Jika Anda mengikuti alur diposting ini, maka Anda harusnya menghapus resource-resource yang dideploy sehingga Anda tidak dikenai biaya.
- Hapus layanan di Amazon ECS dan Amazon ECS cluster menggunakan console AWS.
- Secara manual hapus dev environment, repository dan project Anda dari Amazon CodeCatalyst.
- Hapus aplikasi di AWS CodeDeploy menggunakan console atau CLI.
Kesimpulan
Pada posting ini, kita telah mendemonstrasikan bagaimana Anda dapat mengkonfigurasi Blue/Green deployment untuk workload container menggunakan workflow Amazon CodeCatalyst. Pendekatan yang sama dapat dilakukan untuk melakukan Canary deployment. Pelajari lebih lanjut tentang konfigurasi AWS CodeDeploy lebih dalam untuk deployment container di AWS CodeDeploy user guide.
Artikel ini diterjemahkan dari artikel asli dengan judul “Blue/Green Deployments with Amazon ECS using Amazon CodeCatalyst” yang ditulis oleh William Cardoso, Piyush Mattoo dan Hareesh Iyer.