Tutorial: Penerapan Standar Amazon ECS dengan CodePipeline - AWS CodePipeline

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

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

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 Amazon ECR dan penerapan ECS-to- CodeDeploy

Prasyarat

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 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 dan Mendorong Gambar 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 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 dan Membuat Layanan 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

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 sumbernya.

  • 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.jsonFile 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 disediakanPrasyarat, digunakan oleh layanan Amazon ECS untuk tutorial ini. REPOSITORY_URINilai 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.

  2. 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.

  3. Komit dan dorong buildspec.yml file Anda ke repositori sumber Anda.

    1. Tambahkan file.

      git add .
    2. Lakukan perubahan.

      git commit -m "Adding build specification."
    3. Dorong komit.

      git push

Langkah 2: Membuat Pipeline Deployment Berkelanjutan

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/.

  2. 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.

  3. Pada halaman Langkah 1: Nama, untuk nama Pipeline, ketikkan nama untuk pipeline Anda. Untuk tutorial ini, nama pipeline adalah hello-world.

  4. Dalam tipe Pipeline, pilih V1 untuk keperluan tutorial ini. Anda juga dapat memilih V2; Namun, perhatikan bahwa jenis pipa berbeda dalam karakteristik dan harga. Untuk informasi selengkapnya, lihat Jenis pipa. Pilih Berikutnya.

  5. Pada Langkah 2: 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.

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

  6. Pada Langkah 3: 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.

    2. Untuk gambar Lingkungan, pilih Gambar terkelola.

    3. Untuk sistem operasi, pilih Amazon Linux 2.

    4. Untuk Runtime, pilih Standar.

    5. Untuk Gambar, pilih aws/codebuild/amazonlinux2-x86_64-standard:3.0.

    6. Untuk versi Gambar dan jenis Lingkungan, gunakan nilai default.

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

    8. Batalkan pilihan CloudWatch log. Anda mungkin perlu memperluas Advanced.

    9. Pilih Lanjutkan ke CodePipeline.

    10. Pilih Selanjutnya.

      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.

  7. Pada Langkah 4: 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.

    2. Untuk nama Layanan, pilih layanan yang akan diperbarui dan pilih Berikutnya. Untuk tutorial ini, nama layanannya adalah hello-world.

  8. Pada halaman Langkah 5: 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

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/.

  2. Di panel navigasi sebelah kiri, pilih Peran.

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

  4. Pada halaman Ringkasan, pilih Lampirkan kebijakan.

  5. Pilih kotak di sebelah kiri kebijakan AmazonEC2, dan pilih Lampirkan ContainerRegistryPowerUser kebijakan.

Langkah 4: Uji Pipa Anda

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.

  2. Buka CodePipeline konsol di https://console.aws.amazon.com/codepipeline/.

  3. Pilih pipeline Anda dari daftar.

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