

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial: Membuat Layanan Menggunakan Blue/Green Deployment
<a name="create-blue-green"></a>

Amazon ECS telah mengintegrasikan blue/green penerapan ke wizard Create Service di konsol Amazon ECS. Untuk informasi selengkapnya, lihat [Membuat penyebaran pembaruan bergulir Amazon ECS](create-service-console-v2.md).

Tutorial berikut menunjukkan cara membuat layanan Amazon ECS yang berisi tugas Fargate yang menggunakan jenis penyebaran blue/green dengan. AWS CLI

**catatan**  
Support untuk melakukan blue/green penerapan telah ditambahkan untuk CloudFormation. *Untuk informasi selengkapnya, lihat [Menjalankan blue/green penerapan Amazon ECS melalui CodeDeploy penggunaan CloudFormation di Panduan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html) Pengguna.AWS CloudFormation *

## Prasyarat
<a name="create-blue-green-prereqs"></a>

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. AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)
+ Langkah-langkah di [Siapkan untuk menggunakan Amazon ECS](get-set-up-for-amazon-ecs.md) telah diselesaikan.
+ Pengguna IAM Anda memiliki izin yang diperlukan yang ditentukan dalam contoh kebijakan [Amazonecs\_ FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess) IAM.
+ Anda memiliki VPC dan grup keamanan yang dibuat untuk digunakan. Untuk informasi selengkapnya, lihat [Buat virtual private cloud](get-set-up-for-amazon-ecs.md#create-a-vpc).
+ Peran Amazon ECS CodeDeploy IAM dibuat. Untuk informasi selengkapnya, lihat [Peran Amazon ECS CodeDeploy IAM](codedeploy_IAM_role.md).

## Langkah 1: Buat Application Load Balancer
<a name="create-blue-green-loadbalancer"></a>

Layanan Amazon ECS yang menggunakan jenis blue/green penyebaran dapat menggunakan Application Load Balancer, Network Load Balancer, Service Connect, atau tanpa kepala. Untuk pemindahan lalu lintas terkelola, Anda memerlukan penyeimbang beban atau Service Connect. Tutorial ini menggunakan Application Load Balancer.

**Untuk membuat Application Load Balancer**

1. Gunakan perintah [create-load-balancer untuk membuat Application Load Balancer](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-load-balancer.html). Tentukan dua subnet yang bukan dari Availability Zone serta grup keamanan yang sama.

   ```
   aws elbv2 create-load-balancer \
        --name {{bluegreen-alb}} \
        --subnets {{subnet-abcd1234}} {{subnet-abcd5678}} \
        --security-groups {{sg-abcd1234}} \
        --region {{us-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}}
   ```

1. Gunakan perintah [create-target-group](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-target-group.html) 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}} \
        --protocol {{HTTP}} \
        --port {{80}} \
        --target-type ip \
        --vpc-id {{vpc-abcd1234}} \
        --region {{us-east-1}}
   ```

   Output termasuk ARN dari grup target, dengan format berikut:

   ```
   arn:aws:elasticloadbalancing:{{region}}:{{aws_account_id}}:targetgroup/bluegreentarget1/209a844cd01825a4
   ```

1. Menggunakan perintah [create-listener](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-listener.html) 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}} \
        --region {{us-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
<a name="create-blue-green-cluster"></a>

Gunakan perintah [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-cluster.html) untuk membuat sebuah klaster bernama `tutorial-bluegreen-cluster` untuk digunakan.

```
aws ecs create-cluster \
     --cluster-name {{tutorial-bluegreen-cluster}} \
     --region {{us-east-1}}
