

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

# Tutorial: Penyebaran Standar Amazon ECS dengan CodePipeline
<a name="ecs-cd-pipeline"></a>

Tutorial ini membantu Anda membuat pipeline penyebaran berkelanjutan (CD) ujung ke ujung yang lengkap dengan Amazon ECS dengan CodePipeline.

**penting**  
Sebagai bagian dari pembuatan pipeline di konsol, bucket artefak S3 akan digunakan oleh CodePipeline untuk artefak. (Ini berbeda dari bucket yang digunakan untuk aksi sumber S3.) Jika bucket artefak S3 berada di akun yang berbeda dari akun untuk pipeline Anda, pastikan bucket artefak S3 dimiliki oleh Akun AWS itu aman dan dapat diandalkan.

**catatan**  
Tutorial ini untuk tindakan penerapan standar Amazon ECS untuk CodePipeline. Untuk tutorial yang menggunakan tindakan Amazon ECS untuk CodeDeploy blue/green menerapkan CodePipeline, lihat[Tutorial: Buat pipeline dengan sumber dan ECS-to-CodeDeploy penerapan Amazon ECR](tutorials-ecs-ecr-codedeploy.md).

**catatan**  
Tutorial ini adalah untuk tindakan penerapan standar Amazon ECS CodePipeline dengan tindakan sumber. Untuk tutorial yang menggunakan tindakan penerapan standar Amazon ECS bersama dengan tindakan ECRBuildAndPublish build CodePipeline untuk mendorong gambar Anda, lihat[Tutorial: Membangun dan mendorong gambar Docker ke Amazon ECR dengan CodePipeline (tipe V2)](tutorials-ecr-build-publish.md).

## Prasyarat
<a name="ecs-cd-prereqs"></a>

Ada beberapa sumber daya yang harus Anda miliki sebelum Anda dapat menggunakan tutorial ini untuk membuat pipeline CD Anda. Berikut adalah hal-hal yang Anda butuhkan untuk memulai: 

