Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Bereitstellung eines ECS Amazon-Service mithilfe einer blauen/grünen Bereitstellung
Erfahren Sie, wie Sie einen ECS Amazon-Service erstellen, der eine Fargate-Aufgabe enthält, die den Bereitstellungstyp Blau/Grün mit dem verwendet. AWS CLI
Anmerkung
Für AWS CloudFormation wurde Unterstützung für die Durchführung einer blau/grünen Bereitstellung hinzugefügt. Weitere Informationen finden Sie im AWS CloudFormation Benutzerhandbuch unter Durchführen von Amazon ECS Blue/Green-Bereitstellungen CodeDeploy mithilfe von AWS CloudFormation Using.
Voraussetzungen
In diesem Tutorial wird davon ausgegangen, dass Sie die folgenden Voraussetzungen erfüllt haben:
-
Die neueste Version von AWS CLI ist installiert und konfiguriert. Weitere Informationen zur Installation oder Aktualisierung von finden Sie unter Installation von AWS Command Line Interface. AWS CLI
-
Die Schritte in Für die Nutzung von Amazon einrichten ECS wurden ausgeführt.
-
Ihr AWS Benutzer verfügt über die erforderlichen Berechtigungen, die im ECSAmazonas_ FullAccess IAM Richtlinienbeispiel angegeben sind.
-
Sie haben eine VPC Sicherheitsgruppe zur Verwendung erstellt. Weitere Informationen finden Sie unter Erstellen einer Virtual Private Cloud.
-
Die ECS CodeDeploy IAM Amazon-Rolle wird erstellt. Weitere Informationen finden Sie unter ECS CodeDeploy IAMRolle bei Amazon.
Schritt 1: Erstellen eines Application Load Balancers
Für ECS Amazon-Services, die den Bereitstellungstyp Blau/Grün verwenden, ist entweder ein Application Load Balancer oder ein Network Load Balancer erforderlich. In diesem Tutorial wird ein Application Load Balancer verwendet.
So erstellen Sie einen Application Load Balancer
-
Verwenden Sie den create-load-balancerBefehl, um einen Application Load Balancer zu erstellen. Geben Sie zwei Subnetze, die sich nicht in derselben Availability Zone befinden, sowie eine Sicherheitsgruppe an.
aws elbv2 create-load-balancer \ --name
bluegreen-alb
\ --subnetssubnet-abcd1234
subnet-abcd5678
\ --security-groupssg-abcd1234
\ --regionus-east-1
Die Ausgabe enthält den Amazon-Ressourcennamen (ARN) des Load Balancers im folgenden Format:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:loadbalancer/app/bluegreen-alb/e5ba62739c16e642
-
Verwenden Sie den create-target-groupBefehl, um eine Zielgruppe zu erstellen. Diese Zielgruppe leitet den Datenverkehr an den ursprünglichen Aufgabesatz in Ihrem Service weiter.
aws elbv2 create-target-group \ --name
bluegreentarget1
\ --protocolHTTP
\ --port80
\ --target-type ip \ --vpc-idvpc-abcd1234
\ --regionus-east-1
Die Ausgabe beinhaltet die ARN der Zielgruppe im folgenden Format:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:targetgroup/bluegreentarget1/209a844cd01825a4 -
Verwenden Sie den Befehl create-listener, um einen Listener für Ihren Load Balancer mit einer Standardregel zu erstellen, die Anforderungen an Ihre Zielgruppe weiterleitet.
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
Die Ausgabe beinhaltet die ARN des Zuhörers im folgenden Format:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:listener/app/bluegreen-alb/e5ba62739c16e642/665750bec1b03bd4
Schritt 2: Erstellen Sie einen ECS Amazon-Cluster
Verwenden Sie den Befehl create-cluster, um einen Cluster namens tutorial-bluegreen-cluster
zu erstellen.
aws ecs create-cluster \ --cluster-name
tutorial-bluegreen-cluster
\ --regionus-east-1
Die Ausgabe umfasst den ARN Wert des Clusters im folgenden Format:
arn:aws:ecs:region
:aws_account_id
:cluster/tutorial-bluegreen-cluster
Schritt 3: Registrieren einer Aufgabendefinition
Verwenden Sie den register-task-definitionBefehl, um eine Aufgabendefinition zu registrieren, die mit Fargate kompatibel ist. Für sie muss als Netzwerkmodus awsvpc
verwendet werden. Nachfolgend finden Sie die Beispiel-Aufgabendefinition, die für dieses Tutorial verwendet wurde.
Erstellen Sie zuerst eine Datei mit dem Namen fargate-task.json
und dem folgenden Inhalt. Stellen Sie sicher, dass Sie die Rolle ARN für die Ausführung Ihrer Aufgabe verwenden. Weitere Informationen finden Sie unter Rolle bei der Ausführung von ECS IAM Amazon-Aufgaben.
{ "family": "
tutorial-task-def
", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "httpd:2.4", "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: #00FFFF;} </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", "executionRoleArn": "arn:aws:iam::aws_account_id
:role/ecsTaskExecutionRole
" }
Registrieren Sie dann die Aufgabendefinition mit der von Ihnen erstellten Datei fargate-task.json
.
aws ecs register-task-definition \ --cli-input-json file://
fargate-task.json
\ --regionus-east-1
Schritt 4: Erstellen Sie einen ECS Amazon-Service
Verwenden Sie den Befehl create-service, um einen Service zu erstellen.
Erstellen Sie zuerst eine Datei mit dem Namen service-bluegreen.json
und dem folgenden Inhalt.
{ "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 }
Erstellen Sie dann Ihren Service unter Verwendung der Datei service-bluegreen.json
, die Sie erstellt haben.
aws ecs create-service \ --cli-input-json file://
service-bluegreen.json
\ --regionus-east-1
Die Ausgabe umfasst ARN den Service im folgenden Format:
arn:aws:ecs:region
:aws_account_id
:service/service-bluegreen
Rufen Sie den DNS Namen des Load Balancers mit dem folgenden Befehl ab.
aws elbv2 describe-load-balancers --name bluegreen-alb --query 'LoadBalancers[*].DNSName'
Geben Sie den DNS Namen in Ihren Webbrowser ein und Sie sollten eine Webseite sehen, auf der die Beispiel-App mit blauem Hintergrund angezeigt wird.
Schritt 5: Erstellen der AWS CodeDeploy -Ressourcen
Gehen Sie wie folgt vor, um Ihre CodeDeploy Anwendung, die Application Load Balancer Balancer-Zielgruppe für die CodeDeploy Bereitstellungsgruppe und die CodeDeploy Bereitstellungsgruppe zu erstellen.
Um Ressourcen zu erstellen CodeDeploy
-
Verwenden Sie den Befehl create-application, um eine CodeDeploy Anwendung zu erstellen. Geben Sie die
ECS
-Plattform für die Datenverarbeitung an.aws deploy create-application \ --application-name
tutorial-bluegreen-app
\ --compute-platformECS
\ --regionus-east-1
Die Ausgabe enthält die Anwendungs-ID im folgenden Format:
{ "applicationId": "b8e9c1ef-3048-424e-9174-885d7dc9dc11" }
-
Verwenden Sie den create-target-groupBefehl, um eine zweite Application Load Balancer Balancer-Zielgruppe zu erstellen, die bei der Erstellung Ihrer CodeDeploy Bereitstellungsgruppe verwendet wird.
aws elbv2 create-target-group \ --name
bluegreentarget2
\ --protocolHTTP
\ --port80
\ --target-type ip \ --vpc-id "vpc-0b6dd82c67d8012a1
" \ --regionus-east-1
Die Ausgabe umfasst das ARN für die Zielgruppe im folgenden Format:
arn:aws:elasticloadbalancing:
region
:aws_account_id
:targetgroup/bluegreentarget2/708d384187a3cfdc -
Verwenden Sie den create-deployment-groupBefehl, um eine CodeDeploy Bereitstellungsgruppe zu erstellen.
Erstellen Sie zuerst eine Datei mit dem Namen
tutorial-deployment-group.json
und dem folgenden Inhalt. Dieses Beispiel verwendet die von Ihnen erstellte Ressource. Geben Sie für dieserviceRoleArn
die ARN Ihrer ECS CodeDeploy IAM Amazon-Rolle an. Weitere Informationen finden Sie unter ECS CodeDeploy IAMRolle bei Amazon.{ "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
" } ] }Erstellen Sie dann die CodeDeploy Bereitstellungsgruppe.
aws deploy create-deployment-group \ --cli-input-json file://
tutorial-deployment-group.json
\ --regionus-east-1
Die Ausgabe enthält die Bereitstellungsgruppen-ID im folgenden Format:
{ "deploymentGroupId": "6fd9bdc6-dc51-4af5-ba5a-0a4a72431c88" }
Schritt 6: Erstellen und überwachen Sie eine CodeDeploy Bereitstellung
Bevor Sie eine CodeDeploy Bereitstellung erstellen, aktualisieren Sie die Aufgabendefinition fargate-task.json
wie folgt, um die Hintergrundfarbe der Beispiel-App command
in Grün zu ändern.
{ ... "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\"" ] } ], ... }
Registrieren Sie die aktualisierte Aufgabendefinition mit dem folgenden Befehl.
aws ecs register-task-definition \ --cli-input-json file://
fargate-task.json
\ --regionus-east-1
Gehen Sie nun wie folgt vor, um eine Anwendungsspezifikationsdatei (AppSpec Datei) und eine CodeDeploy Bereitstellung zu erstellen und hochzuladen.
Um eine CodeDeploy Bereitstellung zu erstellen und zu überwachen
-
Gehen Sie wie folgt vor, um eine AppSpec Datei zu erstellen und hochzuladen.
-
Erstellen Sie eine Datei
appspec.yaml
mit dem Namen des Inhalts der CodeDeploy Bereitstellungsgruppe. In diesem Beispiel wird die aktualisierte Aufgabendefinition verwendet.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" -
Verwenden Sie den Befehl s3 mb, um einen Amazon S3 S3-Bucket für die AppSpec Datei zu erstellen.
aws s3 mb s3://
tutorial-bluegreen-bucket
-
Verwenden Sie den Befehl s3 cp, um die AppSpec Datei in den Amazon S3 S3-Bucket hochzuladen.
aws s3 cp ./appspec.yaml s3://
tutorial-bluegreen-bucket
/appspec.yaml
-
-
Erstellen Sie die CodeDeploy Bereitstellung mithilfe der folgenden Schritte.
-
Erstellen Sie eine Datei
create-deployment.json
mit dem Namen des Inhalts der CodeDeploy Bereitstellung. Dieses Beispiel verwendet die Ressourcen, die Sie zuvor im Tutorial erstellt haben.{ "applicationName": "
tutorial-bluegreen-app
", "deploymentGroupName": "tutorial-bluegreen-dg
", "revision": { "revisionType": "S3", "s3Location": { "bucket": "tutorial-bluegreen-bucket
", "key": "appspec.yaml
", "bundleType": "YAML" } } } -
Verwenden Sie den Befehl create-deployment zum Erstellen der Bereitstellung.
aws deploy create-deployment \ --cli-input-json file://
create-deployment.json
\ --regionus-east-1
Die Ausgabe enthält die Bereitstellungs-ID im folgenden Format:
{ "deploymentId": "d-RPCR1U3TW" }
-
-
Verwenden Sie den get-deployment-targetBefehl, um die Details der Bereitstellung abzurufen, und geben Sie dabei die Daten
deploymentId
aus der vorherigen Ausgabe an.aws deploy get-deployment-target \ --deployment-id "
d-IMJU3A8TW
" \ --target-idtutorial-bluegreen-cluster:service-bluegreen
\ --regionus-east-1
Anfänglich lautet der Bereitstellungsstatus
InProgress
. Der Datenverkehr wird an den ursprünglichen Aufgabensatz weitergeleitet, der eintaskSetLabel
vonBLUE
hat, einen Status vonPRIMARY
und eintrafficWeight
von100.0
. Der Ersatz-Tasksatz hat eintaskSetLabel
vonGREEN
, eine Status vonACTIVE
und eintrafficWeight
von0.0
. Der Webbrowser, in dem Sie den DNS Namen eingegeben haben, zeigt die Beispiel-App weiterhin mit blauem Hintergrund an.{ "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" } ] } } }Fahren Sie mit dem Abrufen der Bereitstellungsdetails mithilfe des Befehls fort, bis der Bereitstellungsstatus
Succeeded
lautet, wie in der folgenden Ausgabe gezeigt. Der Datenverkehr wird nun zum Ersatz-Aufgabensatz umgeleitet, der nun einen Status vonPRIMARY
und einentrafficWeight
von100.0
hat. Aktualisieren Sie den Webbrowser, in dem Sie den DNS Namen des Load Balancers eingegeben haben, und Sie sollten jetzt die Beispiel-App mit grünem Hintergrund sehen.{ "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" } ] } } }
Schritt 7: Bereinigen
Wenn Sie dieses Tutorial abgeschlossen haben, sollten Sie die damit verknüpften Ressourcen bereinigen, um zu vermeiden, dass für nicht verwendete Ressourcen Kosten entstehen.
Bereinigen der Ressourcen des Tutorials
-
Verwenden Sie den delete-deployment-groupBefehl, um die CodeDeploy Bereitstellungsgruppe zu löschen.
aws deploy delete-deployment-group \ --application-name
tutorial-bluegreen-app
\ --deployment-group-nametutorial-bluegreen-dg
\ --regionus-east-1
-
Verwenden Sie den Befehl delete-application, um die Anwendung zu löschen. CodeDeploy
aws deploy delete-application \ --application-name
tutorial-bluegreen-app
\ --regionus-east-1
-
Verwenden Sie den Befehl delete-service, um den Amazon-Service zu löschen. ECS Mit dem
--force
-Flag können Sie einen Service auch dann löschen, wenn er nicht auf null Aufgaben herunterskaliert wurde.aws ecs delete-service \ --service arn:aws:ecs:
region
:aws_account_id
:service/service-bluegreen
\ --force \ --regionus-east-1
-
Verwenden Sie den Befehl delete-cluster, um den Amazon-Cluster zu löschen. ECS
aws ecs delete-cluster \ --cluster
tutorial-bluegreen-cluster
\ --regionus-east-1
-
Verwenden Sie den Befehl s3 rm, um die AppSpec Datei aus dem Amazon S3 S3-Bucket zu löschen.
aws s3 rm s3://
tutorial-bluegreen-bucket/appspec.yaml
-
Verwenden Sie den Befehl s3 rb zum Löschen des Amazon S3-Buckets.
aws s3 rb s3://
tutorial-bluegreen-bucket
-
Verwenden Sie den delete-load-balancerBefehl, um den Application Load Balancer zu löschen.
aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:
region
:aws_account_id
:loadbalancer/app/bluegreen-alb/e5ba62739c16e642
\ --regionus-east-1
-
Verwenden Sie den delete-target-groupBefehl, um die beiden Application Load Balancer Balancer-Zielgruppen zu löschen.
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