

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

# Siapkan CI/CD pipeline dengan menggunakan AWS CodePipeline dan AWS CDK
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk"></a>

*Konstantin Zarudaev, Yasha Dabas, Lars Kinder, dan Cizer Pereira, Amazon Web Services*

## Rumah
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-summary"></a>

Mengotomatiskan proses pembuatan dan rilis perangkat lunak Anda dengan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDmewujudkan budaya, seperangkat prinsip operasi, dan [kumpulan praktik](https://aws.amazon.com/devops/#cicd) yang membantu tim pengembangan aplikasi untuk memberikan perubahan kode lebih sering dan andal. Implementasinya juga dikenal sebagai pipa *CI/CD*.

Pola ini mendefinisikan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang dapat digunakan kembali di Amazon Web Services (AWS) dengan repositori AWS. CodeCommit CodePipeline Pipeline AWS ditulis menggunakan [AWS Cloud Development Kit (AWS CDK) v2](https://aws.amazon.com/cdk/).

Dengan menggunakan CodePipeline, Anda dapat memodelkan berbagai tahapan proses rilis perangkat lunak Anda melalui antarmuka AWS Management Console, AWS Command Line Interface (AWS CLI), AWS, atau CloudFormation AWS. SDKs Pola ini menunjukkan implementasi CodePipeline dan komponennya menggunakan AWS CDK. Selain membangun pustaka, AWS CDK menyertakan toolkit (perintah CLI`cdk`), yang merupakan alat utama untuk berinteraksi dengan aplikasi AWS CDK Anda. Di antara fungsi lainnya, toolkit menyediakan kemampuan untuk mengonversi satu atau lebih tumpukan ke CloudFormation templat dan menerapkannya ke akun AWS.

Pipeline mencakup pengujian untuk memvalidasi keamanan pustaka pihak ketiga Anda, dan membantu memastikan rilis otomatis yang dipercepat di lingkungan yang ditentukan. Anda dapat meningkatkan keamanan keseluruhan aplikasi Anda dengan menempatkannya melalui proses validasi.

Maksud dari pola ini adalah untuk mempercepat penggunaan CI/CD pipeline Anda untuk menyebarkan kode Anda sambil memastikan sumber daya yang Anda terapkan mematuhi praktik terbaik. DevOps Setelah menerapkan [kode contoh](https://github.com/aws-samples/aws-codepipeline-cicd), Anda akan memiliki [AWS CodePipeline dengan proses](https://aws.amazon.com/codepipeline/) linting, pengujian, pemeriksaan keamanan, penerapan, dan pasca-penerapan. Pola ini juga mencakup langkah-langkah untuk Makefile. Menggunakan Makefile, pengembang dapat mereproduksi CI/CD langkah-langkah secara lokal dan meningkatkan kecepatan proses pengembangan.

## Prasyarat dan batasan
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Pemahaman dasar sebagai berikut:
  + AWS CDK
  + AWS CloudFormation
  + AWS CodePipeline
  + TypeScript

**Batasan**

Pola ini TypeScript hanya menggunakan [AWS CDK](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html). Ini tidak mencakup bahasa lain yang didukung oleh AWS CDK.

**Versi produk**

Gunakan versi terbaru dari alat-alat berikut:
+ Antarmuka Baris Perintah AWS (AWS CLI)
+ cfn\$1nag
+ git-remote-codecommit
+ Node.js

## Arsitektur
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-architecture"></a>

**Tumpukan teknologi target**
+ AWS CDK
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodePipeline

**Arsitektur target**

Pipeline dipicu oleh perubahan dalam AWS CodeCommit repository ()`SampleRepository`. Pada awalnya, CodePipeline membangun artefak, memperbarui dirinya sendiri, dan memulai proses penyebaran. Pipeline yang dihasilkan menyebarkan solusi ke tiga lingkungan independen:
+ Dev - Pemeriksaan kode tiga langkah di lingkungan pengembangan aktif
+ Uji - Integrasi dan lingkungan uji regresi
+ Prod - Lingkungan produksi

Tiga langkah yang termasuk dalam tahap Dev adalah linting, keamanan, dan pengujian unit. Langkah-langkah ini berjalan secara paralel untuk mempercepat proses. Untuk memastikan bahwa pipa hanya menyediakan artefak yang berfungsi, itu akan berhenti berjalan setiap kali langkah dalam proses gagal. Setelah penerapan tahap Dev, pipeline menjalankan tes validasi untuk memverifikasi hasilnya. Jika berhasil, pipeline kemudian akan menyebarkan artefak ke lingkungan Pengujian, yang berisi validasi pasca-penerapan. Langkah terakhir adalah menyebarkan artefak ke lingkungan Prod.

Diagram berikut menunjukkan alur kerja dari CodeCommit repositori ke proses build dan update yang dilakukan oleh CodePipeline, tiga langkah lingkungan Dev, dan penerapan dan validasi berikutnya di masing-masing dari tiga lingkungan.

![\[Lingkungan pengembang mencakup linting, keamanan, dan pengujian unit, semuanya mencakup penerapan dan validasi.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)


## Alat
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) adalah kerangka kerja pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) membantu Anda menyiapkan sumber daya AWS, menyediakannya dengan cepat dan konsisten, serta mengelolanya sepanjang siklus hidupnya di seluruh akun dan Wilayah AWS. Dalam pola ini CloudFormation template dapat digunakan untuk membuat CodeCommit repositori dan pipa CodePipeline CI/CD.
+ [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 CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) adalah CI/CD layanan yang 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 Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

**Alat lainnya**
+ [cfn\$1nag](https://github.com/stelligent/cfn_nag) adalah alat sumber terbuka yang mencari pola dalam CloudFormation templat untuk mengidentifikasi potensi masalah keamanan.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)adalah utilitas untuk mendorong dan menarik kode dari CodeCommit repositori dengan memperluas Git.
+ [Node.js](https://nodejs.org/en/docs/) adalah lingkungan JavaScript runtime berbasis peristiwa yang dirancang untuk membangun aplikasi jaringan yang dapat diskalakan.

**Kode**

Kode untuk pola ini tersedia di GitHub [AWS CodePipeline dengan repositori CI/CD praktik](https://github.com/aws-samples/aws-codepipeline-cicd).

## Praktik terbaik
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-best-practices"></a>

Tinjau sumber daya, seperti kebijakan AWS Identity and Access Management (IAM), untuk mengonfirmasi bahwa mereka selaras dengan praktik terbaik organisasi Anda.

## Epik
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-epics"></a>

### Instal alat
<a name="install-tools"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal alat di macOS atau Linux. | Jika Anda menggunakan macOS atau Linux, Anda dapat menginstal alat dengan menjalankan perintah berikut di terminal pilihan Anda atau menggunakan [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) untuk Linux.<pre>brew install<br />brew install git-remote-codecommit<br />brew install ruby brew-gem<br />brew-gem install cfn-nag</pre> | DevOps insinyur | 
| Siapkan AWS CLI. | Untuk menyiapkan AWS CLI, gunakan petunjuk untuk sistem operasi Anda:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps insinyur | 

### Siapkan penerapan awal
<a name="set-up-the-initial-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh atau kloning kode. | Untuk mendapatkan kode yang digunakan oleh pola ini, lakukan salah satu hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html)<pre>git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git</pre>Hapus `.git` direktori dari repositori kloning.<pre>cd ./aws-codepipeline-cicd<br />rm -rf ./.git</pre>Nantinya, Anda akan menggunakan CodeCommit repositori AWS yang baru dibuat sebagai remote origin. | DevOps insinyur | 
| Connect ke akun AWS. | Anda dapat terhubung dengan menggunakan token keamanan sementara atau otentikasi landing zone. Untuk mengonfirmasi bahwa Anda menggunakan akun dan Wilayah AWS yang benar, jalankan perintah berikut.<pre>AWS_REGION="eu-west-1"<br />ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text)<br />echo "${ACCOUNT_NUMBER}"</pre> | DevOps insinyur | 
| Bootstrap lingkungan. | Untuk mem-bootstrap lingkungan AWS CDK, jalankan perintah berikut.<pre>npm install<br />npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"</pre>Setelah Anda berhasil mem-bootstrap lingkungan, output berikut akan ditampilkan.<pre>⏳  Bootstrapping environment aws://{account}/{region}...<br />✅  Environment aws://{account}/{region} bootstrapped</pre>[Untuk informasi selengkapnya tentang bootstrap AWS CDK, lihat dokumentasi AWS CDK.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) | DevOps insinyur | 
| Sintesis template. | Untuk mensintesis aplikasi AWS CDK, gunakan perintah. `cdk synth`<pre>npm run cdk synth</pre>Anda akan melihat output berikut.<pre>Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out<br />Supply a stack id (CodePipeline, Dev-MainStack) to display its template.</pre> | DevOps insinyur | 
| Menyebarkan CodePipeline tumpukan. | Sekarang setelah Anda melakukan bootstrap dan mensintesis CloudFormation template, Anda dapat menerapkannya. Penyebaran akan membuat CodePipeline pipa dan CodeCommit repositori, yang akan menjadi sumber dan pemicu pipa.<pre>npm run cdk -- deploy CodePipeline --require-approval never</pre>Setelah Anda menjalankan perintah, Anda akan melihat penyebaran informasi CodePipeline tumpukan dan output yang berhasil. `CodePipeline.RepositoryName`Ini memberi Anda nama CodeCommit repositori di akun AWS.<pre>CodePipeline: deploying...<br />CodePipeline: creating CloudFormation changeset...<br />✅  CodePipeline<br />Outputs:<br />CodePipeline.RepositoryName = SampleRepository<br />Stack ARN:<br />arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID</pre> | DevOps insinyur | 
| Siapkan CodeCommit repositori dan cabang jarak jauh. | Setelah penerapan berhasil, CodePipeline akan memulai proses pertama pipeline, yang dapat Anda temukan di konsol [ CodePipeline AWS](https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines). Karena AWS CDK dan CodeCommit tidak memulai cabang default, proses pipeline awal ini akan gagal dan mengembalikan pesan kesalahan berikut.<pre>The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null</pre>Untuk memperbaiki kesalahan ini, siapkan remote origin sebagai`SampleRepository`, dan buat `main` cabang yang diperlukan.<pre>RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text)<br />echo "${RepoName}"<br />#<br />git init<br />git branch -m master main<br />git remote add origin codecommit://${RepoName}<br />git add .<br />git commit -m "Initial commit"<br />git push -u origin main</pre> | DevOps insinyur | 

### Uji pipa yang digunakan CodePipeline
<a name="test-the-deployed-codepipeline-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Lakukan perubahan untuk mengaktifkan pipeline. | Setelah penerapan awal berhasil, Anda harus memiliki CI/CD pipeline lengkap dengan `main` cabang untuk `SampleRepository` sebagai cabang sumber. Segera setelah Anda melakukan perubahan ke `main` cabang, pipeline akan memulai dan menjalankan urutan tindakan berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | DevOps insinyur | 

### Uji secara lokal dengan menggunakan Makefile
<a name="test-locally-by-using-a-makefile"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan proses pengembangan dengan menggunakan Makefile. | Anda dapat menjalankan seluruh pipeline secara lokal dengan menggunakan `make` perintah, atau Anda dapat menjalankan langkah individual (misalnya,`make linting`).Untuk menguji penggunaan`make`, lakukan tindakan berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | Pengembang aplikasi, DevOps insinyur | 

### Pembersihan sumber daya
<a name="clean-up-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus sumber daya aplikasi AWS CDK. | Untuk membersihkan aplikasi AWS CDK Anda, jalankan perintah berikut.<pre>cdk destroy --all</pre>Ketahuilah bahwa bucket Amazon Simple Storage Service (Amazon S3) yang dibuat selama bootstrap tidak dihapus secara otomatis. Mereka memerlukan kebijakan retensi yang memungkinkan penghapusan, atau Anda perlu menghapusnya secara manual di akun AWS Anda. | DevOps insinyur | 

## Pemecahan masalah
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Template tidak berfungsi seperti yang diharapkan. | Jika ada yang tidak beres dan template tidak berfungsi, pastikan Anda memiliki yang berikut ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.html) | 

## Sumber daya terkait
<a name="set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk-resources"></a>
+ [Memulai tugas umum di IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html)
+ [ CodePipeline Dokumentasi AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)