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 untuk membuat lengkap, end-to-end pipeline penerapan berkelanjutan (CD) dengan Amazon ECS dengan CodePipeline.

catatan

Tutorial ini adalah untuk tindakan penerapan standar Amazon ECS untuk CodePipeline. Untuk tutorial yang menggunakan Amazon ECS CodeDeploy deployment action biru/hijau di CodePipeline, LihatTutorial: Buat pipeline dengan sumber Amazon ECR dan penyebaran 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 yang samaAWSWilayah.

  • Sebuah repositori kontrol sumber (tutorial ini menggunakan CodeCommit) dengan Dockerfile dan sumber aplikasi Anda. Untuk informasi selengkapnya, lihatBuat CodeCommitRepositoridi dalamAWS CodeCommitPanduan 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, lihatMembuat repositoridanMendorong citradi dalamPanduan Pengguna Amazon Elastic Container Registry.

  • Definisi tugas Amazon ECS yang mereferensikan image Docker yang dihosting di repositori gambar Anda. Untuk informasi selengkapnya, lihatMembuat Definisi Tugasdi dalamPanduan Amazon Elastic Container Service.

    penting

    Tindakan penerapan standar Amazon ECS untuk CodePipeline membuat revisi sendiri atas definisi tugas berdasarkan revisi yang digunakan oleh layanan Amazon ECS. Jika Anda membuat revisi baru untuk definisi tugas tanpa memperbarui layanan Amazon ECS, tindakan penyebaran akan mengabaikan revisi tersebut.

    Berikut ini adalah contoh tugas definisi yang digunakan untuk tutorial ini. Nilai yang Anda gunakannamedanfamilyakan 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": [] }
  • Klaster Amazon ECS yang menjalankan layanan yang menggunakan definisi tugas yang disebutkan sebelumnya. Untuk informasi selengkapnya, lihatMembuat klasterdanMembuat Layanandi dalamPanduan Amazon Elastic Container Service.

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 CodeBuild untuk membangun image Docker Anda dan mendorong gambar ke Amazon ECR. Tambahkanbuildspec.ymlfile ke repositori kode sumber Anda untuk memberitahu CodeBuildbagaimana untuk melakukannya. Contoh build spesifikasi berikut 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.

  • Tahap Build:

    • Bangun image Docker dan beri tag pada gambar keduanya sebagailatestdan dengan Git commit ID.

  • Tahap pasca-bangun:

    • Men-push citra ke repositori ECR Anda dengan kedua tag.

    • Tulis file bernamaimagedefinitions.jsondi root build yang memiliki nama kontainer layanan Amazon ECS Anda serta 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. Klasterimagedefinitions.jsonfile diperlukan untuk pekerja kerja ECS.

Tempelkan contoh teks ini untuk membuatbuildspec.ymlfile, dan ganti nilai untuk definisi gambar dan tugas Anda.

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 012345678910.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 diPrasyarat, digunakan oleh layanan Amazon ECS untuk tutorial ini. KlasterREPOSITORY_URIsesuai denganimagerepositori (tanpa tag gambar), danhello-worldnilai di dekat akhir file sesuai dengan nama kontainer dalam definisi tugas layanan.