**catatan**  
Semua sumber daya ini harus dibuat dalam Wilayah yang sama AWS .
+ Repositori kontrol sumber (tutorial ini menggunakan CodeCommit) dengan Dockerfile dan sumber aplikasi Anda. Untuk informasi selengkapnya, lihat [ Membuat CodeCommit Repositori ](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) di Panduan *AWS CodeCommit Pengguna*.
+ Repositori gambar Docker (tutorial ini menggunakan Amazon ECR) yang berisi gambar yang telah Anda buat dari Dockerfile dan sumber aplikasi Anda. Untuk informasi selengkapnya, lihat [ Membuat Repositori ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dan [ Mendorong Gambar ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) di Panduan Pengguna * Amazon Elastic Container Registry*.
+ Definisi tugas Amazon ECS yang mereferensikan gambar Docker yang dihosting di repositori gambar Anda. Untuk informasi selengkapnya, lihat [ Membuat Definisi Tugas ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) di Panduan Pengembang * Amazon Elastic Container Service*.
**penting**  
Tindakan penerapan standar Amazon EC CodePipeline S untuk membuat revisi definisi tugas sendiri berdasarkan revisi yang digunakan oleh layanan Amazon ECS. Jika Anda membuat revisi baru untuk definisi tugas tanpa memperbarui layanan Amazon ECS, tindakan penerapan akan mengabaikan revisi tersebut.

  Di bawah ini adalah contoh definisi tugas yang digunakan untuk tutorial ini. Nilai yang Anda gunakan untuk `name` dan `family` akan digunakan pada langkah berikutnya untuk file spesifikasi build Anda.

  ```
  {
    "ipcMode": null,
    "executionRoleArn": "{{role_ARN}}",
    "containerDefinitions": [
      {
        "dnsSearchDomains": null,
        "environmentFiles": null,
        "logConfiguration": {
          "logDriver": "awslogs",
          "secretOptions": null,
          "options": {
            "awslogs-group": "/ecs/{{hello-world}}",
            "awslogs-region": "us-west-2",
            "awslogs-stream-prefix": "ecs"
          }
        },
        "entryPoint": null,
        "portMappings": [
          {
            "hostPort": 80,
            "protocol": "tcp",
            "containerPort": 80
          }
        ],
        "command": null,
        "linuxParameters": null,
        "cpu": 0,
        "environment": [],
        "resourceRequirements": null,
        "ulimits": null,
        "dnsServers": null,
        "mountPoints": [],
        "workingDirectory": null,
        "secrets": null,
        "dockerSecurityOptions": null,
        "memory": null,
        "memoryReservation": 128,
        "volumesFrom": [],
        "stopTimeout": null,
        "image": "{{image_name}}",
        "startTimeout": null,
        "firelensConfiguration": null,
        "dependsOn": null,
        "disableNetworking": null,
        "interactive": null,
        "healthCheck": null,
        "essential": true,
        "links": null,
        "hostname": null,
        "extraHosts": null,
        "pseudoTerminal": null,
        "user": null,
        "readonlyRootFilesystem": null,
        "dockerLabels": null,
        "systemControls": null,
        "privileged": null,
        "name": "{{hello-world}}"
      }
    ],
    "placementConstraints": [],
    "memory": "2048",
    "taskRoleArn": null,
    "compatibilities": [
      "EC2",
      "FARGATE"
    ],
    "taskDefinitionArn": "{{ARN}}",
    "family": "{{hello-world}}",
    "requiresAttributes": [],
    "pidMode": null,
    "requiresCompatibilities": [
      "FARGATE"
    ],
    "networkMode": "awsvpc",
    "cpu": "1024",
    "revision": 1,
    "status": "ACTIVE",
    "inferenceAccelerators": null,
    "proxyConfiguration": null,
    "volumes": []
  }
  ```
+ Cluster Amazon ECS yang menjalankan layanan yang menggunakan definisi tugas yang Anda sebutkan sebelumnya. Untuk informasi selengkapnya, lihat [ Membuat Cluster ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html) dan [ Membuat Layanan ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html) di Panduan Pengembang * Amazon Elastic Container Service*.

Setelah Anda memenuhi prasyarat ini, Anda dapat melanjutkan dengan tutorial dan membuat pipeline CD Anda.

## Langkah 1: Tambahkan File Spesifikasi Bangun ke Repositori Sumber Anda
<a name="cd-buildspec"></a>

Tutorial ini CodeBuild digunakan untuk membangun image Docker Anda dan mendorong gambar ke Amazon ECR. Tambahkan `buildspec.yml` file ke repositori kode sumber Anda untuk memberi tahu CodeBuild cara melakukannya. Contoh spesifikasi build di bawah ini melakukan hal berikut:
+ Pre-build tahap:
  + Masuk ke Amazon ECR.
  + Atur URI repositori ke gambar ECR Anda dan tambahkan tag gambar dengan tujuh karakter pertama dari ID komit Git dari sumber.
+ Membangun tahap:
  + Bangun gambar Docker dan beri tag gambar baik sebagai `latest` dan dengan Git commit ID.
+ Post-build tahap:
  + Dorong gambar ke repositori ECR Anda dengan kedua tag.
  + Tulis file yang `imagedefinitions.json` dipanggil di root build yang memiliki nama wadah layanan Amazon ECS Anda dan gambar serta tag. Tahap penyebaran pipeline CD Anda menggunakan informasi ini untuk membuat revisi baru definisi tugas layanan Anda, dan kemudian memperbarui layanan untuk menggunakan definisi tugas baru. `imagedefinitions.json`File diperlukan untuk pekerja pekerjaan ECS.

Tempelkan teks sampel ini untuk membuat `buildspec.yml` file Anda, dan ganti nilai untuk definisi gambar dan tugas Anda. Teks ini menggunakan contoh akun ID 111122223333.

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com
      - REPOSITORY_URI=012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
    files: imagedefinitions.json
```

Spesifikasi build ditulis untuk definisi tugas sampel yang disediakan di[Prasyarat](#ecs-cd-prereqs), digunakan oleh layanan Amazon ECS untuk tutorial ini. `REPOSITORY_URI`Nilai sesuai dengan `image` repositori (tanpa tag gambar), dan `{{hello-world}}` nilai di dekat akhir file sesuai dengan nama wadah dalam definisi tugas layanan. 

**Untuk menambahkan `buildspec.yml` berkas ke repositori sumber Anda**

1. Buka editor teks dan kemudian salin dan tempel spesifikasi build di atas ke file baru.

1. Ganti `REPOSITORY_URI` value (`{{012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world}}`) dengan URI repositori Amazon ECR Anda (tanpa tag gambar apa pun) untuk gambar Docker Anda. Ganti `{{hello-world}}` dengan nama wadah dalam definisi tugas layanan Anda yang mereferensikan image Docker Anda.

1. Komit dan dorong `buildspec.yml` file Anda ke repositori sumber Anda.

   1. Tambahkan file.

      ```
      git add .
      ```

   1. Lakukan perubahan.

      ```
      git commit -m "Adding build specification."
      ```

   1. Dorong komit.

      ```
      git push
      ```

## Langkah 2: Membuat Pipeline Penerapan Berkelanjutan
<a name="pipeline-wizard"></a>

Gunakan CodePipeline wizard untuk membuat tahapan pipeline Anda dan menghubungkan repositori sumber Anda ke layanan ECS Anda.

**Untuk membuat alur Anda**

1. Buka CodePipeline konsol di [ https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Pada ** halaman ** Selamat Datang, pilih ** Buat pipeline**. 

   Jika ini adalah pertama kalinya Anda menggunakan CodePipeline, halaman pengantar muncul alih-alih ** Selamat Datang**. Pilih **Mulai Sekarang**.

1. Pada ** Langkah 1: Pilih ** halaman opsi pembuatan, di bawah ** Opsi pembuatan**, pilih ** opsi ** Build custom pipeline. Pilih **Berikutnya**.

1. Pada ** Langkah 2: Pilih pengaturan pipeline**, di Nama ** Pipeline**, ketik nama untuk pipeline Anda. Untuk tutorial ini, nama pipeline adalah ** hello-world**.

1. Dalam ** tipe Pipeline**, pertahankan pilihan default di ** V2**. Jenis pipa berbeda dalam karakteristik dan harga. Untuk informasi selengkapnya, lihat [Jenis pipa](pipeline-types.md). Pilih **Berikutnya**.

1. Pada ** Langkah 3: Tambahkan ** halaman tahap sumber, untuk Penye ** dia Sumber**, pilih ** AWS CodeCommit**.

   1. Untuk Nama ** Repositori**, pilih nama CodeCommit repositori yang akan digunakan sebagai lokasi sumber untuk pipeline Anda.

   1. Untuk Nama ** cabang**, pilih cabang yang akan digunakan dan pilih Ber ** ikutnya**.

1. Pada ** Langkah 4: Tambahkan ** halaman tahap build, untuk ** Build provider ** pilih **AWS CodeBuild**, lalu pilih ** Buat proyek**.

   1. Untuk Nama ** Proyek**, pilih nama unik untuk proyek build Anda. Untuk tutorial ini, nama proyeknya adalah ** hello-world**.

   1. Untuk gambar ** Lingkungan**, pilih Gambar ** terkelola**.

   1. Untuk Sistem ** operasi**, pilih ** Amazon Linux 2**.

   1. Untuk ** Runtime (s)**, pilih ** Standar**.

   1. Untuk ** Gambar**, pilih ** `aws/codebuild/amazonlinux2-x86_64-standard:3.0`**.

   1. Untuk versi ** Gambar ** dan tipe ** Lingkungan**, gunakan nilai default.

   1. Pilih ** Aktifkan tanda ini jika Anda ingin membuat gambar Docker atau ingin build Anda mendapatkan hak istimewa ** yang ditingkatkan.

   1. Hapus pilihan ** CloudWatch log**. Anda mungkin perlu memperluas ** Advanced**.

   1. Pilih ** Lanjutkan ke CodePipeline**.

   1. Pilih **Berikutnya**.
**catatan**  
Wizard membuat peran CodeBuild layanan untuk proyek build Anda, yang disebut ** codebuild- {{build-project-name}} - ** service-role. Perhatikan nama peran ini, saat Anda menambahkan izin Amazon ECR ke dalamnya nanti.

1. Pada ** halaman ** Langkah 5: Tambahkan tahap penerapan, untuk Penyedia ** Deployment**, pilih ** Amazon ECS**.

   1. Untuk Nama ** Cluster**, pilih cluster Amazon ECS tempat layanan Anda berjalan. Untuk tutorial ini, cluster adalah ** default**.

   1. Untuk Nama ** layanan**, pilih layanan yang akan diperbarui dan pilih Ber ** ikutnya**. Untuk tutorial ini, nama layanannya adalah ** hello-world**.

1. Pada ** halaman ** Langkah 6: Tinjau, tinjau konfigurasi pipeline Anda dan pilih ** Buat pipeline ** untuk membuat pipeline.
**catatan**  
Sekarang pipa telah dibuat, ia mencoba untuk berjalan melalui tahapan pipa yang berbeda. Namun, CodeBuild peran default yang dibuat oleh wizard tidak memiliki izin untuk menjalankan semua perintah yang terkandung dalam `buildspec.yml` file, sehingga tahap pembuatan gagal. Bagian selanjutnya menambahkan izin untuk tahap build.

## Langkah 3: Tambahkan Izin Amazon ECR ke CodeBuild Peran
<a name="code-build-perms"></a>

 CodePipeline Wizard membuat peran IAM untuk proyek build, yang CodeBuild disebut ** codebuild- - {{build-project-name}} service-role. ** Untuk tutorial ini, namanya adalah ** codebuil ** d-hello-world-service-role. Karena `buildspec.yml` file melakukan panggilan ke operasi Amazon ECR API, peran tersebut harus memiliki kebijakan yang memungkinkan izin untuk melakukan panggilan Amazon ECR ini. Prosedur berikut membantu Anda melampirkan izin yang tepat ke peran tersebut.

**Untuk menambahkan izin Amazon ECR ke CodeBuild peran**

1. Buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Di panel navigasi sebelah kiri, pilih **Peran**.

1. Di kotak pencarian, ketik ** codebuild- ** dan pilih peran yang dibuat oleh CodePipeline wizard. Untuk tutorial ini, nama peran adalah ** codebuil ** d-hello-world-service-role.

1. Pada ** halaman ** Ringkasan, pilih Lamp ** irkan kebijakan**.

1. Pilih kotak di sebelah kiri ** AmazonEC2ContainerRegistryPowerUser ** kebijakan, lalu pilih Lamp ** irkan kebijakan**.

## Langkah 4: Uji Pipeline Anda
<a name="commit-change"></a>

Pipeline Anda harus memiliki segalanya untuk menjalankan penerapan AWS berkelanjutan asli end-to-end. Sekarang, uji fungsinya dengan mendorong perubahan kode ke repositori sumber Anda.

**Untuk menguji pipeline Anda**

1. Buat perubahan kode ke repositori sumber yang dikonfigurasi, komit, dan dorong perubahan.

1. Buka CodePipeline konsol di [ https://console.aws.amazon.com/codepipeline/](https://console.aws.amazon.com/codepipeline/).

1. Pilih pipeline Anda dari daftar.

1. Perhatikan kemajuan pipa melalui tahapannya. Pipeline Anda harus selesai dan layanan Amazon ECS Anda menjalankan image Docker yang dibuat dari perubahan kode Anda.