

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

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

Tutorial ini membantu Anda membuat pipeline deployment (CD) yang lengkap dan end-to-end berkelanjutan dengan Amazon ECS. CodePipeline

**penting**  
Sebagai bagian dari pembuatan pipa di konsol, ember artefak S3 akan digunakan 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 yang aman dan dapat diandalkan.

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

**catatan**  
Tutorial ini untuk tindakan penerapan standar Amazon ECS untuk CodePipeline dengan aksi sumber. Untuk tutorial yang menggunakan tindakan ECSstandard penyebaran Amazon bersama dengan tindakan ECRBuild AndPublish build CodePipeline untuk mendorong gambar Anda, lihat[Tutorial: Buat dan dorong 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 AWS Wilayah yang sama.
+ Sebuah 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 *AWS CodeCommit Panduan Pengguna*.
+ Sebuah 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 Layanan Amazon Elastic Container*.
**penting**  
Tindakan penerapan standar Amazon ECS untuk CodePipeline 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 Layanan Amazon Elastic Container*.

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

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

Tutorial ini digunakan CodeBuild untuk membangun gambar 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:
+ Tahap pra-bangun:
  + 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 panggung:
  + Buat gambar Docker dan beri tag gambar baik sebagai `latest` maupun dengan ID komit Git.
+ Tahap pasca-pembangunan:
  + Dorong gambar ke repositori ECR Anda dengan kedua tag.
  + Tulis file yang dipanggil `imagedefinitions.json` di root build yang memiliki nama penampung layanan Amazon ECS Anda serta gambar dan 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 ini diperlukan untuk pekerja kerja ECS.

Rekatkan teks contoh ini untuk membuat `buildspec.yml` file Anda, dan ganti nilai untuk definisi gambar dan tugas Anda. Teks ini menggunakan contoh ID akun 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[Prasyarat](#ecs-cd-prereqs), digunakan oleh layanan Amazon ECS untuk tutorial ini. `REPOSITORY_URI`Nilai sesuai dengan `image` repositori (tanpa tag gambar apa pun), dan `hello-world` nilai di dekat akhir file sesuai dengan nama wadah dalam definisi tugas layanan. 

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

1. Buka editor teks lalu 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 image Docker Anda. Ganti `hello-world` dengan nama kontainer dalam definisi tugas layanan Anda yang mereferensikan gambar 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 Deployment 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**, dalam **nama Pipeline**, ketikkan 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 **penyedia Sumber**, pilih ** AWS CodeCommit**.

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

   1. Untuk **nama Branch**, pilih cabang yang akan digunakan dan pilih **Next**.

1. Pada **Langkah 4: Tambahkan halaman tahap build**, untuk **penyedia Build** pilih **AWS CodeBuild**, lalu pilih **Create project**.

   1. Untuk **nama Project**, 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**, pilih **Standar**.

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

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

   1. Pilih **Aktifkan bendera ini jika Anda ingin membuat gambar Docker atau ingin build Anda mendapatkan hak istimewa yang lebih tinggi**.

   1. Batalkan 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 sana nanti.

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

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

   1. Untuk **nama Layanan**, pilih layanan yang akan diperbarui dan pilih **Berikutnya**. 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 menjalankan melalui tahapan pipa yang berbeda. Namun, CodeBuild peran default yang dibuat oleh wizard tidak memiliki izin untuk menjalankan semua perintah yang terdapat dalam `buildspec.yml` file, sehingga tahap build gagal. Bagian selanjutnya menambahkan izin untuk tahap build.

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

 CodePipeline Wizard membuat peran IAM untuk proyek CodeBuild build, yang disebut **codebuild- *build-project-name* -service-role**. Untuk tutorial ini, namanya adalah **codebuild-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 ECR Amazon ini. Prosedur berikut membantu Anda melampirkan izin yang tepat ke peran tersebut.

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

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 **codebuild-hello-world-service-role**.

1. Pada halaman **Ringkasan**, pilih **Lampirkan kebijakan**.

1. Pilih kotak di sebelah kiri EC2 ContainerRegistryPowerUser kebijakan **Amazon**, dan pilih **Lampirkan kebijakan**.

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

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

**Untuk menguji pipa 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.