```

Output tersebut mencakup klaster ARN, dengan format berikut:

```
arn:aws:ecs:{{region}}:{{aws_account_id}}:cluster/tutorial-bluegreen-cluster
```

## Langkah 3: Daftarkan Definisi Tugas
<a name="create-blue-green-taskdef"></a>

Gunakan perintah [register-task-definition](https://docs.aws.amazon.com/cli/latest/reference/ecs/register-task-definition.html) 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 pelaksanaan tugas Amazon ECS](task_execution_IAM_role.md).

```
{
    "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}} \
     --region {{us-east-1}}
```

## Langkah 4: Buat Layanan Amazon ECS
<a name="create-blue-green-service"></a>

Gunakan perintah [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html) 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}} \
     --region {{us-east-1}}
```

Output tersebut mencakup ARN layanan, dengan format berikut:

```
arn:aws:ecs:{{region}}:{{aws_account_id}}:service/service-bluegreen
```

## Langkah 5: Buat Sumber AWS CodeDeploy Daya
<a name="create-blue-green-codedeploy"></a>

Gunakan langkah-langkah berikut untuk membuat CodeDeploy aplikasi Anda, grup target Application Load Balancer untuk grup CodeDeploy deployment, dan grup deployment. CodeDeploy 

**Untuk membuat CodeDeploy sumber daya**

1. Gunakan perintah [create-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-application.html) untuk membuat aplikasi. CodeDeploy Tentukan platform komputasi `ECS`.

   ```
   aws deploy create-application \
        --application-name {{tutorial-bluegreen-app}} \
        --compute-platform {{ECS}} \
        --region {{us-east-1}}
   ```

   Output termasuk ID aplikasi, dengan format berikut:

   ```
   {
       "applicationId": "b8e9c1ef-3048-424e-9174-885d7dc9dc11"
   }
   ```

1. Gunakan perintah [create-target-group untuk membuat grup](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-target-group.html) target Application Load Balancer kedua, yang akan digunakan saat membuat grup penyebaran Anda. CodeDeploy 

   ```
   aws elbv2 create-target-group \
        --name {{bluegreentarget2}} \
        --protocol {{HTTP}} \
        --port {{80}} \
        --target-type ip \
        --vpc-id "{{vpc-0b6dd82c67d8012a1}}" \
        --region {{us-east-1}}
   ```

   Output termasuk ARN untuk grup target, dengan format berikut:

   ```
   arn:aws:elasticloadbalancing:{{region}}:{{aws_account_id}}:targetgroup/bluegreentarget2/708d384187a3cfdc
   ```

1. Gunakan perintah [create-deployment-group untuk membuat grup](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) penyebaran. CodeDeploy 

   Pertama, buat file bernama `tutorial-deployment-group.json` dengan konten berikut. Contoh ini menggunakan sumber daya yang Anda buat. Untuk`serviceRoleArn`, tentukan ARN peran Amazon ECS CodeDeploy IAM Anda. Untuk informasi selengkapnya, lihat [Peran Amazon ECS CodeDeploy IAM](codedeploy_IAM_role.md).

   ```
   {
      "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}} \
        --region {{us-east-1}}
   ```

   Output termasuk ID grup deployment, dengan format berikut:

   ```
   {
       "deploymentGroupId": "6fd9bdc6-dc51-4af5-ba5a-0a4a72431c88"
   }
   ```

## Langkah 6: Buat dan Pantau CodeDeploy Deployment
<a name="create-blue-green-verify"></a>

Gunakan langkah-langkah berikut untuk membuat dan mengunggah file spesifikasi aplikasi (AppSpec file) dan CodeDeploy penerapan.

**Untuk membuat dan memantau CodeDeploy penyebaran**

1. Buat dan unggah AppSpec file menggunakan langkah-langkah berikut.

   1. Buat file bernama `appspec.yaml` dengan isi grup deployment CodeDeploy . Contoh ini menggunakan sumber daya yang Anda buat sebelumnya dalam tutorial.

      ```
      version: 0.0
      Resources:
        - TargetService:
            Type: AWS::ECS::Service
            Properties:
              TaskDefinition: "arn:aws:ecs:{{region}}:{{aws_account_id}}:task-definition/{{first-run-task-definition:7}}"
              LoadBalancerInfo:
                ContainerName: "{{sample-app}}"
                ContainerPort: 80
              PlatformVersion: "LATEST"
      ```

   1. Gunakan perintah [s3 mb](https://docs.aws.amazon.com/cli/latest/reference/s3/mb.html) untuk membuat bucket Amazon S3 untuk AppSpec file tersebut.

      ```
      aws s3 mb s3://{{tutorial-bluegreen-bucket}}
      ```

   1. Gunakan perintah [s3 cp](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html) untuk mengunggah AppSpec file ke bucket Amazon S3.

      ```
      aws s3 cp ./appspec.yaml s3://{{tutorial-bluegreen-bucket}}/{{appspec.yaml}}
      ```

1. Buat CodeDeploy penyebaran menggunakan langkah-langkah berikut.

   1. 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"
              }
          }
      }
      ```

   1. Gunakan perintah [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) untuk membuat deployment.

      ```
      aws deploy create-deployment \
           --cli-input-json file://{{create-deployment.json}} \
           --region {{us-east-1}}
      ```

      Output termasuk ID deployment, dengan format berikut:

      ```
      {
          "deploymentId": "d-RPCR1U3TW"
      }
      ```

   1. Gunakan perintah [get-deployment-target](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-target.html) untuk mendapatkan detail deployment, menentukan `deploymentId` dari output sebelumnya.

      ```
      aws deploy get-deployment-target \
           --deployment-id "{{d-IMJU3A8TW}}" \
           --target-id {{tutorial-bluegreen-cluster:service-bluegreen}} \
           --region {{us-east-1}}
      ```

      Lanjutkan untuk mengambil detail deployment sampai status `Succeeded`, seperti yang ditunjukkan dalam output berikut.

      ```
      {
          "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": 1543431490.226,
                  "lifecycleEvents": [
                      {
                          "lifecycleEventName": "BeforeInstall",
                          "startTime": 1543431361.022,
                          "endTime": 1543431361.433,
                          "status": "Succeeded"
                      },
                      {
                          "lifecycleEventName": "Install",
                          "startTime": 1543431361.678,
                          "endTime": 1543431485.275,
                          "status": "Succeeded"
                      },
                      {
                          "lifecycleEventName": "AfterInstall",
                          "startTime": 1543431485.52,
                          "endTime": 1543431486.033,
                          "status": "Succeeded"
                      },
                      {
                          "lifecycleEventName": "BeforeAllowTraffic",
                          "startTime": 1543431486.838,
                          "endTime": 1543431487.483,
                          "status": "Succeeded"
                      },
                      {
                          "lifecycleEventName": "AllowTraffic",
                          "startTime": 1543431487.748,
                          "endTime": 1543431488.488,
                          "status": "Succeeded"
                      },
                      {
                          "lifecycleEventName": "AfterAllowTraffic",
                          "startTime": 1543431489.152,
                          "endTime": 1543431489.885,
                          "status": "Succeeded"
                      }
                  ],
                  "status": "Succeeded",
                  "taskSetsInfo": [
                      {
                          "identifer": "ecs-svc/9223370493425779968",
                          "desiredCount": 1,
                          "pendingCount": 0,
                          "runningCount": 1,
                          "status": "ACTIVE",
                          "trafficWeight": 0.0,
                          "targetGroup": {
                              "name": "bluegreentarget1"
                          }
                      },
                      {
                          "identifer": "ecs-svc/9223370493423413672",
                          "desiredCount": 1,
                          "pendingCount": 0,
                          "runningCount": 1,
                          "status": "PRIMARY",
                          "trafficWeight": 100.0,
                          "targetGroup": {
                              "name": "bluegreentarget2"
                          }
                      }
                  ]
              }
          }
      }
      ```

## Langkah 7: Bersihkan
<a name="create-blue-green-cleanup"></a>

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**

1. Gunakan perintah [delete-deployment-group untuk menghapus grup](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html) penyebaran. CodeDeploy 

   ```
   aws deploy delete-deployment-group \
        --application-name {{tutorial-bluegreen-app}} \
        --deployment-group-name {{tutorial-bluegreen-dg}} \
        --region {{us-east-1}}
   ```

1. Gunakan perintah [hapus-aplikasi](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) untuk menghapus aplikasi. CodeDeploy 

   ```
   aws deploy delete-application \
        --application-name {{tutorial-bluegreen-app}} \
        --region {{us-east-1}}
   ```

1. Gunakan perintah [delete-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/delete-service.html) 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 \
        --region {{us-east-1}}
   ```

