Menggunakan CodePipeline untuk menyebarkan Terraform dan template CloudFormation - AWS Bimbingan Preskriptif

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

Menggunakan CodePipeline untuk menyebarkan Terraform dan template CloudFormation

Pemberitahuan

AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya

Di DPA, Anda menggunakan blok bangunan untuk membuat akselerator AWS CodePipeline untuk Terraform dan IAc. CloudFormation Bagian ini menjelaskan hal berikut untuk kasus penggunaan ini:

  • Struktur pipa standar

  • Tahapan dan pekerjaan yang dapat digunakan kembali

  • Alat terintegrasi untuk pemindaian keamanan

Repositori DPA berisi folder untuk Terraform dan. CloudFormation Masing-masing folder ini berisi dua subfolder berikut:

  • pipeline-modules — Folder ini berisi kode untuk menyebarkan struktur pipa standar.

  • berbagi - Folder ini berisi file ready-to-use buildspec untuk tahapan dan pekerjaan DPA.

Prasyarat

  • Aktif Akun AWS

  • Izin untuk menyediakan sumber daya menggunakan templat IAc

  • Izin untuk membuat AWS CodeCommit repositori dan komponen CodePipeline

Alat

Petunjuk

Buat CodeCommit repositori

  1. Buat dua CodeCommit repositori terpisah sebagai berikut:

    • common-repo— Repositori ini berisi pustaka bersama, file buildspec, dan dependensi.

    • app-repo— Repositori ini berisi Terraform atau CloudFormation template untuk menyebarkan infrastruktur Anda.

    Untuk petunjuk, lihat Membuat AWS CodeCommit repositori.

  2. Di common-repo repo, buat folder bernamashared. Salin file buildspec dari Terraform atau folder CloudFormationbersama di repo GitHub DPA ke folder baru. Untuk petunjuk, lihat Membuat atau menambahkan file ke AWS CodeCommit repositori.

  3. Di app-repo repositori, buat folder bernama. entrypoint Salin file dari folder Terraform atau CloudFormationentrypoint di repo GitHub DPA ke folder baru. Untuk informasi selengkapnya tentang file-file ini, lihatMemahami file JSON titik masuk.

  4. Tinjau direktori Terraform atau CloudFormationcontoh, lalu susun app-repo folder Anda sesuai dengan contoh ini. Direktori ini berisi contoh penerapan instance Amazon Elastic Compute Cloud (Amazon EC2) atau bucket Amazon Simple Storage Service (Amazon S3).

  5. Lanjutkan ke salah satu dari dua bagian berikut:

Buat pipeline dan tentukan tahapan (Terraform)

  1. Kloning repositori DevOps Pipeline Accelerator (DPA) dari GitHub ke workstation lokal Anda.

  2. Di repositori kloning, arahkan ke folder. aws-codepipeline/terraform/pipeline-modules

  3. Dalam file terraform.tfvars, perbarui dan validasi status Terraform dan variabel khusus peran (IAM). AWS Identity and Access Management

  4. Buat gambar Docker. Untuk petunjuk, lihat Pembuatan gambar Docker untuk menggunakan in CodeBuild (GitHub).

  5. Perbarui builder_image variabel yang ditentukan dalam file terraform.tfvars.

  6. Masukkan perintah berikut. Ini menginisialisasi, mempratinjau, dan menyebarkan infrastruktur melalui Terraform.

    terraform init terraform plan terraform apply
  7. Masuk ke Akun AWS. Di CodePipeline konsol, konfirmasikan bahwa pipeline baru telah dibuat.

    Catatan: Jika run pertama dalam failed keadaan, ulangi langkah sebelumnya.

  8. Ketika CodePipeline pipeline baru dibuat, peran IAM baru dibuat AWS CodeBuild secara otomatis. Nama peran yang dibuat secara otomatis ini berakhir-codebuild-role. Perbarui peran ini dengan izin yang diperlukan untuk menerapkan infrastruktur Anda.

Buat pipeline dan tentukan tahapan (CloudFormation)

  1. Kloning repositori DevOps Pipeline Accelerator (DPA) dari GitHub ke workstation lokal Anda.

  2. Di repositori kloning, arahkan ke folder. aws-codepipeline/cloudformation/pipeline-modules

  3. Terapkan template CloudFormation pipeline-cft.yaml. Berikut ini adalah parameter yang diperlukan yang harus Anda lewatkan ke tumpukan.

    • ArtifactsBucket— Nama repo yang berisi artefak pipa yang akan diperbarui

    • EcrDockerRepository— Uniform resource identifier (URI) dari repositori Amazon ECR dengan tag image

    • CodeCommitAppRepo— Nama CodeCommit repositori yang berisi template

    • CodeCommitBaseRepo— Nama CodeCommit repositori yang berisi file bersama

    • CodeCommitRepoBranch— Nama cabang CodeCommit repositori

    • SNSMailAddress— Alamat email yang akan menerima pemberitahuan Amazon Simple Notification Service (Amazon SNS) tentang status pipeline

    Untuk petunjuk, lihat Bekerja dengan tumpukan dalam CloudFormation dokumentasi.

  4. Masuk ke akun AWS. Di CodePipeline konsol, konfirmasikan bahwa pipeline baru telah dibuat.  

  5. Ketika CodePipeline pipeline baru dibuat, peran IAM baru dibuat AWS CodeBuild secara otomatis. Nama peran yang dibuat secara otomatis ini berakhir-codebuild-role. Perbarui peran ini dengan izin yang diperlukan untuk menerapkan infrastruktur Anda.

Memahami file JSON titik masuk

File titik masuk Terraform

Ini adalah file konfigurasi utama. Dalam file ini, Anda dapat menyesuaikan dan mengaktifkan atau menonaktifkan panggung. Jika Anda menonaktifkan panggung, itu tidak menghapus atau menghapus panggung dari pipa. Sebaliknya, panggung dilewati selama runtime.

{ "build_stage_required" : "true", "test_stage_required" : "true", "predeploy_stage_required": "true", "deploy_stage_required": "true", "postdeploy_stage_required": "true", "destroy_stage_required": "true", "bucket":"tf-state-dpa", # S3 bucket used for Terraform backend "key":"terraform_test.tfstate", # S3 key to be used "region":"us-east-1", "dynamodb_table":"tf-state-dpa" # DynamoDB Table for Terraform backend }

CloudFormation file titik masuk

Ini adalah file konfigurasi utama. Dalam file ini, Anda menyesuaikan tahapan dan mengaktifkan atau menonaktifkannya. Jika Anda menonaktifkan panggung, itu tidak menghapus atau menghapus panggung dari pipa. Sebagai gantinya, pipeline melewatkan panggung selama runtime.

{ "init_stage_required" : "true", "test_stage_required" : "true", "createinfra_stage_required": "true", "envType" : "cloudformation", "stage_required" : "true", "cft_s3_bucket" : "pipeline-bucket", #S3 bucket from the destination account to keep CFT templates "stack_name" : "aws-cft-poc", #CloudFormation stack name "account" : "************", #Destination AWS account to deploy stack "roleName" : "codestack-poc-cross-account-role", #Cross-account IAM role name "region" : "us-east-1", "destroy_stack" : "false" #To destroy the provisioned stack, set this value to "true" }