Tutorial: Penyebaran 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: Penyebaran Standar Amazon ECS dengan CodePipeline

Tutorial ini membantu Anda untuk membuat lengkap, end-to-end continuous deployment (CD) pipeline dengan Amazon ECS dengan CodePipeline.

catatan

Tutorial ini adalah untuk tindakan penerapan standar Amazon ECS untuk CodePipeline. Untuk tutorial yang menggunakan Amazon ECS untuk CodeDeploy tindakan penyebaran 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 pipa CD Anda. Berikut adalah hal-hal yang Anda butuhkan untuk memulai:

catatan

Semua sumber daya ini harus dibuat dalam hal yang samaAWSWilayah.

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

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

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

Setelah Anda puas dengan prasyarat ini, Anda dapat melanjutkan tutorial dan membuat pipa CD Anda.

Langkah 1: Tambahkan File Spesifikasi Build ke Repositori Sumber Anda

Tutorial ini menggunakan CodeBuild untuk membangun gambar Docker Anda dan mendorong gambar ke Amazon ECR. Tambahkanbuildspec.ymlfile ke repositori kode sumber Anda untuk memberitahu CodeBuild bagaimana melakukan itu. Contoh tersebut melakukan hal berikut:

  • Tahap pra-membangun:

    • Masuk ke Amazon ECR.

    • Atur URI repositori ke gambar ECR Anda dan tambahkan tag gambar dengan tujuh karakter pertama dari Git commit ID dari sumbernya.

  • Tahap membangun:

    • Membangun gambar Docker dan tag gambar keduanya sebagailatestdan dengan Git commit ID.

  • Post-build tahap:

    • Mendorong citra ke repositori ECR Anda dengan kedua tag.

    • Menulis file bernamaimagedefinitions.jsondi root build yang memiliki nama kontainer layanan Amazon ECS Anda dan gambar dan tag. Tahap penyebaran pipa CD Anda menggunakan informasi ini untuk membuat revisi baru definisi tugas layanan Anda, dan kemudian memperbarui layanan untuk menggunakan definisi tugas baru. Parameterimagedefinitions.jsonfile diperlukan untuk pekerja kerja ECS.

Tempel contoh teks ini untuk membuat Andabuildspec.ymlfile, dan mengganti nilai untuk gambar dan definisi 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. ParameterREPOSITORY_URIsesuai denganimagerepositori (tanpa tag gambar), danhello-worldnilai dekat akhir file sesuai dengan nama kontainer dalam definisi tugas layanan.

Untuk menambahkanbuildspec.ymlfile ke repositori sumber Anda

  1. Buka editor teks dan kemudian copy dan paste spesifikasi build di atas ke file baru.

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

  3. Komit dan dorong Andabuildspec.ymlfile ke repositori sumber Anda.

    1. Tambahkan file.

      git add .
    2. Lakukan perubahan.

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

      git push

Langkah 2: Membuat Pipa Penyebaran Berkelanjutan Anda

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

Untuk membuat alur Anda

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

  2. PadaSelamat datanghalaman, pilihMembuat Alur.

    Jika ini adalah pertama kalinya Anda menggunakan CodePipeline, halaman pengantar akan munculSelamat datang. Pilih Mulai Sekarang.

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

  4. Di Langkah 2: Tambahkan tahap sumberhalaman, untukPenyedia sumber, pilih AWS CodeCommit.

    1. UntukNama repositori, pilih nama repositori CodeCommit untuk digunakan sebagai lokasi sumber untuk pipa Anda.

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

  5. PadaLangkah 3: Tambahkan tahap buildhalaman, untukPenyedia buildpilihAWS CodeBuild, dan kemudian pilihMembuat proyek.

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

    2. UntukCitra lingkungan, pilihCitra terkelola.

    3. UntukSistem operasi, pilihAmazon Linux 2.

    4. UntukRuntime, pilihStandard.

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

    6. UntukVersi gambardanTipe lingkungan, gunakan nilai default.

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

    8. Hapus pilihanLog CloudWatch. Anda mungkin perlu memperluasLanjutan.

    9. Pilih Lanjutkan ke CodePipeline.

    10. Pilih Selanjutnya.

      catatan

      Wizard membuat peran layanan CodeBuild untuk proyek build Anda, yang disebutCodeBuildbuild-project-namaperan -layanan-. Perhatikan nama peran ini, saat Anda menambahkan izin Amazon ECR ke dalamnya nanti.

  6. PadaLangkah 4: Tambahkan tahap deployhalaman, untukPenyedia deployment, pilihAmazon ECS.

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

    2. UntukNama layanan, pilih layanan untuk memperbarui dan memilihSelanjutnya. Untuk tutorial ini, nama layanan adalahhello-dunia.

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

    catatan

    Sekarang setelah pipa telah dibuat, ia mencoba untuk menjalankan melalui tahap pipa yang berbeda. Namun, peran CodeBuild default 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 Peran CodeBuild

Wizard CodePipeline membuat peran IAM untuk proyek build CodeBuild, yang disebutCodeBuildbuild-project-namaperan -layanan-. Untuk tutorial ini, namanyacodebuild-hello-dunia-layanan-peran. Karenabuildspec.ymlfile melakukan 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 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, ketikCodeBuilddan pilih peran yang dibuat oleh wizard CodePipeline. Untuk tutorial ini, nama perancodebuild-hello-dunia-layanan-peran.

  4. PadaRingkasanhalaman, pilihLampirkan kebijakan.

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

Langkah 4: Menguji Alur Anda

Pipa Anda harus memiliki segalanya untuk menjalankan native end-to-endAWSdeployment 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 konsol CodePipeline di https://console.aws.amazon.com/codepipeline/.

  3. Pilih alur Anda dari daftar.

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