Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyebarkan layanan Amazon ECS menggunakan penerapan biru/hijau
Pelajari cara membuat layanan Amazon ECS yang berisi tugas Fargate yang menggunakan jenis blue/green penerapan dengan. AWS CLI
catatan
Support untuk melakukan blue/green penerapan telah ditambahkan untuk AWS CloudFormation. Untuk informasi selengkapnya, lihat Menjalankan penerapan biru/hijau Amazon ECS melalui CodeDeploy penggunaan AWS CloudFormation di Panduan Pengguna.AWS CloudFormation
Prasyarat
Tutorial ini mengasumsikan bahwa Anda telah menyelesaikan prasyarat berikut:
-
Versi terbaru diinstal dan dikonfigurasi. AWS CLI Untuk informasi selengkapnya tentang menginstal atau memutakhirkan AWS CLI, lihat Menginstal atau memperbarui ke versi terbaru. AWS CLI
catatan
Anda dapat menggunakan titik akhir layanan dual-stack untuk berinteraksi dengan Amazon ECS dari AWS CLI, SDKs dan Amazon ECS API melalui keduanya dan. IPv4 IPv6 Untuk informasi selengkapnya, lihat Menggunakan titik akhir tumpukan ganda Amazon ECS.
-
Langkah-langkah di Siapkan untuk menggunakan Amazon ECS telah diselesaikan.
-
Pengguna IAM Anda memiliki izin yang diperlukan yang ditentukan dalam contoh kebijakan Amazonecs_ FullAccess IAM.
-
Anda memiliki VPC dan grup keamanan yang dibuat untuk digunakan. Untuk informasi selengkapnya, lihat Buat virtual private cloud.
-
Peran Amazon ECS CodeDeploy IAM dibuat. Untuk informasi selengkapnya, lihat Peran Amazon ECS CodeDeploy IAM.
Langkah 1: Buat Application Load Balancer
Layanan Amazon ECS yang menggunakan jenis blue/green penyebaran memerlukan penggunaan Application Load Balancer atau Network Load Balancer. Tutorial ini menggunakan Application Load Balancer.
Untuk membuat Application Load Balancer
-
Gunakan create-load-balancerperintah untuk membuat Application Load Balancer. Tentukan dua subnet yang bukan dari Availability Zone serta grup keamanan yang sama.
aws elbv2 create-load-balancer \ --name
bluegreen-alb
\ --subnetssubnet-abcd1234
subnet-abcd5678
\ --security-groupssg-abcd1234
\ --regionus-east-1
Ouput tersebut mencakup Amazon Resource Name (ARN) dari penyeimbang beban, dengan format berikut:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:loadbalancer/app/bluegreen-alb/e5ba62739c16e642
-
Gunakan create-target-groupperintah untuk membuat grup target. Grup target ini akan merutekan lalu lintas ke tugas asli yang ditetapkan dalam layanan Anda.
aws elbv2 create-target-group \ --name
bluegreentarget1
\ --protocolHTTP
\ --port80
\ --target-type ip \ --vpc-idvpc-abcd1234
\ --regionus-east-1
Output termasuk ARN dari grup target, dengan format berikut:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:targetgroup/bluegreentarget1/209a844cd01825a4 -
Menggunakan perintah create-listener untuk membuat listener penyeimbang beban dengan aturan default yang meneruskan permintaan ke grup target.
aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:
region
:aws_account_id
:loadbalancer/app/bluegreen-alb/e5ba62739c16e642
\ --protocol HTTP \ --port 80 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region
:aws_account_id
:targetgroup/bluegreentarget1/209a844cd01825a4
\ --regionus-east-1
Output tersebut mencakup ARN listener, dengan format berikut:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:listener/app/bluegreen-alb/e5ba62739c16e642/665750bec1b03bd4
Langkah 2: Buat cluster Amazon ECS
Gunakan perintah create-cluster untuk membuat sebuah klaster bernama tutorial-bluegreen-cluster
untuk digunakan.
aws ecs create-cluster \ --cluster-name
tutorial-bluegreen-cluster
\ --regionus-east-1
Output tersebut mencakup klaster ARN, dengan format berikut:
arn:aws:ecs:region
:aws_account_id
:cluster/tutorial-bluegreen-cluster
Langkah 3: Daftarkan ketentuan tugas
Gunakan register-task-definitionperintah untuk mendaftarkan definisi tugas yang kompatibel dengan Fargate. Hal ini membutuhkan penggunaan mode jaringan awsvpc
. Berikut ini adalah contoh ketentuan tugas yang digunakan untuk tutorial ini.
Pertama, buat file bernama fargate-task.json
dengan isi berikut. Pastikan bahwa Anda menggunakan ARN untuk peran eksekusi tugas Anda. Untuk informasi selengkapnya, lihat Peran IAM eksekusi tugas Amazon ECS.
{ "family": "sample-fargate", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "public.ecr.aws/docker/library/httpd:latest", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" }
Kemudian daftarkan ketentuan tugas menggunakan file fargate-task.json
yang Anda buat.
aws ecs register-task-definition \ --cli-input-json file://
fargate-task.json
\ --regionus-east-1
Langkah 4: Buat layanan Amazon ECS
Gunakan perintah create-service untuk membuat layanan.
Pertama, buat file bernama service-bluegreen.json
dengan konten berikut.
{ "cluster": "
tutorial-bluegreen-cluster
", "serviceName": "service-bluegreen
", "taskDefinition": "tutorial-task-def
", "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region
:aws_account_id
:targetgroup/bluegreentarget1/209a844cd01825a4
", "containerName": "sample-app", "containerPort": 80 } ], "launchType": "FARGATE", "schedulingStrategy": "REPLICA", "deploymentController": { "type": "CODE_DEPLOY" }, "platformVersion": "LATEST
", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-abcd1234
" ], "subnets": [ "subnet-abcd1234
", "subnet-abcd5678
" ] } }, "desiredCount": 1 }
Kemudian buat layanan Anda menggunakan file service-bluegreen.json
yang Anda buat.
aws ecs create-service \ --cli-input-json file://
service-bluegreen.json
\ --regionus-east-1
Output tersebut mencakup ARN layanan, dengan format berikut:
arn:aws:ecs:region
:aws_account_id
:service/service-bluegreen
Dapatkan nama DNS penyeimbang beban menggunakan perintah berikut.
aws elbv2 describe-load-balancers --name bluegreen-alb --query 'LoadBalancers[*].DNSName'
Masukkan nama DNS di browser web Anda dan Anda akan melihat halaman web yang menampilkan aplikasi sampel dengan latar belakang biru.
Langkah 5: Buat sumber daya AWS CodeDeploy
Gunakan langkah-langkah berikut untuk membuat CodeDeploy aplikasi Anda, grup target Application Load Balancer untuk grup CodeDeploy penyebaran, dan grup penyebaran. CodeDeploy
Untuk membuat CodeDeploy sumber daya
-
Gunakan perintah create-application untuk membuat aplikasi. CodeDeploy Tentukan platform komputasi
ECS
.aws deploy create-application \ --application-name
tutorial-bluegreen-app
\ --compute-platformECS
\ --regionus-east-1
Output termasuk ID aplikasi, dengan format berikut:
{ "applicationId": "b8e9c1ef-3048-424e-9174-885d7dc9dc11" }
-
Gunakan create-target-groupperintah untuk membuat grup target Application Load Balancer kedua, yang akan digunakan saat membuat grup CodeDeploy penyebaran Anda.
aws elbv2 create-target-group \ --name
bluegreentarget2
\ --protocolHTTP
\ --port80
\ --target-type ip \ --vpc-id "vpc-0b6dd82c67d8012a1
" \ --regionus-east-1
Output termasuk ARN untuk grup target, dengan format berikut:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:targetgroup/bluegreentarget2/708d384187a3cfdc -
Gunakan create-deployment-groupperintah untuk membuat grup CodeDeploy penyebaran.
Pertama, buat file bernama
tutorial-deployment-group.json
dengan konten berikut. Contoh ini menggunakan sumber daya yang Anda buat. UntukserviceRoleArn
, tentukan ARN peran Amazon ECS CodeDeploy IAM Anda. Untuk informasi selengkapnya, lihat Peran Amazon ECS CodeDeploy IAM.{ "applicationName": "
tutorial-bluegreen-app
", "autoRollbackConfiguration": { "enabled": true, "events": [ "DEPLOYMENT_FAILURE" ] }, "blueGreenDeploymentConfiguration": { "deploymentReadyOption": { "actionOnTimeout": "CONTINUE_DEPLOYMENT", "waitTimeInMinutes": 0 }, "terminateBlueInstancesOnDeploymentSuccess": { "action": "TERMINATE", "terminationWaitTimeInMinutes": 5 } }, "deploymentGroupName": "tutorial-bluegreen-dg
", "deploymentStyle": { "deploymentOption": "WITH_TRAFFIC_CONTROL", "deploymentType": "BLUE_GREEN" }, "loadBalancerInfo": { "targetGroupPairInfoList": [ { "targetGroups": [ { "name": "bluegreentarget1
" }, { "name": "bluegreentarget2
" } ], "prodTrafficRoute": { "listenerArns": [ "arn:aws:elasticloadbalancing:region
:aws_account_id
:listener/app/bluegreen-alb/e5ba62739c16e642/665750bec1b03bd4
" ] } } ] }, "serviceRoleArn": "arn:aws:iam::aws_account_id
:role/ecsCodeDeployRole
", "ecsServices": [ { "serviceName": "service-bluegreen
", "clusterName": "tutorial-bluegreen-cluster
" } ] }Kemudian buat grup CodeDeploy penyebaran.
aws deploy create-deployment-group \ --cli-input-json file://
tutorial-deployment-group.json
\ --regionus-east-1
Output termasuk ID grup deployment, dengan format berikut:
{ "deploymentGroupId": "6fd9bdc6-dc51-4af5-ba5a-0a4a72431c88" }
Langkah 6: Buat dan pantau deployment CodeDeploy
Sebelum membuat CodeDeploy penerapan, perbarui definisi command
tugas fargate-task.json
sebagai berikut untuk mengubah warna latar belakang aplikasi sampel menjadi hijau.
{ ... "containerDefinitions": [ { ... "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #097969;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], ... }
Daftarkan definisi tugas yang diperbarui menggunakan perintah berikut.
aws ecs register-task-definition \ --cli-input-json file://
fargate-task.json
\ --regionus-east-1
Sekarang, gunakan langkah-langkah berikut untuk membuat dan mengunggah file spesifikasi aplikasi (AppSpec file) dan CodeDeploy penyebaran.
Untuk membuat dan memantau CodeDeploy penyebaran
-
Buat dan unggah AppSpec file menggunakan langkah-langkah berikut.
-
Buat file bernama
appspec.yaml
dengan isi grup deployment CodeDeploy . Contoh ini menggunakan definisi tugas yang diperbarui.version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "arn:aws:ecs:
region
:aws_account_id
:task-definition/tutorial-task-def:2
" LoadBalancerInfo: ContainerName: "sample-app
" ContainerPort: 80 PlatformVersion: "LATEST" -
Gunakan perintah s3 mb untuk membuat bucket Amazon S3 untuk AppSpec file tersebut.
aws s3 mb s3://
tutorial-bluegreen-bucket
-
Gunakan perintah s3 cp untuk mengunggah AppSpec file ke bucket Amazon S3.
aws s3 cp ./appspec.yaml s3://
tutorial-bluegreen-bucket
/appspec.yaml
-
-
Buat CodeDeploy penyebaran menggunakan langkah-langkah berikut.
-
Buat file bernama
create-deployment.json
dengan isi CodeDeploy penyebaran. Contoh ini menggunakan sumber daya yang Anda buat sebelumnya dalam tutorial.{ "applicationName": "
tutorial-bluegreen-app
", "deploymentGroupName": "tutorial-bluegreen-dg
", "revision": { "revisionType": "S3", "s3Location": { "bucket": "tutorial-bluegreen-bucket
", "key": "appspec.yaml
", "bundleType": "YAML" } } } -
Gunakan perintah create-deployment untuk membuat deployment.
aws deploy create-deployment \ --cli-input-json file://
create-deployment.json
\ --regionus-east-1
Output termasuk ID deployment, dengan format berikut:
{ "deploymentId": "d-RPCR1U3TW" }
-
-
Gunakan get-deployment-targetperintah untuk mendapatkan rincian penyebaran, menentukan
deploymentId
dari output sebelumnya.aws deploy get-deployment-target \ --deployment-id "
d-IMJU3A8TW
" \ --target-idtutorial-bluegreen-cluster:service-bluegreen
\ --regionus-east-1
Awalnya, status penyebaran adalah
InProgress
. Lalu lintas diarahkan ke set tugas asli, yang memilikitaskSetLabel
dariBLUE
, statusPRIMARY
, dan atrafficWeight
100.0
. Set tugas pengganti memilikitaskSetLabel
dariGREEN
, statusACTIVE
, dan atrafficWeight
dari0.0
. Browser web tempat Anda memasukkan nama DNS masih menampilkan aplikasi sampel dengan latar belakang biru.{ "deploymentTarget": { "deploymentTargetType": "ECSTarget", "ecsTarget": { "deploymentId": "d-RPCR1U3TW", "targetId": "tutorial-bluegreen-cluster:service-bluegreen", "targetArn": "arn:aws:ecs:
region
:aws_account_id
:service/service-bluegreen", "lastUpdatedAt": "2023-08-10T12:07:24.797000-05:00", "lifecycleEvents": [ { "lifecycleEventName": "BeforeInstall", "startTime": "2023-08-10T12:06:22.493000-05:00", "endTime": "2023-08-10T12:06:22.790000-05:00", "status": "Succeeded" }, { "lifecycleEventName": "Install", "startTime": "2023-08-10T12:06:22.936000-05:00", "status": "InProgress" }, { "lifecycleEventName": "AfterInstall", "status": "Pending" }, { "lifecycleEventName": "BeforeAllowTraffic", "status": "Pending" }, { "lifecycleEventName": "AllowTraffic", "status": "Pending" }, { "lifecycleEventName": "AfterAllowTraffic", "status": "Pending" } ], "status": "InProgress", "taskSetsInfo": [ { "identifer": "ecs-svc/9223370493423413672", "desiredCount": 1, "pendingCount": 0, "runningCount": 1, "status": "ACTIVE", "trafficWeight": 0.0, "targetGroup": { "name": "bluegreentarget2" }, "taskSetLabel": "Green" }, { "identifer": "ecs-svc/9223370493425779968", "desiredCount": 1, "pendingCount": 0, "runningCount": 1, "status": "PRIMARY", "trafficWeight": 100.0, "targetGroup": { "name": "bluegreentarget1" }, "taskSetLabel": "Blue" } ] } } }Lanjutkan untuk mengambil rincian penyebaran menggunakan perintah sampai status penyebaran
Succeeded
, seperti yang ditunjukkan pada output berikut. Lalu lintas sekarang dialihkan ke set tugas pengganti, yang sekarang memiliki statusPRIMARY
dan atrafficWeight
dari.100.0
Segarkan browser web tempat Anda memasukkan nama DNS penyeimbang beban, dan sekarang Anda akan melihat aplikasi sampel dengan latar belakang hijau.{ "deploymentTarget": { "deploymentTargetType": "ECSTarget", "ecsTarget": { "deploymentId": "d-RPCR1U3TW", "targetId": "tutorial-bluegreen-cluster:service-bluegreen", "targetArn": "arn:aws:ecs:
region
:aws_account_id
:service/service-bluegreen", "lastUpdatedAt": "2023-08-10T12:07:24.797000-05:00", "lifecycleEvents": [ { "lifecycleEventName": "BeforeInstall", "startTime": "2023-08-10T12:06:22.493000-05:00", "endTime": "2023-08-10T12:06:22.790000-05:00", "status": "Succeeded" }, { "lifecycleEventName": "Install", "startTime": "2023-08-10T12:06:22.936000-05:00", "endTime": "2023-08-10T12:08:25.939000-05:00", "status": "Succeeded" }, { "lifecycleEventName": "AfterInstall", "startTime": "2023-08-10T12:08:26.089000-05:00", "endTime": "2023-08-10T12:08:26.403000-05:00", "status": "Succeeded" }, { "lifecycleEventName": "BeforeAllowTraffic", "startTime": "2023-08-10T12:08:26.926000-05:00", "endTime": "2023-08-10T12:08:27.256000-05:00", "status": "Succeeded" }, { "lifecycleEventName": "AllowTraffic", "startTime": "2023-08-10T12:08:27.416000-05:00", "endTime": "2023-08-10T12:08:28.195000-05:00", "status": "Succeeded" }, { "lifecycleEventName": "AfterAllowTraffic", "startTime": "2023-08-10T12:08:28.715000-05:00", "endTime": "2023-08-10T12:08:28.994000-05:00", "status": "Succeeded" } ], "status": "Succeeded", "taskSetsInfo": [ { "identifer": "ecs-svc/9223370493425779968", "desiredCount": 1, "pendingCount": 0, "runningCount": 1, "status": "ACTIVE", "trafficWeight": 0.0, "targetGroup": { "name": "bluegreentarget1" }, "taskSetLabel": "Blue" }, { "identifer": "ecs-svc/9223370493423413672", "desiredCount": 1, "pendingCount": 0, "runningCount": 1, "status": "PRIMARY", "trafficWeight": 100.0, "targetGroup": { "name": "bluegreentarget2" }, "taskSetLabel": "Green" } ] } } }
Langkah 7: Bersihkan
Bila Anda telah menyelesaikan tutorial ini, bersihkan sumber daya yang terkait dengannya untuk menghindari biaya untuk sumber daya yang tidak Anda gunakan.
Membersihkan sumber daya tutorial
-
Gunakan delete-deployment-groupperintah untuk menghapus grup CodeDeploy penyebaran.
aws deploy delete-deployment-group \ --application-name
tutorial-bluegreen-app
\ --deployment-group-nametutorial-bluegreen-dg
\ --regionus-east-1
-
Gunakan perintah hapus-aplikasi untuk menghapus aplikasi. CodeDeploy
aws deploy delete-application \ --application-name
tutorial-bluegreen-app
\ --regionus-east-1
-
Gunakan perintah delete-service untuk menghapus layanan Amazon ECS. Menggunakan bendera
--force
mengizinkan Anda untuk menghapus layanan bahkan jika itu tidak menurunkan skala ke tugas nol.aws ecs delete-service \ --service arn:aws:ecs:
region
:aws_account_id
:service/service-bluegreen
\ --force \ --regionus-east-1
-
Gunakan perintah delete-cluster untuk menghapus cluster Amazon ECS.
aws ecs delete-cluster \ --cluster
tutorial-bluegreen-cluster
\ --regionus-east-1
-
Gunakan perintah s3 rm untuk menghapus AppSpec file dari bucket Amazon S3.
aws s3 rm s3://
tutorial-bluegreen-bucket/appspec.yaml
-
Gunakan perintah s3 rb untuk menghapus bucket Amazon S3.
aws s3 rb s3://
tutorial-bluegreen-bucket
-
Gunakan delete-load-balancerperintah untuk menghapus Application Load Balancer.
aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:
region
:aws_account_id
:loadbalancer/app/bluegreen-alb/e5ba62739c16e642
\ --regionus-east-1
-
Gunakan delete-target-groupperintah untuk menghapus dua kelompok target Application Load Balancer.
aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:
region
:aws_account_id
:targetgroup/bluegreentarget1/209a844cd01825a4
\ --regionus-east-1
aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:
region
:aws_account_id
:targetgroup/bluegreentarget2/708d384187a3cfdc
\ --regionus-east-1