

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

# Secara otomatis mendeteksi perubahan dan memulai CodePipeline jaringan pipa yang berbeda untuk monorepo di CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha, dan Ricardo Morais, Amazon Web Services*

## Ringkasan
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Pemberitahuan**: AWS Cloud9 tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS Cloud9 dapat terus menggunakan layanan seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Pola ini membantu Anda secara otomatis mendeteksi perubahan pada kode sumber aplikasi berbasis monorepo AWS CodeCommit dan kemudian memulai pipeline yang menjalankan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDpipeline, AWS CodePipeline yang memastikan visibilitas yang lebih baik, berbagi kode yang lebih mudah, dan peningkatan kolaborasi, standardisasi, dan kemampuan ditemukan.

Solusi yang dijelaskan dalam pola ini tidak melakukan analisis ketergantungan apa pun di antara layanan mikro di dalam monorepo. Ini hanya mendeteksi perubahan dalam kode sumber dan memulai pipa yang cocok CI/CD .

Pola ini digunakan AWS Cloud9 sebagai lingkungan pengembangan terintegrasi (IDE) dan AWS Cloud Development Kit (AWS CDK) untuk mendefinisikan infrastruktur dengan menggunakan dua CloudFormation tumpukan: `MonoRepoStack` dan`PipelinesStack`. `MonoRepoStack`Tumpukan menciptakan monorepo AWS CodeCommit dan AWS Lambda fungsi yang memulai pipeline. CI/CD `PipelinesStack`Tumpukan mendefinisikan infrastruktur pipeline Anda.

