Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Buat CI/CD pipeline untuk memvalidasi konfigurasi Terraform dengan menggunakan AWS CodePipeline
Aromal Raj Jayarajan dan Vijesh Vijayakumaran Nair, Amazon Web Services
Ringkasan
Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Pelajari selengkapnya
Pola ini menunjukkan cara menguji konfigurasi HashiCorp Terraform dengan menggunakan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang digunakan oleh AWS. CodePipeline
Terraform adalah aplikasi antarmuka baris perintah yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud. Solusi yang disediakan dalam pola ini membuat CI/CD pipeline yang membantu Anda memvalidasi integritas konfigurasi Terraform Anda dengan menjalankan lima tahap: CodePipeline
"checkout"
menarik konfigurasi Terraform yang Anda uji dari repositori AWS. CodeCommit"validate"
menjalankan infrastruktur sebagai alat validasi kode (IAc), termasuk tfsec,, dan checkov. TFLint Tahap ini juga menjalankan perintah validasi Terraform IAc berikut: dan. terraform validate
terraform fmt
"plan"
menunjukkan perubahan apa yang akan diterapkan pada infrastruktur jika konfigurasi Terraform diterapkan."apply"
menggunakan rencana yang dihasilkan untuk menyediakan infrastruktur yang diperlukan di lingkungan pengujian."destroy"
menghapus infrastruktur pengujian yang dibuat selama"apply"
tahap.
Prasyarat dan batasan
Prasyarat
Akun AWS yang aktif
AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi
Git
, diinstal dan dikonfigurasi pada mesin lokal Anda Terraform
, diinstal dan dikonfigurasi pada mesin lokal Anda
Batasan
Pendekatan pola ini menerapkan AWS CodePipeline ke dalam satu akun AWS dan Wilayah AWS saja. Perubahan konfigurasi diperlukan untuk penerapan multi-akun dan Multi-wilayah.
Peran AWS Identity and Access Management (IAM) yang diberikan pola ini (codepipeline_iam_role) mengikuti prinsip hak istimewa terkecil. Izin peran IAM ini harus diperbarui berdasarkan sumber daya spesifik yang perlu dibuat pipeline Anda.
Versi produk
AWS CLI versi 2.9.15 atau yang lebih baru
Terraform versi 1.3.7 atau yang lebih baru
Arsitektur
Tumpukan teknologi target
AWS CodePipeline
AWS CodeBuild
AWS CodeCommit
AWS IAM
Amazon Simple Storage Service (Amazon S3)
AWS Key Management Service (AWS KMS)
Terraform
Arsitektur target
Diagram berikut menunjukkan contoh alur kerja CI/CD pipeline untuk menguji konfigurasi Terraform di. CodePipeline

