

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
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline"></a>

*Aromal Raj Jayarajan dan Vijesh Vijayakumaran Nair, Amazon Web Services*

## Ringkasan
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-summary"></a>

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 ](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages)

1. `"checkout"`menarik konfigurasi Terraform yang Anda uji dari repositori AWS. CodeCommit 

1. `"validate"`[menjalankan infrastruktur sebagai alat validasi kode (IAc), termasuk [tfsec](https://github.com/aquasecurity/tfsec),, dan checkov. [TFLint](https://github.com/terraform-linters/tflint)](https://www.checkov.io/) Tahap ini juga menjalankan perintah validasi Terraform IAc berikut: dan. `terraform validate` `terraform fmt`

1. `"plan"`menunjukkan perubahan apa yang akan diterapkan pada infrastruktur jika konfigurasi Terraform diterapkan.

1. `"apply"`menggunakan rencana yang dihasilkan untuk menyediakan infrastruktur yang diperlukan di lingkungan pengujian.

1. `"destroy"`menghapus infrastruktur pengujian yang dibuat selama `"apply"` tahap.

## Prasyarat dan batasan
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [AWS Command Line Interface (AWS CLI)[,](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) diinstal dan dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), diinstal dan dikonfigurasi pada mesin lokal Anda
+ [Terraform](https://learn.hashicorp.com/collections/terraform/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS), 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\$1iam\$1role**) 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
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-architecture"></a>

**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

![\[Arsitektur untuk menguji konfigurasi Terraform dengan menggunakan pipeline AWS. CI/CD\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/4df7b1f8-8eef-4d85-a971-a7f158be9691/images/90b931c8-e745-4b52-92de-a367fb0f1f51.png)


Diagram menunjukkan alur kerja berikut:

1. Di CodePipeline, pengguna AWS memulai tindakan yang diusulkan dalam paket Terraform dengan menjalankan `terraform apply` perintah di AWS CLI.

1. AWS CodePipeline mengasumsikan peran layanan IAM yang mencakup kebijakan yang diperlukan untuk mengakses CodeCommit, AWS KMS CodeBuild, dan Amazon S3.

1. CodePipeline menjalankan tahap `"checkout"` pipeline untuk menarik konfigurasi Terraform dari CodeCommit repositori AWS untuk pengujian.

1. CodePipeline menjalankan `"validate"` tahapan untuk menguji konfigurasi Terraform dengan menjalankan alat validasi IAc dan menjalankan perintah validasi Terraform IAc dalam sebuah proyek. CodeBuild 

1. CodePipeline menjalankan `"plan"` panggung untuk membuat rencana dalam CodeBuild proyek berdasarkan konfigurasi Terraform. Pengguna AWS dapat meninjau paket ini sebelum perubahan diterapkan ke lingkungan pengujian.

1. Code Pipeline menjalankan `"apply"` tahapan untuk mengimplementasikan rencana dengan menggunakan CodeBuild proyek untuk menyediakan infrastruktur yang diperlukan di lingkungan pengujian.

1. CodePipeline menjalankan `"destroy"` panggung, yang digunakan CodeBuild untuk menghapus infrastruktur pengujian yang dibuat selama `"apply"` tahap.

1. [Bucket Amazon S3 menyimpan artefak pipeline, yang dienkripsi dan didekripsi dengan menggunakan kunci yang dikelola pelanggan AWS KMS.](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)

## Alat
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-tools"></a>

**Alat**

*Layanan AWS*
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 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](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) adalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) membantu Anda membuat dan mengontrol kunci kriptografi untuk membantu melindungi data Anda.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.

*Layanan lainnya*
+ [HashiCorp Terraform](https://www.terraform.io/docs) 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](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repositori. Repositori berisi konfigurasi Terraform yang diperlukan untuk membuat arsitektur target yang diuraikan dalam pola ini.

## Epik
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-epics"></a>

### Menyediakan komponen solusi
<a name="provision-the-solution-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning GitHub repositori. | Kloning GitHub [aws-codepipeline-terraform-cicdsamples](https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples)repositori dengan menjalankan perintah berikut di jendela terminal:<pre>git clone https://github.com/aws-samples/aws-codepipeline-terraform-cicd-samples.git</pre>Untuk informasi selengkapnya, lihat [Mengkloning repositori dalam dokumentasi](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository). GitHub  | DevOps insinyur | 
| Buat file definisi variabel Terraform.  | Buat `terraform.tfvars` file berdasarkan persyaratan kasus penggunaan Anda. Anda dapat memperbarui variabel dalam `examples/terraform.tfvars` file yang ada di repositori kloning.Untuk informasi selengkapnya, lihat [Menetapkan nilai ke variabel modul root](https://developer.hashicorp.com/terraform/language/values/variables#assigning-values-to-root-module-variables) dalam dokumentasi Terraform.`Readme.md`File repositori mencakup informasi lebih lanjut tentang variabel yang diperlukan. | DevOps insinyur | 
| Konfigurasikan AWS sebagai penyedia Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Untuk informasi selengkapnya, lihat [penyedia AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) di dokumentasi Terraform. | DevOps insinyur | 
| Perbarui konfigurasi penyedia Terraform untuk membuat bucket replikasi Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Replikasi 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:<pre>terraform init</pre> | DevOps insinyur | 
| Buat paket Terraform. | Untuk membuat paket Terraform, jalankan perintah berikut di folder root repositori kloning:<pre>terraform plan --var-file=terraform.tfvars -out=tfplan</pre>Terraform 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. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Terraform membuat, memperbarui, atau menghancurkan infrastruktur untuk mencapai status target yang dinyatakan dalam file konfigurasi. | DevOps insinyur | 

### Validasi konfigurasi Terraform dengan menjalankan pipeline
<a name="validate-terraform-configurations-by-running-the-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan repositori kode sumber. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | DevOps insinyur | 
| Validasi tahapan pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)Untuk informasi selengkapnya, [lihat Melihat detail pipeline dan histori (konsol)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-view-console.html) di *Panduan CodePipeline Pengguna AWS*.Ketika perubahan dilakukan ke cabang utama repositori sumber, pipa uji diaktifkan secara otomatis. | DevOps insinyur | 
| Verifikasi keluaran laporan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html)`<project_name>-validate` CodeBuild Proyek ini menghasilkan laporan kerentanan untuk kode Anda selama `"validate"` tahap. | DevOps insinyur | 

### Bersihkan sumber daya Anda
<a name="clean-up-your-resources"></a>


| 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:<pre>terraform destroy --var-file=terraform.tfvars</pre> | DevOps insinyur | 

## Pemecahan masalah
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Anda menerima **AccessDenied **kesalahan selama `"apply"` tahap. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.html) | 

## Sumber daya terkait
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-resources"></a>
+ [Blok modul](https://developer.hashicorp.com/terraform/language/modules/syntax) (dokumentasi Terraform)
+ [Cara menggunakan CI/CD untuk menerapkan dan mengonfigurasi layanan keamanan AWS dengan Terraform (posting blog AWS)](https://aws.amazon.com/blogs/security/how-use-ci-cd-deploy-configure-aws-security-services-terraform/)
+ [Menggunakan peran terkait layanan (dokumentasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) IAM)
+ [buat-pipa (dokumentasi](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/codepipeline/create-pipeline.html) AWS CLI)
+ [Konfigurasikan enkripsi sisi server untuk artefak yang disimpan di Amazon S3](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html) untuk (dokumentasi AWS) CodePipeline CodePipeline 
+ [Kuota untuk AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html) ( CodeBuild dokumentasi AWS)
+ [Perlindungan data di AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/data-protection.html) ( CodePipeline dokumentasi AWS)

## Informasi tambahan
<a name="create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline-additional"></a>

**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 | 
| --- |--- |--- |
| `CODE_SRC_DIR` | "." | Mendefinisikan direktori sumber CodeCommit  | 
| `TF_VERSION` | “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 | 
| --- |--- |--- |
| `SCRIPT_DIR` | “. /template/skrip” | Mendefinisikan direktori skrip | 
| `ENVIRONMENT` | “pengembang” | Mendefinisikan nama lingkungan | 
| `SKIPVALIDATIONFAILURE` | “Y” | Melewatkan validasi pada kegagalan | 
| `ENABLE_TFVALIDATE` | “Y” | Mengaktifkan validasi Terraform  | 
| `ENABLE_TFFORMAT` | “Y” | Mengaktifkan format Terraform | 
| `ENABLE_TFCHECKOV` | “Y” | Mengaktifkan pemindaian checkov | 
| `ENABLE_TFSEC` | “Y” | Mengaktifkan pemindaian tfsec | 
| `TFSEC_VERSION` | “v1.28.1" | Mendefinisikan versi tfsec | 