1. Gunakan perintah [delete-cluster](https://docs.aws.amazon.com/cli/latest/reference/ecs/delete-cluster.html) untuk menghapus cluster Amazon ECS.

   ```
   aws ecs delete-cluster \
        --cluster {{tutorial-bluegreen-cluster}} \
        --region {{us-east-1}}
   ```

1. Gunakan perintah [s3 rm](https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html) untuk menghapus AppSpec file dari bucket Amazon S3.

   ```
   aws s3 rm s3://{{tutorial-bluegreen-bucket/appspec.yaml}}
   ```

1. Gunakan perintah [s3 rb](https://docs.aws.amazon.com/cli/latest/reference/s3/rb.html) untuk menghapus bucket Amazon S3.

   ```
   aws s3 rb s3://{{tutorial-bluegreen-bucket}}
   ```

1. Gunakan perintah [delete-load-balancer untuk menghapus Application Load Balancer](https://docs.aws.amazon.com/cli/latest/reference/elbv2/delete-load-balancer.html).

   ```
   aws elbv2 delete-load-balancer \
        --load-balancer-arn arn:aws:elasticloadbalancing:{{region}}:{{aws_account_id}}:loadbalancer/app/{{bluegreen-alb/e5ba62739c16e642}} \
        --region {{us-east-1}}
   ```

1. Gunakan perintah [delete-target-group untuk menghapus dua kelompok](https://docs.aws.amazon.com/cli/latest/reference/elbv2/delete-target-group.html) target Application Load Balancer.

   ```
   aws elbv2 delete-target-group \
        --target-group-arn arn:aws:elasticloadbalancing:{{region}}:{{aws_account_id}}:targetgroup/{{bluegreentarget1/209a844cd01825a4}} \
        --region {{us-east-1}}
   ```

   ```
   aws elbv2 delete-target-group \
        --target-group-arn arn:aws:elasticloadbalancing:{{region}}:{{aws_account_id}}:targetgroup/{{bluegreentarget2/708d384187a3cfdc}} \
        --region {{us-east-1}}
   ```