Diagram menunjukkan alur kerja berikut:
Di CodePipeline, pengguna AWS memulai tindakan yang diusulkan dalam paket Terraform dengan menjalankan
terraform apply
perintah di AWS CLI.AWS CodePipeline mengasumsikan peran layanan IAM yang mencakup kebijakan yang diperlukan untuk mengakses CodeCommit, AWS KMS CodeBuild, dan Amazon S3.
CodePipeline menjalankan tahap
"checkout"
pipeline untuk menarik konfigurasi Terraform dari CodeCommit repositori AWS untuk pengujian.CodePipeline menjalankan
"validate"
tahapan untuk menguji konfigurasi Terraform dengan menjalankan alat validasi IAc dan menjalankan perintah validasi Terraform IAc dalam sebuah proyek. CodeBuildCodePipeline menjalankan
"plan"
panggung untuk membuat rencana dalam CodeBuild proyek berdasarkan konfigurasi Terraform. Pengguna AWS dapat meninjau paket ini sebelum perubahan diterapkan ke lingkungan pengujian.Code Pipeline menjalankan
"apply"
tahapan untuk mengimplementasikan rencana dengan menggunakan CodeBuild proyek untuk menyediakan infrastruktur yang diperlukan di lingkungan pengujian.CodePipeline menjalankan
"destroy"
panggung, yang digunakan CodeBuild untuk menghapus infrastruktur pengujian yang dibuat selama"apply"
tahap.
Alat
Alat
Layanan AWS
AWS CodePipeline membantu Anda memodelkan dan mengonfigurasi berbagai tahapan rilis perangkat lunak dengan cepat dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
AWS CodeBuild adalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
AWS CodeCommit adalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri.
AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
AWS Key Management Service (AWS KMS) membantu Anda membuat dan mengontrol kunci kriptografi untuk membantu melindungi data Anda.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
Layanan lainnya
HashiCorp Terraform
adalah aplikasi antarmuka baris perintah yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.
Kode
Kode untuk pola ini tersedia di GitHub aws-codepipeline-terraform-cicdsamples
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Kloning GitHub repositori. | Kloning GitHub aws-codepipeline-terraform-cicdsamples
Untuk informasi selengkapnya, lihat Mengkloning repositori dalam dokumentasi | DevOps insinyur |
Buat file definisi variabel Terraform. | Buat Untuk informasi selengkapnya, lihat Menetapkan nilai ke variabel modul root catatan
| DevOps insinyur |
Konfigurasikan AWS sebagai penyedia Terraform. |
Untuk informasi selengkapnya, lihat penyedia AWS | DevOps insinyur |
Perbarui konfigurasi penyedia Terraform untuk membuat bucket replikasi Amazon S3. |
catatanReplikasi mengaktifkan penyalinan objek otomatis dan asinkron di seluruh bucket Amazon S3. | DevOps insinyur |
Inisialisasi konfigurasi Terraform. | Untuk menginisialisasi direktori kerja Anda yang berisi file konfigurasi Terraform, jalankan perintah berikut di folder root repositori kloning:
| DevOps insinyur |
Buat paket Terraform. | Untuk membuat paket Terraform, jalankan perintah berikut di folder root repositori kloning:
catatanTerraform mengevaluasi file konfigurasi untuk menentukan status target untuk sumber daya yang dideklarasikan. Kemudian membandingkan status target dengan keadaan saat ini dan membuat rencana. | DevOps insinyur |
Verifikasi paket Terraform. | Tinjau paket Terraform dan konfirmasikan bahwa paket tersebut mengonfigurasi arsitektur yang diperlukan di akun AWS target Anda. | DevOps insinyur |
Menyebarkan solusinya. |
catatanTerraform membuat, memperbarui, atau menghancurkan infrastruktur untuk mencapai status target yang dinyatakan dalam file konfigurasi. | DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Siapkan repositori kode sumber. |
| DevOps insinyur |
Validasi tahapan pipa. |
Untuk informasi selengkapnya, lihat Melihat detail pipeline dan histori (konsol) di Panduan CodePipeline Pengguna AWS. pentingKetika perubahan dilakukan ke cabang utama repositori sumber, pipa uji diaktifkan secara otomatis. | DevOps insinyur |
Verifikasi keluaran laporan. |
catatan
| DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Bersihkan pipa dan sumber daya terkait. | Untuk menghapus sumber daya pengujian dari akun AWS Anda, jalankan perintah berikut di folder root repositori kloning:
| DevOps insinyur |
Pemecahan Masalah
Isu | Solusi |
---|---|
Anda menerima AccessDenied kesalahan selama |
|
Sumber daya terkait
Blok modul
(dokumentasi Terraform) buat-pipa (dokumentasi
AWS CLI) Konfigurasikan enkripsi sisi server untuk artefak yang disimpan di Amazon S3 untuk (dokumentasi AWS) CodePipeline CodePipeline
Kuota untuk AWS CodeBuild ( CodeBuild dokumentasi AWS)
Perlindungan data di AWS CodePipeline ( CodePipeline dokumentasi AWS)
Informasi tambahan
Modul Terraform kustom
Berikut ini adalah daftar modul Terraform kustom yang digunakan dalam pola ini:
codebuild_terraform
menciptakan CodeBuild proyek yang membentuk setiap tahap pipa.codecommit_infrastructure_source_repo
menangkap dan membuat CodeCommit repositori sumber.codepipeline_iam_role
membuat peran IAM yang diperlukan untuk pipa.codepipeline_kms
membuat kunci AWS KMS yang diperlukan untuk enkripsi dan dekripsi objek Amazon S3.codepipeline_terraform
membuat pipa uji untuk CodeCommit repositori sumber.s3_artifacts_bucket
membuat bucket Amazon S3 untuk mengelola artefak pipeline.
Membangun file spesifikasi
Berikut ini adalah daftar file spesifikasi build (buildspec) yang digunakan pola ini untuk menjalankan setiap tahap pipeline:
buildspec_validate.yml
menjalankan"validate"
panggung.buildspec_plan.yml
menjalankan"plan"
panggung.buildspec_apply.yml
menjalankan"apply"
panggung.buildspec_destroy.yml
menjalankan"destroy"
panggung.
Membangun variabel file spesifikasi
Setiap file buildspec menggunakan variabel berikut untuk mengaktifkan pengaturan khusus build yang berbeda:
Variabel | Nilai default | Deskripsi |
---|---|---|
| "." | Mendefinisikan direktori sumber CodeCommit |
| “1.3.7" | Mendefinisikan versi Terraform untuk lingkungan build |
buildspec_validate.yml
File ini juga mendukung variabel berikut untuk mengaktifkan pengaturan khusus build yang berbeda:
Variabel | Nilai default | Deskripsi |
---|---|---|
| “. /template/skrip” | Mendefinisikan direktori skrip |
| “pengembang” | Mendefinisikan nama lingkungan |
| “Y” | Melewatkan validasi pada kegagalan |
| “Y” | Mengaktifkan validasi Terraform |
| “Y” | Mengaktifkan format Terraform |
| “Y” | Mengaktifkan pemindaian checkov |
| “Y” | Mengaktifkan pemindaian tfsec |
| “v1.28.1" | Mendefinisikan versi tfsec |