**penting**  
Alur kerja pola ini adalah bukti konsep (PoC). Kami menyarankan Anda menggunakannya hanya di lingkungan pengujian. Jika Anda ingin menggunakan pendekatan pola ini di lingkungan produksi, lihat [Praktik terbaik keamanan di IAM dalam](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dokumentasi AWS Identity and Access Management (IAM) dan buat perubahan yang diperlukan pada peran IAM Anda dan. Layanan AWS 

## Prasyarat dan batasan
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Prasyarat**
+  AWS Akun aktif.
+ AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Menginstal, memperbarui, dan menghapus instalan AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dalam AWS CLI dokumentasi.  
+ Python 3 dan`pip`, diinstal pada mesin lokal Anda. Untuk informasi selengkapnya, lihat [dokumentasi Python](https://www.python.org/). 
+ AWS CDK, diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [AWS CDK Memulai dengan](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) AWS CDK dokumentasi. 
+  AWS Cloud9 IDE, diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Menyiapkan AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html) dalam AWS Cloud9 dokumentasi. 
+  GitHub [AWS CodeCommit Monorepo multi-pipeline memicu](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) repositori, dikloning pada mesin lokal Anda. 
+ Direktori yang ada berisi kode aplikasi yang ingin Anda buat dan terapkan CodePipeline.
+ Keakraban dan pengalaman dengan praktik DevOps terbaik di. AWS Cloud Untuk meningkatkan keakraban Anda DevOps, Anda dapat menggunakan pola [Bangun arsitektur yang digabungkan secara longgar dengan layanan mikro menggunakan DevOps praktik dan AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) di situs web Prescriptive Guidance. AWS  

## Arsitektur
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

Diagram berikut menunjukkan bagaimana menggunakan AWS CDK untuk mendefinisikan infrastruktur dengan dua AWS CloudFormation tumpukan: `MonoRepoStack` dan`PipelinesStack`.

![Alur kerja untuk menggunakan AWS CDK untuk menentukan infrastruktur dengan dua CloudFormation tumpukan.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


Diagram menunjukkan alur kerja berikut:

1. Proses bootstrap menggunakan AWS CDK untuk membuat AWS CloudFormation tumpukan `MonoRepoStack` dan`PipelinesStack`.

1. `MonoRepoStack`Tumpukan membuat CodeCommit repositori untuk aplikasi Anda dan fungsi `monorepo-event-handler` Lambda yang dimulai setelah setiap komit.

1. `PipelinesStack`Tumpukan membuat pipeline yang diprakarsai oleh fungsi Lambda. CodePipeline Setiap layanan mikro harus memiliki pipa infrastruktur yang ditentukan.

1. Pipeline untuk `microservice-n` diprakarsai oleh fungsi Lambda dan memulai tahapan CI/CD terisolasi yang didasarkan pada kode sumber di. CodeCommit

1. Pipeline untuk `microservice-1` diprakarsai oleh fungsi Lambda dan memulai tahapan CI/CD terisolasi yang didasarkan pada kode sumber di. CodeCommit

Diagram berikut menunjukkan penyebaran AWS CloudFormation tumpukan `MonoRepoStack` dan `PipelinesStack` dalam akun.

![Penerapan CloudFormation tumpukan MonoRepoStack dan PipelinesStack di akun AWS.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Seorang pengguna mengubah kode di salah satu layanan mikro aplikasi.

1. Pengguna mendorong perubahan dari repositori lokal ke repositori. CodeCommit 

1. Aktivitas push memulai fungsi Lambda yang menerima semua dorongan ke repositori. CodeCommit 

1. Fungsi Lambda membaca parameter di Parameter Store, kemampuan AWS Systems Manager, untuk mengambil ID komit terbaru. Parameter memiliki format penamaan:`/MonoRepoTrigger/{repository}/{branch_name}/LastCommit`. Jika parameter tidak ditemukan, fungsi Lambda membaca ID komit terakhir dari CodeCommit repositori dan menyimpan nilai yang dikembalikan di Parameter Store.

1. Setelah mengidentifikasi ID komit dan file yang diubah, fungsi Lambda mengidentifikasi pipeline untuk setiap direktori microservice dan memulai pipeline yang diperlukan. CodePipeline 

## Alat
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)adalah kerangka pengembangan perangkat lunak untuk mendefinisikan infrastruktur cloud dalam kode dan menyediakannya. CloudFormation
+ [Python](https://www.python.org/) adalah bahasa pemrograman yang memungkinkan Anda bekerja dengan cepat dan mengintegrasikan sistem dengan lebih efektif.

**Kode**

Kode sumber dan template untuk pola ini tersedia di repositori pemicu [multi-pipeline GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger).

## Praktik terbaik
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Contoh arsitektur ini tidak menyertakan solusi pemantauan untuk infrastruktur yang dikerahkan. Jika Anda ingin menerapkan solusi ini di lingkungan produksi, kami sarankan Anda mengaktifkan pemantauan. Untuk informasi selengkapnya, lihat [Memantau aplikasi tanpa server Anda dengan CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) dalam dokumentasi AWS Serverless Application Model ()AWS SAM.
+ Saat Anda mengedit kode sampel yang disediakan oleh pola ini, ikuti [praktik terbaik untuk mengembangkan dan menerapkan infrastruktur cloud](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) dalam AWS CDK dokumentasi.
+ Saat Anda menentukan saluran pipa layanan mikro, tinjau [praktik terbaik keamanan](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) dalam dokumentasi. AWS CodePipeline 
+ Anda juga dapat memeriksa AWS CDK kode Anda untuk praktik terbaik dengan menggunakan utilitas [cdk-nag](https://github.com/cdklabs/cdk-nag). Alat ini menggunakan seperangkat aturan, dikelompokkan berdasarkan paket, untuk mengevaluasi kode Anda. Paket yang tersedia adalah:
  + [AWS Perpustakaan Solusi](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Keamanan Undang-Undang Portabilitas dan Akuntabilitas Asuransi Kesehatan (HIPAA)](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Institut Nasional Standar dan Teknologi (NIST) 800-53 rev 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 rev 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Standar Keamanan Data Industri Kartu Pembayaran (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Epik
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Mengatur lingkungan
<a name="set-up-the-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat lingkungan Python virtual. | Di AWS Cloud9 IDE Anda, buat lingkungan Python virtual dan instal dependensi yang diperlukan dengan menjalankan perintah berikut:<br />`make install` | Developer | 
| Bootstrap Akun AWS dan AWS Region untuk AWS CDK. | Bootstrap required Akun AWS dan Region dengan menjalankan perintah berikut:<br />`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Developer | 

### Tambahkan pipeline baru untuk microservice
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Tambahkan kode sampel Anda ke direktori aplikasi Anda. | Tambahkan direktori yang berisi kode aplikasi sampel Anda ke `monorepo-sample` direktori di repositori pemicu [multi-pipeline GitHub AWS CodeCommit monorepo](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) kloning. | Developer | 
| Edit file `monorepo-main.json` | Tambahkan nama direktori kode aplikasi Anda dan nama pipeline ke `monorepo-main.json` file di repositori kloning. | Developer | 
| Buat pipa. | Dalam `Pipelines` direktori untuk repositori, tambahkan pipeline `class` untuk aplikasi Anda. Direktori berisi dua file sampel, `pipeline_hotsite.py` dan`pipeline_demo.py`. Setiap file memiliki tiga tahap: source, build, dan deploy.<br />Anda dapat menyalin salah satu file dan membuat perubahan sesuai dengan kebutuhan aplikasi Anda.  | Developer | 
| Edit file `monorepo_config.py` | Di`service_map`, tambahkan nama direktori untuk aplikasi Anda dan kelas yang Anda buat untuk pipeline.<br />Misalnya, kode berikut menunjukkan definisi pipeline dalam `Pipelines` direktori yang menggunakan file bernama `pipeline_mysample.py` dengan `MySamplePipeline` kelas:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Developer | 

### Menyebarkan tumpukan MonoRepoStack
<a name="deploy-the-monorepostack-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan AWS CloudFormation tumpukan. | Terapkan AWS CloudFormation `MonoRepoStack` tumpukan dengan nilai parameter default di direktori root dari repositori kloning dengan menjalankan perintah. `make deploy-core`<br />Anda dapat mengubah nama repositori dengan menjalankan perintah. `make deploy-core monorepo-name=<repo_name>`Anda dapat secara bersamaan menyebarkan kedua pipeline dengan menggunakan perintah. `make deploy monorepo-name=<repo_name>` | Developer | 
| Validasi CodeCommit repositori. | Validasi bahwa sumber daya Anda dibuat dengan menjalankan `aws codecommit get-repository --repository-name <repo_name>` perintah. Karena CloudFormation tumpukan membuat CodeCommit repositori tempat monorepo disimpan, jangan jalankan `cdk destroy MonoRepoStack ` perintah jika Anda sudah mulai mendorong modifikasi ke dalamnya. | Developer | 
| Validasi hasil CloudFormation tumpukan. | Validasi bahwa CloudFormation `MonoRepoStack` tumpukan dibuat dan dikonfigurasi dengan benar dengan menjalankan perintah berikut:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Developer | 

### Menyebarkan tumpukan PipelinesStack
<a name="deploy-the-pipelinesstack-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan CloudFormation tumpukan. |  AWS CloudFormation `PipelinesStack`Tumpukan harus digunakan setelah Anda menyebarkan tumpukan. `MonoRepoStack` Tumpukan bertambah besar ketika layanan mikro baru ditambahkan ke basis kode monorepo dan digunakan kembali saat layanan mikro baru di-onboard.<br />Menyebarkan PipelinesStack tumpukan dengan menjalankan `make deploy-pipelines` perintah.Anda juga dapat menyebarkan secara bersamaan menyebarkan kedua pipeline dengan menjalankan perintah. `make deploy monorepo-name=<repo_name>`<br />Contoh keluaran berikut menunjukkan bagaimana `PipelinesStacks` penerapan mencetak URLs untuk layanan mikro di akhir implementasi:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Developer | 
| Validasi hasil AWS CloudFormation tumpukan. | Validasi bahwa AWS CloudFormation `PipelinesStacks` tumpukan dibuat dan dikonfigurasi dengan benar dengan menjalankan perintah berikut:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Developer | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus AWS CloudFormation tumpukan Anda. | Jalankan perintah `make destroy`. | Developer | 
| Hapus bucket S3 untuk pipeline Anda. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Developer | 

## Pemecahan masalah
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Saya mengalami AWS CDK masalah. | Lihat [Memecahkan AWS CDK masalah umum dalam dokumentasi](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) AWS CDK. | 
| Saya mendorong kode layanan mikro saya, tetapi pipa layanan mikro tidak berjalan. | **Validasi pengaturan**<br />*Verifikasi konfigurasi cabang:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />*Validasi file konfigurasi:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />**Pemecahan masalah di konsol**<br />*AWS CodePipeline cek:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />*AWS Lambda pemecahan masalah:*[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Saya perlu memindahkan semua layanan mikro saya.  | Ada dua pendekatan untuk memaksa pemindahan semua layanan mikro. Pilih opsi yang sesuai dengan kebutuhan Anda.<br />**Pendekatan 1: Hapus parameter di Parameter Store**<br />Metode ini melibatkan penghapusan parameter tertentu dalam Systems Manager Parameter Store yang melacak ID komit terakhir yang digunakan untuk penerapan. Saat Anda menghapus parameter ini, sistem dipaksa untuk menerapkan kembali semua layanan mikro pada pemicu berikutnya, karena ia menganggapnya sebagai keadaan baru.<br />Langkah:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Kelebihan:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Kontra:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />**Pendekatan 2: Dorong komit di setiap subfolder monorepo**<br />Metode ini melibatkan membuat perubahan kecil dan mendorongnya di setiap subfolder layanan mikro di dalam monorepo untuk memulai jaringan pipa masing-masing.<br />Langkah:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Kelebihan:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)<br />Kontra:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Sumber daya terkait
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Integrasi dan pengiriman berkelanjutan (CI/CD) menggunakan CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (dokumentasi)AWS CDK 
+ [modul aws-cdk/pipelines](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (referensi API)AWS CDK 