Untuk menambahkanbuildspec.ymlfile ke repositori sumber Anda

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

  2. GantiREPOSITORY_URIvalue (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. Gantihello-worlddengan nama kontainer dalam definisi tugas layanan Anda yang mereferensikan image Docker Anda.

  3. Komit dan dorongbuildspec.ymlfile ke repositori sumber Anda.

    1. Tambahkan file.

      git add .
    2. Melampirkan perubahan.

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

      git push

Langkah 2: Membuat Pipeline Deployment Berkelanjutan

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

Untuk membuat alur Anda

  1. Buka CodePipeline konsolhttps://console.aws.amazon.com/codepipeline/.

  2. Padaselamat datanghalaman, pilihMembuat Alur.

    Jika ini pertama kalinya Anda menggunakan CodePipeline, halaman pengantar muncul, bukanselamat datang. Pilih Mulai Sekarang.

  3. Di Langkah 1: Namahalaman,Nama Alur, ketik nama untuk pipeline Anda dan pilihSelanjutnya. Untuk tutorial ini, nama pipeline adalahhello-dunia.

  4. Di Langkah 2: Tambahkan tahaphalaman,Penyedia sumber, Memiilih AWS CodeCommit.

    1. UntukNama repositori, pilih nama CodeCommitrepositori untuk digunakan sebagai lokasi sumber untuk pipeline Anda.

    2. UntukNama cabang, pilih cabang yang akan digunakan dan pilihSelanjutnya.

  5. PadaLangkah 3: Tambahkan tahaphalaman,Penyedia BuildpilihAWS CodeBuild, dan kemudian pilihMembuat.

    1. UntukNama Proyek, pilih nama yang unik untuk proyek build Anda. Untuk tutorial ini, nama proyeknya adalahhello-dunia.

    2. UntukCitra lingkungan, Memiilihcitra terkelola.

    3. UntukSistem operasi, MemiilihAmazon Linux 2.

    4. UntukRuntime, MemiilihStandard.

    5. UntukCitra, Memiilihaws/codebuild/amazonlinux2-x86_64-standard:3.0.

    6. UntukVersi gambardanTipe lingkungan, Gunakan nilai default.

    7. PilihAktifkan flag ini jika Anda ingin membuat image Docker atau ingin build Anda mendapatkan hak istimewa yang lebih tinggi.

    8. Batalkan pilihanCloudWatch log. Anda mungkin harus memperluasLanjutan.

    9. MemiilihLanjutkan CodePipeline.

    10. Pilih Selanjutnya.

      catatan

      Wizard CodeBuild peran layanan untuk proyek build Anda, disebutCoBuildbuild-project-name-peran. Perhatikan nama peran ini, saat Anda menambahkan izin Amazon ECR ke dalamnya nanti.

  6. PadaLangkah 4: Tambahkan tahaphalaman,Penyedia deployment, MemiilihAmazon ECS.

    1. UntukNama klaster, pilih klaster Amazon ECS tempat layanan Anda berjalan. Untuk tutorial ini, cluster adalahdefault.

    2. UntukNama layanan, pilih layanan yang akan diperbarui dan pilihSelanjutnya. Untuk tutorial ini, nama layananhello-dunia.

  7. PadaLangkah 5: Tinjauhalaman, tinjau konfigurasi alur Anda dan pilihMembuat Aluruntuk membuat alur.

    catatan

    Sekarang pipa telah dibuat, ia mencoba untuk menjalankan melalui tahapan pipa yang berbeda. Namun, defaultnya CodeBuild peran yang dibuat oleh wizard tidak memiliki izin untuk menjalankan semua perintah yang terkandung dalambuildspec.ymlfile, sehingga tahap build gagal. Bagian selanjutnya menambahkan izin untuk tahap build.

Langkah 3: Tambahkan Izin Amazon ECR ke CodeBuildPeran

Klaster CodePipeline wizard menciptakan IAM role untuk CodeBuild membangun proyek, disebutCoBuildbuild-project-name-peran. Untuk tutorial ini, namanyacodebuild-hello-world-service-Peran. Karenabuildspec.ymlfile membuat panggilan ke operasi API Amazon ECR, peran harus memiliki kebijakan yang memungkinkan izin untuk melakukan panggilan Amazon ECR ini. Prosedur berikut membantu Anda melampirkan izin yang tepat untuk peran.

Untuk menambahkan izin Amazon ECR ke CodeBuild peran

  1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi sebelah kiri, pilih Peran.

  3. Dalam kotak pencarian, ketikCoBuilddan pilih peran yang diciptakan oleh CodePipeline penyihir. Untuk tutorial ini, nama rolecodebuild-hello-world-service-Peran.

  4. PadaRingkasanhalaman, pilihLampirkan kebijakan.

  5. Pilih kotak di sebelah kiriAmazonec2ContainerRegistryPowerUserkebijakan, dan pilihLampirkan kebijakan.

Langkah 4: Uji Alur Anda

Pipa Anda harus memiliki segalanya untuk menjalankan end-to-end asliAWSdeployment kontinu. Sekarang, uji fungsinya dengan mendorong perubahan kode ke repositori sumber Anda.

Untuk menguji Alur Anda

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

  2. Buka CodePipeline konsolhttps://console.aws.amazon.com/codepipeline/.

  3. Pilih alur 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.