

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

# DevOps
<a name="devops-pattern-list"></a>

**Topics**
+ [Percepat MLOps dengan Backstage dan template Amazon SageMaker AI swalayan](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [Mengotomatiskan operasi AWS infrastruktur dengan menggunakan Amazon Bedrock](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [Otomatiskan CloudFront pembaruan saat titik akhir penyeimbang beban berubah dengan menggunakan Terraform](automate-cloudfront-updates-when-load-balancer-endpoints-change.md)
+ [Otomatiskan CodeGuru ulasan Amazon untuk aplikasi AWS CDK Python dengan menggunakan Tindakan GitHub](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Otomatiskan penerapan Rantai Pasokan AWS data lake dalam pengaturan multi-repositori dengan menggunakan GitHub Actions, Artifactory, dan Terraform](automate-the-deployment-of-aws-supply-chain-data-lakes.md)
+ [Mengotomatiskan penilaian sumber daya AWS](automate-aws-resource-assessment.md)
+ [Instal sistem SAP secara otomatis dengan menggunakan alat sumber terbuka](install-sap-systems-automatically-by-using-open-source-tools.md)
+ [Mengotomatiskan portofolio AWS Service Catalog dan penerapan produk dengan menggunakan AWS CDK](automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.md)
+ [Otomatiskan manajemen pipeline dinamis untuk menerapkan solusi perbaikan terbaru di lingkungan Gitflow dengan menggunakan dan AWS Service Catalog AWS CodePipeline](automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.md)
+ [Mengotomatiskan penghapusan AWS CloudFormation tumpukan dan sumber daya terkait](automate-deletion-cloudformation-stacks-associated-resources.md)
+ [Otomatiskan konsumsi dan visualisasi metrik kustom Amazon MWAA di Amazon Managed Grafana dengan menggunakan Terraform](automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.md)
+ [Otomatiskan penerapan set tumpukan dengan menggunakan AWS dan AWS CodePipeline CodeBuild](automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.md)
+ [Secara otomatis melampirkan kebijakan terkelola AWS untuk Systems Manager ke profil EC2 instans menggunakan Cloud Custodian dan AWS CDK](automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.md)
+ [Membuat CI/CD pipeline dan kluster Amazon ECS secara otomatis untuk layanan mikro menggunakan AWS CDK](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [Buat dan dorong gambar Docker ke Amazon ECR menggunakan GitHub Actions dan Terraform](build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.md)
+ [Buat dan uji aplikasi iOS dengan AWS CodeCommit, AWS CodePipeline, dan AWS Device Farm](build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm.md)
+ [Konfigurasikan otentikasi TLS timbal balik untuk aplikasi yang berjalan di Amazon EKS](configure-mutual-tls-authentication-for-applications-running-on-amazon-eks.md)
+ [Otomatiskan pembuatan sumber daya WorkSpaces Aplikasi Amazon menggunakan AWS CloudFormation](automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.md)
+ [Buat parser log khusus untuk Amazon ECS menggunakan router log Firelens](create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.md)
+ [Buat kerangka orkestrasi sumber daya berbasis API menggunakan Actions dan Terragrunt GitHub](create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.md)
+ [Buat permintaan tarik otomatis untuk infrastruktur yang dikelola Terraform AWS dengan menggunakan Tindakan GitHub](create-automated-pull-requests-for-terraform-managed-aws-infrastructure.md)
+ [Buat pipeline CI dinamis untuk proyek Java dan Python secara otomatis](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Menyebarkan kenari CloudWatch Synthetics dengan menggunakan Terraform](deploy-cloudwatch-synthetics-canaries-by-using-terraform.md)
+ [Terapkan ChatOps solusi untuk mengelola hasil pemindaian SAST dengan menggunakan Amazon Q Developer dalam tindakan kustom aplikasi obrolan dan CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [Terapkan sistem agen di Amazon Bedrock dengan framework CreWai dengan menggunakan Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Menerapkan pekerjaan AWS Glue dengan pipeline AWS CodePipeline CI/CD](deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline.md)
+ [Menerapkan kode di beberapa Wilayah AWS menggunakan AWS CodePipeline, AWS CodeCommit, dan AWS CodeBuild](deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild.md)
+ [Terapkan beban kerja dari DevOps pipeline Azure ke kluster Amazon EKS pribadi](deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.md)
+ [Jalankan kueri Amazon Redshift SQL dengan menggunakan Terraform](execute-redshift-sql-queries-using-terraform.md)
+ [Ekspor laporan AWS Backup dari seluruh organisasi di AWS Organizations sebagai file CSV](export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.md)
+ [Ekspor tag untuk daftar EC2 instans Amazon ke file CSV](export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.md)
+ [Buat CloudFormation template AWS yang berisi aturan terkelola AWS Config menggunakan Troposfer](generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.md)
+ [Berikan instans SageMaker notebook akses sementara ke CodeCommit repositori di akun AWS lain](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [Menerapkan strategi percabangan GitHub Flow untuk lingkungan multi-akun DevOps](implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.md)
+ [Menerapkan strategi percabangan Gitflow untuk lingkungan multi-akun DevOps](implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.md)
+ [Menerapkan strategi percabangan Trunk untuk lingkungan multi-akun DevOps](implement-a-trunk-branching-strategy-for-multi-account-devops-environments.md)
+ [Menerapkan pemindaian Checkov kustom terpusat untuk menegakkan kebijakan sebelum menerapkan infrastruktur AWS](centralized-custom-checkov-scanning.md)
+ [Menerapkan diagnostik Kubernetes yang didukung AI dan pemecahan masalah dengan integrasi K8SGPT dan Amazon Bedrock](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [Secara otomatis mendeteksi perubahan dan memulai CodePipeline jaringan pipa yang berbeda untuk monorepo di CodeCommit](automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.md)
+ [Integrasikan repositori Bitbucket dengan AWS Amplify menggunakan AWS CloudFormation](integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.md)
+ [Luncurkan CodeBuild proyek di seluruh akun AWS menggunakan Step Functions dan fungsi proxy Lambda](launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.md)
+ [Kelola failover Multi-AZ untuk cluster EMR dengan menggunakan Application Recovery Controller](multi-az-failover-spark-emr-clusters-arc.md)
+ [Kelola blue/green penerapan layanan mikro ke beberapa akun dan Wilayah dengan menggunakan layanan kode AWS dan kunci Multi-wilayah AWS KMS](manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.md)
+ [Pantau repositori Amazon ECR untuk izin wildcard menggunakan AWS dan AWS Config CloudFormation](monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.md)
+ [Optimalkan penerapan tanpa server multi-akun dengan menggunakan alur kerja dan Tindakan AWS CDK GitHub](optimize-multi-account-serverless-deployments.md)
+ [Menyediakan AWS Service Catalog produk berdasarkan AWS CloudFormation template dengan menggunakan GitHub Actions](provision-aws-service-catalog-products-using-github-actions.md)
+ [Menyediakan peran IAM dengan hak istimewa paling sedikit dengan menerapkan solusi mesin penjual otomatis peran](provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.md)
+ [Publikasikan CloudWatch metrik Amazon ke file CSV](publish-amazon-cloudwatch-metrics-to-a-csv-file.md)
+ [Hapus EC2 entri Amazon di Akun AWS seberang AWS Managed Microsoft AD dengan menggunakan AWS Lambda otomatisasi](remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.md)
+ [Hapus EC2 entri Amazon dalam hal yang sama Akun AWS dari AWS Managed Microsoft AD dengan menggunakan AWS Lambda otomatisasi](remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.md)
+ [Jalankan pengujian unit untuk pekerjaan ETL Python dalam AWS Glue menggunakan kerangka pytest](run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.md)
+ [Siapkan CI/CD pipeline dengan menggunakan AWS CodePipeline dan AWS CDK](set-up-a-ci-cd-pipeline-by-using-aws-codepipeline-and-aws-cdk.md)
+ [Siapkan logging terpusat pada skala perusahaan dengan menggunakan Terraform](set-up-centralized-logging-at-enterprise-scale-by-using-terraform.md)
+ [Siapkan end-to-end enkripsi untuk aplikasi di Amazon EKS menggunakan cert-manager dan Let's Encrypt](set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.md)
+ [Sederhanakan penerapan aplikasi multi-tenant Amazon EKS dengan menggunakan Flux](simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.md)
+ [Merampingkan pengembangan dan penerapan bot Amazon Lex dengan menggunakan alur kerja otomatis](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [Koordinasikan ketergantungan sumber daya dan eksekusi tugas dengan menggunakan konstruksi AWS Fargate WaitCondition kait](use-the-aws-fargate-waitcondition-hook-construct.md)
+ [Gunakan repositori sumber Git pihak ketiga di AWS CodePipeline](use-third-party-git-source-repositories-in-aws-codepipeline.md)
+ [Buat CI/CD pipeline untuk memvalidasi konfigurasi Terraform dengan menggunakan AWS CodePipeline](create-a-ci-cd-pipeline-to-validate-terraform-configurations-by-using-aws-codepipeline.md)
+ [Lebih banyak pola](devops-more-patterns-pattern-list.md)

# Percepat MLOps dengan Backstage dan template Amazon SageMaker AI swalayan
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates"></a>

*Ashish Bhatt, Shashank Hirematt, dan Shivanshu Suryakar, Amazon Web Services*

## Ringkasan
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-summary"></a>

Organizations yang menggunakan sistem machine learning operations (MLOps) menghadapi tantangan yang signifikan dalam penskalaan, standardisasi, dan mengamankan infrastruktur ML mereka. Pola ini memperkenalkan pendekatan transformatif yang menggabungkan [Backstage, portal](https://backstage.io/) pengembang open source, dengan [Amazon SageMaker AI](https://aws.amazon.com/sagemaker/) dan modul hardened infrastructure as code (IAc) untuk meningkatkan cara tim ilmu data Anda dapat mengembangkan, menyebarkan, dan mengelola alur kerja ML.

Modul IAc untuk pola ini disediakan dalam repositori GitHub [AWS AIOps modul](https://github.com/awslabs/aiops-modules/tree/main/modules/sagemaker). Modul-modul ini menawarkan template pra-bangun untuk menyiapkan infrastruktur ML dan menciptakan lingkungan ML yang konsisten. Namun, ilmuwan data sering berjuang untuk menggunakan template ini secara langsung karena mereka membutuhkan keahlian infrastruktur. Menambahkan portal pengembang seperti Backstage menciptakan cara yang mudah digunakan bagi ilmuwan data untuk menerapkan lingkungan ML standar tanpa perlu memahami detail infrastruktur yang mendasarinya.

Dengan menggunakan Backstage sebagai platform swalayan dan mengintegrasikan templat SageMaker AI yang telah dikonfigurasi sebelumnya, Anda dapat:
+ Mempercepat waktu untuk menilai inisiatif ML Anda.
+ Membantu menegakkan keamanan dan tata kelola yang konsisten.
+ Menyediakan ilmuwan data dengan lingkungan standar dan sesuai.
+ Mengurangi overhead operasional dan kompleksitas infrastruktur.

Pola ini memberikan solusi yang mengatasi tantangan kritis MLOps dan juga menyediakan kerangka kerja yang dapat diskalakan dan berulang yang memungkinkan inovasi sambil mempertahankan standar organisasi.

**Target audiens**

Pola ini ditujukan untuk khalayak luas yang terlibat dalam ML, arsitektur cloud, dan rekayasa platform dalam suatu organisasi. Hal ini mencakup:
+ **Insinyur ML** yang ingin menstandarisasi dan mengotomatiskan penerapan alur kerja ML.
+ **Ilmuwan data** yang menginginkan akses swalayan ke lingkungan ML yang telah dikonfigurasi dan sesuai.
+ **Insinyur platform** yang bertanggung jawab untuk membangun dan memelihara platform pengembang internal dan infrastruktur bersama.
+ **Arsitek cloud** yang merancang solusi cloud yang terukur, aman, dan hemat biaya untuk. MLOps
+ **DevOps insinyur** yang tertarik untuk memperluas praktik integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) ke penyediaan infrastruktur dan alur kerja ML.
+ **Pemimpin teknis dan manajer** yang mengawasi inisiatif ML dan ingin meningkatkan produktivitas tim, tata kelola, dan waktu ke pasar.

Untuk informasi selengkapnya tentang MLOps tantangan, MLOps modul SageMaker AI, dan bagaimana solusi yang disediakan oleh pola ini dapat memenuhi kebutuhan tim ML Anda, lihat bagian [Informasi tambahan](#accelerate-mlops-with-backstage-and-sagemaker-templates-additional).

## Prasyarat dan batasan
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-prereqs"></a>

**Prasyarat**
+ AWS Identity and Access Management (IAM) [peran dan izin](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#prerequisites) untuk menyediakan sumber daya ke dalam Akun AWS
+ Pemahaman tentang konsep [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html), [SageMaker Projects](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-whatis.html), [SageMaker Pipelines](https://docs.aws.amazon.com/sagemaker/latest/dg/pipelines-overview.html), dan [SageMaker Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)
+ Pemahaman tentang prinsip-prinsip IAc dan pengalaman dengan alat-alat seperti [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)

**Batasan**
+ **Cakupan template terbatas**. [Saat ini, solusi hanya mendukung AIOps modul SageMaker terkait AI dari solusi yang lebih luasAIOps .](https://github.com/awslabs/aiops-modules) Modul lain, seperti Ray on Amazon Elastic Kubernetes Service (Amazon EKS), Apache Airflow MLflow, dan fine-tuning untuk Amazon Bedrock, belum tersedia sebagai template Backstage.
+ Pengaturan **default yang tidak dapat dikonfigurasi**. Template menggunakan konfigurasi default tetap dari AIOps SageMaker modul tanpa kustomisasi. Anda tidak dapat mengubah jenis instans, ukuran penyimpanan, konfigurasi jaringan, atau kebijakan keamanan melalui antarmuka Backstage, yang membatasi fleksibilitas untuk kasus penggunaan tertentu.
+ **AWS-hanya dukungan**. Platform ini dirancang khusus untuk AWS penerapan dan tidak mendukung skenario multicloud. Organizations yang menggunakan layanan cloud di luar AWS Cloud tidak dapat menggunakan template ini untuk kebutuhan infrastruktur ML mereka.
+ **Manajemen kredensi manual**. Anda harus secara manual memberikan AWS kredensil Anda untuk setiap penerapan. Solusi ini tidak menyediakan integrasi dengan penyedia identitas perusahaan AWS IAM Identity Center, atau rotasi kredenal otomatis.
+ **Manajemen siklus hidup terbatas**. Template tidak memiliki fitur manajemen siklus hidup sumber daya yang komprehensif seperti kebijakan pembersihan otomatis, rekomendasi pengoptimalan biaya, dan deteksi penyimpangan infrastruktur. Anda harus mengelola dan memantau sumber daya yang digunakan secara manual setelah pembuatan.

## Arsitektur
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-architecture"></a>

Diagram berikut menunjukkan arsitektur solusi untuk portal pengembang terpadu yang menstandarisasi dan mempercepat penyebaran infrastruktur ML dengan AI di seluruh lingkungan. SageMaker 

![\[Arsitektur untuk portal pengembang terpadu dengan Backstage, CNOE, GitHub Actions, dan Seed-Farmer.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c16160cf-d637-423e-93a7-485ffbb28646/images/233adab3-83cf-42f3-a1de-72d0b8ade5ae.png)


Dalam arsitektur ini:

1. [AWS cetak biru modernisasi aplikasi menyediakan penyiapan infrastruktur dengan kluster](https://github.com/aws-samples/appmod-blueprints.git) [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) sebagai dasar untuk kerangka kerja [Cloud Native Operational Excellence](https://cnoe.io/) (CNOE). Solusi komprehensif ini mengatasi tantangan manajemen infrastruktur cloud-native yang kompleks dengan menyediakan platform pengembang internal (IDP) yang dapat diskalakan. Cetak biru menawarkan pendekatan terstruktur untuk menyiapkan infrastruktur yang kuat dan fleksibel yang dapat beradaptasi dengan kebutuhan organisasi Anda yang terus berkembang.

1. Kerangka open source CNOE mengkonsolidasikan DevOps alat dan memecahkan fragmentasi ekosistem melalui pendekatan rekayasa platform terpadu. Dengan menyatukan alat dan teknologi yang berbeda, ini menyederhanakan lanskap kompleks pengembangan cloud-native, sehingga tim Anda dapat fokus pada inovasi alih-alih manajemen rantai alat. Kerangka kerja ini menyediakan metodologi standar untuk memilih, mengintegrasikan, dan mengelola alat pengembangan.

1. Dengan CNOE, Backstage digunakan sebagai solusi out-of-the-box dalam cluster Amazon EKS. [Backstage dibundel dengan otentikasi yang kuat melalui [Keycloak](https://www.keycloak.org/) dan alur kerja penerapan komprehensif melalui Argo CD.](https://argo-cd.readthedocs.io/en/stable/) Platform terintegrasi ini menciptakan lingkungan terpusat untuk mengelola proses pengembangan dan menyediakan satu tempat bagi tim untuk mengakses, menyebarkan, dan memantau infrastruktur dan aplikasi mereka di berbagai lingkungan.

1.  GitHub Repositori berisi templat AIOps perangkat lunak yang telah dikonfigurasi sebelumnya yang mencakup seluruh SageMaker siklus hidup AI. Template ini memenuhi kebutuhan infrastruktur ML yang penting, termasuk penyediaan SageMaker Studio, pelatihan model, saluran inferensi, dan pemantauan model. Template ini membantu Anda mempercepat inisiatif ML Anda dan memastikan konsistensi di berbagai proyek dan tim.

1. [GitHub Actions](https://github.com/features/actions) [mengimplementasikan alur kerja otomatis yang secara dinamis memicu penyediaan sumber daya melalui utilitas Seed-Farmer.](https://github.com/awslabs/seed-farmer) Pendekatan ini mengintegrasikan katalog Backstage dengan repositori AIOps modul dan menciptakan proses penyebaran infrastruktur yang efisien. Otomatisasi mengurangi intervensi manual, meminimalkan kesalahan manusia, dan memastikan penciptaan infrastruktur yang cepat dan konsisten di berbagai lingkungan.

1. [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)Ini membantu Anda mendefinisikan dan menyediakan infrastruktur sebagai kode, dan memastikan penyebaran sumber daya yang dapat diulang, aman, dan sesuai di seluruh yang ditentukan. Akun AWS Pendekatan ini memberikan tata kelola maksimum dengan intervensi manual minimal, sehingga Anda dapat membuat templat infrastruktur standar yang dapat dengan mudah direplikasi, dikendalikan versi, dan diaudit.

## Alat
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/) adalah layanan ML terkelola yang membantu Anda membangun dan melatih model ML dan kemudian menerapkannya ke lingkungan host yang siap produksi.

**Alat-alat lainnya**
+ [Backstage](https://backstage.io/) adalah kerangka kerja open source yang membantu Anda membangun portal pengembang internal.
+ [GitHub Actions](https://github.com/features/actions) adalah CI/CD platform yang mengotomatiskan alur kerja pengembangan perangkat lunak, termasuk tugas-tugas seperti membangun, menguji, dan menyebarkan kode.

**Repositori kode**

Pola ini menggunakan kode dan template dari GitHub repositori berikut:
+ [AIOps platform pengembang internal (IDP) dengan repositori Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ SageMaker Modul terkait AI dari repositori [AWS AIOps modul](https://github.com/awslabs/aiops-modules)
+ [Rekayasa modern pada AWS repositori](https://github.com/aws-samples/appmod-blueprints)

**Implementasi**

[Implementasi ini menggunakan pola penyebaran tingkat produksi untuk Backstage dari rekayasa Modern pada repositori. AWS](https://github.com/aws-samples/appmod-blueprints) Pendekatan ini secara signifikan menyederhanakan proses penyiapan sambil menggabungkan praktik AWS terbaik untuk keamanan dan skalabilitas.

Bagian [Epik](#accelerate-mlops-with-backstage-and-sagemaker-templates-epics) dari pola ini menguraikan pendekatan implementasi. Untuk petunjuk step-by-step penyebaran yang terperinci, lihat [panduan penerapan](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md) komprehensif yang tersedia di [platform pengembang AIOps internal (IDP) dengan](https://github.com/aws-samples/sample-aiops-idp-backstage/) repositori Backstage. Implementasinya meliputi:
+ Penyebaran platform Backstage Awal
+ Integrasi template SageMaker perangkat lunak dengan Backstage
+ Mengkonsumsi dan memelihara template Backstage

Panduan penerapan juga mencakup panduan untuk pemeliharaan berkelanjutan, pemecahan masalah, dan penskalaan platform.

## Praktik terbaik
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-best-practices"></a>

Ikuti praktik terbaik ini untuk membantu memastikan keamanan, tata kelola, dan keunggulan operasional dalam implementasi MLOps infrastruktur Anda.

**Manajemen Template**
+ Jangan pernah membuat perubahan besar pada template langsung.
+ Selalu uji pembaruan secara menyeluruh sebelum penerapan produksi.
+ Pertahankan versi template yang jelas dan terdokumentasi dengan baik.

**Keamanan**
+ Pin GitHub Actions ke algoritma hash aman khusus (SHAs) untuk membantu mencegah serangan rantai pasokan.
+ Gunakan peran IAM dengan hak istimewa paling sedikit dengan izin terperinci.
+ Simpan kredensyal sensitif di [GitHub Rahasia](https://docs.github.com/en/actions/concepts/security/secrets) dan. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ Jangan pernah membuat hardcode kredenal di template.

**Tata kelola dan pelacakan**
+ Menerapkan standar penandaan sumber daya yang komprehensif.
+ Aktifkan pelacakan biaya yang tepat dan pemantauan kepatuhan.
+ Pertahankan jejak audit yang jelas untuk perubahan infrastruktur.

Panduan ini memberikan dasar yang kuat untuk menerapkan praktik terbaik ini dengan menggunakan modul Backstage, SageMaker AI, dan IAc.

## Epik
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-epics"></a>

### Siapkan lingkungan ML Anda
<a name="set-up-your-ml-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan Belakang Panggung. | Langkah ini menggunakan cetak biru dalam [rekayasa Modern pada AWS](https://github.com/aws-samples/appmod-blueprints) repositori untuk membangun infrastruktur yang kuat dan dapat diskalakan yang mengintegrasikan beberapa untuk membuat IDP terpusat Layanan AWS untuk alur kerja ML. Ikuti instruksi di [bagian penyebaran Backstage dari panduan penerapan](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#backstage-deployment) untuk mengkloning repositori, menginstal dependensi, mem-bootstrap variabel lingkungan AWS CDK konfigurasi, dan menerapkan platform Backstage.Infrastruktur menggunakan Amazon EKS sebagai platform orkestrasi kontainer untuk menerapkan komponen IDP. Arsitektur Amazon EKS mencakup konfigurasi jaringan yang aman untuk menetapkan isolasi jaringan yang ketat dan mengontrol pola akses. Platform ini terintegrasi dengan mekanisme otentikasi untuk membantu mengamankan akses pengguna di seluruh layanan dan lingkungan. | Insinyur platform | 
| Siapkan templat SageMaker AI Anda. | Langkah ini menggunakan skrip di [platform pengembang GitHub AIOps internal (IDP) dengan repositori Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/). Ikuti petunjuk di bagian [pengaturan SageMaker templat](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-template-setup) dari panduan penerapan untuk mengkloning repositori, mengatur prasyarat, dan menjalankan skrip penyiapan.Proses ini membuat repositori yang berisi template SageMaker AI yang diperlukan untuk integrasi dengan Backstage. | Insinyur platform | 
| Integrasikan**** template SageMaker AI dengan Backstage. | Ikuti petunjuk di bagian [integrasi SageMaker templat](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#sagemaker-templates-integration) dari panduan penerapan untuk mendaftarkan templat SageMaker AI Anda.Langkah ini mengintegrasikan AIOps modul (templat SageMaker AI dari langkah terakhir) ke dalam penerapan Backstage Anda sehingga Anda dapat melayani sendiri kebutuhan infrastruktur ML Anda. | Insinyur platform | 
| Gunakan template SageMaker AI dari Backstage. | Ikuti petunjuk di bagian [Menggunakan SageMaker templat](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#using-sagemaker-templates) pada panduan penerapan untuk mengakses portal Backstage dan membuat lingkungan ML di SageMaker Studio.Di portal Backstage, Anda dapat memilih dari templat SageMaker AI yang tersedia, termasuk opsi untuk lingkungan SageMaker Studio, SageMaker notebook, templat SageMaker proyek khusus, dan pipeline penerapan model. Setelah Anda memberikan parameter konfigurasi, platform membuat repositori khusus secara otomatis dan menyediakan AWS sumber daya melalui GitHub Actions dan Seed-Farmer. Anda dapat memantau kemajuan melalui log GitHub Tindakan dan katalog komponen Backstage. | Ilmuwan data, Insinyur data, Pengembang | 

### Mengelola template untuk tata kelola dan kepatuhan
<a name="manage-templates-for-governance-and-compliance"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui templat SageMaker AI. | Untuk memperbarui template SageMaker AI di Backstage, ikuti langkah-langkah ini.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Insinyur platform | 
| Membuat dan mengelola beberapa versi template. | Untuk melanggar perubahan atau peningkatan, Anda mungkin ingin membuat beberapa versi template SageMaker AI.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/accelerate-mlops-with-backstage-and-sagemaker-templates.html) | Insinyur platform | 

### Perluas lingkungan ML Anda
<a name="extend-your-ml-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perluas cakupan template di luar SageMaker AI. | Solusi saat ini hanya mengimplementasikan template SageMaker terkait AI AIOps . Anda dapat memperluas lingkungan ML dengan menambahkan [AIOps modul](https://github.com/awslabs/aiops-modules) dan mengintegrasikan template perangkat lunak khusus untuk tambahan Layanan AWS dan aplikasi. Anda dapat membuat ini dengan menggunakan antarmuka desainer template di Backstage, dengan menerapkan tindakan scaffolder kustom, atau dengan memelihara repositori template dengan metadata standar. Platform ini mendukung pembuatan versi template, berbagi lintas tim, dan alur kerja validasi untuk konsistensi. Untuk informasi selengkapnya, lihat [dokumentasi Backstage](https://backstage.io/docs/overview/what-is-backstage/).Anda juga dapat menerapkan pola pewarisan template untuk membuat versi khusus dari template dasar. Ekstensibilitas ini memungkinkan Anda mengelola beragam AWS sumber daya dan aplikasi di luar SageMaker AI sambil mempertahankan pengalaman pengembang yang disederhanakan dan mempertahankan standar organisasi Anda. | Insinyur platform | 
| Gunakan injeksi parameter dinamis. | Template saat ini menggunakan konfigurasi default tanpa penyesuaian, dan menjalankan CLI Seed-Farmer untuk menyebarkan sumber daya dengan variabel default. Anda dapat memperluas konfigurasi default dengan menggunakan injeksi parameter dinamis untuk konfigurasi khusus modul. | Insinyur platform | 
| Meningkatkan keamanan dan kepatuhan. | Untuk meningkatkan keamanan dalam pembuatan sumber daya AWS, Anda dapat mengaktifkan integrasi kontrol akses berbasis peran (RBAC) dengan sistem masuk tunggal (SSO), SAMP, OpenID Connect (OIDC), dan kebijakan sebagai penegakan kode. | Insinyur platform | 
| Tambahkan pembersihan sumber daya otomatis. | Anda dapat mengaktifkan fitur untuk kebijakan pembersihan otomatis, dan juga menambahkan deteksi dan remediasi drift infrastruktur. | Insinyur platform | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus infrastruktur Backstage dan sumber daya SageMaker AI. | Setelah selesai menggunakan lingkungan ML, ikuti petunjuk di bagian [Pembersihan dan manajemen sumber daya](https://github.com/aws-samples/sample-aiops-idp-backstage/blob/main/SETUP.md#cleanup-and-resource-management) panduan penerapan untuk menghapus infrastruktur Backstage dan menghapus sumber daya SageMaker AI di lingkungan ML Anda. | Insinyur platform | 

## Pemecahan masalah
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| AWS CDK kegagalan bootstrap |  Verifikasi AWS kredensil dan konfigurasi Wilayah. | 
| Masalah akses klaster Amazon EKS | Periksa konfigurasi **kubectl** dan izin IAM. | 
| Masalah konektivitas Application Load Balancer | Pastikan bahwa grup keamanan mengizinkan lalu lintas masuk pada port 80/443. | 
| GitHub masalah integrasi | Verifikasi izin GitHub token dan akses organisasi. | 
| SageMaker Kegagalan penerapan AI | Periksa [Layanan AWS kuota](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) dan izin IAM. | 

## Sumber daya terkait
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-resources"></a>
+ [Rekayasa platform](https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-caf-platform-perspective/platform-eng.html) (dalam panduan *AWS Cloud Adoption Framework: Perspektif platform*)
+ [Dokumentasi Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/)
+ [Template Perangkat Lunak Backstage](https://backstage.io/docs/features/software-templates/) (situs web Backstage)
+ [AIOps repositori modul](https://github.com/awslabs/aiops-modules) (kumpulan modul IAc yang dapat digunakan kembali untuk ML)
+ [AIOps platform pengembang internal (IDP) dengan repositori Backstage](https://github.com/aws-samples/sample-aiops-idp-backstage/)
+ [Rekayasa modern pada AWS repositori](https://github.com/aws-samples/appmod-blueprints)
+ [Situs web Cloud Native Operational Excellence (CNOE)](https://cnoe.io/)

## Informasi tambahan
<a name="accelerate-mlops-with-backstage-and-sagemaker-templates-additional"></a>

**Tantangan bisnis**

Organisasi-organisasi yang memulai atau menskalakan MLOps inisiatif mereka sering menghadapi tantangan bisnis dan teknis ini:
+ **Lingkungan yang tidak konsisten.** Kurangnya pengembangan standar dan lingkungan penyebaran membuat kolaborasi menjadi sulit dan meningkatkan risiko penerapan.
+ **Overhead penyediaan manual.** Menyiapkan infrastruktur ML secara manual dengan bucket SageMaker Studio, Amazon Simple Storage Service (Amazon S3), peran IAM, CI/CD dan pipeline memakan waktu dan rawan kesalahan, dan mengalihkan ilmuwan data dari tugas inti pengembangan model mereka.
+ **Kurangnya kemampuan untuk ditemukan dan digunakan kembali**. Kurangnya katalog terpusat menyulitkan untuk menemukan model, kumpulan data, dan saluran pipa yang ada. Ini mengarah pada pekerjaan yang berlebihan dan kehilangan kesempatan untuk digunakan kembali.
+ **Tata kelola dan kepatuhan yang kompleks**. Memastikan bahwa proyek ML mematuhi kebijakan keamanan organisasi, peraturan privasi data, dan standar kepatuhan seperti Health Insurance Portability and Accountability Act (HIPAA) dan General Data Protection Regulation (GDPR) dapat menjadi tantangan tanpa pagar pembatas otomatis.
+ **Waktu yang lambat untuk menilai**. Efek kumulatif dari tantangan ini menghasilkan siklus hidup proyek ML yang berlarut-larut dan menunda realisasi nilai bisnis dari investasi ML.
+ **Risiko keamanan**. Konfigurasi yang tidak konsisten dan proses manual dapat menimbulkan kerentanan keamanan yang membuatnya sulit untuk menerapkan hak istimewa dan isolasi jaringan yang paling sedikit.

Isu-isu ini memperpanjang siklus pengembangan, meningkatkan overhead operasional, dan menimbulkan risiko keamanan. Sifat berulang dari ML membutuhkan alur kerja berulang dan kolaborasi yang efisien.

Gartner memperkirakan bahwa pada tahun 2026, 80% organisasi rekayasa perangkat lunak akan memiliki tim platform. (Lihat [Rekayasa Platform Memberdayakan Pengembang untuk Menjadi Lebih Baik, Lebih Cepat, Lebih Bahagia di situs](https://www.gartner.com/en/experts/top-tech-trends-unpacked-series/platform-engineering-empowers-developers) web Gartner.) Prediksi ini menyoroti bagaimana IDP dapat mempercepat pengiriman perangkat lunak. Sebagai IDP, Backstage membantu memulihkan ketertiban ke infrastruktur yang kompleks sehingga tim dapat memberikan kode berkualitas tinggi dengan cepat dan aman. Mengintegrasikan Backstage dengan AIOps modul yang diperkeras membantu Anda beralih dari pemecahan masalah reaktif ke pencegahan proaktif.

**MLOps SageMaker modul**

[AIOps Modul](https://github.com/awslabs/aiops-modules) dalam GitHub repositori yang digunakan untuk pola ini memberikan dasar yang berharga untuk standarisasi MLOps AWS melalui IAc yang dapat digunakan kembali dan dikeraskan. Modul-modul ini merangkum praktik terbaik untuk SageMaker proyek penyediaan, jaringan pipa, dan sumber daya jaringan dan penyimpanan terkait, dengan tujuan untuk mengurangi kompleksitas dan mempercepat penyiapan lingkungan ML. Anda dapat menggunakan template ini untuk berbagai kasus MLOps penggunaan guna menetapkan pola penerapan yang konsisten dan aman yang mendorong pendekatan yang lebih teratur dan efisien terhadap alur kerja ML. 

Menggunakan AIOps modul secara langsung seringkali membutuhkan tim platform untuk menyebarkan dan mengelola templat IAC ini, yang dapat menghadirkan tantangan bagi ilmuwan data yang menginginkan akses layanan mandiri. Menemukan dan memahami template yang tersedia, mengonfigurasi parameter yang diperlukan, dan memicu penerapannya mungkin memerlukan navigasi Layanan AWS konsol atau berinteraksi langsung dengan alat IAc. Ini dapat menciptakan gesekan, meningkatkan beban kognitif bagi ilmuwan data yang lebih suka fokus pada tugas-tugas ML, dan berpotensi menyebabkan parameterisasi atau penyimpangan yang tidak konsisten dari standar organisasi jika templat ini tidak dikelola melalui antarmuka yang terpusat dan ramah pengguna. Mengintegrasikan AIOps modul-modul canggih ini dengan IDP seperti Backstage membantu mengatasi tantangan ini dengan memberikan pengalaman swalayan yang efisien, kemampuan untuk ditemukan, dan kontrol tata kelola yang lebih kuat untuk menggunakan blok bangunan standar ini. MLOps 

**Backstage sebagai IDP**

Platform pengembang internal (IDP) adalah lapisan layanan mandiri yang dibangun oleh tim platform untuk menyederhanakan dan menstandarisasi bagaimana pengembang membangun, menyebarkan, dan mengelola aplikasi. Ini mengabstraksi kompleksitas infrastruktur dan memberi pengembang akses mudah ke alat, lingkungan, dan layanan melalui antarmuka terpadu.

Tujuan utama IDP adalah untuk meningkatkan pengalaman dan produktivitas pengembang dengan:
+ Mengaktifkan layanan mandiri untuk tugas-tugas seperti pembuatan dan penyebaran layanan.
+ Mempromosikan konsistensi dan kepatuhan melalui templat standar.
+ Mengintegrasikan alat di seluruh siklus hidup pengembangan (CI/CD, pemantauan, dan dokumentasi).

Backstage adalah portal pengembang open source yang dibuat oleh Spotify dan sekarang menjadi bagian dari Cloud Native Computing Foundation (CNCF). Ini membantu organisasi membangun IDP mereka sendiri dengan menyediakan platform terpusat dan dapat diperluas untuk mengelola komponen perangkat lunak, alat, dan dokumentasi. Dengan Backstage, pengembang dapat:
+ Temukan dan kelola semua layanan internal melalui katalog perangkat lunak.
+ Buat proyek baru dengan menggunakan templat yang telah ditentukan melalui plugin scaffolder.
+ Akses perkakas terintegrasi seperti CI/CD pipeline, dasbor Kubernetes, dan sistem pemantauan dari satu lokasi.
+ Pertahankan dokumentasi berbasis penurunan harga yang konsisten melalui. TechDocs

**FAQ**

**Apa perbedaan antara menggunakan template Backstage ini versus menerapkan SageMaker Studio secara manual melalui konsol? SageMaker **

Template Backstage memberikan beberapa keunggulan dibandingkan penerapan AWS konsol manual, termasuk konfigurasi standar yang mengikuti praktik terbaik organisasi, penyebaran IAC otomatis menggunakan Seed-Farmer dan, kebijakan keamanan bawaan dan tindakan kepatuhan AWS CDK, dan integrasi dengan alur kerja pengembang organisasi Anda. GitHub Template juga membuat penerapan yang dapat direproduksi dengan kontrol versi, yang membuatnya lebih mudah untuk mereplikasi lingkungan di berbagai tahap (pengembangan, pementasan, produksi) dan menjaga konsistensi di seluruh tim. Selain itu, template mencakup kemampuan pembersihan otomatis dan terintegrasi dengan sistem manajemen identitas organisasi Anda melalui Backstage. Penerapan manual melalui konsol memerlukan AWS keahlian yang mendalam dan tidak menyediakan kontrol versi atau tingkat standardisasi dan tata kelola yang sama dengan yang ditawarkan template. Untuk alasan ini, penerapan konsol lebih cocok untuk eksperimen satu kali daripada lingkungan produksi produksi.

**Apa itu Petani Benih dan mengapa solusi ini menggunakannya?**

Seed-Farmer adalah alat orkestrasi AWS penyebaran yang mengelola modul infrastruktur dengan menggunakan. AWS CDK Pola ini menggunakan Seed-Farmer karena menyediakan komponen infrastruktur standar yang dapat digunakan kembali yang dirancang khusus untuk AI/ML beban kerja, menangani dependensi kompleks antara secara Layanan AWS otomatis, dan memastikan penerapan yang konsisten di berbagai lingkungan.

**Apakah saya perlu menginstal AWS CLI untuk menggunakan template ini?**

Tidak, Anda tidak perlu menginstal AWS CLI di komputer Anda. Template berjalan sepenuhnya melalui GitHub Actions di cloud. Anda memberikan AWS kredensi Anda (kunci akses, kunci rahasia, dan token sesi) melalui antarmuka Backstage, dan penerapan terjadi secara otomatis di lingkungan Tindakan. GitHub 

**Berapa lama waktu yang dibutuhkan untuk menerapkan lingkungan SageMaker Studio?**

Penyebaran SageMaker Studio yang khas membutuhkan waktu 15-25 menit untuk diselesaikan. Ini termasuk AWS CDK bootstrap (2-3 menit), pengaturan toolchain Seed-Farmer (3-5 menit), dan pembuatan sumber daya (10-15 menit). Waktu yang tepat tergantung pada Anda Wilayah AWS dan kompleksitas pengaturan jaringan Anda.

**Bisakah saya menerapkan beberapa SageMaker lingkungan dalam hal yang sama? Akun AWS**

Ya, Anda bisa. Setiap penerapan menciptakan sumber daya dengan nama unik berdasarkan nama komponen yang Anda berikan dalam template. Namun, perhatikan Layanan AWS kuota: Setiap akun dapat memiliki jumlah SageMaker domain terbatas per Wilayah, jadi [periksa kuota Anda sebelum Anda](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker) membuat beberapa lingkungan.

# Mengotomatiskan operasi AWS infrastruktur dengan menggunakan Amazon Bedrock
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock"></a>

*Ishwar Chauthaiwale dan Anand Bukkapatnam Tirumala, Amazon Web Services*

## Ringkasan
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-summary"></a>

Dalam solusi cloud native, mengotomatisasi operasi infrastruktur umum memainkan peran penting dalam menjaga lingkungan yang efisien, aman, dan hemat biaya. Operasi penanganan secara manual memakan waktu dan rentan terhadap kesalahan manusia. Selain itu, anggota tim dengan berbagai tingkat AWS keahlian perlu melakukan tugas-tugas ini sambil memastikan kepatuhan terhadap protokol keamanan. Pola ini menunjukkan cara menggunakan Amazon Bedrock untuk mengotomatiskan operasi AWS infrastruktur umum melalui pemrosesan bahasa alami (NLP).

Pola ini dapat membantu organisasi untuk mengembangkan kode yang dapat digunakan kembali, modular, dan aman untuk menyebarkan infrastruktur berbasis AI generatif di berbagai lingkungan. Melalui fokusnya pada infrastruktur sebagai kode (IAc) dan otomatisasi, ia memberikan DevOps manfaat utama termasuk kontrol versi, penerapan yang konsisten, pengurangan kesalahan, penyediaan yang lebih cepat, dan kolaborasi yang lebih baik.

Pola ini mengimplementasikan arsitektur aman yang memungkinkan tim mengelola operasi yang terkait dengan kunci Layanan AWS termasuk:
+ Manajemen versi bucket Amazon Simple Storage Service (Amazon S3)
+ Pembuatan snapshot Amazon Relational Database Service (Amazon RDS)
+ Manajemen instans Amazon Elastic Compute Cloud (Amazon EC2)

Arsitektur ini menggunakan titik akhir Amazon Virtual Private Cloud (Amazon VPC) dan jaringan pribadi untuk komunikasi yang aman, AWS Lambda dengan fungsi yang beroperasi sebagai pelaksana tugas dalam subnet pribadi. Amazon S3 menyediakan manajemen data dan mengimplementasikan peran dan izin komprehensif AWS Identity and Access Management (IAM) untuk memastikan kontrol akses yang tepat. Solusi ini tidak menyertakan fitur riwayat obrolan, dan obrolan tidak disimpan.

## Prasyarat dan batasan
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-prereqs"></a>
+ Aktif Akun AWS.
+ Langkah-langkah kontrol akses yang tepat harus dilakukan untuk membantu mengamankan dan mengontrol akses. Contoh kontrol akses termasuk penggunaan AWS Systems Manager, akses model dasar, peran IAM untuk penerapan, dan peran berbasis layanan, menonaktifkan akses publik ke bucket Amazon S3, dan menyiapkan antrian surat mati.
+ [Kunci yang dikelola pelanggan AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) (AWS KMS).
+ AWS Command Line Interface (AWS CLI) versi 2 atau yang lebih baru, [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) pada lingkungan penyebaran.
+  AWS Penyedia Terraform versi 4 atau yang lebih baru [diinstal](https://registry.terraform.io/providers/-/aws/latest/docs/guides/version-4-upgrade) dan dikonfigurasi.
+ [Terraform versi 1.5.7 atau yang lebih baru diinstal dan dikonfigurasi.](https://developer.hashicorp.com/terraform/install)
+ Tinjau dan [Tentukan skema OpenAPI untuk grup tindakan agen Anda di Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html) untuk membantu melindungi dari akses yang tidak sah dan menjaga integritas data.
+ [Akses diaktifkan](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) [di Anda Akun AWS untuk Amazon Titan Text Embeddings v2 yang diperlukan dan model dasar Claude 3.5 Sonnet atau Claude 3 Haiku.](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html) Untuk menghindari kegagalan penerapan, konfirmasikan bahwa penerapan target Anda Wilayah AWS [mendukung model yang diperlukan](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html).
+ Virtual Private Cloud (VPC) yang dikonfigurasi yang mengikuti praktik terbaik [AWS Well Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-design.html).
+ Tinjauan lengkap tentang [kebijakan AI Bertanggung Jawab Amazon](https://aws.amazon.com/ai/responsible-ai/policy/).

**Versi produk**
+ Embeddings Teks Amazon Titan v2
+ Antropik Claude 3.5 Soneta atau Claude 3 Haiku
+  AWS Penyedia Terraform versi 4 atau yang lebih baru
+ Terraform versi 1.5.7 atau yang lebih baru

## Arsitektur
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![\[Alur kerja untuk mengotomatiskan operasi infrastruktur AWS umum dengan menggunakan Amazon Bedrock.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/924e503f-bfc5-4452-abdf-d72a58d4d36f/images/bd56ad29-b435-4543-8ee8-dc4e1d38df18.png)


Arsitektur solusi terdiri dari beberapa lapisan yang bekerja sama untuk memproses permintaan bahasa alami dan menjalankan AWS operasi yang sesuai:

1. Pengguna membuat permintaan operasi melalui konsol obrolan Amazon Bedrock.

1. Chatbot menggunakan Pangkalan Pengetahuan Amazon Bedrock untuk pemrosesan permintaan. Ini mengimplementasikan model Amazon Titan Text Embeddings v2 untuk pemrosesan bahasa alami.

1. Jika prompt pengguna menyertakan permintaan tindakan, grup tindakan Amazon Bedrock menggunakan model Anthropic Claude 3 Haiku atau Claude 3.5 Sonnet (tergantung pilihan Anda) untuk logika eksekusi dan mendefinisikan operasi melalui skema OpenAPI.

1. Grup tindakan mencapai [titik akhir](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) VPC Amazon yang digunakan AWS PrivateLink untuk komunikasi layanan yang aman.

1.  AWS Lambda Fungsi ini dicapai melalui titik akhir Amazon VPC untuk layanan Amazon Bedrock.

1. Fungsi Lambda adalah mesin eksekusi utama. Berdasarkan permintaan, fungsi Lambda memanggil API untuk melakukan tindakan pada file. Layanan AWS Fungsi Lambda juga menangani routing dan eksekusi operasi.

1. Permintaan Layanan AWS get API dari fungsi Lambda dan operasi terkait dilakukan.

1. Fungsi Lambda menghitung payload keluaran yang dipahami oleh Amazon Bedrock.

1. Payload ini dikirim ke Amazon Bedrock dengan menggunakan PrivateLink untuk komunikasi layanan yang aman. Model bahasa besar (LLM) yang digunakan oleh Amazon Bedrock memahami muatan ini dan mengubahnya menjadi format yang dapat dimengerti manusia.

1. Outputnya kemudian ditampilkan kepada pengguna di konsol obrolan Amazon Bedrock.

Solusinya memungkinkan operasi utama berikut:
+ Amazon S3 — Aktifkan pembuatan versi bucket untuk kontrol versi.
+ Amazon RDS - Buat snapshot database untuk cadangan.
+ Amazon EC2 — Buat daftar instans dan kontrol awal dan penghentian instans.

## Alat
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-tools"></a>

**Layanan AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) adalah layanan yang dikelola sepenuhnya yang membuat model foundation berkinerja tinggi (FMs) dari startup AI terkemuka dan Amazon tersedia untuk Anda gunakan melalui API terpadu.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [Amazon Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas komputasi](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) yang dapat diskalakan di. AWS Cloud Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan dan dengan cepat meningkatkannya ke atas atau ke bawah.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) adalah konfigurasi tanpa server sesuai permintaan untuk Amazon Service. OpenSearch 
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)membantu Anda membuat koneksi pribadi searah dari cloud pribadi virtual Anda (VPCs) ke layanan di luar VPC.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)) membantu Anda menyiapkan, mengoperasikan, dan menskalakan database relasional di. AWS Cloud
+ [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.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)membantu Anda mengelola aplikasi dan infrastruktur yang berjalan di AWS Cloud. Ini menyederhanakan aplikasi dan manajemen sumber daya, mempersingkat waktu untuk mendeteksi dan menyelesaikan masalah operasional, dan membantu Anda mengelola AWS sumber daya Anda dengan aman dalam skala besar.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

**Alat lainnya**
+ [Git](https://git-scm.com/docs) adalah sistem kontrol versi terdistribusi open source.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [infra-ops-orchestratoraws-samples/](https://github.com/aws-samples/infra-ops-orchestrator) repositori.

## Praktik terbaik
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-best-practices"></a>
+ Pantau log eksekusi Lambda secara teratur. Untuk informasi selengkapnya, lihat [Memantau dan memecahkan masalah fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Untuk informasi selengkapnya tentang praktik terbaik, lihat [Praktik terbaik untuk bekerja dengan AWS Lambda fungsi](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).
+ Tinjau konfigurasi keamanan secara berkala untuk memastikan kepatuhan terhadap persyaratan organisasi Anda. Untuk informasi selengkapnya, lihat [Praktik terbaik keamanan](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec-bp.html).
+ Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-epics"></a>

### Terapkan solusinya
<a name="deploy-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori pada mesin lokal Anda, jalankan perintah berikut:<pre>git clone "git@github.com:aws-samples/infra-ops-orchestrator.git"<br />cd infra-ops-orchestrator</pre> | AWS DevOps, DevOps insinyur | 
| Edit variabel lingkungan. | Edit `terraform.tfvars` file. di direktori root dari repositori kloning. Tinjau placeholder yang ditunjukkan oleh`[XXXXX]`, dan perbarui sesuai dengan lingkungan Anda. | AWS DevOps, DevOps insinyur | 
| Buat infrastruktur. | Untuk membuat infrastruktur, jalankan perintah berikut:<pre>terraform init</pre><pre>terraform plan</pre>Tinjau rencana eksekusi dengan cermat. Jika perubahan yang direncanakan dapat diterima, maka jalankan perintah berikut:<pre>terraform apply --auto-approve</pre> | AWS DevOps, DevOps insinyur | 

### Akses solusinya
<a name="access-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Akses solusinya. | Setelah penerapan berhasil, ikuti langkah-langkah berikut untuk menggunakan antarmuka berbasis obrolan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-infrastructure-operations-by-using-amazon-bedrock.html) | AWS DevOps, DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus sumber daya yang dibuat. | Untuk menghapus semua infrastruktur yang dibuat oleh pola ini, jalankan perintah berikut:<pre>terraform plan -destroy </pre>Tinjau rencana penghancuran dengan hati-hati. Jika penghapusan yang direncanakan dapat diterima, maka jalankan perintah berikut:<pre>terraform destroy</pre>Catatan: Perintah ini akan menghapus semua sumber daya yang dibuat oleh pola ini secara permanen. Perintah akan meminta konfirmasi sebelum menghapus sumber daya apa pun. | AWS DevOps, DevOps insinyur | 

## Pemecahan masalah
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Perilaku agen  | Untuk informasi tentang masalah ini, lihat [Menguji dan memecahkan masalah perilaku agen dalam dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) Amazon Bedrock. | 
| Masalah jaringan Lambda | Untuk informasi tentang masalah ini, lihat [Memecahkan masalah jaringan di Lambda dalam dokumentasi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html). | 
| Izin IAM | Untuk informasi tentang masalah ini, lihat [Memecahkan Masalah IAM di dokumentasi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html). | 

## Sumber daya terkait
<a name="automate-aws-infrastructure-operations-by-using-amazon-bedrock-resources"></a>
+ [Membuat snapshot DB untuk instans DB AZ tunggal untuk Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [Tentukan skema OpenAPI untuk grup tindakan agen Anda di Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-api-schema.html)
+ [Mengaktifkan pembuatan versi pada bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html)
+ [Bagaimana Agen Amazon Bedrock bekerja](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [Ambil data dan hasilkan respons AI dengan Pangkalan Pengetahuan Amazon Bedrock](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Akses Layanan Dengan Aman AWS PrivateLink](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/aws-privatelink.html)
+ [Hentikan dan mulai instans Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
+ [Gunakan grup tindakan untuk menentukan tindakan yang harus dilakukan agen Anda](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html)

# Otomatiskan CloudFront pembaruan saat titik akhir penyeimbang beban berubah dengan menggunakan Terraform
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change"></a>

*Tamilselvan P, Mohan Annam, dan Naveen Suthar, Amazon Web Services*

## Ringkasan
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-summary"></a>

Saat pengguna Amazon Elastic Kubernetes Service (Amazon EKS) menghapus dan menginstal ulang konfigurasi ingress mereka melalui bagan Helm, Application Load Balancer (ALB) baru akan dibuat. Ini menciptakan masalah karena Amazon CloudFront terus mereferensikan catatan DNS ALB lama. Akibatnya, layanan yang ditujukan ke titik akhir ini tidak akan dapat dijangkau. (Untuk detail selengkapnya tentang alur kerja bermasalah ini, lihat [Informasi tambahan](#automate-cloudfront-updates-when-load-balancer-endpoints-change-additional).)

Untuk mengatasi masalah ini, pola ini menjelaskan penggunaan AWS Lambda fungsi kustom yang dikembangkan dengan Python. Fungsi Lambda ini secara otomatis mendeteksi ketika ALB baru dibuat melalui aturan Amazon. EventBridge Dengan menggunakan AWS SDK untuk Python (Boto3), fungsi tersebut kemudian memperbarui CloudFront konfigurasi dengan alamat DNS ALB baru, memastikan bahwa lalu lintas diarahkan ke titik akhir yang benar.

Solusi otomatis ini mempertahankan kontinuitas layanan tanpa perutean atau latensi tambahan. Proses ini membantu memastikan bahwa CloudFront selalu mereferensikan titik akhir DNS ALB yang benar, bahkan ketika infrastruktur yang mendasarinya berubah.

## Prasyarat dan batasan
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Contoh aplikasi web untuk pengujian dan validasi yang digunakan di Amazon EKS dengan menggunakan Helm. Untuk informasi selengkapnya, lihat [Menerapkan aplikasi dengan Helm di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) di dokumentasi Amazon EKS.
+ Konfigurasikan CloudFront untuk merutekan panggilan ke ALB yang dibuat oleh pengontrol [ingress](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) Helm. Untuk informasi selengkapnya, lihat [Menginstal AWS Load Balancer Controller dengan Helm](https://docs.aws.amazon.com/eks/latest/userguide/lbc-helm.html) di dokumentasi Amazon EKS dan [Membatasi akses ke Application Load Balancer](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html) dalam dokumentasi. CloudFront 
+ Terraform [diinstal](https://developer.hashicorp.com/terraform/install?product_intent=terraform) dan dikonfigurasi di ruang kerja lokal.

**Batasan**
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ Terraform versi 1.0.0 atau yang lebih baru
+ [AWS Penyedia](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) Terraform versi 4.20 atau yang lebih baru

## Arsitektur
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![\[Alur kerja untuk memperbarui CloudFront dengan alamat DNS ALB baru terdeteksi melalui aturan. EventBridge\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/28854767-0902-4398-80af-b19141dd94e4.png)


Solusi ini melakukan langkah-langkah berikut:

1. Pengontrol ingress Amazon EKS membuat Application Load Balancer (ALB) baru setiap kali ada Helm restart atau deployment.

1. EventBridge mencari acara pembuatan ALB.

1. Acara pembuatan ALB memicu fungsi Lambda.

1. Fungsi Lambda telah digunakan berdasarkan python 3.9 dan menggunakan API boto3 untuk memanggil. Layanan AWS Fungsi Lambda memperbarui CloudFront entri dengan nama DNS penyeimbang beban terbaru, yang diterima dari peristiwa create load balancer.

## Alat
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-tools"></a>

**Layanan AWS**
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) mempercepat distribusi konten web Anda dengan mengirimkannya melalui jaringan pusat data di seluruh dunia, yang menurunkan latensi dan meningkatkan kinerja.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS SDK untuk Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

**Alat lainnya**
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [aws-cloudfront-automation-terraform-samples](https://github.com/aws-samples/aws-cloudfront-automation-terraform-samples).

## Epik
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-epics"></a>

### Siapkan workstation lokal
<a name="set-up-local-workstation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan dan konfigurasikan Git CLI. | Untuk menginstal dan mengkonfigurasi antarmuka baris perintah Git (CLI) di workstation lokal Anda, ikuti instruksi [Memulai — Menginstal Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) dalam dokumentasi Git. | DevOps insinyur | 
| Buat folder proyek dan tambahkan file. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps insinyur | 

### Menyediakan arsitektur target menggunakan konfigurasi Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan solusinya. | Untuk menyebarkan sumber daya di target Akun AWS, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps insinyur | 

### Verifikasi penyebaran
<a name="verify-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi penerapan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps insinyur | 

### Membersihkan infrastruktur
<a name="clean-up-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan infrastruktur. | Untuk membersihkan infrastruktur yang Anda buat sebelumnya, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-cloudfront-updates-when-load-balancer-endpoints-change.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Kesalahan memvalidasi kredensi penyedia | Saat Anda menjalankan Terraform `apply` atau `destroy` perintah dari mesin lokal Anda, Anda mungkin mengalami kesalahan yang mirip dengan berikut ini:<pre>Error: configuring Terraform AWS Provider: error validating provider <br />credentials: error calling sts:GetCallerIdentity: operation error STS: <br />GetCallerIdentity, https response error StatusCode: 403, RequestID: <br />123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: <br />The security token included in the request is invalid.</pre>Kesalahan ini disebabkan oleh kedaluwarsa token keamanan untuk kredensil yang digunakan dalam konfigurasi mesin lokal Anda.Untuk mengatasi kesalahan, lihat [Mengatur dan melihat pengaturan konfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods) dalam dokumentasi AWS Command Line Interface (AWS CLI). | 

## Sumber daya terkait
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-resources"></a>

**AWS sumber daya**
+ [Batasi akses ke Application Load Balancers](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/restrict-access-to-load-balancer.html)
+ [Rute lalu lintas internet dengan AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)

**Dokumentasi Terraform**
+ [AWS Penyedia](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ [Instal Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [Negara Terpencil](https://developer.hashicorp.com/terraform/language/state/remote)

## Informasi tambahan
<a name="automate-cloudfront-updates-when-load-balancer-endpoints-change-additional"></a>

**Alur kerja bermasalah**

![\[Alur kerja yang menghasilkan entri out-of-date ALB DNS di. CloudFront\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/03c30b18-4dd7-4dd4-b960-5a5cc58cec63/images/bb3c2c93-c749-435d-9b1d-2bbf6f0cf085.png)


Diagram menunjukkan alur kerja berikut:

1. Saat pengguna mengakses aplikasi, panggilan masuk ke CloudFront.

1. CloudFront merutekan panggilan ke Application Load Balancer (ALB) masing-masing.

1. ALB mencakup alamat IP target yang merupakan alamat IP pod aplikasi. Dari sana, ALB memberikan hasil yang diharapkan kepada pengguna.

Namun, alur kerja ini menunjukkan masalah. Penerapan aplikasi terjadi melalui bagan Helm. Setiap kali ada penerapan atau jika seseorang memulai ulang Helm, ingress masing-masing juga dibuat ulang. Akibatnya, pengontrol penyeimbang beban eksternal menciptakan kembali ALB. Juga, selama setiap pembuatan ulang, ALB dibuat ulang dengan nama DNS yang berbeda. Karena itu, CloudFront akan memiliki entri basi di pengaturan asal. Karena entri basi ini, aplikasi tidak akan dapat dijangkau oleh pengguna. Masalah ini mengakibatkan downtime bagi pengguna.

**Solusi alternatif**

Solusi lain yang mungkin adalah membuat [DNS eksternal](https://github.com/kubernetes-sigs/external-dns) untuk ALB dan kemudian mengarahkannya ke titik akhir zona host pribadi Amazon Route 53 di. CloudFront Namun, pendekatan ini menambahkan lompatan lain dalam alur aplikasi, yang dapat menyebabkan latensi aplikasi. Solusi fungsi Lambda pola ini tidak mengganggu aliran arus.

# Otomatiskan CodeGuru ulasan Amazon untuk aplikasi AWS CDK Python dengan menggunakan Tindakan GitHub
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications"></a>

*Vanitha Dontireddy dan Sarat Chandra Pothula, Amazon Web Services*

## Ringkasan
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-summary"></a>

Catatan: Mulai 7 November 2025, Anda tidak dapat membuat asosiasi repositori baru di Amazon Reviewer. CodeGuru Untuk mempelajari tentang layanan dengan kemampuan yang mirip dengan CodeGuru Reviewer, lihat [Perubahan ketersediaan Amazon CodeGuru Reviewer di dokumentasi](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html) CodeGuru Reviewer.

Pola ini menampilkan integrasi tinjauan kode CodeGuru otomatis Amazon untuk aplikasi AWS Cloud Development Kit (AWS CDK) Python, yang diatur GitHub melalui Tindakan. Solusinya menerapkan arsitektur tanpa server yang didefinisikan dengan Python. AWS CDK Dengan mengotomatiskan analisis kode ahli dalam pipeline pengembangan, pendekatan ini dapat melakukan hal berikut untuk proyek AWS CDK Python:
+ Tingkatkan kualitas kode.
+ Merampingkan alur kerja.
+ Maksimalkan manfaat komputasi tanpa server.

## Prasyarat dan batasan
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Command Line Interface [(AWS CLI) versi 2.9.11 atau yang lebih baru, [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) dan dikonfigurasi.](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+  GitHub Akun aktif dan GitHub repositori dengan izin alur kerja baca dan tulis serta pembuatan permintaan tarik (PR) oleh GitHub Tindakan untuk memastikan alur kerja PR beroperasi dengan benar.
+ Peran OpenID Connect (OIDC) dalam GitHub Actions untuk menerapkan solusi di file. Akun AWS Untuk membuat peran, gunakan [AWS CDK konstruksi](https://github.com/aws-samples/github-actions-oidc-cdk-construct).

**Batasan**
+ Amazon CodeGuru Profiler [mendukung aplikasi](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html#what-is-language-support) yang ditulis dalam semua bahasa Java virtual machine (JVM) (seperti Scala dan Kotlin) dan runtime dan Python 3.6 atau yang lebih baru.
+ Amazon CodeGuru Reviewer [mendukung asosiasi](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/working-with-repositories.html) dengan repositori kode Java dan Python hanya dari penyedia sumber berikut AWS CodeCommit:, Bitbucket GitHub,, Enterprise Cloud, dan Enterprise GitHub Server. GitHub Selain itu, repositori Amazon Simple Storage Service (Amazon S3) hanya didukung melalui Actions. GitHub 
+ Tidak ada cara otomatis untuk mencetak temuan selama pipeline integrasi berkelanjutan dan penerapan berkelanjutan (CI/CD). Sebaliknya, pola ini menggunakan GitHub Actions sebagai metode alternatif untuk menangani dan menampilkan temuan.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [layanan AWS menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-architecture"></a>

Diagram berikut menunjukkan arsitektur untuk solusi ini.

![\[Alur kerja untuk mengintegrasikan tinjauan CodeGuru kode untuk aplikasi AWS CDK Python menggunakan Tindakan. GitHub\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c5395e3e-ff2a-41cf-bd64-c73cc928b60b/images/18f880a2-9bc3-4d71-a598-bb83b68ee383.png)


Seperti yang ditunjukkan dalam diagram, ketika pengembang membuat permintaan tarik (PR) untuk ditinjau, GitHub Tindakan memicu langkah-langkah berikut:

1. Asumsi peran IAM — Pipeline menggunakan peran IAM yang ditentukan dalam GitHub Rahasia untuk melakukan tugas penerapan.

1. Analisis kode
   + CodeGuru Reviewer menganalisis kode yang disimpan di bucket Amazon S3. Ini mengidentifikasi cacat dan memberikan rekomendasi untuk perbaikan dan pengoptimalan.
   + CodeGuru Pemindaian keamanan untuk pelanggaran kebijakan dan kerentanan.

1. Tinjauan temuan
   + Pipeline mencetak tautan ke dasbor temuan di output konsol.
   + Jika temuan kritis terdeteksi, pipa segera gagal.
   + Untuk temuan tingkat keparahan tinggi, normal, atau rendah, pipa berlanjut ke langkah berikutnya.

1. Persetujuan PR
   + Seorang pengulas harus menyetujui PR secara manual.
   + Jika PR ditolak, pipeline gagal dan menghentikan langkah penerapan lebih lanjut.

1. Penyebaran CDK — Setelah persetujuan PR, proses penyebaran CDK dimulai. Ini mengatur yang berikut Layanan AWS dan sumber daya:
   + CodeGuru Profiler
   + AWS Lambda fungsi
   + Antrean Amazon Simple Queue Service (Amazon SQS)

1. Pembuatan data pembuatan profil — Untuk menghasilkan data profil yang cukup untuk CodeGuru Profiler:
   + Pipeline memanggil fungsi Lambda beberapa kali dengan mengirim pesan ke antrean Amazon SQS secara berkala.

## Alat
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode.
+ [CDK Toolkit adalah kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) pengembangan cloud baris perintah yang membantu Anda berinteraksi dengan aplikasi Anda AWS CDK .
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) mengumpulkan data performa runtime dari aplikasi live Anda, dan memberikan rekomendasi yang dapat membantu Anda menyempurnakan performa aplikasi.
+ [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) menggunakan analisis program dan pembelajaran mesin untuk mendeteksi potensi cacat yang sulit ditemukan oleh pengembang. Kemudian, CodeGuru Profiler menawarkan saran untuk meningkatkan kode Java dan Python Anda.
+ Amazon CodeGuru Security adalah alat keamanan aplikasi statis yang menggunakan pembelajaran mesin untuk mendeteksi pelanggaran dan kerentanan kebijakan keamanan. Ini memberikan saran untuk mengatasi risiko keamanan dan menghasilkan metrik sehingga Anda dapat melacak postur keamanan aplikasi Anda.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon Simple Queue Service (Amazon Simple Queue Service](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)) menyediakan antrian host yang aman, tahan lama, dan tersedia yang membantu Anda mengintegrasikan dan memisahkan sistem dan komponen perangkat lunak terdistribusi.
+ [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.

**Alat-alat lainnya**
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [amazon-codeguru-suite-cdk-python](https://github.com/aws-samples/amazon-codeguru-suite-cdk-python).

## Praktik terbaik
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-best-practices"></a>
+ Patuhi [Praktik Terbaik untuk mengembangkan dan menerapkan infrastruktur cloud dengan. AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html)
+ Ikuti [praktik terbaik Keamanan di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) saat menggunakan Layanan AWS dalam alur kerja GitHub Tindakan, termasuk:
  + Jangan menyimpan kredensi dalam kode repositori Anda.
  + [Asumsikan peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-workloads-use-roles) untuk menerima kredensil sementara, dan gunakan kredenal sementara jika memungkinkan.
  + [Berikan hak istimewa paling sedikit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) untuk peran IAM yang digunakan dalam alur kerja GitHub Tindakan. Berikan hanya izin yang diperlukan untuk melakukan tindakan dalam alur kerja GitHub Tindakan Anda. 
  + [Pantau aktivitas](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#remove-credentials) peran IAM yang digunakan dalam alur kerja GitHub Tindakan.
  + Putar kredenal jangka panjang apa pun yang Anda gunakan secara berkala.

## Epik
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-epics"></a>

### Siapkan lingkungan Anda
<a name="set-up-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan AWS kredensil. | Untuk mengekspor variabel yang menentukan Akun AWS dan Wilayah AWS di mana Anda menerapkan tumpukan, jalankan perintah berikut:<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre> AWS Kredensi untuk AWS CDK disediakan melalui variabel lingkungan. | AWS DevOps, DevOps insinyur | 
| Kloning repositori. | Untuk mengkloning repositori pada mesin lokal Anda, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/amazon-codeguru-suite-cdk-python.git</pre> | AWS DevOps, DevOps insinyur | 
| Instal Toolkit CDK. | Untuk mengonfirmasi bahwa CDK Toolkit diinstal dan untuk memeriksa versi, jalankan perintah berikut: <pre>cdk --version</pre>Jika versi CDK Toolkit lebih awal dari 2.27.0, masukkan perintah berikut untuk memperbaruinya ke versi 2.27.0:<pre>npm install -g aws-cdk@2.27.0</pre>Jika CDK Toolkit *tidak* diinstal, jalankan perintah berikut untuk menginstalnya:<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps insinyur | 
| Instal dependensi yang diperlukan. | Untuk menginstal dependensi proyek yang diperlukan, jalankan perintah berikut:<pre>python -m pip install --upgrade pip<br />pip install -r requirements.txt</pre> | AWS DevOps, DevOps insinyur | 
| Bootstrap lingkungan CDK. | Untuk [mem-bootstrap](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) 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> | AWS DevOps, DevOps insinyur | 

### Menerapkan aplikasi CDK
<a name="deploy-the-cdk-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Sintesis AWS CDK aplikasi. | Untuk mensintesis AWS CDK aplikasi, jalankan perintah berikut:<pre>cdk synth</pre>Untuk informasi selengkapnya tentang perintah ini, lihat [cdk synthesize](https://docs.aws.amazon.com/cdk/v2/guide/ref-cli-cmd-synth.html) dalam dokumentasi. AWS CDK  | AWS DevOps, DevOps insinyur | 
| Menyebarkan sumber daya. | Untuk menyebarkan sumber daya, jalankan perintah berikut:<pre>cdk deploy --require-approval never</pre>`--require-approval never`Bendera berarti CDK akan menyetujui dan mengeksekusi semua perubahan secara otomatis. Ini termasuk perubahan yang biasanya ditandai CDK sebagai membutuhkan tinjauan manual (seperti perubahan kebijakan IAM atau penghapusan sumber daya). Pastikan kode CDK dan CI/CD pipeline Anda telah teruji dengan baik dan aman sebelum Anda menggunakan `--require-approval never` bendera di lingkungan produksi. | AWS DevOps, DevOps insinyur | 

### Buat GitHub rahasia dan token akses pribadi
<a name="create-github-secrets-and-personal-access-token"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat rahasia yang diperlukan di GitHub. | Untuk memungkinkan alur kerja GitHub Actions mengakses AWS sumber daya dengan aman tanpa mengekspos informasi sensitif dalam kode repositori Anda, buat rahasia. Untuk membuat rahasia GitHub untuk`ROLE_TO_ASSUME`,`CodeGuruReviewArtifactBucketName`, dan`AWS_ACCOUNT_ID`, ikuti instruksi dalam [Membuat rahasia untuk repositori](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository) dalam dokumentasi GitHub Tindakan.Berikut ini adalah informasi lebih lanjut tentang variabel:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps insinyur | 
| Buat token akses GitHub pribadi. | Untuk menyiapkan cara aman agar alur kerja GitHub Tindakan Anda mengautentikasi dan berinteraksi GitHub, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.html) | AWS DevOps, DevOps insinyur | 

### Bersihkan
<a name="clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pembersihan sumber daya  | Untuk membersihkan aplikasi AWS CDK Python Anda, jalankan perintah berikut:<pre>cdk destroy --all</pre> | DevOps insinyur | 

## Pemecahan masalah
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Tampilkan tautan ke temuan dasbor. | Tidak ada cara untuk mencetak temuan selama CI/CD pipa. Sebaliknya, pola ini menggunakan GitHub Actions sebagai metode alternatif untuk menangani dan menampilkan temuan. | 

## Sumber daya terkait
<a name="automate-amazon-codeguru-reviews-for-aws-cdk-python-applications-resources"></a>

**AWS sumber daya**
+ [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)
+ [ CodeGuru Dokumentasi Amazon](https://docs.aws.amazon.com/codeguru/)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [AWS Identity and Access Management](https://aws.amazon.com/iam/)
+ [Amazon Simple Queue Service](https://aws.amazon.com/sqs/)
+ [Apa itu AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

**GitHub dokumentasi**
+ [Mengkonfigurasi OpenID Connect di Amazon Web Services](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)
+ [GitHub Tindakan](https://github.com/features/actions)
+ [Menggunakan kembali alur kerja](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
+ [Memicu alur kerja](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow) 

# Otomatiskan penerapan Rantai Pasokan AWS data lake dalam pengaturan multi-repositori dengan menggunakan GitHub Actions, Artifactory, dan Terraform
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes"></a>

*Keshav Ganesh, Amazon Web Services*

## Ringkasan
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-summary"></a>

Pola ini menyediakan pendekatan otomatis untuk menyebarkan dan mengelola Rantai Pasokan AWS data lake menggunakan integrasi berkelanjutan multi-repositori dan penerapan berkelanjutan (kemampuan. CI/CD) pipeline. It demonstrates two deployment methods: automated deployment using GitHub Actions workflows, or manual deployment using Terraform directly. Both approaches use Terraform for infrastructure as code (IaC), with the automated method adding GitHub Actions and JFrog Artifactory for enhanced CI/CD

Solusi ini memanfaatkan Rantai Pasokan AWS AWS Lambda, dan Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) untuk membuat infrastruktur data lake, sambil menggunakan salah satu metode penyebaran untuk mengotomatiskan konfigurasi dan pembuatan sumber daya. Otomatisasi ini menghilangkan langkah-langkah konfigurasi manual dan memastikan penerapan yang konsisten di seluruh lingkungan. Selain itu, Rantai Pasokan AWS menghilangkan kebutuhan akan keahlian mendalam dalam mengekstrak, mengubah, dan memuat (ETL) dan dapat memberikan wawasan dan analitik yang didukung oleh Amazon Quick Sight.

Dengan menerapkan pola ini, organisasi dapat mengurangi waktu penyebaran, memelihara infrastruktur sebagai kode, dan mengelola data lake rantai pasokan melalui proses otomatis yang dikendalikan versi. Pendekatan multi-repositori menyediakan kontrol akses berbutir halus dan mendukung penyebaran independen komponen yang berbeda. Tim dapat memilih metode penerapan yang paling sesuai dengan alat dan proses yang ada.

## Prasyarat dan batasan
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs"></a>

**Prasyarat**

Pastikan yang berikut ini diinstal pada mesin lokal Anda:
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) versi 2
+ [GitHub CLI](https://docs.github.com/en/get-started/git-basics/set-up-git)
+ [Python v3.13](https://www.python.org/downloads/)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) v1.12 atau yang lebih baru

Pastikan hal-hal berikut sudah ada sebelum penerapan:
+ Aktif Akun AWS.
+ [Virtual Private Cloud (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) dengan dua [subnet pribadi](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) di Akun AWS pilihan Anda Wilayah AWS .
+ Izin yang memadai untuk peran AWS Identity and Access Management (IAM) yang digunakan untuk penyebaran ke layanan berikut:
  + Rantai Pasokan AWS — Akses Penuh lebih disukai untuk menyebarkan komponennya seperti kumpulan data dan aliran integrasi, bersama dengan mengaksesnya dari file. Konsol Manajemen AWS
  + Amazon CloudWatch Logs — Untuk membuat dan mengelola grup CloudWatch log.
  + Amazon Elastic Compute Cloud (Amazon EC2) - Untuk grup keamanan Amazon EC2 dan titik akhir Amazon Virtual Private Cloud (Amazon VPC).
  + Amazon EventBridge — Untuk digunakan oleh Rantai Pasokan AWS.
  + IAM — Untuk membuat peran AWS Lambda layanan.
  + AWS Key Management Service (AWS KMS) — Untuk akses ke bucket artefak Amazon S3 yang AWS KMS keys digunakan dan bucket pementasan Amazon S3. Rantai Pasokan AWS 
  + AWS Lambda — Untuk membuat fungsi Lambda yang menyebarkan komponen. Rantai Pasokan AWS 
  + Amazon S3 — Untuk akses ke bucket artefak Amazon S3, bucket logging akses server, dan bucket staging. Rantai Pasokan AWS Jika Anda menggunakan penerapan manual, izin untuk bucket artefak Amazon S3 Terraform juga diperlukan.
  + Amazon VPC — Untuk membuat dan mengelola VPC.

Jika Anda lebih suka menggunakan alur kerja GitHub Tindakan untuk penerapan, lakukan hal berikut:
+ Siapkan [OpenID Connect (OIDC)](https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws#configuring-the-role-and-trust-policy) untuk peran IAM dengan izin yang disebutkan sebelumnya.
+ Buat peran IAM dengan izin serupa untuk mengakses. Konsol Manajemen AWS Untuk informasi selengkapnya, lihat [Membuat peran untuk memberikan izin kepada pengguna IAM dalam dokumentasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) IAM.

Jika Anda lebih suka melakukan penerapan manual, lakukan hal berikut:
+ Buat pengguna IAM untuk mengambil peran IAM dengan izin yang disebutkan sebelumnya. Untuk informasi selengkapnya, lihat [Membuat peran untuk memberikan izin kepada pengguna IAM dalam dokumentasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) IAM.
+ [Asumsikan peran](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-role.html) di terminal lokal Anda.

Jika Anda lebih suka menggunakan alur kerja GitHub Tindakan untuk penerapan, siapkan yang berikut ini:
+ [Akun JFrog Artifactory](https://jfrog.com/artifactory/?utm_source=google&utm_medium=cpc_search&utm_campaign=SearchDSKBrandAPACIN202506&utm_term=jfrog%20cloud&gads_network=g&utm_content=u-bin&gads_campaign_id=22674833884&gads_adgroup_id=184501797241&gads_extension_id=233003714635&gads_target_id=aud-312135645780:kwd-1598615735032&gads_matchtype=b&gad_source=1&gad_campaignid=22674833884&gbraid=0AAAAADqV85U5B37iapTR9IIFHBvydF5AQ&gclid=CjwKCAjwiY_GBhBEEiwAFaghvqdNV-odNLZXPHjT7NAwf8lA-QuMtg666hgvDW1oCJ4nn7wvf869_xoCW4IQAvD_BwE) untuk mendapatkan nama host, nama pengguna login, dan token akses login.
+ [Kunci JFrog proyek dan repositori](https://jfrog.com/help/r/jfrog-platform-administration-documentation/step-1-set-up-a-new-project) untuk menyimpan artefak.

**Batasan**
+  Rantai Pasokan AWS Instance tidak mendukung teknik transformasi data yang kompleks.
+ Rantai Pasokan AWS paling cocok untuk domain rantai pasokan karena menyediakan analitik dan wawasan bawaan. Untuk domain lain, Rantai Pasokan AWS dapat digunakan sebagai penyimpanan data sebagai bagian dari arsitektur danau data.
+ Fungsi Lambda yang digunakan dalam solusi ini mungkin perlu ditingkatkan untuk menangani percobaan ulang API dan manajemen memori dalam penerapan skala produksi.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-architecture"></a>

Anda dapat menerapkan solusi ini baik dengan menggunakan alur kerja GitHub Tindakan otomatis atau secara manual menggunakan Terraform.

**Penerapan otomatis dengan Tindakan GitHub **

Diagram berikut menunjukkan opsi penerapan otomatis yang menggunakan alur kerja GitHub Tindakan. JFrog Artifactory digunakan untuk manajemen artefak. Ini menyimpan informasi sumber daya dan output untuk digunakan dalam penyebaran multi-repositori.

![\[Opsi penerapan otomatis yang menggunakan alur kerja GitHub Tindakan dan. JFrog\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/d454a5c5-ed51-421c-a87f-ff74cfcb30be.png)


**Penerapan manual dengan Terraform**

Diagram berikut menunjukkan opsi penerapan manual melalui Terraform. Alih-alih JFrog Artifactory, Amazon S3 digunakan untuk manajemen artefak.

![\[Opsi penerapan manual menggunakan Terraform dan Amazon S3.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/2f0b78b0-a174-4703-b533-d66b3fb005e0/images/1130e728-44d5-4ae7-9586-1e497f54352a.png)


**Alur kerja penerapan**

Diagram menunjukkan alur kerja berikut:

1. Menyebarkan infrastruktur dan database kumpulan data Rantai Pasokan AWS layanan menggunakan salah satu metode penerapan berikut:
   + **Penerapan otomatis** — Menggunakan alur kerja GitHub Tindakan untuk mengatur semua langkah penerapan dan menggunakan Artifactory untuk manajemen artefak. JFrog 
   + **Penerapan manual** — Menjalankan perintah Terraform secara langsung untuk setiap langkah penerapan dan menggunakan Amazon S3 untuk manajemen artefak.

1. Buat AWS sumber daya pendukung yang diperlukan untuk operasi Rantai Pasokan AWS layanan:
   + Titik akhir Amazon VPC dan grup keamanan
   + AWS KMS keys
   + CloudWatch Grup log log

1. Membuat dan menyebarkan sumber daya infrastruktur berikut:
   + Fungsi Lambda yang mengelola (membuat, memperbarui, dan menghapus) instance Rantai Pasokan AWS layanan, ruang nama, dan kumpulan data.
   + Rantai Pasokan AWS pementasan bucket Amazon S3 untuk konsumsi data

1. Menerapkan fungsi Lambda yang mengelola alur integrasi antara bucket staging dan dataset. Rantai Pasokan AWS Setelah penerapan selesai, langkah-langkah alur kerja yang tersisa mengelola konsumsi dan analisis data.

1. Konfigurasikan konsumsi data sumber ke bucket Amazon Rantai Pasokan AWS S3 pementasan.

1. Setelah data ditambahkan ke bucket Amazon Rantai Pasokan AWS S3 pementasan, layanan secara otomatis memicu aliran integrasi ke kumpulan data. Rantai Pasokan AWS 

1. Rantai Pasokan AWS terintegrasi dengan Quick Sight Analytics untuk menghasilkan dasbor berdasarkan data yang dicerna.

## Alat
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-tools"></a>

**Layanan AWS**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) membantu Anda memusatkan log dari semua sistem, aplikasi, Layanan AWS sehingga Anda dapat memantau dan mengarsipkannya dengan aman.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [Amazon Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas komputasi](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) yang dapat diskalakan di. AWS Cloud Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan dan dengan cepat meningkatkannya ke atas atau ke bawah.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)membantu Anda mengelola akses masuk tunggal (SSO) secara terpusat ke semua aplikasi Anda Akun AWS dan cloud.
+ [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.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon Q](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) in Rantai Pasokan AWS adalah asisten AI generatif interaktif yang membantu Anda mengoperasikan rantai pasokan Anda secara lebih efisien dengan menganalisis data di Rantai Pasokan AWS data lake Anda.
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) adalah layanan intelijen bisnis skala cloud (BI) yang membantu Anda memvisualisasikan, menganalisis, dan melaporkan data Anda dalam satu dasbor.
+ [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.
+ [Rantai Pasokan AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)adalah aplikasi terkelola berbasis cloud yang dapat digunakan sebagai penyimpanan data dalam organisasi untuk domain rantai pasokan, yang dapat digunakan untuk menghasilkan wawasan dan melakukan analisis pada data yang dicerna.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS[Endpoint Amazon VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) adalah perangkat virtual yang membantu Anda menghubungkan VPC Anda secara pribadi ke yang didukung Layanan AWS tanpa memerlukan gateway internet, perangkat NAT, koneksi VPN, atau koneksi. AWS Direct Connect 

**Alat-alat lainnya**
+ [GitHub Actions](https://docs.github.com/en/actions) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.
+ [HashiCorp Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.
+ [JFrog Artifactory](https://jfrog.com/help/r/jfrog-artifactory-documentation/jfrog-artifactory) menyediakan end-to-end otomatisasi dan manajemen binari dan artefak melalui proses pengiriman aplikasi.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum. Pola ini menggunakan Python untuk kode AWS fungsi untuk berinteraksi dengan Rantai Pasokan AWS

  .

## Praktik terbaik
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-best-practices"></a>
+ Pertahankan keamanan setinggi mungkin saat menerapkan pola ini. Seperti yang dinyatakan dalam [Prasyarat](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), pastikan [virtual private cloud (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) dengan dua [subnet pribadi](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-example-private-subnets-nat.html) ada di pilihan Anda. Akun AWS Wilayah AWS 
+ Gunakan [kunci terkelola AWS KMS pelanggan](https://docs.aws.amazon.com/kms/latest/cryptographic-details/basic-concepts.html) sedapat mungkin, dan berikan izin akses terbatas kepada mereka.
+ Untuk mengatur peran IAM dengan akses paling sedikit yang diperlukan untuk menelan data untuk pola ini, lihat [Pengambilan Data Aman dari Sistem Sumber ke Amazon S3 di repositori](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main?tab=readme-ov-file#secure-data-ingestion-from-source-systems-to-amazon-s3) pola ini.

## Epik
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-epics"></a>

### (Kedua opsi) Siapkan workstation lokal
<a name="both-options-set-up-local-workstation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori pola ini, jalankan perintah berikut di workstation lokal Anda:<pre>git clone https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment.git<br />cd ASC-Deployment</pre> | AWS DevOps | 
| (Opsi otomatis) Verifikasi prasyarat untuk penerapan. | Pastikan [Prasyarat](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs) lengkap untuk penerapan otomatis. | Pemilik aplikasi | 
| (Opsi manual) Bersiaplah untuk penyebaran kumpulan Rantai Pasokan AWS data. | Untuk pergi ke `terraform-deployment` direktori`ASC-Datasets`, jalankan perintah berikut:<pre>cd ASC-Datasets/terraform-deployment</pre>Untuk mengasumsikan peran ARN yang dibuat dalam [Prasyarat](#automate-the-deployment-of-aws-supply-chain-data-lakes-prereqs), jalankan perintah berikut:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Untuk mengkonfigurasi dan mengekspor variabel lingkungan, jalankan perintah berikut:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Datasets dir name><br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export AWS_USER_ROLE=<Enter user role ARN for AWS Console access and deployment><br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | AWS DevOps | 
| (Opsi manual) Bersiaplah untuk mengelola aliran Rantai Pasokan AWS integrasi dalam penerapan. | Untuk pergi ke `terraform-deployment` direktori`ASC-Integration-Flows`, jalankan perintah berikut:<pre>cd ASC-Integration-Flows/terraform-deployment</pre>Untuk mengasumsikan peran ARN yang dibuat sebelumnya, jalankan perintah berikut:<pre>aws sts assume-role --role-arn <enter AWS user role ARN> --role-session-name <your-session-name></pre>Untuk mengkonfigurasi dan mengekspor variabel lingkungan, jalankan perintah berikut:<pre># Export Environment variables<br />export REGION=<Enter deployment region><br />export REPO_NAME=<Enter Current ASC Integration Flows dir name><br />export ASC_DATASET_VARS_REPO=<Enter Current ASC Datasets dir name>  #Must be the same directory name used for ASC Datasets deployment<br />export PROJECT_NAME="asc-deployment-poc"<br />export ACCOUNT_ID=<Enter deployment Account ID><br />export ENVIRONMENT="dev"<br />export LAMBDA_LAYER_TEMP_DIR_TERRAFORM="layerOutput"<br />export LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM="lambdaOutput"<br />export S3_TERRAFORM_ARTIFACTS_BUCKET_NAME="$PROJECT_NAME-$ACCOUNT_ID-$REGION-terraform-artifacts-$ENVIRONMENT"</pre> | Pemilik aplikasi | 

### (Opsi otomatis) Menyebarkan Rantai Pasokan AWS kumpulan data menggunakan alur kerja Tindakan GitHub
<a name="automated-option-deploy-supplychain-datasets-using-github-actions-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin `ASC-Datasets` direktori. | Untuk menyalin `ASC-Datasets` direktori ke lokasi baru, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Siapkan `ASC-Datasets` direktori. | Untuk mengatur `ASC-Datasets` sebagai repositori mandiri di organisasi Anda, jalankan perintah berikut:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Datasets standalone repository"<br />git remote add origin <INSERT_ASC_DATASETS_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Konfigurasikan nama cabang di file alur kerja.github. | Siapkan nama cabang dalam berkas alur kerja [deployment](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/asc-datasets.yml) seperti yang ditunjukkan pada contoh berikut:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Pemilik aplikasi | 
| Siapkan GitHub lingkungan dan konfigurasikan nilai lingkungan. | Untuk menyiapkan GitHub lingkungan di GitHub organisasi Anda, gunakan petunjuk di [ GitHub lingkungan Pengaturan](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-github-environments) di repositori pola ini.Untuk mengonfigurasi [nilai lingkungan](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) dalam file alur kerja, gunakan instruksi di [Nilai lingkungan pengaturan dalam file alur kerja di](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Datasets#setup-environment-values-in-the-workflow-files) repositori pola ini. | Pemilik aplikasi | 
| Memicu alur kerja. | Untuk mendorong perubahan ke GitHub organisasi dan memicu alur kerja penerapan, jalankan perintah berikut:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opsi otomatis) Menerapkan alur Rantai Pasokan AWS integrasi menggunakan alur kerja GitHub Tindakan
<a name="automated-option-deploy-supplychain-integration-flows-using-github-actions-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin `ASC-Integration-Flows` direktori. | Untuk menyalin `ASC-Integration-Flows` direktori ke lokasi baru, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | AWS DevOps | 
| Siapkan `ASC-Integration-Flows` direktori. | Untuk menyiapkan `ASC-Integration-Flows` direktori sebagai repositori mandiri di organisasi Anda, jalankan perintah berikut:<pre>git init<br />git add .<br />git commit -m "Initial commit: ASC-Integration-Flows standalone repository"<br />git remote add origin <INSERT_ASC_Integration_Flows_GITHUB_URL><br />git branch -M dev</pre> | AWS DevOps | 
| Konfigurasikan nama cabang di file alur kerja.github. | Siapkan nama cabang dalam berkas alur kerja [deployment](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/asc-integration-flows.yml) seperti yang ditunjukkan pada contoh berikut:<pre>   on:<br />     workflow_dispatch:<br />     push:<br />       branches:<br />         - dev     #Change to any other branch preferred for deployment</pre> | Pemilik aplikasi | 
| Siapkan GitHub lingkungan dan konfigurasikan nilai lingkungan. | Untuk menyiapkan GitHub lingkungan di GitHub organisasi Anda, gunakan petunjuk di [ GitHub lingkungan Pengaturan](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) di repositori pola ini.Untuk mengonfigurasi [nilai lingkungan](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-github-environments) dalam file alur kerja, gunakan instruksi di [Nilai lingkungan pengaturan dalam file alur kerja di](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/tree/main/ASC-Integration-Flows#setup-environment-values-in-the-workflow-files) repositori pola ini. | Pemilik aplikasi | 
| Memicu alur kerja. | Untuk mendorong perubahan ke GitHub organisasi dan memicu alur kerja penerapan, jalankan perintah berikut:<pre>git push -u origin dev</pre> | AWS DevOps | 

### (Opsi manual) Terapkan Rantai Pasokan AWS kumpulan data menggunakan Terraform
<a name="manual-option-deploy-supplychain-datasets-using-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buka direktori `terraform-deployment ` tersebut. | Untuk pergi ke `terraform-deployment` direktori`ASC-Datasets`, jalankan perintah berikut:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Siapkan bucket Amazon S3 status Terraform. | Untuk menyiapkan bucket Amazon S3 status Terraform, gunakan skrip berikut:<pre># Setup terraform bucket<br />chmod +x ../scripts/setup-terraform.sh<br />../scripts/setup-terraform.sh</pre> | AWS DevOps | 
| Siapkan ember artefak Terraform Amazon S3. | Untuk menyiapkan bucket Amazon S3 artefak Terraform, gunakan skrip berikut:<pre># Setup terraform artifacts bucket<br />chmod +x ../scripts/setup-terraform-artifacts-bucket.sh<br />../scripts/setup-terraform-artifacts-bucket.sh</pre> | AWS DevOps | 
| Siapkan konfigurasi backend dan penyedia Terraform. | Untuk menyiapkan konfigurasi backend dan penyedia Terraform, gunakan skrip berikut:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Hasilkan rencana penerapan. | Untuk membuat rencana penyebaran, jalankan perintah berikut:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Menyebarkan konfigurasi. | Untuk menerapkan konfigurasi, jalankan perintah berikut:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Perbarui konfigurasi lain dan simpan output. | Untuk memperbarui kebijakan AWS KMS utama dan menyimpan output konfigurasi yang diterapkan di bucket Amazon S3 artefak Terraform, jalankan perintah berikut:<pre># Update AWS Supply Chain KMS Key policy with the service's requirements<br />chmod +x ../scripts/update-asc-kms-policy.sh<br />../scripts/update-asc-kms-policy.sh<br /></pre><pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy.sh<br />../scripts/update-kms-policy.sh<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Opsi manual) Terapkan aliran integrasi Rantai Pasokan AWS layanan menggunakan Terraform
<a name="manual-option-deploy-supplychain-service-integration-flows-using-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buka direktori `terraform-deployment` tersebut. | Untuk pergi ke `terraform-deployment` direktori`ASC-Integration-Flows`, jalankan perintah berikut:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Siapkan konfigurasi backend dan penyedia Terraform. | Untuk menyiapkan konfigurasi backend dan penyedia Terraform, gunakan skrip berikut:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Hasilkan rencana penerapan. | Untuk menghasilkan rencana penyebaran, jalankan perintah berikut. Perintah ini menginisialisasi lingkungan Terraform Anda, menggabungkan variabel konfigurasi dari `ASC-Datasets` konfigurasi Terraform Anda yang ada, dan menghasilkan rencana penerapan.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan \<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Menyebarkan konfigurasi. | Untuk menerapkan konfigurasi, jalankan perintah berikut:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Perbarui konfigurasi lainnya. | Untuk memperbarui kebijakan AWS KMS utama dan menyimpan output konfigurasi yang diterapkan di bucket Amazon S3 artefak Terraform, jalankan perintah berikut:<pre># Update AWS KMS Keys' policy with IAM roles<br />chmod +x ../scripts/update-kms-policy-through-s3.sh<br />../scripts/update-kms-policy-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Create terraform outputs file to be used as input variables<br />terraform output -json > raw_output.json<br />jq -r 'to_entries | map(<br />  if .value.type == "string" then<br />      "\(.key) = \"\(.value.value)\""<br />  else<br />      "\(.key) = \(.value.value | tojson)"<br />  end<br />) | .[]' raw_output.json > $REPO_NAME-outputs.tfvars<br /></pre><pre># Upload reformed outputs file to Amazon S3 terraform artifacts bucket (For retrieval from other repositories)<br />aws s3 cp $REPO_NAME-outputs.tfvars s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars<br />rm -f raw_output.json<br />rm -f $REPO_NAME-outputs.tfvars<br /></pre> | AWS DevOps | 

### (Kedua opsi) Mencerna data
<a name="both-options-ingest-data"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unggah contoh file CSV. | Untuk mengunggah file CSV sampel untuk kumpulan data, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Insinyur data | 

### (Kedua opsi) Siapkan Rantai Pasokan AWS akses
<a name="both-options-set-up-supplychain-access"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mengatur Rantai Pasokan AWS akses. | Untuk mengatur Rantai Pasokan AWS akses dari Konsol Manajemen AWS, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | Pemilik aplikasi | 

### (Opsi otomatis) Bersihkan semua sumber daya menggunakan alur kerja GitHub Tindakan
<a name="automated-option-clean-up-all-resources-using-github-actions-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memicu alur kerja penghancuran untuk sumber daya alur integrasi. | Memicu [alur kerja penghancuran](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/.github/workflows/destroy-workflow.yml) `ASC-Integration-Flows` dari cabang penyebaran Anda di organisasi Anda GitHub . | AWS DevOps | 
| Memicu alur kerja penghancuran untuk sumber daya kumpulan data. | Memicu [alur kerja penghancuran](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/.github/workflows/destroy-workflow.yml) `ASC-Datasets` dari cabang penyebaran Anda di organisasi Anda GitHub . | AWS DevOps | 

### (Opsi manual) Bersihkan sumber daya aliran Rantai Pasokan AWS integrasi menggunakan Terraform
<a name="manual-option-clean-up-resources-of-supplychain-integration-flows-using-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buka direktori `terraform-deployment` tersebut. | Untuk pergi ke `terraform-deployment` direktori`ASC-Integration-Flows`, jalankan perintah berikut:<pre>cd ASC-Integration-Flows/terraform-deployment</pre> | AWS DevOps | 
| Siapkan konfigurasi backend dan penyedia Terraform. | Untuk menyiapkan konfigurasi backend dan penyedia Terraform, gunakan skrip berikut:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Menghasilkan rencana penghancuran infrastruktur. | Untuk mempersiapkan penghancuran AWS infrastruktur Anda yang terkontrol dengan membuat rencana pembongkaran terperinci, jalankan perintah berikut. Proses ini menginisialisasi Terraform, menggabungkan konfigurasi Rantai Pasokan AWS kumpulan data, dan membuat rencana penghancuran yang dapat Anda tinjau sebelum dijalankan.<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /></pre><pre># Download and merge ASC DATASET tfvars<br />chmod +x ../scripts/download-vars-through-s3.sh<br />../scripts/download-vars-through-s3.sh $ASC_DATASET_VARS_REPO<br /></pre><pre># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Jalankan rencana penghancuran infrastruktur. | Untuk menjalankan penghancuran infrastruktur yang direncanakan, jalankan perintah berikut:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Hapus output Terraform dari bucket Amazon S3. | Untuk menghapus file output yang diunggah selama penyebaran`ASC-Integration-Flows`, jalankan perintah berikut:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

### (Opsi manual) Bersihkan sumber daya kumpulan data Rantai Pasokan AWS layanan menggunakan Terraform
<a name="manual-option-clean-up-resources-of-supplychain-service-datasets-using-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buka direktori `terraform-deployment` tersebut. | Untuk pergi ke `terraform-deployment` direktori`ASC-Datasets`, jalankan perintah berikut:<pre>cd ASC-Datasets/terraform-deployment</pre> | AWS DevOps | 
| Siapkan konfigurasi backend dan penyedia Terraform. | Untuk menyiapkan konfigurasi backend dan penyedia Terraform, gunakan skrip berikut:<pre># Setup terraform backend and providers config if they don't exist<br />chmod +x ../scripts/generate-terraform-config.sh<br />../scripts/generate-terraform-config.sh</pre> | AWS DevOps | 
| Menghasilkan rencana penghancuran infrastruktur. | Untuk membuat rencana untuk menghancurkan sumber daya Rantai Pasokan AWS dataset, jalankan perintah berikut:<pre># Run terraform init and validate<br />terraform init<br />terraform validate<br /><br /># Run terraform plan<br />terraform plan -destroy\<br />-var-file="tfInputs/$ENVIRONMENT.tfvars" \<br />-var="project_name=$PROJECT_NAME" \<br />-var="environment=$ENVIRONMENT" \<br />-var="user_role=$AWS_USER_ROLE" \<br />-var="lambda_temp_dir=$LAMBDA_FUNCTION_TEMP_DIR_TERRAFORM" \<br />-var="layer_temp_dir=$LAMBDA_LAYER_TEMP_DIR_TERRAFORM" \<br />-parallelism=40 \<br />-out='tfplan.out'</pre> | AWS DevOps | 
| Ember Amazon S3 kosong. | Untuk mengosongkan semua bucket Amazon S3 (kecuali bucket logging akses server, yang dikonfigurasi untuk`force-destroy`), gunakan skrip berikut:<pre># Delete S3 buckets excluding server access logging bucket<br />chmod +x ../scripts/empty-s3-buckets.sh<br />../scripts/empty-s3-buckets.sh tfplan.out</pre> | AWS DevOps | 
| Jalankan rencana penghancuran infrastruktur. | Untuk menjalankan penghancuran infrastruktur Rantai Pasokan AWS dataset Anda yang direncanakan menggunakan rencana yang dihasilkan, jalankan perintah berikut:<pre># Run terraform apply<br />terraform apply tfplan.out</pre> | AWS DevOps | 
| Hapus keluaran Terraform dari ember artefak Amazon S3 Terraform. | Untuk menyelesaikan proses pembersihan, hapus file output yang diunggah selama penerapan `ASC-Datasets` dengan menjalankan perintah berikut:<pre># Delete the outputs file<br />aws s3 rm s3://$S3_TERRAFORM_ARTIFACTS_BUCKET_NAME/$REPO_NAME-outputs.tfvars</pre> | AWS DevOps | 

## Pemecahan masalah
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
|  Rantai Pasokan AWS Kumpulan data atau alur integrasi tidak diterapkan dengan benar karena kesalahan Rantai Pasokan AWS internal atau izin IAM yang tidak memadai untuk peran layanan. | Pertama, bersihkan semua sumber daya. [Kemudian, terapkan ulang [sumber daya Rantai Pasokan AWS kumpulan data dan kemudian gunakan kembali sumber daya](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Datasets/README.md) aliran integrasi. Rantai Pasokan AWS](https://github.com/aws-samples/sample-automate-aws-supply-chain-deployment/blob/main/ASC-Integration-Flows/README.md) | 
| Alur Rantai Pasokan AWS integrasi tidak mengambil file data baru yang diunggah untuk kumpulan data. Rantai Pasokan AWS  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-deployment-of-aws-supply-chain-data-lakes.html) | 

## Sumber daya terkait
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-resources"></a>

**AWS dokumentasi**
+ [Rantai Pasokan AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/adminguide/getting-started.html)

**Sumber daya lainnya**
+ [Memahami alur kerja GitHub Tindakan](https://docs.github.com/en/actions/get-started/understand-github-actions) (GitHub dokumentasi)

## Informasi tambahan
<a name="automate-the-deployment-of-aws-supply-chain-data-lakes-additional"></a>

Solusi ini dapat direplikasi untuk lebih banyak kumpulan data dan dapat ditanyakan untuk analisis lebih lanjut, melalui dasbor bawaan yang disediakan atau integrasi Rantai Pasokan AWS khusus dengan Amazon Quick Sight. Selain itu, Anda dapat menggunakan Amazon Q untuk mengajukan pertanyaan terkait Rantai Pasokan AWS instans Anda.

**Menganalisis data dengan Rantai Pasokan AWS Analytics**

Untuk petunjuk menyiapkan Rantai Pasokan AWS Analytics, lihat [Menyetel Rantai Pasokan AWS Analytics](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/setting_analytics.html) di Rantai Pasokan AWS dokumentasi.

Pola ini menunjukkan pembuatan kumpulan data **Kalender** dan **Outbound\$1Order\$1Line**. Untuk membuat analisis yang menggunakan kumpulan data ini, gunakan langkah-langkah berikut:

1. Untuk menganalisis kumpulan data, gunakan dasbor Analisis **Musim**. Untuk menambahkan dasbor, ikuti langkah-langkah di [dasbor Prebuilt](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/prebuilt_dashboards.html) dalam dokumentasi. Rantai Pasokan AWS 

1. Pilih dasbor untuk melihat analisisnya yang didasarkan pada contoh file CSV untuk data Kalender dan data Outbound Order Line.

Dasbor memberikan wawasan tentang permintaan selama bertahun-tahun berdasarkan data yang dicerna untuk kumpulan data. Anda dapat lebih lanjut menentukan ProductID, CustomerID, tahun, dan parameter lain untuk analisis.

**Gunakan Amazon Q untuk mengajukan pertanyaan terkait Rantai Pasokan AWS instans Anda**

[Amazon Q in Rantai Pasokan AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/qinasc.html) adalah asisten AI generatif interaktif yang membantu Anda mengoperasikan rantai pasokan dengan lebih efisien. Amazon Q dapat melakukan hal berikut:
+ Analisis data di danau Rantai Pasokan AWS data Anda.
+ Memberikan wawasan operasional dan keuangan.
+ Jawab pertanyaan rantai pasokan langsung Anda.

Untuk informasi selengkapnya tentang menggunakan Amazon Q, lihat [Mengaktifkan Amazon Q di Rantai Pasokan AWS](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/enabling_QinASC.html) dan [Menggunakan Amazon Q Rantai Pasokan AWS dalam](https://docs.aws.amazon.com/aws-supply-chain/latest/userguide/using_QinASC.html) Rantai Pasokan AWS dokumentasi.

# Mengotomatiskan penilaian sumber daya AWS
<a name="automate-aws-resource-assessment"></a>

*Naveen Suthar, Arun Bagal, Manish Garg, dan Sandeep Gawande, Amazon Web Services*

## Ringkasan
<a name="automate-aws-resource-assessment-summary"></a>

Pola ini menjelaskan pendekatan otomatis untuk menyiapkan kemampuan penilaian sumber daya dengan menggunakan [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html). Dengan menggunakan pola ini, tim operasi mengumpulkan detail audit sumber daya secara otomatis dan melihat detail semua sumber daya yang digunakan di akun AWS pada satu dasbor. Ini sangat membantu dalam kasus penggunaan berikut:
+ Mengidentifikasi infrastruktur sebagai alat kode (IAc) dan mengisolasi sumber daya yang dibuat oleh berbagai solusi IAc seperti [HashiCorp Terraform](https://www.terraform.io/), AWS, AWS CDK CloudFormation, dan [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) [Command Line Interface (AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) CLI)
+ Mengambil informasi audit sumber daya

Solusi ini juga akan membantu tim kepemimpinan memperoleh wawasan tentang sumber daya dan aktivitas dalam akun AWS dari satu dasbor. 


| 
| 
| Catatan: [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) adalah layanan berbayar. Sebelum menjalankannya untuk menganalisis data dan membuat dasbor, tinjau [harga Amazon Quick Sight](https://aws.amazon.com/quicksight/pricing/). | 
| --- |

## Prasyarat dan batasan
<a name="automate-aws-resource-assessment-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ Peran dan izin AWS Identity and Access Management (IAM) dengan akses ke sumber daya penyediaan
+ [Akun Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html) [yang dibuat dengan akses ke [Amazon Simple Storage Service (Amazon S3) dan Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ AWS CDK versi 2.55.1 atau yang lebih baru diinstal 
+ [Python](https://www.python.org/downloads/release/python-390/) versi 3.9 atau yang lebih baru diinstal

**Batasan**
+ Solusi ini diterapkan ke satu akun AWS.
+ Solusinya tidak akan melacak peristiwa yang terjadi sebelum penerapannya kecuali AWS CloudTrail sudah menyiapkan dan menyimpan data dalam bucket S3.

**Versi produk**
+ AWS CDK versi 2.55.1 atau yang lebih baru
+ Python versi 3.9 atau yang lebih baru

## Arsitektur
<a name="automate-aws-resource-assessment-architecture"></a>

**Tumpukan teknologi target**
+ Amazon Athena
+ AWS CloudTrail
+ AWS Glue
+ AWS Lambda
+ Penglihatan Cepat Amazon
+ Amazon S3

**Arsitektur target**

Kode AWS CDK akan menerapkan semua sumber daya yang diperlukan untuk menyiapkan kemampuan penilaian sumber daya di akun AWS. Diagram berikut menunjukkan proses pengiriman CloudTrail log ke AWS Glue, Amazon Athena, dan Quick Sight.

![\[Penilaian sumber daya AWS dengan AWS Glue, Amazon Athena, dan Amazon QuickSight dalam proses enam langkah.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a504774e-db7a-4c36-a22c-ce56d252fb58/images/8f2b549d-33a8-4cbf-86fd-33244716b668.png)


1. CloudTrail mengirim log ke ember S3 untuk penyimpanan.

1. Pemberitahuan peristiwa memanggil fungsi Lambda yang memproses log dan menghasilkan data yang difilter.

1. Data yang difilter disimpan di bucket S3 lain.

1. Crawler AWS Glue disiapkan pada data yang difilter yang ada di bucket S3 untuk membuat skema di tabel AWS Glue Data Catalog.

1. Data yang difilter siap untuk ditanyakan oleh Amazon Athena.

1. Data yang ditanyakan diakses oleh Quick Sight untuk visualisasi.

**Otomatisasi dan skala**
+ Solusi ini dapat diskalakan dari satu akun AWS ke beberapa akun AWS jika ada CloudTrail jejak di seluruh organisasi di AWS Organizations. Dengan menerapkan CloudTrail di tingkat organisasi, Anda juga dapat menggunakan solusi ini untuk mengambil detail audit sumber daya untuk semua sumber daya yang diperlukan.
+ Pola ini menggunakan sumber daya tanpa server AWS untuk menerapkan solusi.

## Alat
<a name="automate-aws-resource-assessment-tools"></a>

**Layanan AWS**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) adalah layanan kueri interaktif yang membantu Anda menganalisis data secara langsung di Amazon S3 dengan menggunakan SQL standar.
+ [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 AWS dan Wilayah AWS.
+ [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) membantu Anda mengaudit tata kelola, kepatuhan, dan risiko operasional akun AWS Anda.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) adalah layanan ekstrak, transformasi, dan beban (ETL) yang dikelola sepenuhnya. Ini membantu Anda mengkategorikan, membersihkan, memperkaya, dan memindahkan data dengan andal antara penyimpanan data dan aliran data. Pola ini menggunakan crawler AWS Glue dan tabel AWS Glue Data Catalog.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon Quick](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html) adalah layanan intelijen bisnis skala cloud (BI) yang membantu Anda memvisualisasikan, menganalisis, dan melaporkan data Anda dalam satu dasbor.
+ [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.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [infrastructure-assessment-iac-automation](https://github.com/aws-samples/infrastructure-assessment-iac-automation)repositori.

Repositori kode berisi file dan folder berikut:
+ `lib`folder — AWS CDK membangun file Python yang digunakan untuk membuat sumber daya AWS
+ `src/lambda_code`— Kode Python yang dijalankan dalam fungsi Lambda
+ `requirements.txt`— Daftar semua dependensi Python yang harus diinstal
+ `cdk.json`— File input untuk memberikan nilai yang diperlukan untuk memutar sumber daya

## Praktik terbaik
<a name="automate-aws-resource-assessment-best-practices"></a>

Siapkan pemantauan dan peringatan untuk fungsi Lambda. Untuk informasi selengkapnya, lihat [Memantau dan memecahkan masalah fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html). Untuk praktik terbaik umum saat bekerja dengan fungsi Lambda, lihat dokumentasi [AWS](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html).

## Epik
<a name="automate-aws-resource-assessment-epics"></a>

### Siapkan lingkungan Anda
<a name="set-up-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repo di mesin lokal Anda. | Untuk mengkloning repositori, jalankan perintah. `git clone https://github.com/aws-samples/infrastructure-assessment-iac-automation.git` | AWS DevOps, DevOps insinyur | 
| Siapkan lingkungan virtual Python dan instal dependensi yang diperlukan. | Untuk mengatur lingkungan virtual Python, jalankan perintah berikut.<pre>cd infrastructure-assessment-iac-automation<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>Untuk mengatur dependensi yang diperlukan, jalankan perintah. `pip install -r requirements.txt` | AWS DevOps, DevOps insinyur | 
| Siapkan lingkungan AWS CDK dan sintesis kode AWS CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps insinyur | 

### Siapkan kredensi AWS di mesin lokal Anda
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ekspor variabel untuk akun dan Wilayah tempat tumpukan akan digunakan. | Untuk memberikan kredensi AWS untuk AWS CDK dengan menggunakan variabel lingkungan, jalankan perintah berikut.<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | AWS DevOps, DevOps insinyur | 
| Siapkan profil AWS CLI. | Untuk menyiapkan profil AWS CLI untuk akun, ikuti petunjuk dalam dokumentasi [AWS](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html). | AWS DevOps, DevOps insinyur | 

### Konfigurasikan dan terapkan alat penilaian sumber daya
<a name="configure-and-deploy-the-resource-assessment-tool"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan sumber daya di akun. | Untuk menerapkan sumber daya di akun AWS dengan menggunakan AWS CDK, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps | 
| Jalankan crawler AWS Glue dan buat tabel Katalog Data. | [Crawler AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) digunakan untuk menjaga skema data tetap dinamis. Solusi ini membuat dan memperbarui partisi dalam [tabel AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html) dengan menjalankan crawler secara berkala seperti yang ditentukan oleh penjadwal crawler AWS Glue. Setelah data tersedia di bucket keluaran S3, gunakan langkah-langkah berikut untuk menjalankan crawler AWS Glue dan buat skema tabel Katalog Data untuk pengujian:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Kode AWS CDK mengonfigurasi crawler AWS Glue untuk berjalan pada waktu tertentu, tetapi Anda juga dapat menjalankannya sesuai permintaan. | AWS DevOps, DevOps insinyur | 
| Menyebarkan konstruksi Quick Sight. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps insinyur | 
| Buat dasbor Quick Sight. | Untuk membuat contoh dasbor dan analisis Quick Sight, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html)Untuk informasi selengkapnya, lihat [Memulai analisis di Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/creating-an-analysis.html) dan [tipe Visual di Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/working-with-visual-types.html). | AWS DevOps, DevOps insinyur | 

### Bersihkan semua sumber daya AWS dalam solusinya
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus sumber daya AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps insinyur | 

### Siapkan fitur tambahan di atas otomatisasi alat penilaian sumber daya AWS
<a name="set-up-additional-features-on-top-of-the-aws-resource-assessment-tool-automation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pantau dan bersihkan sumber daya yang dibuat secara manual. | (Opsional) Jika organisasi Anda memiliki persyaratan kepatuhan untuk membuat sumber daya menggunakan alat IAC, Anda dapat mencapai kepatuhan dengan menggunakan otomatisasi alat penilaian sumber daya AWS untuk mengambil sumber daya yang disediakan secara manual. Anda juga dapat menggunakan alat ini untuk mengimpor sumber daya ke alat IAc atau untuk membuatnya kembali. Untuk memantau sumber daya yang disediakan secara manual, lakukan tugas tingkat tinggi berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-resource-assessment.html) | AWS DevOps, DevOps insinyur | 

## Pemecahan masalah
<a name="automate-aws-resource-assessment-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| AWS CDK mengembalikan kesalahan. | Untuk bantuan terkait masalah AWS CDK, lihat [Memecahkan masalah umum AWS](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html) CDK. | 

## Sumber daya terkait
<a name="automate-aws-resource-assessment-resources"></a>
+ [Membangun fungsi Lambda dengan Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [Memulai AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Bekerja dengan AWS CDK dengan Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Membuat jejak CloudTrail log](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [Memulai dengan Amazon Quick Sight](https://aws.amazon.com/quicksight/getting-started/)

## Informasi tambahan
<a name="automate-aws-resource-assessment-additional"></a>

**Beberapa akun**

Untuk menyiapkan kredensi AWS CLI untuk beberapa akun, gunakan profil AWS. Untuk informasi selengkapnya, lihat bagian *Mengonfigurasi beberapa profil* di [Mengatur AWS CLI](https://aws.amazon.com/getting-started/guides/setup-environment/module-three/).

**Perintah AWS CDK**

Saat bekerja dengan AWS CDK, ingatlah perintah berguna berikut:
+ Daftar semua tumpukan di aplikasi

  ```
  cdk ls
  ```
+ Memancarkan template AWS yang disintesis CloudFormation 

  ```
  cdk synth
  ```
+ Menerapkan tumpukan ke akun AWS default dan Wilayah

  ```
  cdk deploy
  ```
+ Membandingkan tumpukan yang diterapkan dengan status saat ini

  ```
  cdk diff
  ```
+ Membuka dokumentasi AWS CDK

  ```
  cdk docs
  ```

# Instal sistem SAP secara otomatis dengan menggunakan alat sumber terbuka
<a name="install-sap-systems-automatically-by-using-open-source-tools"></a>

*Guilherme Sesterheim, Amazon Web Services*

## Ringkasan
<a name="install-sap-systems-automatically-by-using-open-source-tools-summary"></a>

Pola ini menunjukkan cara mengotomatiskan instalasi sistem SAP dengan menggunakan alat sumber terbuka untuk membuat sumber daya berikut:
+ Database SAP S/4HANA 1909
+ Contoh SAP ABAP Central Services (ASCS)
+ Contoh SAP Primary Application Server (PAS)

HashiCorp Terraform menciptakan infrastruktur sistem SAP dan Ansible mengkonfigurasi sistem operasi (OS) dan menginstal aplikasi SAP. Jenkins menjalankan instalasi.

Pengaturan ini mengubah instalasi sistem SAP menjadi proses berulang, yang dapat membantu meningkatkan efisiensi dan kualitas penerapan.

**catatan**  
Kode contoh yang disediakan dalam pola ini berfungsi untuk sistem ketersediaan tinggi (HA) dan sistem non-HA.

## Prasyarat dan batasan
<a name="install-sap-systems-automatically-by-using-open-source-tools-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Bucket Amazon Simple Storage Service (Amazon S3) yang berisi semua file media SAP Anda
+ Prinsipal AWS Identity and Access Management (IAM) dengan [kunci akses dan kunci rahasia](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html), dan yang memiliki izin berikut:
  + **Izin baca saja:** Amazon Route 53, AWS Key Management Service (AWS KMS)
  + **Izin baca dan tulis:** Amazon S3, Amazon Elastic Compute Cloud (Amazon), EC2 Amazon Elastic File System (Amazon EFS), IAM, Amazon, Amazon DynamoDB CloudWatch
+ [Zona host pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) Route 53
+ Berlangganan [Red Hat Enterprise Linux untuk SAP dengan HA dan Update Services 8.2 Amazon](https://aws.amazon.com/marketplace/pp/prodview-5grz5a5thx7c2) Machine Image (AMI) di Amazon Marketplace
+ Kunci yang [dikelola pelanggan AWS KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#aws-managed-customer-managed-keys)
+ Sebuah [key pair Secure Shell (SSH)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
+ [Grup EC2 keamanan Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html) **yang memungkinkan koneksi SSH pada port 22 dari nama host tempat Anda menginstal Jenkins (nama host kemungkinan besar localhost)**
+ [Vagrant](https://www.vagrantup.com/) dengan HashiCorp diinstal dan dikonfigurasi
+ [VirtualBox](https://www.virtualbox.org/)oleh Oracle diinstal dan dikonfigurasi
+ Keakraban dengan Git, Terraform, Ansible, dan Jenkins

**Batasan**
+ Hanya SAP S/4HANA 1909 yang sepenuhnya diuji untuk skenario khusus ini. Contoh kode Ansible dalam pola ini memerlukan modifikasi jika Anda menggunakan versi lain dari SAP HANA.
+ Contoh prosedur dalam pola ini berfungsi untuk sistem operasi Mac OS dan Linux. Beberapa perintah hanya dapat dijalankan di terminal berbasis Unix. Namun, Anda dapat mencapai hasil yang serupa dengan menggunakan perintah yang berbeda dan OS Windows.

**Versi produk**
+ GETAH S/4HANA 1909
+ Red Hat Enterprise Linux (RHEL) 8.2 atau versi yang lebih tinggi

## Arsitektur
<a name="install-sap-systems-automatically-by-using-open-source-tools-architecture"></a>

Diagram berikut menunjukkan contoh alur kerja yang menggunakan alat sumber terbuka untuk mengotomatiskan instalasi sistem SAP di akun AWS:

![\[Contoh alur kerja menggunakan alat sumber terbuka untuk mengotomatiskan instalasi sistem SAP di akun AWS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/aaf11dac-38cc-4e89-be86-51d4409cf238/images/d7902f9d-f1be-461f-b69b-cf3c663c8f2f.png)


Diagram menunjukkan alur kerja berikut:

1. Jenkins mengatur menjalankan instalasi sistem SAP dengan menjalankan kode Terraform dan Ansible.

1. Kode Terraform membangun infrastruktur sistem SAP.

1. Kode Ansible mengkonfigurasi OS dan menginstal aplikasi SAP.

1. Database SAP S/4HANA 1909, instans ASCS, dan instans PAS yang mencakup semua prasyarat yang ditentukan diinstal pada instans Amazon. EC2 

**catatan**  
Contoh penyiapan dalam pola ini secara otomatis membuat bucket Amazon S3 di akun AWS Anda untuk menyimpan file status Terraform.

**Tumpukan teknologi**
+ Terraform
+ Ansible
+ Jenkins
+ Database SAP S/4HANA 1909
+ Sebuah contoh SAP ASCS
+ Sebuah contoh SAP PAS
+ Amazon EC2 

## Alat
<a name="install-sap-systems-automatically-by-using-open-source-tools-tools"></a>

**Layanan AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway) menyediakan kapasitas komputasi yang dapat diskalakan di AWS Cloud. Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan, dan dengan cepat meningkatkannya ke atas atau ke bawah.
+ [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 melindungi data Anda.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan sumber daya AWS ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur AWS yang dapat diskalakan.

**Alat-alat 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.
+ [Ansible](https://www.ansible.com/) adalah alat konfigurasi sumber terbuka sebagai kode (CaC) yang membantu mengotomatiskan aplikasi, konfigurasi, dan infrastruktur TI.
+ [Jenkins](https://www.jenkins.io/) adalah server otomatisasi sumber terbuka yang memungkinkan pengembang untuk membangun, menguji, dan menyebarkan perangkat lunak mereka.

**Kode**

Kode untuk pola ini tersedia di repositori GitHub [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible).

## Epik
<a name="install-sap-systems-automatically-by-using-open-source-tools-epics"></a>

### Konfigurasikan prasyarat
<a name="configure-the-prerequisites"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan file media SAP Anda ke bucket Amazon S3. | [Buat bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) yang berisi semua file media SAP Anda.Pastikan Anda mengikuti hierarki folder AWS Launch Wizard untuk **S/4HANA** dalam dokumentasi [Launch](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sap-software-install-details.html) Wizard. | Administrator awan | 
| Instal VirtualBox. | Instal dan konfigurasikan [VirtualBox](https://www.virtualbox.org/)oleh Oracle. | DevOps insinyur | 
| Instal Vagrant. | Instal dan konfigurasikan [Vagrant](https://www.vagrantup.com/) oleh HashiCorp. | DevOps insinyur | 
| Konfigurasikan akun AWS Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | AWS Umum | 

### Membangun dan menjalankan instalasi SAP Anda
<a name="build-and-run-your-sap-installation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori kode dari. GitHub | Kloning repositori [aws-install-sap-with-jenkins-ansible](https://github.com/aws-samples/aws-install-sap-with-jenkins-ansible) pada. GitHub | DevOps insinyur | 
| Mulai layanan Jenkins. | Buka terminal Linux. Kemudian, arahkan ke folder lokal yang berisi folder repositori kode kloning dan jalankan perintah berikut:<pre>sudo vagrant up</pre>Startup Jenkins memakan waktu sekitar 20 menit. Perintah mengembalikan **Layanan aktif dan menjalankan** pesan saat berhasil. | DevOps insinyur | 
| Buka Jenkins di browser web dan masuk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html) | DevOps insinyur | 
| Konfigurasikan parameter instalasi sistem SAP Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Anda dapat mengonfigurasi parameter lain yang tidak diperlukan sesuai kebutuhan, berdasarkan kasus penggunaan Anda. Misalnya, Anda dapat mengubah ID sistem SAP (SID) dari instance, kata sandi default, nama, dan tag untuk sistem SAP Anda. Semua variabel yang diperlukan memiliki **(Diperlukan)** di awal nama mereka. | Administrator sistem AWS, DevOps insinyur | 
| Jalankan instalasi sistem SAP Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-sap-systems-automatically-by-using-open-source-tools.html)Untuk informasi tentang langkah-langkah pipeline, lihat bagian **Memahami langkah pipeline** dari [Mengotomatiskan instalasi SAP dengan alat sumber terbuka](https://aws.amazon.com/blogs/awsforsap/automating-sap-installation-with-open-source-tools/) di Blog AWS.Jika terjadi kesalahan, gerakkan kursor Anda ke kotak kesalahan merah yang muncul dan pilih **Log**. Log untuk langkah pipa yang salah muncul. Sebagian besar kesalahan terjadi karena pengaturan parameter yang salah. | DevOps insinyur, administrator sistem AWS | 

## Sumber daya terkait
<a name="install-sap-systems-automatically-by-using-open-source-tools-resources"></a>
+ [DevOps untuk Instalasi SAP - SAP: Dari 2 Bulan hingga 2 Jam](https://videos.itrevolution.com/watch/707351918/) (Perpustakaan Video DevOps Enterprise Summit)

# Mengotomatiskan portofolio AWS Service Catalog dan penerapan produk dengan menggunakan AWS CDK
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk"></a>

*Sandeep Gawande, Viyoma Sachdeva, dan RAJNEESH TYAGI, Amazon Web Services*

## Ringkasan
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-summary"></a>

AWS Service Catalog membantu Anda mengelola katalog layanan TI, atau *produk* secara terpusat, yang disetujui untuk digunakan di lingkungan AWS organisasi Anda. Kumpulan produk disebut *portofolio*, dan portofolio juga berisi informasi konfigurasi. Dengan AWS Service Catalog, Anda dapat membuat portofolio yang disesuaikan untuk setiap jenis pengguna di organisasi Anda dan kemudian memberikan akses ke portofolio yang sesuai. Pengguna tersebut kemudian dapat dengan cepat menyebarkan produk apa pun yang mereka butuhkan dari dalam portofolio.

Jika Anda memiliki infrastruktur jaringan yang kompleks, seperti arsitektur Multi-region dan multi-akun, Anda disarankan untuk membuat dan mengelola portofolio Service Catalog dalam satu akun sentral. Pola ini menjelaskan cara menggunakan AWS Cloud Development Kit (AWS CDK) untuk mengotomatiskan pembuatan portofolio Service Catalog di akun pusat, memberikan akses kepada pengguna akhir, dan kemudian, secara opsional, menyediakan produk dalam satu atau beberapa akun AWS target. ready-to-useSolusi ini membuat portofolio Service Catalog di akun sumber. Ini juga, secara opsional, menyediakan produk dalam akun target dengan menggunakan CloudFormation tumpukan AWS dan membantu Anda mengonfigurasi TagOptions produk:
+ **AWS CloudFormation StackSets** — Anda dapat menggunakannya StackSets untuk meluncurkan produk Service Catalog di beberapa Wilayah dan akun AWS. Dalam solusi ini, Anda memiliki opsi untuk menyediakan produk secara otomatis saat Anda menerapkan solusi ini. Untuk informasi selengkapnya, lihat [Menggunakan AWS CloudFormation StackSets](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/using-stacksets.html) (Dokumentasi Service Catalog) dan [StackSets konsep](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation dokumentasi).
+ **TagOption library** — Anda dapat mengelola tag pada produk yang disediakan dengan menggunakan TagOption library. A *TagOption*adalah pasangan nilai kunci yang dikelola di AWS Service Catalog. Ini bukan tag AWS, tetapi berfungsi sebagai templat untuk membuat tag AWS berdasarkan tag TagOption. Untuk informasi selengkapnya, lihat [TagOption library](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/tagoptions.html) (Dokumentasi Service Catalog).

## Prasyarat dan batasan
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif yang ingin Anda gunakan sebagai akun sumber untuk mengelola portofolio Service Catalog.
+ Jika Anda menggunakan solusi ini untuk menyediakan produk dalam satu atau beberapa akun target, akun target harus sudah ada dan aktif.
+ Izin AWS Identity and Access Management (IAM) untuk mengakses AWS Service Catalog, AWS CloudFormation, dan AWS IAM.

**Versi produk**
+ AWS CDK versi 2.27.0

## Arsitektur
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-architecture"></a>

**Tumpukan teknologi target**
+ Portofolio Service Catalog di akun AWS terpusat
+ Produk Service Catalog dikerahkan di akun target

**Arsitektur target**

![\[AWS CDK membuat portofolio Service Catalog dan menyediakan produk di akun target.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e8f217a7-aec4-4c85-8f6b-f91995506be0/images/1f027b82-14c3-485a-909b-1544e974b90a.png)


1. Di akun portofolio (atau *sumber*), Anda memperbarui file **config.json** dengan akun AWS, Wilayah AWS, peran IAM, portofolio, dan informasi produk untuk kasus penggunaan Anda.

1. Anda menerapkan aplikasi AWS CDK.

1. **Aplikasi AWS CDK mengasumsikan peran IAM penerapan dan membuat portofolio dan produk Service Catalog yang ditentukan dalam file config.json.**

   Jika Anda mengonfigurasi StackSets untuk menyebarkan produk di akun target, proses akan berlanjut. Jika Anda tidak mengonfigurasi StackSets untuk menyediakan produk apa pun, maka prosesnya selesai.

1. **Aplikasi AWS CDK mengasumsikan peran **StackSet administrator** dan menerapkan set CloudFormation tumpukan AWS yang Anda tentukan dalam file config.json.**

1. Dalam akun target, StackSets mengasumsikan peran **StackSet eksekusi** dan ketentuan produk.

## Alat
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-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 CDK Toolkit adalah kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) pengembangan cloud baris perintah yang membantu Anda berinteraksi dengan aplikasi AWS CDK Anda.
+ [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.
+ [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 Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html) membantu Anda mengelola katalog layanan TI secara terpusat yang disetujui untuk AWS. Pengguna akhir dapat dengan cepat men-deploy hanya layanan IT yang disetujui yang mereka butuhkan, mengikuti batasan yang ditetapkan oleh organisasi Anda.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub, di [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git)repositori. Repositori kode berisi file dan folder berikut:
+ **cdk-sevicecatalog-app**— Folder ini berisi aplikasi AWS CDK untuk solusi ini.
+ **config** - Folder ini berisi file **config.json** dan CloudFormation template untuk menyebarkan produk dalam portofolio Service Catalog.
+ **config/config.json** - File ini berisi semua informasi konfigurasi. Anda memperbarui file ini untuk menyesuaikan solusi ini untuk kasus penggunaan Anda.
+ **config/templates** - Folder ini berisi CloudFormation template untuk produk Service Center.
+ **setup.sh** - Skrip ini menyebarkan solusi.
+ **uninstall.sh** - Skrip ini menghapus tumpukan dan semua sumber daya AWS yang dibuat saat menerapkan solusi ini.

Untuk menggunakan kode sampel, ikuti instruksi di bagian [Epik](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics).

## Praktik terbaik
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-best-practices"></a>
+ Peran IAM yang digunakan untuk menerapkan solusi ini harus mematuhi [prinsip hak istimewa paling sedikit (dokumentasi IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Patuhi [praktik terbaik untuk mengembangkan aplikasi cloud dengan AWS CDK](https://aws.amazon.com/blogs/devops/best-practices-for-developing-cloud-applications-with-aws-cdk/) (postingan blog AWS).
+ Patuhi [praktik CloudFormation terbaik AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) (CloudFormation dokumentasi).

## Epik
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-epics"></a>

### Siapkan lingkungan Anda
<a name="set-up-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal AWS CDK Toolkit. | Pastikan Anda telah menginstal AWS CDK Toolkit. Masukkan perintah berikut untuk mengonfirmasi apakah sudah diinstal dan periksa versinya. <pre>cdk --version</pre>Jika AWS CDK Toolkit tidak diinstal, maka masukkan perintah berikut untuk menginstalnya.<pre>npm install -g aws-cdk@2.27.0</pre>Jika versi AWS CDK Toolkit lebih awal dari 2.27.0, maka masukkan perintah berikut untuk memperbaruinya ke versi 2.27.0.<pre>npm install -g aws-cdk@2.27.0 --force</pre> | AWS DevOps, DevOps insinyur | 
| Kloning repositori. | Masukkan perintah berikut. Di *Kloning repositori* di bagian [Informasi tambahan](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional), Anda dapat menyalin perintah lengkap yang berisi URL untuk repositori. Ini mengkloning [aws-cdk-servicecatalog-automation](https://github.com/aws-samples/aws-cdk-servicecatalog-automation)repositori dari. GitHub<pre>git clone <repository-URL>.git</pre>Ini membuat `cd aws-cdk-servicecatalog-automation` folder di direktori target. Masukkan perintah berikut untuk menavigasi ke folder ini.<pre>cd aws-cdk-servicecatalog-automation</pre> | AWS DevOps, DevOps insinyur | 
| Siapkan kredensi AWS. | Masukkan perintah berikut. Ini mengekspor variabel berikut, yang menentukan akun AWS dan Wilayah tempat Anda menerapkan tumpukan.<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number></pre><pre>export CDK_DEFAULT_REGION=<AWS Region></pre>Kredensi AWS untuk AWS CDK disediakan melalui variabel lingkungan. | AWS DevOps, DevOps insinyur | 
| Konfigurasikan izin untuk peran IAM pengguna akhir. | Jika Anda akan menggunakan peran IAM untuk memberikan akses ke portofolio dan produk di dalamnya, peran harus memiliki izin yang akan diambil oleh prinsipal **layanan servicecatalog.amazonaws.com**. Untuk petunjuk tentang cara memberikan izin ini, lihat [Mengaktifkan akses tepercaya dengan Service Catalog](https://docs.aws.amazon.com/organizations/latest/userguide/services-that-can-integrate-servicecatalog.html#integrate-enable-ta-servicecatalog) (dokumentasi AWS Organizations). | AWS DevOps, DevOps insinyur | 
| Konfigurasikan peran IAM yang dibutuhkan oleh StackSets. | Jika Anda menggunakan StackSets untuk secara otomatis menyediakan produk di akun target, Anda perlu mengonfigurasi peran IAM yang mengelola dan menjalankan kumpulan tumpukan.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS DevOps, DevOps insinyur | 

### Sesuaikan dan terapkan solusinya
<a name="customize-and-deploy-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation template. | Di `config/templates` folder, buat CloudFormation template untuk produk apa pun yang ingin Anda sertakan dalam portofolio Anda. Untuk informasi selengkapnya, lihat [Bekerja dengan CloudFormation templat AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) (CloudFormation dokumentasi). | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 
| Sesuaikan file konfigurasi. | Di `config` folder, buka file **config.json** dan tentukan parameter yang sesuai untuk kasus penggunaan Anda. Parameter berikut diperlukan kecuali dinyatakan lain:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Untuk contoh file konfigurasi yang telah selesai, lihat *Contoh file konfigurasi* di bagian [Informasi tambahan](#automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional). | Pengembang aplikasi, DevOps insinyur, AWS DevOps | 
| Menyebarkan solusinya. | Masukkan perintah berikut. **Ini menerapkan aplikasi AWS CDK dan menyediakan portofolio dan produk Service Catalog sebagaimana ditentukan dalam file config.json.**<pre>sh +x setup.sh</pre> | Pengembang aplikasi, DevOps insinyur, AWS DevOps | 
| Verifikasi penyebaran. | Verifikasi penerapan yang berhasil dengan melakukan hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html) | AWS Umum | 
| (Opsional) Perbarui portofolio dan produk. | Jika Anda ingin menggunakan solusi ini untuk memperbarui portofolio atau produk atau untuk menyediakan produk baru:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk.html)Misalnya, Anda dapat menambahkan portofolio tambahan atau menyediakan lebih banyak sumber daya. Aplikasi AWS CDK hanya mengimplementasikan perubahan. Jika tidak ada perubahan pada portofolio atau produk yang digunakan sebelumnya, pemindahan tidak akan memengaruhi portofolio atau produk tersebut. | Pengembang aplikasi, DevOps insinyur, AWS Umum | 

### Bersihkan solusinya
<a name="clean-up-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| (Opsional) Hapus sumber daya AWS yang digunakan oleh solusi ini. | Jika Anda ingin menghapus produk yang disediakan, ikuti petunjuk di [Menghapus produk yang disediakan (dokumentasi Service](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) Catalog).Jika Anda ingin menghapus semua sumber daya yang dibuat oleh solusi ini, masukkan perintah berikut.<pre>sh uninstall.sh</pre> | AWS DevOps, DevOps insinyur, Pengembang aplikasi | 

## Sumber daya terkait
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-resources"></a>
+ [Perpustakaan Konstruksi AWS Service Catalog](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_servicecatalog-readme.html) (AWS API Referensi)
+ [StackSets konsep](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html) (CloudFormation dokumentasi)
+ [AWS Service Catalog](https://aws.amazon.com/servicecatalog) (AWS marketing)
+ [Menggunakan Service Catalog dengan AWS CDK](https://catalog.us-east-1.prod.workshops.aws/workshops/d40750d7-a330-49be-9945-cde864610de9/en-US/4-builders-devs/sc-cdk) (AWS workshop)

## Informasi tambahan
<a name="automate-aws-service-catalog-portfolio-and-product-deployment-by-using-aws-cdk-additional"></a>

**Kloning repositori**

Masukkan perintah berikut untuk mengkloning repositori dari. GitHub

```
git clone https://github.com/aws-samples/aws-cdk-servicecatalog-automation.git
```

**Contoh file konfigurasi**

Berikut ini adalah contoh file **config.json** dengan nilai contoh.

```
{
    "portfolios": [
        {
            "displayName": "EC2 Product Portfolio",
            "providerName": "User1",
            "description": "Test1",
            "roles": [
                "<Names of IAM roles that can access the products>"
            ],
            "users": [
                "<Names of IAM users who can access the products>"
            ],
            "groups": [
                "<Names of IAM user groups that can access the products>"
            ]
        },
        {
            "displayName": "Autoscaling Product Portfolio",
            "providerName": "User2",
            "description": "Test2",
            "roles": [
                "<Name of IAM role>"
            ]
        }
    ],
    "tagOption": [
        {
            "key": "Group",
            "value": [
                "finance",
                "engineering",
                "marketing",
                "research"
            ]
        },
        {
            "key": "CostCenter",
            "value": [
                "01",
                "02",
                "03",
                "04"
            ]
        },
        {
            "key": "Environment",
            "value": [
                "dev",
                "prod",
                "stage"
            ]
        }
    ],
    "products": [
        {
            "portfolioName": "EC2 Product Profile",
            "productName": "Ec2",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template1.json"
        },
        {
            "portfolioName": "Autoscaling Product Profile",
            "productName": "autoscaling",
            "owner": "owner1",
            "productVersionName": "v1",
            "templatePath": "../../config/templates/template2.json",
            "deployWithStackSets": {
                "accounts": [
                    "012345678901",
                ],
                "regions": [
                    "us-west-2"
                ],
                "stackSetAdministrationRoleName": "AWSCloudFormationStackSetAdministrationRole",
                "stackSetExecutionRoleName": "AWSCloudFormationStackSetExecutionRole"
            }
        }
    ]
}
```

# Otomatiskan manajemen pipeline dinamis untuk menerapkan solusi perbaikan terbaru di lingkungan Gitflow dengan menggunakan dan AWS Service Catalog AWS CodePipeline
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions"></a>

*Balaji Vedagiri, Faisal Shahdad, Shanmugam Shanker, dan Vivek Thangamuthu, Amazon Web Services*

## Ringkasan
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-summary"></a>

**catatan**  
AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. [Pelajari selengkapnya](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider)

Pola ini membahas skenario pengelolaan pipeline hotfix dinamis yang didedikasikan semata-mata untuk menerapkan solusi hotfix ke lingkungan produksi dengan aman. Solusinya diimplementasikan dan dikelola dengan menggunakan AWS Service Catalog portofolio dan produk. EventBridge Aturan Amazon digunakan untuk otomatisasi acara. Pembatasan diberlakukan dengan menggunakan batasan portofolio Service Catalog dan peran AWS Identity and Access Management (IAM) untuk pengembang. Hanya AWS Lambda fungsi yang diizinkan untuk meluncurkan produk Service Catalog, yang dipicu oleh EventBridge aturan. Pola ini dirancang untuk lingkungan dengan pengaturan Gitflow tertentu, yang dijelaskan dalam [Informasi tambahan](#automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional).

Biasanya, perbaikan terbaru diterapkan untuk mengatasi masalah kritis atau keamanan yang dilaporkan di lingkungan hidup, seperti Produksi. Perbaikan terbaru harus diterapkan langsung ke lingkungan Pementasan dan Produksi saja. Pipa Pementasan dan Produksi digunakan secara luas untuk permintaan pengembangan reguler. Pipeline ini tidak dapat digunakan untuk menerapkan perbaikan terbaru karena ada fitur berkelanjutan dalam jaminan kualitas yang tidak dapat dipromosikan ke Produksi. Untuk merilis perbaikan terbaru, pola ini menjelaskan pipeline dinamis dan berumur pendek dengan fitur keamanan berikut:
+ **Pembuatan otomatis** - Pipeline hotfix dibuat secara otomatis setiap kali cabang hotfix dibuat di repositori. AWS CodeCommit 
+ **Pembatasan akses** — Pengembang tidak memiliki akses untuk membuat pipeline ini di luar proses perbaikan terbaru. 
+ **Tahap terkontrol** — Pipeline memiliki tahap terkontrol dengan token akses khusus, memastikan bahwa permintaan tarik (PR) hanya dapat dibuat sekali. 
+ **Tahap persetujuan — Tahapan** persetujuan disertakan dalam jalur pipa untuk mendapatkan persetujuan yang diperlukan dari pemangku kepentingan terkait. 
+ **Penghapusan otomatis** - Pipa hotfix secara otomatis dihapus setiap kali `hotfix` cabang dihapus di CodeCommit repositori setelah digabungkan dengan PR. 

## Prasyarat dan batasan
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-prereqs"></a>

**Prasyarat**
+ Tiga aktif Akun AWS diperlukan sebagai berikut:
  + Akun alat - Untuk pengaturan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD).
  + Akun panggung - Untuk pengujian penerimaan pengguna.
  + Akun produksi - Untuk pengguna akhir bisnis.
  + (Opsional) Tambahkan Akun AWS untuk bertindak sebagai akun QA. Akun ini diperlukan jika Anda menginginkan pengaturan pipeline utama, termasuk QA, dan solusi pipeline hotfix untuk pengujian.
+  AWS CloudFormation Tumpukan dengan kondisi opsional untuk diterapkan di akun QA menggunakan pipeline utama, jika diperlukan. Pola masih dapat diuji tanpa pengaturan pipeline utama dengan membuat dan menghapus `hotfix` cabang.
+ Bucket Amazon Simple Storage Service (Amazon S3) untuk menyimpan CloudFormation template yang digunakan untuk membuat produk Service Catalog.
+ Buat aturan persetujuan PR untuk CodeCommit repositori sesuai dengan persyaratan kepatuhan (setelah membuat repositori).
+ Batasi izin IAM dari pengembang dan arahan tim untuk menolak eksekusi fungsi [prcreation-lambda Lambda karena harus dipanggil](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) hanya dari pipeline.

**Batasan**
+  CloudFormation Penyedia digunakan dalam tahap penerapan, dan aplikasi digunakan menggunakan set CloudFormation perubahan. Jika Anda ingin menggunakan opsi penyebaran yang berbeda, ubah CodePipeline tumpukan sesuai kebutuhan.
+ Pola ini menggunakan AWS CodeBuild dan file konfigurasi lainnya untuk menyebarkan layanan mikro sampel. Jika Anda memiliki jenis beban kerja yang berbeda (misalnya, beban kerja tanpa server), Anda harus memperbarui semua konfigurasi yang relevan.
+ Pola ini menyebarkan aplikasi dalam satu Wilayah AWS (misalnya, US East (Virginia N.) us-east-1) di seberang. Akun AWS Untuk menyebarkan di beberapa Wilayah, ubah referensi Wilayah dalam perintah dan tumpukan.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [layanan AWS menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-architecture"></a>

Diagram di bagian ini menyediakan alur kerja untuk peristiwa siklus hidup pembuatan dan untuk peristiwa siklus hidup penghapusan.

![\[Alur kerja untuk membuat peristiwa siklus hidup.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/3939f77c-4221-4c23-a3a1-3e8a294b2b32.png)


Diagram sebelumnya untuk membuat peristiwa siklus hidup menunjukkan hal berikut:

1. Pengembang membuat `hotfix-*` cabang di CodeCommit repositori untuk mengembangkan solusi terkait hotfix.

1. Acara pembuatan `hotfix-*` cabang ditangkap melalui EventBridge aturan. Rincian acara termasuk nama repositori dan nama cabang.

1.  EventBridge Aturan memanggil AWS Lambda fungsi`hotfix-lambda-function`. EventBridge Aturan meneruskan informasi acara ke fungsi Lambda sebagai input.

1. Fungsi Lambda memproses input untuk mengambil nama repositori dan nama cabang. Ini meluncurkan produk Service Catalog dengan nilai yang diambil dari input yang diproses.

1. Produk Service Catalog mencakup pengaturan pipeline yang akan menyebarkan solusi ke lingkungan Stage dan Production. Blok pipa mencakup tahapan sumber, pembuatan, dan penerapan. Juga, ada tahap persetujuan manual untuk mempromosikan penyebaran untuk lingkungan Produksi.

1. Tahap sumber mengambil kode dari repositori dan `hotfix-*` cabang yang dibuat pada langkah pertama. Kode diteruskan ke tahap pembuatan melalui bucket Amazon S3 untuk artefak. Pada tahap build, image container dibuat yang menyertakan hotfix yang dikembangkan di `hotfix-*` cabang dan didorong ke Amazon Elastic Container Registry (Amazon ECR).

1. Tahap penerapan ke lingkungan panggung memperbarui Amazon Elastic Container Service (Amazon ECS) dengan image container terbaru yang menyertakan hotfix. Hotfix digunakan dengan membuat dan mengeksekusi set perubahan. CloudFormation 

1. Fungsi `prcreation-lambda` Lambda dipanggil setelah penerapan berhasil di lingkungan Stage. Fungsi Lambda ini membuat PR dari `hotfix-*` cabang ke `develop` dan `main` cabang repositori. Fungsi Lambda memastikan bahwa perbaikan yang dikembangkan di `hotfix-*` cabang terbelakang dan disertakan dalam penerapan berikutnya.

1. Tahap persetujuan manual membantu memastikan bahwa pemangku kepentingan yang diperlukan meninjau perbaikan dan memberikan persetujuan untuk diterapkan dalam Produksi.

1. Tahap penerapan ke lingkungan produksi memperbarui Amazon ECS dengan gambar kontainer terbaru yang menyertakan perbaikan terbaru. Hotfix digunakan dengan membuat dan mengeksekusi set perubahan. CloudFormation 

![\[Alur kerja untuk menghapus peristiwa siklus hidup.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/64311acc-8c0f-4734-aa1b-74345d86c752/images/192aa897-bd9b-4a9f-804e-340371612b3b.png)


Diagram sebelumnya untuk menghapus peristiwa siklus hidup menunjukkan hal berikut:

1. Pengembang menghapus `hotfix-*` cabang setelah berhasil menyebarkan hotfix ke lingkungan produksi.

1. Peristiwa penghapusan `hotfix-*` cabang ditangkap melalui aturan. EventBridge Rincian acara termasuk nama repositori dan nama cabang.

1.  EventBridge Aturan tersebut memanggil fungsi Lambda. EventBridge Aturan meneruskan informasi acara ke fungsi Lambda sebagai input.

1. Fungsi Lambda memproses input untuk mengambil nama repositori dan nama cabang. Fungsi Lambda menentukan produk Service Catalog masing-masing dari input yang diteruskan dan kemudian mengakhiri produk.

1. Penghentian produk yang disediakan oleh Service Catalog menghapus pipeline dan sumber daya yang relevan yang dibuat sebelumnya dalam produk tersebut.

**Otomatisasi dan skala**
+ Pola ini mencakup EventBridge aturan dan fungsi Lambda, yang dapat menangani beberapa permintaan pembuatan cabang hotfix secara paralel. Fungsi Lambda menyediakan produk Service Catalog untuk aturan acara yang cocok.
+ Penyiapan pipeline ditangani dengan menggunakan produk Service Catalog, yang menyediakan kemampuan kontrol versi. Solusi ini juga menskalakan secara otomatis untuk menangani beberapa pengembangan perbaikan terbaru untuk aplikasi yang sama secara paralel.
+ Fungsi [prcreation-lambda](https://github.com/aws-samples/dynamic_hotfix_codepipeline/blob/main/pre-requisites/lambdasetup.yaml#L55) memastikan bahwa perubahan hotfix ini juga digabungkan kembali ke dalam `main` dan `develop` cabang melalui pembuatan permintaan tarik otomatis. Pendekatan ini penting untuk menjaga agar `develop` cabang tetap up to date dengan semua perbaikan dan menghindari potensi regresi kode. `main` Proses ini membantu menjaga konsistensi di seluruh cabang dan mencegah regresi kode dengan memastikan bahwa semua cabang berumur panjang memiliki perbaikan terbaru.

## Alat
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
+ [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 CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Untuk informasi selengkapnya, lihat [Cara memigrasikan AWS CodeCommit repositori Anda ke penyedia Git lain](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/).
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [Amazon Elastic Container Service (Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)) adalah layanan manajemen kontainer yang cepat dan dapat diskalakan yang membantu Anda menjalankan, menghentikan, dan mengelola kontainer di klaster.
+ [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.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)membantu Anda mengelola katalog layanan TI secara terpusat yang disetujui. AWS Pengguna akhir dapat dengan cepat men-deploy hanya layanan IT yang disetujui yang mereka butuhkan, mengikuti batasan yang ditetapkan oleh organisasi 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.

**Alat-alat lainnya**
+ [CloudFormation Linter (cfn-lint)](https://github.com/aws-cloudformation/cfn-lint) [adalah linter yang memeriksa template CloudFormation YAMAL atau JSON terhadap spesifikasi sumber daya. CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-resource-specification.html) Ini juga melakukan pemeriksaan lain, seperti memeriksa nilai yang valid untuk properti sumber daya dan kepatuhan terhadap praktik terbaik.
+ [cfn-nag](https://github.com/stelligent/cfn_nag) adalah alat open source yang mengidentifikasi potensi masalah keamanan dalam CloudFormation template dengan mencari pola.
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. Pola ini menggunakan Docker untuk membangun dan menguji gambar kontainer secara lokal.
+ [Git](https://git-scm.com/docs) adalah sistem kontrol versi terdistribusi open-source.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [dynamic\$1hotfix\$1codepipeline](https://github.com/aws-samples/dynamic_hotfix_codepipeline).

## Praktik terbaik
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-best-practices"></a>

Tinjau dan sesuaikan peran IAM dan kebijakan kontrol layanan (SCP) di lingkungan Anda untuk memastikan bahwa mereka membatasi akses dengan tepat. Ini sangat penting untuk mencegah tindakan apa pun yang dapat mengesampingkan langkah-langkah keamanan yang termasuk dalam pola ini. Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning [repositori](https://github.com/aws-samples/dynamic_hotfix_codepipeline) sampel ke direktori baru di lokasi kerja Anda, jalankan perintah berikut:<pre>git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git</pre> | AWS DevOps | 
| Ekspor variabel lingkungan untuk penyebaran CloudFormation tumpukan. | Tentukan variabel lingkungan berikut yang akan digunakan sebagai masukan ke CloudFormation tumpukan nanti dalam pola ini.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export BucketStartName=<BucketName></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>export ProdAccount=<prodaccountnumber><br />export StageAccount=<stage/preprodaccountnumber><br />export QAAccount=<qaccountnumber><br />export ToolsAccount=<toolsaccountnumber><br />export DepRegion=<region></pre> | AWS DevOps | 

### Mengatur prasyarat yang diperlukan di Akun AWS
<a name="set-up-prerequisites-required-in-aws-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sumber daya yang diperlukan untuk CI/CD di akun alat. | Untuk menyebarkan CloudFormation tumpukan di akun alat, gunakan perintah berikut. (Hapus `QAAccount` parameter jika Anda tidak menggunakan akun QA untuk pengaturan.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre>Catat sumber daya yang dibuat oleh CodeCommit repositori dan Amazon ECR dari tumpukan sebelumnya. Parameter ini diperlukan untuk mengatur `main` cabang pipa di langkah mendatang. | AWS DevOps | 
| Buat sumber daya yang diperlukan untuk CI/CD akun beban kerja. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Perbarui kebijakan bucket artefak S3 untuk mengizinkan akses akun beban kerja. | Untuk memperbarui prasyarat CloudFormation tumpukan di akun alat, gunakan perintah berikut untuk menambahkan semua izin yang diperlukan untuk akun beban kerja Tahap dan Produksi. (Hapus `QAAccount` parameter jika Anda tidak menggunakannya untuk pengaturan.)<pre>#InToolsAccount<br />aws cloudformation deploy \<br />    --template-file pre-requisites/pre-reqs.yaml \<br />    --stack-name prereqs \<br />    --parameter-overrides BucketStartName=${BucketStartName} \<br />    ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \<br />    StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \<br />    QAAccount=${QAAccount} PutPolicy=true \<br />    --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}</pre> | AWS DevOps | 

### Siapkan fungsi Lambda dan sumber daya Service Catalog di akun alat
<a name="set-up-lam-function-and-sc-resources-in-tools-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan portofolio dan produk Service Catalog. | Untuk menyiapkan portofolio dan produk Service Catalog, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Siapkan fungsi Lambda. | Solusi ini menggunakan fungsi Lambda berikut untuk mengelola alur kerja hotfix:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)Untuk mengaktifkan fungsi Lambda untuk menyediakan dan menghentikan produk Service Catalog saat `hotfix ` cabang dibuat atau dihapus melalui EventBridge aturan terkait, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Buat pipeline untuk cabang utama dan terapkan aplikasi di akun beban kerja
<a name="create-pipeline-for-main-branch-and-deploy-application-in-workload-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan pipa untuk `main` cabang. | Untuk mengatur pipeline untuk cabang utama, jalankan perintah berikut di akun alat. Ganti parameter untuk `MainProductId` dan `MainProductArtifactId` dengan nilai dari output `servicecatalogsetup` tumpukan.<pre>#InToolsAccount<br />aws servicecatalog provision-product \<br />    --product-id <MainProductId> \<br />    --provisioning-artifact-id <MainProductArtifactId> \<br />    --provisioned-product-name "${ApplicationName}-main-pipeline" \<br />    --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \<br />    --region=${DepRegion}</pre> | AWS DevOps | 
| Menyebarkan aplikasi menggunakan `main` cabang. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

### Buat pipeline untuk cabang hotfix-\$1 dan terapkan perbaikan terbaru
<a name="create-the-pipeline-for-a-hotfix--branch-and-deploy-the-hotfix"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat `hotfix-*` cabang dan komit perubahan. | Untuk membuat pipeline untuk `hotfix-*` cabang dan menerapkan perbaikan terbaru ke akun beban kerja, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 
| Hapus `hotfix-check1` cabang. | Untuk menghapus `hotfix-check1` cabang yang dibuat sebelumnya, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html) | AWS DevOps | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan sumber daya yang digunakan. | Untuk membersihkan sumber daya yang digunakan sebelumnya, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-dynamic-pipeline-management-for-deploying-hotfix-solutions.html)<pre>##In Tools Account##<br />aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion}<br />aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}</pre><pre>##In Workload Accounts##<br />aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}</pre>Untuk informasi selengkapnya, lihat [Menghapus produk yang disediakan di dokumentasi](https://docs.aws.amazon.com/servicecatalog/latest/userguide/enduser-delete.html) Service Catalog. | AWS DevOps | 

## Pemecahan masalah
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Perubahan yang Anda komit ke CodeCommit repositori tidak diterapkan. | Periksa CodeBuild log untuk kesalahan dalam tindakan build Docker. Lihat informasi yang lebih lengkap dalam [dokumentasi CodeBuild ](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html). | 
| Produk Service Catalog tidak sedang disediakan. | Tinjau CloudFormation tumpukan terkait untuk peristiwa yang gagal. Lihat informasi yang lebih lengkap dalam [dokumentasi CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html). | 

## Sumber daya terkait
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-resources"></a>
+ [Perintah Git Dasar](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-basic-git.html)
+ [Mengonfigurasi kebijakan IAM untuk membatasi push dan merge ke cabang](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-conditional-branch.html#how-to-conditional-branch-create-policy)
+ [Connect ke AWS CodeCommit repositori](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)
+ [Memberikan akses ke pengguna](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/catalogs_portfolios_users.html)
+ [Mendorong gambar Docker ke repositori pribadi Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Pemecahan Masalah AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html)
+ [Apa itu AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)

## Informasi tambahan
<a name="automate-dynamic-pipeline-management-for-deploying-hotfix-solutions-additional"></a>

Pola ini dirancang untuk lingkungan dengan pengaturan Gitflow yang diadopsi untuk alur kerja pengembangan dalam proses CI/CD . Pipa mengikuti siklus penyebaran yang dimulai dari pengembangan dan bergerak melalui jaminan kualitas (QA), tahap, dan lingkungan produksi. CI/CD Penyiapan mencakup dua cabang git dengan penerapan promosi ke lingkungan sebagai berikut:
+ `develop`Cabang menyebar ke lingkungan pengembangan.
+ `main`Cabang menyebar ke lingkungan QA, panggung, dan produksi.

Dalam pengaturan ini, merupakan tantangan untuk menerapkan perbaikan terbaru atau patch keamanan lebih cepat daripada siklus penerapan biasa sementara pengembangan aktif fitur baru sedang berlangsung. Proses khusus diperlukan untuk mengatasi perbaikan terbaru atau permintaan keamanan, memastikan bahwa lingkungan hidup tetap berfungsi dengan baik dan aman.

Namun, Anda dapat menggunakan opsi lain yang tersedia tanpa memerlukan proses penyebaran khusus jika:
+  CI/CD Proses ini dilengkapi dengan pengujian otomatis, seperti fungsional dan end-to-end pengujian, yang menghilangkan kebutuhan untuk pengujian manual dan mencegah penundaan penerapan ke produksi. Namun, jika pengujian otomatis tidak terintegrasi dengan baik ke dalam CI/CD proses, mendorong perbaikan kecil ke lingkungan produksi dapat menjadi kompleks dan rumit bagi pengembang. Ini karena mungkin ada fitur baru yang menunggu di lingkungan QA untuk persetujuan dan sign-off. Perbaikan terbaru atau perbaikan keamanan tidak dapat didorong ke produksi secara langsung secara bersamaan.
+ Tim pengembangan terus menerapkan fitur baru ke dalam lingkungan produksi, mengintegrasikan perbaikan terbaru atau patch keamanan ke dalam penerapan terjadwal dari setiap fitur baru. Dengan kata lain, pembaruan fitur berikutnya ke lingkungan produksi terdiri dari dua komponen: Penambahan fitur baru dan dimasukkannya hotfix atau patch keamanan. Namun, jika siklus penerapan tidak berkelanjutan, mungkin ada beberapa fitur baru yang sudah menunggu persetujuan di lingkungan QA. Mengelola versi yang berbeda dan memastikan perubahan yang benar diterapkan kembali kemudian dapat menjadi kompleks dan rawan kesalahan.

**catatan**  
Jika Anda menggunakan [versi 2](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types.html#:~:text=V2%20type%20pipelines%20have%20the%20same%20structure) AWS CodePipeline dengan pemicu yang tepat yang disiapkan di `hotfix` cabang, Anda masih memerlukan proses khusus untuk menangani permintaan yang tidak terjadwal. Di versi 2, Anda dapat mengatur pemicu untuk permintaan push atau pull. Eksekusi akan segera diantri atau dieksekusi, tergantung pada keadaan pipa sebelumnya. Namun, dengan pipa khusus, perbaikan diterapkan segera ke lingkungan produksi, memastikan bahwa masalah mendesak diselesaikan tanpa penundaan.

# Mengotomatiskan penghapusan AWS CloudFormation tumpukan dan sumber daya terkait
<a name="automate-deletion-cloudformation-stacks-associated-resources"></a>

*SANDEEP SINGH dan James Jacob, Amazon Web Services*

## Ringkasan
<a name="automate-deletion-cloudformation-stacks-associated-resources-summary"></a>

[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)adalah layanan yang banyak digunakan untuk mengelola infrastruktur cloud sebagai kode (IAc). Saat Anda menggunakan CloudFormation, Anda mengelola sumber daya terkait sebagai satu unit yang disebut *tumpukan*. Anda membuat, memperbarui, dan menghapus kumpulan sumber daya dengan membuat, memperbarui, dan menghapus tumpukan.

Terkadang, Anda tidak lagi membutuhkan sumber daya dalam CloudFormation tumpukan. Bergantung pada sumber daya dan konfigurasinya, mungkin rumit untuk menghapus tumpukan dan sumber daya yang terkait. Dalam sistem produksi dunia nyata, penghapusan terkadang gagal atau memakan waktu lama karena kondisi yang saling bertentangan atau pembatasan yang tidak dapat mengesampingkan. CloudFormation Ini dapat memerlukan perencanaan dan pelaksanaan yang cermat untuk memastikan bahwa semua sumber daya dihapus dengan benar secara efisien dan konsisten. Pola ini menjelaskan cara menyiapkan kerangka kerja yang membantu Anda mengelola penghapusan CloudFormation tumpukan yang melibatkan kompleksitas berikut:
+ **Sumber daya dengan perlindungan hapus** - Beberapa sumber daya mungkin mengaktifkan perlindungan penghapusan. Contoh umum adalah tabel [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) dan bucket [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)). Hapus perlindungan mencegah penghapusan otomatis, seperti penghapusan melalui. CloudFormation Jika Anda ingin menghapus sumber daya ini, Anda harus secara manual atau terprogram mengganti atau menonaktifkan sementara perlindungan hapus. Anda harus hati-hati mempertimbangkan implikasi dari menghapus sumber daya ini sebelum melanjutkan.
+ **Sumber daya dengan kebijakan penyimpanan** — Sumber daya tertentu, seperti kunci AWS Key Management Service (AWS KMS) dan bucket Amazon S3, mungkin memiliki kebijakan penyimpanan yang menentukan berapa lama sumber daya tersebut harus dipertahankan setelah penghapusan diminta. Anda harus memperhitungkan kebijakan ini dalam strategi pembersihan untuk menjaga kepatuhan terhadap kebijakan organisasi dan persyaratan peraturan.
+ **Penghapusan fungsi Lambda yang tertunda yang dilampirkan ke VPC** — Menghapus [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)fungsi yang dilampirkan ke cloud pribadi virtual (VPC) dapat memakan waktu 5—40 menit, tergantung beberapa dependensi yang saling berhubungan yang terlibat dalam proses. Jika Anda melepaskan fungsi dari VPC sebelum menghapus tumpukan, Anda dapat mengurangi penundaan ini menjadi kurang dari 1 menit.
+ **Sumber daya tidak dibuat secara langsung oleh CloudFormation** — Dalam desain aplikasi tertentu, sumber daya mungkin dibuat di luar CloudFormation tumpukan asli, baik oleh aplikasi itu sendiri atau oleh sumber daya yang disediakan melalui tumpukan. Berikut ini adalah dua contoh:
  + CloudFormation mungkin menyediakan instance [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) yang menjalankan skrip data pengguna. Kemudian, skrip ini mungkin membuat [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)parameter untuk menyimpan data terkait aplikasi. Parameter ini tidak dikelola melalui CloudFormation.
  + CloudFormation mungkin menyediakan fungsi Lambda yang secara otomatis menghasilkan grup [Amazon CloudWatch Logs untuk menyimpan log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html). Grup log ini tidak dikelola melalui CloudFormation.

  Meskipun sumber daya ini tidak dikelola secara langsung oleh CloudFormation, mereka sering perlu dibersihkan ketika tumpukan dihapus. Jika dibiarkan tidak dikelola, mereka dapat menjadi yatim piatu dan menyebabkan konsumsi sumber daya yang tidak perlu.

Meskipun pagar pembatas ini dapat menyebabkan kompleksitas, mereka disengaja dan kritis. Mengizinkan CloudFormation untuk mengesampingkan semua kendala dan menghapus sumber daya tanpa pandang bulu dapat menyebabkan konsekuensi yang merugikan dan tidak terduga dalam banyak skenario. Namun, sebagai seorang DevOps atau insinyur cloud yang bertanggung jawab untuk mengelola lingkungan, ada kalanya mengesampingkan kendala ini mungkin diperlukan, terutama dalam pengembangan, pengujian, atau lingkungan pementasan.

**Hasil bisnis yang ditargetkan**

Dengan menerapkan kerangka kerja ini, Anda dapat mencapai manfaat berikut:
+ **Manajemen biaya** — Pembersihan lingkungan sementara yang teratur dan efisien, seperti end-to-end atau lingkungan pengujian penerimaan pengguna, membantu mencegah sumber daya berjalan lebih lama dari yang diperlukan. Ini dapat secara signifikan mengurangi biaya.
+ **Keamanan** — Pembersihan otomatis sumber daya yang sudah ketinggalan zaman atau tidak terpakai mengurangi permukaan serangan dan membantu menjaga lingkungan yang aman. AWS 
+ **Efisiensi operasional** - Pembersihan rutin dan otomatis dapat memberikan manfaat operasional berikut:
  + Skrip otomatis yang menghapus grup log lama atau bucket Amazon S3 kosong dapat meningkatkan efisiensi operasional dengan menjaga lingkungan tetap bersih dan mudah dikelola.
  + Menghapus dan membuat ulang tumpukan dengan cepat mendukung iterasi cepat untuk desain dan implementasi, yang dapat menghasilkan arsitektur yang lebih kuat dan tangguh.
  + Menghapus dan membangun kembali lingkungan secara teratur dapat membantu Anda mengidentifikasi dan memperbaiki potensi masalah. Ini dapat membantu Anda memastikan bahwa infrastruktur dapat bertahan dalam skenario dunia nyata.

## Prasyarat dan batasan
<a name="automate-deletion-cloudformation-stacks-associated-resources-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ [Python versi 3.6 atau yang lebih baru, diinstal](https://www.python.org/downloads/)
+ AWS Command Line Interface (AWS CLI), [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**Batasan**
+ Konvensi penamaan digunakan untuk mengidentifikasi sumber daya yang harus dihapus. Kode sampel dalam pola ini menggunakan awalan untuk nama sumber daya, tetapi Anda dapat menentukan konvensi penamaan Anda sendiri. Sumber daya yang tidak menggunakan konvensi penamaan ini tidak akan diidentifikasi atau kemudian dihapus.

## Arsitektur
<a name="automate-deletion-cloudformation-stacks-associated-resources-architecture"></a>

Diagram berikut menunjukkan bagaimana kerangka kerja ini mengidentifikasi CloudFormation tumpukan target dan sumber daya tambahan yang terkait dengannya.

![\[Fase yang menemukan, memproses, dan menghapus CloudFormation tumpukan dan sumber daya terkait.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/ab7c3b56-3476-41a3-8ece-68915605a546/images/a7fceb1c-d624-47b3-957d-f910ef2f44d7.png)


Diagram menunjukkan alur kerja berikut:

1. **Kumpulkan sumber daya** — Kerangka kerja otomatisasi menggunakan konvensi penamaan untuk mengembalikan semua CloudFormation tumpukan yang relevan, repositori Amazon Elastic Container Registry (Amazon ECR), tabel DynamoDB, dan bucket Amazon S3.
**catatan**  
Fungsi untuk tahap ini menggunakan [paginator](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), fitur di Boto3 yang mengabstraksi proses iterasi di atas set hasil API terpotong. Ini memastikan bahwa semua sumber daya diproses. [Untuk lebih mengoptimalkan kinerja, pertimbangkan untuk menerapkan pemfilteran [sisi server](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) atau pertimbangkan JMESPath untuk menggunakan untuk melakukan pemfilteran sisi klien.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

1. **Pra-pemrosesan** — Kerangka otomatisasi mengidentifikasi dan mengatasi kendala layanan yang harus diganti agar memungkinkan untuk menghapus sumber daya. CloudFormation Misalnya, mengubah `DeletionProtectionEnabled` pengaturan untuk tabel DynamoDB menjadi. `False` Di antarmuka baris perintah, untuk setiap sumber daya, Anda menerima prompt yang menanyakan apakah Anda ingin mengganti kendala.

1. **Hapus tumpukan** - Kerangka otomatisasi menghapus CloudFormation tumpukan. Di antarmuka baris perintah, Anda menerima prompt yang menanyakan apakah Anda ingin menghapus tumpukan.

1. **Pasca-pemrosesan** - Kerangka otomatisasi menghapus sumber daya terkait yang tidak disediakan secara langsung CloudFormation sebagai bagian dari tumpukan. Contoh jenis sumber daya ini termasuk parameter Systems Manager dan grup CloudWatch log. Fungsi terpisah mengumpulkan sumber daya ini, memprosesnya terlebih dahulu, dan kemudian menghapusnya. Di antarmuka baris perintah, untuk setiap sumber daya, Anda menerima prompt yang menanyakan apakah Anda ingin menghapus sumber daya.
**catatan**  
Fungsi untuk tahap ini menggunakan [paginator](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html), fitur di Boto3 yang mengabstraksi proses iterasi di atas set hasil API terpotong. Ini memastikan bahwa semua sumber daya diproses. [Untuk lebih mengoptimalkan kinerja, pertimbangkan untuk menerapkan pemfilteran [sisi server](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results) atau pertimbangkan JMESPath untuk menggunakan untuk melakukan pemfilteran sisi klien.](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/paginators.html#filtering-results-with-jmespath)

**Otomatisasi dan skala**

Jika CloudFormation tumpukan Anda menyertakan sumber daya lain yang tidak termasuk dalam kode sampel, atau jika tumpukan memiliki kendala yang belum ditangani dalam pola ini, maka Anda dapat menyesuaikan kerangka kerja otomatisasi untuk kasus penggunaan Anda. Ikuti metodologi yang sama untuk mengumpulkan sumber daya, pra-pemrosesan, menghapus tumpukan, dan kemudian pasca-pemrosesan.

## Alat
<a name="automate-deletion-cloudformation-stacks-associated-resources-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
+ [CloudFormation Command Line Interface (CFN-CLI)](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/what-is-cloudformation-cli.html) adalah alat open source yang membantu Anda mengembangkan dan menguji dan ekstensi pihak ketiga AWS dan kemudian mendaftarkannya untuk digunakan. CloudFormation
+ [AWS SDK untuk Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

**Alat lainnya**
+ [Klik](https://click.palletsprojects.com/en/stable/) adalah alat Python yang membantu Anda membuat antarmuka baris perintah.
+ [Puisi](https://python-poetry.org/docs/) adalah alat untuk manajemen ketergantungan dan pengemasan dengan Python.
+ [Pyenv](https://github.com/pyenv/pyenv) adalah alat yang membantu Anda mengelola dan beralih antar versi Python.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [cloudformation-stack-cleanup](https://github.com/aws-samples/cloudformation-stack-cleanup/)repositori.

## Praktik terbaik
<a name="automate-deletion-cloudformation-stacks-associated-resources-best-practices"></a>
+ **Menandai sumber daya untuk identifikasi yang mudah** — Menerapkan [strategi penandaan](https://aws.amazon.com/solutions/guidance/tagging-on-aws/) untuk mengidentifikasi sumber daya yang dibuat untuk lingkungan dan tujuan yang berbeda. Tag dapat menyederhanakan proses pembersihan dengan membantu Anda memfilter sumber daya berdasarkan tag mereka.
+ **Siapkan siklus hidup sumber daya** — Tentukan siklus hidup sumber daya untuk menghapus sumber daya secara otomatis setelah periode tertentu. Praktik ini membantu Anda memastikan bahwa lingkungan sementara tidak menjadi kewajiban biaya permanen.

## Epik
<a name="automate-deletion-cloudformation-stacks-associated-resources-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps insinyur | 
| Instal Puisi. | Ikuti [instruksi](https://python-poetry.org/docs/) (Dokumentasi puisi) untuk menginstal Puisi di lingkungan virtual target. | DevOps insinyur | 
| Instal dependensi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps insinyur | 
| (Opsional) Instal Pyenv. | Ikuti [instruksi](https://github.com/pyenv/pyenv#installation) (GitHub) untuk menginstal Pyenv. | DevOps insinyur | 

### (Opsional) Sesuaikan kerangka kerja
<a name="optional-customize-the-framework"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi yang mengumpulkan, pra-proses, dan menghapus sumber daya target. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | DevOps insinyur, Python | 

### Buat sumber daya sampel
<a name="create-sample-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Buat parameter Systems Manager. | Masukkan perintah berikut untuk membuat parameter Systems Manager yang tidak disediakan melalui: CloudFormation<pre>aws ssm put-parameter \<br />  --name "/sampleforcleanup/database/password" \<br />  --value "your_db_password" \<br />  --type "SecureString" \<br />  --description "Database password for my app" \<br />  --tier "Standard" \<br />  --region "us-east-1"</pre> | AWS DevOps | 
| Buat bucket Amazon S3. | Masukkan perintah berikut untuk membuat bucket Amazon S3 yang tidak disediakan melalui: CloudFormation<pre>aws s3api create-bucket \<br />  --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \<br />  --region us-east-1 \<br />  --create-bucket-configuration LocationConstraint=us-east-1</pre> | AWS DevOps | 

### Hapus sumber daya sampel
<a name="delete-the-sample-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deletion-cloudformation-stacks-associated-resources.html) | AWS DevOps | 
| Validasi penghapusan sumber daya. | Dalam output, konfirmasikan bahwa semua sumber daya sampel telah dihapus. Untuk keluaran sampel, lihat bagian [Sumber daya tambahan](#automate-deletion-cloudformation-stacks-associated-resources-additional) dari pola ini. | AWS DevOps | 

## Sumber daya terkait
<a name="automate-deletion-cloudformation-stacks-associated-resources-resources"></a>
+ [Hapus tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) (CloudFormation dokumentasi)
+ [Pemecahan masalah CloudFormation (dokumentasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html)) CloudFormation 
+ [Memberikan fungsi Lambda akses ke sumber daya di Amazon VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) (dokumentasi Lambda)
+ [Bagaimana cara menghapus AWS CloudFormation tumpukan yang macet dalam status DELETE\$1FAILED?](https://repost.aws/knowledge-center/cloudformation-stack-delete-failed) (Pusat AWS Pengetahuan)

## Informasi tambahan
<a name="automate-deletion-cloudformation-stacks-associated-resources-additional"></a>

Berikut ini adalah contoh output dari `cfncli` perintah:

```
cfncli --region aus-east-1  dev cleanup-env --prefix-list sampleforcleanup                                                                                                                              
https://sts.us-east-1.amazonaws.com
Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1
Do you want to proceed? [Y/n]: Y
No S3 buckets
No ECR repositories
No Lambda functions in VPC
The following DynamoDB tables will have their deletion protection removed:
sampleforcleanup-MyDynamoDBTable
Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y
Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'.
The following CloudFormation stacks will be deleted:
sampleforcleanup-Stack
Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y
Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack`
Waiting for stack `sampleforcleanup-Stack` to be deleted...
CloudFormation stack `sampleforcleanup-Stack` deleted successfully.
The following ssm_params will be deleted:
/sampleforcleanup/database/password
Do you want to proceed with deleting these ssm_params? [Y/n]: Y
Deleted SSM Parameter: /sampleforcleanup/database/password
Cleaned up: ['sampleforcleanup']
```

# Otomatiskan konsumsi dan visualisasi metrik kustom Amazon MWAA di Amazon Managed Grafana dengan menggunakan Terraform
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics"></a>

*Faisal Abdullah dan Satya Vajrapu, Amazon Web Services*

## Ringkasan
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-summary"></a>

Pola ini membahas cara menggunakan Grafana Terkelola Amazon untuk membuat dan memantau metrik khusus yang dicerna oleh Alur Kerja Terkelola Amazon untuk Apache Airflow (Amazon MWAA). Amazon MWAA berfungsi sebagai orkestrator untuk alur kerja, menggunakan Directed Acyclic Graphs () yang ditulis dengan Python. DAGs Pola ini berpusat pada pemantauan metrik kustom, termasuk jumlah total DAGs berjalan dalam satu jam terakhir, hitungan lulus dan gagal DAGs setiap jam, dan durasi rata-rata proses ini. Analisis ini menunjukkan bagaimana Grafana Terkelola Amazon berintegrasi dengan Amazon MWAA untuk memungkinkan pemantauan dan wawasan komprehensif tentang orkestrasi alur kerja dalam lingkungan ini.

## Prasyarat dan batasan
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS dengan izin pengguna yang diperlukan untuk membuat dan mengelola hal berikut: Layanan AWS
  + AWS Identity and Access Management (IAM) peran dan kebijakan
  + AWS Lambda
  + Amazon Managed Grafana
  + Amazon Managed Workflows for Apache Airflow (Amazon MWAA)
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Timestream
+ Akses ke lingkungan shell yang dapat menjadi terminal pada mesin lokal Anda atau [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html).
+ Lingkungan shell dengan Git diinstal dan versi terbaru dari AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui ke versi terbaru](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dari AWS CLI dokumentasi. AWS CLI
+ Versi Terraform berikut diinstal: `required_version = ">= 1.6.1, < 2.0.0"` Anda dapat menggunakan [tfswitch untuk beralih](https://tfswitch.warrensbox.com/) di antara berbagai versi Terraform.
+ Sumber identitas yang dikonfigurasi AWS IAM Identity Center untuk Anda Akun AWS. Untuk informasi selengkapnya, lihat [Konfirmasi sumber identitas Anda di Pusat Identitas IAM di dokumentasi Pusat](https://docs.aws.amazon.com/singlesignon/latest/userguide/prereq-identity-sources.html) Identitas IAM. Anda dapat memilih dari default Direktori Pusat Identitas IAM, Active Directory, atau penyedia Identitas eksternal (iDP) seperti Okta. Untuk informasi selengkapnya, lihat [Sumber daya terkait](#automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources).

**Batasan**
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ Terraform `required_version = ">= 1.6.1, < 2.0.0"`
+ Grafana yang Dikelola Amazon versi 9.4 atau yang lebih baru. Pola ini diuji pada versi 9.4.

## Arsitektur
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-architecture"></a>

Diagram arsitektur berikut menyoroti yang Layanan AWS digunakan dalam solusi.

![\[Alur kerja untuk mengotomatiskan konsumsi metrik kustom Amazon MWAA.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/3458d0a9-aee1-428a-bf2f-c357bb531c64/images/b43ed8d2-94ac-4438-913b-81c7eba8f3e0.png)


Diagram sebelumnya melangkah melalui alur kerja berikut:

1. Metrik khusus dalam Amazon MWAA berasal dari DAGs yang dijalankan di dalam lingkungan. Metrik diunggah ke bucket Amazon S3 dalam format file CSV. Berikut ini DAGs menggunakan kemampuan kueri database Amazon MWAA:
   + `run-example-dag`— DAG ini berisi contoh kode Python yang mendefinisikan satu atau lebih tugas. Ini berjalan setiap 7 menit dan mencetak tanggal. Setelah mencetak tanggal, DAG menyertakan tugas untuk tidur, atau menjeda, eksekusi untuk durasi tertentu.
   + `other-sample-dag`— DAG ini berjalan setiap 10 menit dan mencetak tanggalnya. Setelah mencetak tanggal, DAG menyertakan tugas untuk tidur, atau menjeda, eksekusi untuk durasi tertentu.
   + `data-extract`— DAG ini berjalan setiap jam dan menanyakan database Amazon MWAA dan mengumpulkan metrik. Setelah metrik dikumpulkan, DAG ini menuliskannya ke bucket Amazon S3 untuk diproses dan dianalisis lebih lanjut.

1. Untuk merampingkan pemrosesan data, fungsi Lambda berjalan saat dipicu oleh peristiwa Amazon S3, yang memfasilitasi pemuatan metrik ke Timestream.

1. Timestream terintegrasi sebagai sumber data dalam Grafana Terkelola Amazon tempat semua metrik khusus dari Amazon MWAA disimpan.

1. Pengguna dapat melakukan kueri data dan membuat dasbor khusus untuk memvisualisasikan indikator kinerja utama dan mendapatkan wawasan tentang orkestrasi alur kerja dalam Amazon MWAA.

## Alat
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-tools"></a>

**Layanan AWS**
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)membantu Anda mengelola akses masuk tunggal (SSO) secara terpusat ke semua aplikasi Anda Akun AWS dan cloud.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan. Dalam pola ini, AWS Lambda jalankan kode Python sebagai respons terhadap peristiwa Amazon S3 dan mengelola sumber daya komputasi secara otomatis.
+ [Grafana Terkelola Amazon](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html) adalah layanan visualisasi data terkelola sepenuhnya yang dapat Anda gunakan untuk menanyakan, mengkorelasikan, dan memvisualisasikan, serta memperingatkan metrik, log, dan jejak Anda. Pola ini menggunakan Grafana Terkelola Amazon untuk membuat dasbor visualisasi dan peringatan metrik.
+ [Amazon Managed Workflows for Apache Airflow (Amazon MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/what-is-mwaa.html)) adalah layanan orkestrasi terkelola untuk Apache Airflow yang dapat Anda gunakan untuk menyiapkan dan mengoperasikan pipeline data di cloud dalam skala besar. [Apache](https://airflow.apache.org/) Airflow adalah alat open source yang digunakan untuk secara terprogram menulis, menjadwalkan, dan memantau urutan proses dan tugas yang disebut sebagai alur kerja. Dalam pola ini, sampel DAGs dan ekstraktor metrik DAG digunakan di Amazon MWAA.
+ [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. Dalam pola ini, Amazon S3 digunakan untuk menyimpan DAGs, skrip, dan metrik khusus dalam format CSV.
+ [Amazon Timestream for LiveAnalytics](https://docs.aws.amazon.com/timestream/latest/developerguide/what-is-timestream.html) is adalah database deret waktu yang cepat, terukur, dikelola sepenuhnya, dan dibuat khusus yang memudahkan penyimpanan dan analisis triliunan titik data deret waktu per hari. Timestream for LiveAnalytics juga terintegrasi dengan layanan yang umum digunakan untuk pengumpulan data, visualisasi, dan pembelajaran mesin. Dalam pola ini, ini digunakan untuk menelan metrik kustom Amazon MWAA yang dihasilkan.

**Alat-alat lainnya**
+ [HashiCorp Terraform](https://www.terraform.io/docs) adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud. Pola ini menggunakan modul Terraform untuk mengotomatiskan penyediaan infrastruktur di. AWS

**Repositori kode**

Kode untuk pola ini tersedia GitHub di repositori [visualize-amazon-mwaa-custom-metrics-grafana](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana). `stacks/Infra`Folder berisi yang berikut:
+ File konfigurasi Terraform untuk semua sumber daya AWS 
+ Grafana dasbor file.json di folder `grafana`
+ Alur Kerja Terkelola Amazon untuk Apache DAGs Airflow di folder `mwaa/dags`
+ Kode Lambda untuk mengurai file.csv dan menyimpan metrik di database Timestream di folder `src`
+ Kebijakan IAM. File json di folder `templates`

## Praktik terbaik
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-best-practices"></a>

Terraform harus menyimpan status tentang infrastruktur dan konfigurasi terkelola Anda sehingga dapat memetakan sumber daya dunia nyata ke konfigurasi Anda. Secara default, Terraform menyimpan status secara lokal dalam file bernama. `terraform.tfstate` Sangat penting untuk memastikan keamanan dan integritas file status Terraform Anda karena file tersebut mempertahankan status infrastruktur Anda saat ini. Untuk informasi selengkapnya, lihat [Remote State](https://developer.hashicorp.com/terraform/language/state/remote) dalam dokumentasi Terraform. 

## Epik
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-epics"></a>

### Terapkan infrastruktur menggunakan Terraform
<a name="deploy-the-infrastructure-using-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan infrastruktur. | Untuk menerapkan infrastruktur solusi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

### Validasi sumber daya infrastruktur yang digunakan
<a name="validate-the-deployed-infrastructure-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi lingkungan Amazon MWAA. | Untuk memvalidasi lingkungan Amazon MWAA, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, Insinyur data | 
| Verifikasi jadwal DAG. | Untuk melihat setiap jadwal DAG, buka tab **Jadwal** di **UI Aliran Udara**.Masing-masing dari berikut ini DAGs memiliki jadwal pra-konfigurasi, yang berjalan di lingkungan Amazon MWAA dan menghasilkan metrik khusus: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Anda juga dapat melihat keberhasilan menjalankan setiap DAG di bawah kolom **Runs**.  | Insinyur data, AWS DevOps | 

### Konfigurasikan lingkungan Grafana yang Dikelola Amazon
<a name="configure-the-gra-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan akses ke ruang kerja Grafana Terkelola Amazon. | Skrip Terraform membuat ruang kerja, dasbor, dan metrik Grafana Terkelola Amazon yang diperlukan. Untuk mengonfigurasi akses sehingga Anda dapat melihatnya, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Instal plugin Amazon Timestream.  | Metrik kustom Amazon MWAA dimuat ke database Timestream. Anda menggunakan plugin Timestream untuk memvisualisasikan metrik dengan dasbor Grafana Terkelola Amazon.Untuk menginstal plugin Timestream, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Untuk informasi selengkapnya, lihat [Memperluas ruang kerja Anda dengan plugin](https://docs.aws.amazon.com/grafana/latest/userguide/grafana-plugins.html#manage-plugins) di dokumentasi Grafana Terkelola Amazon. | AWS DevOps, DevOps insinyur | 

### Visualisasikan metrik khusus di dasbor Grafana Terkelola Amazon
<a name="visualize-the-custom-metrics-in-the-gra-dashboard"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Lihat dasbor Grafana Terkelola Amazon. | Untuk melihat metrik yang dimasukkan ke dalam ruang kerja Grafana Terkelola Amazon, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Halaman metrik dasbor menampilkan informasi berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 
| Sesuaikan dasbor Grafana Terkelola Amazon. | Untuk menyesuaikan dasbor untuk penyempurnaan masa depan lebih lanjut, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html)Atau, kode sumber untuk dasbor ini tersedia dalam `dashboard.json` file di `stacks/infra/grafana` folder di [GitHub repositori](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana/blob/main/stacks/infra/grafana/dashboard.json). | AWS DevOps | 

### Bersihkan AWS sumber daya
<a name="clean-up-aws-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jeda Amazon MWAA DAG berjalan. | Untuk menjeda DAG berjalan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps, Insinyur data | 
| Hapus objek di bucket Amazon S3. | Untuk menghapus bucket Amazon S3 **mwaa-events-bucket-\$1 dan **mwaa-metrics-bucket-\$1****, ikuti petunjuk penggunaan konsol Amazon S3 di Menghapus [bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) di dokumentasi Amazon S3. | AWS DevOps | 
| Hancurkan sumber daya yang dibuat oleh Terraform. | Untuk menghancurkan sumber daya yang dibuat oleh Terraform dan file status Terraform lokal terkait, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics.html) | AWS DevOps | 

## Pemecahan masalah
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| `null_resource.plugin_mgmt (local-exec): aws: error: argument operation: Invalid choice, valid choices are:` | Tingkatkan versi Anda AWS CLI ke [versi terbaru](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | 
| Memuat sumber data kesalahan - `Fetch error: 404 Not Found Instantiating…` | Kesalahannya terputus-putus. Tunggu beberapa menit, lalu segarkan sumber data Anda untuk melihat sumber data Timestream yang terdaftar.  | 

## Sumber daya terkait
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-resources"></a>

**AWS dokumentasi**
+ [Grafana yang Dikelola Amazon untuk dasbor dan visualisasi](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/amg-dashboarding-visualization.html)
+ [Konfigurasikan Grafana Terkelola Amazon untuk menggunakan Okta](https://docs.aws.amazon.com/grafana/latest/userguide/AMG-SAML-providers-okta.html)
+ [Gunakan AWS IAM Identity Center dengan ruang kerja Grafana Terkelola Amazon Anda](https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG-SSO.html)
+ [Bekerja dengan DAGs di Amazon MWAA](https://docs.aws.amazon.com/mwaa/latest/userguide/working-dags.html)

**AWS video**
+ [Konfigurasikan Pusat Identitas IAM dengan Grafana Terkelola Amazon untuk otentikasi, seperti yang ditunjukkan dalam video berikut.](https://www.youtube.com/watch?v=XX2Xcz-Ps9U)




[https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U? kontrol=0](https://www.youtube-nocookie.com/embed/XX2Xcz-Ps9U?controls=0)
+ [Jika Pusat Identitas IAM tidak tersedia, Anda juga dapat mengintegrasikan autentikasi Grafana Terkelola Amazon dengan menggunakan penyedia Identitas eksternal (iDP) seperti Okta, seperti yang ditunjukkan dalam video berikut.](https://www.youtube.com/watch?v=Z4JHxl2xpOg)




[https://www.youtube-nocookie.com/embed/Z4 JHxl2xp Og? kontrol=0](https://www.youtube-nocookie.com/embed/Z4JHxl2xpOg?controls=0)

## Informasi tambahan
<a name="automate-ingestion-and-visualization-of-amazon-mwaa-custom-metrics-additional"></a>

Anda dapat membuat solusi pemantauan dan peringatan komprehensif untuk lingkungan Amazon MWAA Anda, memungkinkan manajemen proaktif dan respons cepat terhadap potensi masalah atau anomali. Grafana yang Dikelola Amazon mencakup kemampuan berikut:

**Peringatan** — Anda dapat mengonfigurasi lansiran di Grafana Terkelola Amazon berdasarkan ambang batas atau kondisi yang telah ditentukan sebelumnya. Siapkan notifikasi email untuk mengingatkan pemangku kepentingan terkait ketika metrik tertentu melebihi atau jatuh di bawah ambang batas yang ditentukan. Untuk informasi selengkapnya, lihat [Peringatan Grafana di dokumentasi Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/alerts-overview.html) Terkelola Amazon.

**Integrasi** — Anda dapat mengintegrasikan Grafana Terkelola Amazon dengan berbagai alat pihak ketiga seperti OpsGenie, PagerDuty, atau Slack untuk kemampuan notifikasi yang ditingkatkan. Misalnya, Anda dapat mengatur webhook atau mengintegrasikan dengan APIs untuk memicu insiden dan pemberitahuan di platform ini berdasarkan peringatan yang dihasilkan di Amazon Managed Grafana. Selain itu, pola ini menyediakan [GitHub repositori](https://github.com/aws-samples/visualize-amazon-mwaa-custom-metrics-grafana) untuk membuat AWS sumber daya. Anda dapat mengintegrasikan kode ini lebih lanjut dengan alur kerja penerapan infrastruktur Anda.

# Otomatiskan penerapan set tumpukan dengan menggunakan AWS dan AWS CodePipeline CodeBuild
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild"></a>

*Thiyagarajan Mani, Mihir Borkar, dan Raghu Gowda, Amazon Web Services*

## Ringkasan
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-summary"></a>

Dalam integrasi berkelanjutan dan pengiriman berkelanjutan Anda (CI/CD) processes, you might want to deploy applications automatically into all your existing AWS accounts and into new accounts that you add to your organization in AWS Organizations. When you architect a CI/CDsolusi untuk persyaratan ini, kemampuan [administrator set tumpukan AWS CloudFormation yang didelegasikan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) berguna karena memungkinkan lapisan keamanan dengan membatasi akses ke akun manajemen. Namun, AWS CodePipeline menggunakan model izin yang dikelola layanan untuk menyebarkan aplikasi ke beberapa akun dan Wilayah. Anda harus menggunakan akun manajemen AWS Organizations untuk menerapkan dengan kumpulan tumpukan, karena AWS CodePipeline tidak mendukung fitur administrator kumpulan tumpukan yang didelegasikan.

Pola ini menjelaskan bagaimana Anda dapat mengatasi batasan ini. Pola ini menggunakan AWS CodeBuild dan skrip khusus untuk mengotomatiskan penerapan set tumpukan dengan AWS. CodePipeline Ini mengotomatiskan aktivitas penyebaran aplikasi ini:
+ Menyebarkan aplikasi sebagai set tumpukan ke unit organisasi yang ada () OUs
+ Memperluas penyebaran aplikasi ke tambahan OUs dan Wilayah 
+ Menghapus aplikasi yang digunakan dari semua atau spesifik OUs atau Wilayah

## Prasyarat dan batasan
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-prereqs"></a>

**Prasyarat**

Sebelum Anda mengikuti langkah-langkah dalam pola ini:
+ Buat organisasi di akun manajemen AWS Organizations Anda. Untuk petunjuk, lihat [dokumentasi AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html).
+ Aktifkan akses tepercaya antara AWS Organizations dan CloudFormation untuk menggunakan izin yang dikelola layanan. Untuk petunjuk, lihat [Mengaktifkan akses tepercaya dengan AWS Organizations](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) dalam CloudFormation dokumentasi.

**Batasan**

Kode yang disertakan dengan pola ini memiliki batasan berikut: 
+ Anda hanya dapat menerapkan satu CloudFormation templat untuk aplikasi; beberapa penerapan templat saat ini tidak didukung.
+ Menyesuaikan implementasi saat ini membutuhkan DevOps keahlian.
+ Pola ini tidak menggunakan kunci AWS Key Management System (AWS KMS). Namun, Anda dapat mengaktifkan fungsi ini dengan mengkonfigurasi ulang CloudFormation template yang disertakan dengan pola ini.

## Arsitektur
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-architecture"></a>

![\[Arsitektur otomatisasi pipa CI/CD\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/2dbca422-7f32-4f9c-a4aa-1f95b484b772.png)


Arsitektur untuk pipeline CI/CD penerapan ini menangani hal berikut:
+ Membatasi akses langsung ke akun manajemen dengan mendelegasikan tanggung jawab penyebaran set tumpukan ke CI/CD akun khusus sebagai administrator set tumpukan untuk penerapan aplikasi.
+ Menggunakan model izin yang dikelola layanan untuk menyebarkan aplikasi secara otomatis setiap kali akun baru dibuat dan dipetakan di bawah OU.
+ Memastikan konsistensi versi aplikasi di semua akun di tingkat lingkungan.
+ Menggunakan beberapa tahap persetujuan di tingkat repositori dan pipa untuk menyediakan lapisan keamanan dan tata kelola tambahan untuk aplikasi yang digunakan.
+ Mengatasi batasan saat ini CodePipeline dengan menggunakan skrip penerapan yang dibuat khusus CodeBuild untuk menerapkan atau menghapus kumpulan tumpukan dan instance tumpukan secara otomatis. Untuk ilustrasi kontrol aliran dan hierarki panggilan API yang diterapkan oleh skrip kustom, lihat bagian [Informasi tambahan](#automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional).
+ Membuat set tumpukan individu untuk pengembangan, pengujian, dan lingkungan produksi. Selain itu, Anda dapat membuat kumpulan tumpukan yang menggabungkan beberapa OUs dan Wilayah di setiap tahap. Misalnya, Anda dapat menggabungkan sandbox dan pengembangan OUs dalam tahap penyebaran pengembangan.
+ Mendukung penerapan aplikasi ke, atau pengecualian dari, subset akun atau daftar. OUs

**Otomatisasi dan skala**

Anda dapat menggunakan kode yang disediakan dengan pola ini untuk membuat CodeCommit repositori AWS dan pipeline kode untuk aplikasi Anda. Anda kemudian dapat menerapkan ini sebagai set tumpukan ke beberapa akun di tingkat OU. Kode ini juga mengotomatiskan komponen seperti topik Amazon Simple Notification Service (Amazon SNS) untuk memberi tahu pemberi persetujuan, peran AWS Identity and Access Management (IAM) yang diperlukan, dan kebijakan kontrol layanan (SCP) untuk diterapkan di akun manajemen.

## Alat
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-tools"></a>

**Layanan AWS**
+ [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.
+ [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 CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) mengotomatiskan penerapan ke Amazon Elastic Compute Cloud (Amazon EC2) atau instans lokal, fungsi AWS Lambda, atau layanan Amazon Elastic Container Service (Amazon ECS).
+ [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 Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) adalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [automated-code-pipeline-stackset-deployment](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment). Untuk struktur folder dan detail lainnya, lihat [file readme](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment/blob/main/README.md) untuk repositori.

## Praktik terbaik
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-best-practices"></a>

Pola ini membatasi akses langsung ke akun manajemen saat menerapkan aplikasi di tingkat OU. Menambahkan beberapa tahapan persetujuan ke proses pipeline dan repositori membantu memberikan keamanan dan tata kelola tambahan untuk aplikasi dan komponen yang Anda terapkan dengan menggunakan pendekatan ini.

## Epik
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-epics"></a>

### Konfigurasikan akun di AWS Organizations
<a name="configure-accounts-in-aws-organizations"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan semua fitur di akun manajemen. | Aktifkan semua fitur di akun manajemen untuk organisasi Anda dengan mengikuti petunjuk dalam [dokumentasi AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html). | Administrator AWS, Administrator platform | 
| Buat CI/CD akun. | Di AWS Organizations, di organisasi Anda, buat CI/CD akun khusus, dan tetapkan tim untuk memiliki dan mengontrol akses ke akun. | Administrator AWS | 
| Tambahkan administrator yang didelegasikan. | Di akun manajemen, daftarkan CI/CD akun yang Anda buat di langkah sebelumnya sebagai administrator kumpulan tumpukan yang didelegasikan. Untuk petunjuk, lihat [ CloudFormation dokumentasi AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html). | Administrator AWS, Administrator platform | 

### Buat repositori aplikasi dan pipeline CI/CD
<a name="create-an-application-repository-and-ci-cd-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori kode. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Buat topik SNS. | Anda dapat menggunakan `sns-template.yaml` template yang disediakan di GitHub repositori untuk membuat topik SNS dan mengonfigurasi langganan untuk permintaan persetujuan.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Buat peran IAM untuk CI/CD komponen. | Anda dapat menggunakan `cicd-role-template.yaml` template yang disediakan di GitHub repositori untuk membuat peran dan kebijakan IAM yang diperlukan oleh komponen. CI/CD [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 
| Buat CodeCommit repositori dan pipeline kode untuk aplikasi Anda. | Anda dapat menggunakan `cicd-pipeline-template.yaml` template yang disediakan di GitHub repositori untuk membuat CodeCommit repositori dan pipeline kode untuk aplikasi Anda.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | AWS DevOps | 

### Menyebarkan set tumpukan
<a name="deploy-a-stack-set"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori aplikasi. | Template CI/CD pipeline yang Anda gunakan sebelumnya membuat contoh repositori aplikasi dan pipeline kode. Untuk mengkloning dan memverifikasi repositori:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Pengembang aplikasi, Insinyur data | 
| Tambahkan artefak aplikasi. | Perbarui repositori aplikasi dengan menggunakan template. CloudFormation Solusi ini mendukung penyebaran hanya satu CloudFormation template.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Pengembang aplikasi, Insinyur data | 
| Perbarui file konfigurasi penyebaran. | Perbarui `deployment_config.json` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html)Pola ini membuat kumpulan tumpukan individual untuk setiap lingkungan dengan menambahkan nama lingkungan ke nama set tumpukan yang Anda berikan dalam file konfigurasi penerapan. | Pengembang aplikasi, Insinyur data | 
| Komit perubahan dan terapkan set tumpukan. | Komit perubahan yang Anda tentukan dalam template aplikasi Anda, dan gabungkan serta terapkan kumpulan tumpukan ke beberapa lingkungan tahap demi tahap:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild.html) | Pengembang aplikasi, Insinyur data | 

## Pemecahan masalah
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penerapan gagal dengan pengecualian:*Ubah Nama file Parameter Template sebagai -parameter- .json dengan, nama default tidak diperbolehkan* <application name><evn> | File parameter CloudFormation template harus mengikuti konvensi penamaan yang ditentukan. Perbarui nama file parameter dan coba lagi. | 
| Penerapan gagal dengan pengecualian:*Mengubah Nama CloudFormation Template sebagai.yl, default template.yml/template.yaml tidak diperbolehkan* <application name> | Nama CloudFormation template harus mengikuti konvensi penamaan yang ditentukan. Perbarui nama file dan coba lagi. | 
| Penerapan gagal dengan pengecualian:*Tidak ada CloudFormation Template yang valid dan File Parameternya yang ditemukan untuk lingkungan \$1nama lingkungan\$1* | Periksa konvensi penamaan file untuk CloudFormation templat dan file parameternya untuk lingkungan yang ditentukan. | 
| Penerapan gagal dengan pengecualian:*Tindakan penerapan tidak valid yang disediakan dalam file konfigurasi penerapan. Opsi yang valid adalah 'menyebarkan' dan 'hapus'.* | Anda menetapkan nilai yang tidak valid untuk `deployment_action` parameter dalam file konfigurasi deployment. Parameter memiliki dua nilai yang valid: `deploy` dan`delete`. Gunakan `deploy` untuk membuat dan memperbarui kumpulan tumpukan dan instance tumpukan terkait. Gunakan `delete` hanya ketika Anda ingin menghapus seluruh kumpulan tumpukan dan instance tumpukan terkait. | 

## Sumber daya terkait
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-resources"></a>
+ GitHub [automated-code-pipeline-stackset-repositori penyebaran](https://github.com/aws-samples/automated-code-pipeline-stackset-deployment)
+ [Mengaktifkan semua fitur di organisasi Anda](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) (dokumentasi AWS Organizations)
+ [Daftarkan administrator yang didelegasikan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) ( CloudFormation dokumentasi AWS)
+ [Target tingkat akun untuk Set Stack yang dikelola layanan (dokumentasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/account-level-targets.html) CloudFormation AWS)

## Informasi tambahan
<a name="automate-stack-set-deployment-by-using-aws-codepipeline-and-aws-codebuild-additional"></a>

**Diagram alir**

Diagram alir berikut menggambarkan kontrol aliran dan hierarki panggilan API yang diimplementasikan oleh skrip khusus untuk mengotomatiskan penerapan set tumpukan.

![\[Kontrol aliran dan panggilan API diimplementasikan oleh skrip Python\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a5c47de7-9039-415d-a9e5-9de0d4c3a260/images/1898883a-62b7-40c2-8f08-9f2a9dda8404.png)


**Contoh file konfigurasi penyebaran**

**Membuat set tumpukan baru**

File konfigurasi penerapan berikut membuat kumpulan tumpukan baru yang disebut `sample-stack-set` di Wilayah AWS `us-east-1` dalam tiga OUs.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Menyebarkan tumpukan yang ada disetel ke OU lain**

Jika Anda menerapkan konfigurasi yang ditunjukkan pada contoh sebelumnya dan Anda ingin menerapkan kumpulan tumpukan ke OU tambahan yang dipanggil `dev-org-unit-2` di lingkungan pengembangan, file konfigurasi penerapan mungkin terlihat seperti berikut.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Menerapkan tumpukan yang ada yang disetel ke Wilayah AWS lain**

Jika Anda menerapkan konfigurasi yang ditunjukkan pada contoh sebelumnya dan Anda ingin menerapkan kumpulan tumpukan ke AWS Region (`us-east-2`) tambahan di lingkungan pengembangan untuk dua OUs (`dev-org-unit-1`dan`dev-org-unit-2`), file konfigurasi penerapan mungkin terlihat seperti berikut. 

**catatan**  
Sumber daya dalam CloudFormation template harus valid dan spesifik Wilayah.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Menghapus instans tumpukan dari Wilayah OU atau AWS**

Katakanlah konfigurasi penerapan yang ditunjukkan pada contoh sebelumnya telah diterapkan. File konfigurasi berikut menghapus instance tumpukan dari kedua Wilayah OU`dev-org-unit-2`.

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"],
                                        "regions": ["us-east-1", "us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"],
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

File konfigurasi berikut menghapus instance tumpukan dari Wilayah AWS `us-east-1` untuk keduanya OUs di lingkungan pengembangan.    

```
{
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Menghapus seluruh set tumpukan**

File konfigurasi penerapan berikut menghapus seluruh kumpulan tumpukan dan semua instance tumpukan terkait.

```
{
     "deployment_action": "delete",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1", "dev-org-unit-2"], 
                                        "regions": ["us-east-2"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

****Mengecualikan akun dari penerapan**

 File konfigurasi penyebaran berikut mengecualikan akun`111122223333`, yang merupakan bagian dari OU`dev-org-unit-1`, dari penerapan.

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333"],
                                        "filter_type": "DIFFERENCE"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

**Menyebarkan aplikasi ke subset akun di OU**

File konfigurasi deployment berikut menyebarkan aplikasi ke hanya tiga akun (`111122223333`,`444455556666`, dan`777788889999`) di OU. `dev-org-unit-1`

```
 {
     "deployment_action": "deploy",
     "stack_set_name": "sample-stack-set",
     "stack_set_desciption": "this is a sample stack set",
    "deployment_targets": {
                            "dev": {
                                        "org_units": ["dev-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": ["111122223333", "444455556666", "777788889999"],
                                        "filter_type": "INTERSECTION"
                                    },
                            "test": {
                                        "org_units": ["test-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    },                            
                            "prod": {
                                        "org_units": ["prod-org-unit-1"], 
                                        "regions": ["us-east-1"],
                                        "filter_accounts": [],
                                        "filter_type": ""
                                    }                            
                          },
     "cft_capabilities": ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM"],
     "auto_deployement": "True",
     "retain_stacks_on_account_removal": "True",
     "region_deployment_concurrency": "PARALLEL"
 }
```

# Secara otomatis melampirkan kebijakan terkelola AWS untuk Systems Manager ke profil EC2 instans menggunakan Cloud Custodian dan AWS CDK
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk"></a>

*Ali Asfour dan Aaron Lennon, Amazon Web Services*

## Ringkasan
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-summary"></a>

Anda dapat mengintegrasikan instans Amazon Elastic Compute Cloud (Amazon EC2) dengan AWS Systems Manager untuk mengotomatiskan tugas operasional serta memberikan lebih banyak visibilitas dan kontrol. Untuk berintegrasi dengan Systems Manager, EC2 instans harus memiliki Agen [AWS Systems Manager (Agen SSM)](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) yang diinstal dan kebijakan `AmazonSSMManagedInstanceCore` AWS Identity and Access Management (IAM) yang terpasang pada profil instans mereka. 

Namun, jika Anda ingin memastikan bahwa semua profil EC2 instans memiliki `AmazonSSMManagedInstanceCore` kebijakan yang dilampirkan, Anda dapat menghadapi tantangan dalam memperbarui EC2 instans baru yang tidak memiliki profil EC2 instans atau instance yang memiliki profil instans tetapi tidak memiliki kebijakan. `AmazonSSMManagedInstanceCore` Mungkin juga sulit untuk menambahkan kebijakan ini di beberapa akun Amazon Web Services (AWS) dan Wilayah AWS.

Pola ini membantu mengatasi tantangan ini dengan menerapkan tiga kebijakan [Cloud Custodian](https://cloudcustodian.io/) di akun AWS Anda:
+ Kebijakan Cloud Custodian pertama memeriksa EC2 instans yang ada yang memiliki profil instans tetapi tidak memiliki kebijakan. `AmazonSSMManagedInstanceCore` `AmazonSSMManagedInstanceCore`Kebijakan tersebut kemudian dilampirkan. 
+ Kebijakan Cloud Custodian kedua memeriksa instans yang ada tanpa profil EC2 instans dan menambahkan profil instans default yang memiliki kebijakan yang dilampirkan. `AmazonSSMManagedInstanceCore`
+ Kebijakan Cloud Custodian ketiga membuat fungsi [AWS Lambda](https://cloudcustodian.io/docs/aws/lambda.html) di akun Anda untuk memantau pembuatan EC2 instans dan profil instans. Ini memastikan bahwa `AmazonSSMManagedInstanceCore` kebijakan dilampirkan secara otomatis saat EC2 instance dibuat.

Pola ini menggunakan DevOps alat [AWS](https://aws.amazon.com/devops/) untuk mencapai penerapan kebijakan Cloud Custodian yang berkelanjutan dan berskala besar ke lingkungan multi-akun, tanpa menyediakan lingkungan komputasi terpisah. 

## Prasyarat dan batasan
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-prereqs"></a>

**Prasyarat**
+ Dua atau lebih akun AWS aktif. Satu akun adalah *akun keamanan* dan yang lainnya adalah *akun anggota*.
+ Izin untuk menyediakan sumber daya AWS di akun keamanan. Pola ini menggunakan [izin administrator](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), tetapi Anda harus memberikan izin sesuai dengan persyaratan dan kebijakan organisasi Anda.
+ Kemampuan untuk mengambil peran IAM dari akun keamanan ke akun anggota dan membuat peran IAM yang diperlukan. Untuk informasi selengkapnya tentang hal ini, lihat [Mendelegasikan akses di seluruh akun AWS menggunakan peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) dalam dokumentasi IAM.
+ 
**penting**  
AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi. Untuk tujuan pengujian, Anda dapat mengonfigurasi AWS CLI dengan menggunakan `aws configure` perintah atau menyetel variabel lingkungan. : Ini tidak disarankan untuk lingkungan produksi dan kami menyarankan agar akun ini hanya diberikan akses hak istimewa paling sedikit. Untuk informasi lebih lanjut tentang ini, lihat [Berikan hak istimewa paling sedikit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dalam dokumentasi IAM.
+ `devops-cdk-cloudcustodian.zip`File (terlampir), diunduh ke komputer lokal Anda.
+ Keakraban dengan Python.
+ Alat yang diperlukan (Node.js, AWS Cloud Development Kit (AWS CDK), dan Git), diinstal dan dikonfigurasi. Anda dapat menggunakan `install-prerequisites.sh` file dalam `devops-cdk-cloudcustodian.zip` file untuk**** menginstal alat-alat ini. ****Pastikan Anda menjalankan file ini dengan hak akses root. 

**Batasan**
+ Meskipun pola ini dapat digunakan dalam lingkungan produksi, pastikan bahwa semua peran dan kebijakan IAM memenuhi persyaratan dan kebijakan organisasi Anda. 

**Versi Package**
+ Cloud Custodian versi 0.9 atau yang lebih baru
+ TypeScript versi 3.9.7 atau yang lebih baru
+ Node.js versi 14.15.4 atau yang lebih baru
+ `npm`versi 7.6.1 atau yang lebih baru
+ AWS CDK versi 1.96.0 atau yang lebih baru

## Arsitektur
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-architecture"></a>

![\[AWS CodePipeline workflow with CodeCommit, CodeBuild, and deployment to member accounts.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/169a7bde-789e-4ebd-b4ca-80eb28ac9927/images/8ec0b6b4-d4b0-42e5-833d-24d1e6098fd9.png)


 

Diagram menunjukkan alur kerja berikut:

1. Kebijakan Cloud Custodian didorong ke CodeCommit repositori AWS di akun keamanan. Aturan CloudWatch Acara Amazon secara otomatis memulai CodePipeline pipeline AWS.

1. Pipeline mengambil kode terbaru dari CodeCommit dan mengirimkannya ke bagian integrasi berkelanjutan dari pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang ditangani oleh AWS. CodeBuild

1. CodeBuild melakukan DevSecOps tindakan lengkap, termasuk validasi sintaks kebijakan pada kebijakan Cloud Custodian, dan menjalankan kebijakan ini dalam `--dryrun` mode untuk memeriksa sumber daya mana yang diidentifikasi.

1. Jika tidak ada kesalahan, tugas berikutnya memberi tahu administrator untuk meninjau perubahan dan menyetujui penyebaran ke akun anggota.

**Tumpukan teknologi**
+ AWS CDK
+ CodeBuild
+ CodeCommit
+ CodePipeline
+ IAM
+ Penjaga Awan 

**Otomatisasi dan skala**

Modul pipeline AWS CDK menyediakan CI/CD pipeline yang digunakan CodePipeline untuk mengatur pembuatan dan pengujian kode sumber CodeBuild, selain penerapan sumber daya AWS dengan tumpukan AWS. CloudFormation Anda dapat menggunakan pola ini untuk semua akun anggota dan Wilayah di organisasi Anda. Anda juga dapat memperluas `Roles creation` tumpukan untuk menerapkan peran IAM lainnya di akun anggota Anda. 

## Alat
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) adalah kerangka kerja pengembangan perangkat lunak untuk mendefinisikan infrastruktur cloud dalam kode dan menyediakannya melalui AWS. CloudFormation
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan layanan AWS menggunakan perintah di shell baris perintah Anda.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) adalah layanan build yang dikelola sepenuhnya di cloud.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) adalah layanan kontrol versi yang dapat Anda gunakan untuk menyimpan dan mengelola aset secara pribadi.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) adalah layanan pengiriman berkelanjutan yang dapat Anda gunakan untuk memodelkan, memvisualisasikan, dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perangkat lunak Anda.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) adalah layanan web yang membantu Anda mengontrol akses ke sumber daya AWS dengan aman.
+ [Cloud Custodian](https://cloudcustodian.io/) adalah alat yang menyatukan lusinan alat dan skrip yang digunakan sebagian besar organisasi untuk mengelola akun cloud publik mereka menjadi satu alat sumber terbuka.
+ [Node.js](https://nodejs.org/en/) adalah JavaScript runtime yang dibangun di mesin V8 JavaScript Google Chrome.

**Kode**

Untuk daftar rinci modul, fungsi akun, file, dan perintah penerapan yang digunakan dalam pola ini, lihat `README` file dalam `devops-cdk-cloudcustodian.zip` file (terlampir).

## Epik
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-epics"></a>

### Siapkan pipeline dengan AWS CDK
<a name="set-up-the-pipeline-with-aws-cdk"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan CodeCommit repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Untuk informasi selengkapnya tentang ini, lihat [Membuat CodeCommit repositori di dokumentasi](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html) CodeCommit AWS. | Developer | 
| Instal alat yang diperlukan. | Gunakan `install-prerequisites.sh` file untuk menginstal semua alat yang diperlukan di Amazon Linux. Ini tidak termasuk AWS CLI karena sudah diinstal sebelumnya.Untuk informasi selengkapnya tentang ini, lihat bagian [Prasyarat](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html#getting_started_prerequisites) [Memulai AWS CDK dalam dokumentasi AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html). | Developer | 
| Instal paket AWS CDK yang diperlukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html)Paket-paket berikut diperlukan oleh AWS CDK dan disertakan dalam `requirements.txt` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 

### Konfigurasikan lingkungan Anda
<a name="configure-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui variabel yang diperlukan. | Buka `vars.py` file di folder root CodeCommit repositori Anda dan perbarui variabel berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk.html) | Developer | 
| Perbarui file account.ymldengan informasi akun anggota. | Untuk menjalankan alat [Cloud Custodian c7n-org](https://cloudcustodian.io/docs/tools/c7n-org.html) terhadap beberapa akun, Anda harus menempatkan file `accounts.yml` konfigurasi di root repositori. Berikut ini adalah contoh file konfigurasi Cloud Custodian untuk AWS:<pre>accounts:<br />- account_id: '123123123123'<br />  name: account-1<br />  regions:<br />  - us-east-1<br />  - us-west-2<br />  role: arn:aws:iam::123123123123:role/CloudCustodian<br />  vars:<br />    charge_code: xyz<br />  tags:<br />  - type:prod<br />  - division:some division<br />  - partition:us<br />  - scope:pci</pre> | Developer | 

### Bootstrap akun AWS
<a name="bootstrap-the-aws-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Boostrap akun keamanan. | Bootstrap `deploy_account` dengan `cloudcustodian_stack` aplikasi dengan menjalankan perintah berikut:<pre>cdk bootstrap -a 'python3 <br />cloudcustodian/cloudcustodian_stack.py</pre> | Developer | 
| Opsi 1 - Secara otomatis bootstrap akun anggota. | Jika `cdk_bootstrap_member_accounts` variabel diatur ke `True` dalam `vars.py` file, akun yang ditentukan dalam `member_accounts` variabel secara otomatis di-bootstrap oleh pipeline.Jika diperlukan, Anda dapat memperbarui `*cdk_bootstrap_role*` dengan peran IAM yang dapat Anda asumsikan dari akun keamanan dan yang memiliki izin yang diperlukan untuk mem-bootstrap AWS CDK.Akun baru yang ditambahkan ke `member_accounts ` variabel secara otomatis di-bootstrap oleh pipeline sehingga peran yang diperlukan dapat digunakan. | Developer | 
| Opsi 2 - Bootstrap akun anggota secara manual.  | Meskipun kami tidak menyarankan menggunakan pendekatan ini, Anda dapat mengatur nilai `cdk_bootstrap_member_accounts` to `False` dan melakukan langkah ini secara manual dengan menjalankan perintah berikut:<pre>$ cdk bootstrap -a 'python3 cloudcustodian/member_account_roles_stack.py' \<br /><br />--trust {security_account_id} \<br /><br />--context assume-role-credentials:writeIamRoleName={role_name} \<br /><br />--context assume-role-credentials:readIamRoleName={role_name} \<br /><br />--mode=ForWriting \<br /><br />--context bootstrap=true \<br /><br />--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess</pre>Pastikan Anda memperbarui `{security_account_id}` dan `{role_name}` nilai dengan nama peran IAM yang dapat Anda asumsikan dari akun keamanan dan yang memiliki izin yang diperlukan untuk mem-bootstrap AWS CDK.Anda juga dapat menggunakan pendekatan lain untuk mem-bootstrap akun anggota, misalnya, dengan AWS CloudFormation. Untuk informasi selengkapnya tentang ini, lihat [Bootstrapping di dokumentasi](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) AWS CDK. | Developer | 

### Menerapkan tumpukan AWS CDK
<a name="deploy-the-aws-cdk-stacks"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran IAM di akun anggota. | Jalankan perintah berikut untuk menyebarkan `member_account_roles_stack` tumpukan dan membuat peran IAM di akun anggota:<pre>cdk deploy --all -a 'python3 cloudcustodian/member_account_roles_stack.py' --require-approval never</pre> | Developer | 
| Terapkan tumpukan pipeline Cloud Custodian. | Jalankan perintah berikut untuk membuat `cloudcustodian_stack.py` pipeline Cloud Custodian yang disebarkan ke akun keamanan:<pre>cdk deploy -a 'python3 cloudcustodian/cloudcustodian_stack.py'</pre> | Developer | 

## Sumber daya terkait
<a name="automatically-attach-an-aws-managed-policy-for-systems-manager-to-ec2-instance-profiles-using-cloud-custodian-and-aws-cdk-resources"></a>
+ [Memulai dengan AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)

## Lampiran
<a name="attachments-169a7bde-789e-4ebd-b4ca-80eb28ac9927"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/169a7bde-789e-4ebd-b4ca-80eb28ac9927/attachments/attachment.zip)

# Membuat CI/CD pipeline dan kluster Amazon ECS secara otomatis untuk layanan mikro menggunakan AWS CDK
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk"></a>

*Varsha Raju, Amazon Web Services*

## Ringkasan
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-summary"></a>

Pola ini menjelaskan cara membuat integrasi berkelanjutan dan pengiriman berkelanjutan secara otomatis (CI/CD) pipelines and underlying infrastructure for building and deploying microservices on Amazon Elastic Container Service (Amazon ECS). You can use this approach if you want to set up proof-of-concept CI/CD pipelines to show your organization the benefits of CI/CD, microservices, and DevOps. You can also use this approach to create initial CI/CDpipeline yang kemudian dapat Anda sesuaikan atau ubah sesuai dengan kebutuhan organisasi Anda. 

Pendekatan pola menciptakan lingkungan produksi dan lingkungan non-produksi yang masing-masing memiliki virtual private cloud (VPC) dan cluster Amazon ECS yang dikonfigurasi untuk berjalan di dua Availability Zone. Lingkungan ini dibagi oleh semua layanan mikro Anda dan Anda kemudian membuat CI/CD pipeline untuk setiap layanan mikro. CI/CD Pipeline ini menarik perubahan dari repositori sumber di AWS CodeCommit, membuat perubahan secara otomatis, lalu menerapkannya ke lingkungan produksi dan non-produksi Anda. Ketika pipa berhasil menyelesaikan semua tahapannya, Anda dapat menggunakannya URLs untuk mengakses layanan mikro di lingkungan produksi dan non-produksi.

## Prasyarat dan batasan
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-prereqs"></a>

**Prasyarat**
+ Akun Amazon Web Services (AWS) yang aktif.
+ Bucket Amazon Simple Storage Service (Amazon S3) yang sudah ada yang berisi file (`starter-code.zip`terlampir).
+ AWS Cloud Development Kit (AWS CDK), diinstal dan dikonfigurasi di akun Anda. Untuk informasi selengkapnya tentang ini, lihat [Memulai AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dalam dokumentasi AWS CDK.
+ Python 3 dan`pip`, diinstal dan dikonfigurasi. Untuk informasi lebih lanjut tentang ini, lihat dokumentasi [Python](https://www.python.org/).
+ Keakraban dengan AWS CDK, AWS CodeBuild, CodePipeline AWS, CodeCommit Amazon Elastic Container Registry (Amazon ECR), Amazon ECS, dan AWS Fargate.
+ Keakraban dengan Docker.
+ Pemahaman tentang CI/CD dan DevOps.

**Batasan**
+ Batas akun AWS umum berlaku. Untuk informasi selengkapnya tentang hal ini, lihat [kuota layanan AWS](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) di dokumentasi AWS General Reference.

**Versi produk**
+ Kode diuji menggunakan Node.js versi 16.13.0 dan AWS CDK versi 1.132.0.

## Arsitektur
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-architecture"></a>

![\[AWS Cloud architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/05ac2cad-408e-433f-8150-0a2b71f63cfd/images/6fa3dbef-88de-4b3f-ae41-dfa90256a058.png)


Diagram menunjukkan alur kerja berikut:

1. Pengembang aplikasi melakukan kode ke CodeCommit repositori.

1. Sebuah pipa dimulai.

1. CodeBuild membangun dan mendorong image Docker ke repositori Amazon ECR

1. CodePipeline menyebarkan gambar baru ke layanan Fargate yang ada di kluster Amazon ECS non-produksi.

1. Amazon ECS menarik gambar dari repositori Amazon ECR ke layanan Fargate non-produksi.

1. Pengujian dilakukan dengan menggunakan URL non-produksi.

1. Manajer rilis menyetujui penerapan produksi.

1. CodePipeline menyebarkan gambar baru ke layanan Fargate yang ada di cluster Amazon ECS produksi

1. Amazon ECS menarik gambar dari repositori Amazon ECR ke dalam layanan Fargate produksi.

1. Pengguna produksi mengakses fitur Anda dengan menggunakan URL produksi.

**Tumpukan teknologi**
+ AWS CDK
+ CodeBuild
+ CodeCommit 
+ CodePipeline
+ Amazon ECR 
+ Amazon ECS 
+ Amazon VPC

**Otomatisasi dan skala**

Anda dapat menggunakan pendekatan pola ini untuk membuat pipeline untuk layanan mikro yang diterapkan di tumpukan AWS bersama. CloudFormation Otomatisasi dapat membuat lebih dari satu cluster Amazon ECS di setiap VPC dan juga membuat pipeline untuk layanan mikro yang digunakan di cluster Amazon ECS bersama. Namun, ini mengharuskan Anda memberikan informasi sumber daya baru sebagai input ke tumpukan pipeline.

## Alat
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-tools"></a>
+ [AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/home.html) — AWS Cloud Development Kit (AWS CDK) adalah kerangka kerja pengembangan perangkat lunak untuk mendefinisikan infrastruktur cloud dalam kode dan menyediakannya melalui AWS. CloudFormation
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) — AWS CodeBuild adalah layanan build yang dikelola sepenuhnya di cloud. CodeBuild mengkompilasi kode sumber Anda, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) — AWS CodeCommit adalah layanan kontrol versi yang memungkinkan Anda menyimpan dan mengelola repositori Git secara pribadi di AWS Cloud. CodeCommit menghilangkan kebutuhan bagi Anda untuk mengelola sistem kontrol sumber Anda sendiri atau khawatir tentang penskalaan infrastrukturnya.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) — AWS CodePipeline adalah layanan pengiriman berkelanjutan yang dapat Anda gunakan untuk memodelkan, memvisualisasikan, dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perangkat lunak Anda. Anda dapat dengan cepat memodelkan dan mengonfigurasi berbagai tahapan proses rilis perangkat lunak. CodePipeline mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak Anda secara terus menerus.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) adalah layanan manajemen kontainer yang sangat skalabel dan cepat yang digunakan untuk menjalankan, menghentikan, dan mengelola kontainer di cluster. Anda dapat menjalankan tugas dan layanan Anda pada infrastruktur tanpa server yang dikelola oleh AWS Fargate. Sebagai alternatif, untuk kontrol lebih lanjut atas infrastruktur, Anda dapat menjalankan tugas dan layanan di klaster instans Amazon Elastic Compute Cloud (Amazon EC2) yang dikelola.
+ [Docker](https://www.docker.com/) — Docker membantu pengembang untuk mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.

**Kode**

Kode untuk pola ini tersedia di `starter-code.zip` file `cicdstarter.zip` dan (terlampir).

## Epik
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-epics"></a>

### Siapkan lingkungan Anda
<a name="set-up-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan direktori kerja untuk AWS CDK.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruktur Cloud | 

### Buat infrastruktur bersama
<a name="create-the-shared-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat infrastruktur bersama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruktur Cloud | 
| Pantau CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruktur Cloud | 
| Uji CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Pastikan Anda merekam IDs untuk keduanya VPCs dan grup keamanan IDs untuk grup keamanan default di keduanya VPCs. | AWS DevOps, infrastruktur Cloud | 

### Buat CI/CD pipeline untuk microservice
<a name="create-a-ci-cd-pipeline-for-a-microservice"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat infrastruktur untuk layanan mikro. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html)Anda juga dapat memberikan nilai untuk kedua perintah dengan menggunakan `cdk.json` file di direktori. | AWS DevOps, infrastruktur Cloud | 
| Pantau CloudFormation tumpukan AWS. | Buka CloudFormation konsol AWS dan pantau kemajuan `myservice1-cicd-stack` tumpukan. Akhirnya, status berubah menjadi `CREATE_COMPLETE`*.* | AWS DevOps, infrastruktur Cloud | 
| Uji CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) |  | 
| Gunakan pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.html) | AWS DevOps, infrastruktur Cloud | 
| Ulangi epik ini untuk setiap layanan mikro. | Ulangi tugas dalam epik ini untuk membuat CI/CD pipeline untuk setiap layanan mikro Anda. | AWS DevOps, infrastruktur Cloud | 

## Sumber daya terkait
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-resources"></a>
+ [Menggunakan Python dengan AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-python.html) 
+ [Referensi AWS CDK Python](https://docs.aws.amazon.com/cdk/api/latest/python/index.html)
+ [Membuat layanan AWS Fargate menggunakan AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/ecs_example.html)

## Informasi tambahan
<a name="automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk-additional"></a>

**Perintah `cdk synth`**

```
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
```

**`cdk deploy `perintah**

```
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice> 
```

## Lampiran
<a name="attachments-05ac2cad-408e-433f-8150-0a2b71f63cfd"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/05ac2cad-408e-433f-8150-0a2b71f63cfd/attachments/attachment.zip)

# Buat dan dorong gambar Docker ke Amazon ECR menggunakan GitHub Actions dan Terraform
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Ringkasan
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Pola ini menjelaskan bagaimana Anda dapat membuat GitHub alur kerja yang dapat digunakan kembali untuk membangun Dockerfile Anda dan mendorong gambar yang dihasilkan ke Amazon Elastic Container Registry (Amazon ECR). Pola mengotomatiskan proses pembuatan Dockerfiles Anda dengan menggunakan Terraform dan Actions. GitHub Ini meminimalkan kemungkinan kesalahan manusia dan secara substansional mengurangi waktu penyebaran.

Tindakan GitHub push ke cabang utama GitHub repositori Anda memulai penyebaran sumber daya. Alur kerja membuat repositori Amazon ECR unik berdasarkan kombinasi nama GitHub organisasi dan repositori. Kemudian mendorong gambar Dockerfile ke repositori Amazon ECR.

## Prasyarat dan batasan
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+  GitHub Akun aktif.
+ Sebuah [GitHub repositori](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ Terraform versi 1 atau yang lebih baru [diinstal dan](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) dikonfigurasi.
+ [Bucket Amazon Simple Storage Service (Amazon S3) untuk backend Terraform.](https://developer.hashicorp.com/terraform/language/settings/backends/s3)
+ Tabel [Amazon DynamoDB](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) untuk penguncian dan konsistensi status Terraform. Tabel harus memiliki kunci partisi bernama `LockID` dengan tipe`String`. Jika ini tidak dikonfigurasi, penguncian status akan dinonaktifkan.
+ Peran AWS Identity and Access Management (IAM) yang memiliki izin untuk menyiapkan backend Amazon S3 untuk Terraform. Untuk petunjuk konfigurasi, lihat dokumentasi [Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration).

**Keterbatasan**

Kode yang dapat digunakan kembali ini telah diuji hanya dengan GitHub Tindakan.

## Arsitektur
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Tumpukan teknologi target**
+ Repositori Amazon ECR
+ GitHub Tindakan
+ Terraform

**Arsitektur target**

![\[Alur kerja untuk membuat GitHub alur kerja yang dapat digunakan kembali untuk membangun Dockerfile dan mendorong gambar ke Amazon ECR.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


Diagram ini menggambarkan hal sebagai berikut:

1. Seorang pengguna menambahkan template Dockerfile dan Terraform ke repositori. GitHub 

2. Penambahan ini memulai alur kerja GitHub Actions.

3. Alur kerja memeriksa apakah ada repositori Amazon ECR. Jika tidak, itu membuat repositori berdasarkan nama GitHub organisasi dan repositori.

4. Alur kerja membangun Dockerfile dan mendorong gambar ke repositori Amazon ECR.

## Alat
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Layanan Amazon**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri kontainer terkelola yang aman, terukur, dan andal.

**Alat-alat lainnya**
+ [GitHub Tindakan](https://docs.github.com/en/actions) diintegrasikan ke dalam GitHub platform untuk membantu Anda membuat, berbagi, dan menjalankan alur kerja dalam GitHub repositori Anda. Anda dapat menggunakan GitHub Tindakan untuk mengotomatiskan tugas seperti membangun, menguji, dan menerapkan kode Anda.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola infrastruktur cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di repositori Alur [Kerja Tindakan ECR GitHub Docker](https://github.com/aws-samples/docker-ecr-actions-workflow).
+ Saat Anda membuat GitHub Actions, file alur kerja Docker disimpan di `/.github/workflows/` folder repositori ini. Alur kerja untuk solusi ini ada di file [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ `e2e-test`Folder menyediakan contoh Dockerfile untuk referensi dan pengujian.

## Praktik terbaik
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ Untuk praktik terbaik dalam menulis Dockerfiles, lihat dokumentasi [Docker](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/).
+ Gunakan titik [akhir VPC untuk Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) ECR. Titik akhir VPC didukung oleh AWS PrivateLink, teknologi yang memungkinkan Anda mengakses Amazon APIs ECR secara pribadi melalui alamat IP pribadi. Untuk tugas Amazon ECS yang menggunakan tipe peluncuran Fargate, titik akhir VPC memungkinkan tugas untuk menarik gambar pribadi dari Amazon ECR tanpa menetapkan alamat IP publik ke tugas tersebut.

## Epik
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Siapkan penyedia dan repositori OIDC GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan OpenID Connect. | Buat penyedia OpenID Connect (OIDC). Anda akan menggunakan penyedia dalam kebijakan kepercayaan untuk peran IAM yang digunakan dalam tindakan ini. Untuk petunjuk, lihat [Mengonfigurasi OpenID Connect di Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub dalam dokumentasi. | Administrator AWS, AWS DevOps, AWS Umum | 
| Kloning GitHub repositori. | Kloning repositori [Alur Kerja Tindakan ECR GitHub Docker](https://github.com/aws-samples/docker-ecr-actions-workflow) ke folder lokal Anda:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps insinyur | 

### Sesuaikan alur kerja yang GitHub dapat digunakan kembali dan terapkan gambar Docker
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Sesuaikan acara yang memulai alur kerja Docker. | Alur kerja untuk solusi ini ada di [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml). Skrip ini saat ini dikonfigurasi untuk menyebarkan sumber daya saat menerima `workflow_dispatch` acara. Anda dapat menyesuaikan konfigurasi ini dengan mengubah acara ke `workflow_call` dan memanggil alur kerja dari alur kerja induk lain. | DevOps insinyur | 
| Sesuaikan alur kerja. | File [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) dikonfigurasi untuk membuat alur kerja yang dinamis dan dapat digunakan kembali. GitHub Anda dapat mengedit file ini untuk menyesuaikan konfigurasi default, atau Anda dapat meneruskan nilai input dari konsol GitHub Tindakan jika Anda menggunakan `workflow_dispatch` acara untuk memulai penerapan secara manual.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps insinyur | 
| Terapkan templat Terraform. | Alur kerja secara otomatis menyebarkan templat Terraform yang membuat repositori ECR Amazon, berdasarkan peristiwa yang Anda konfigurasikan. GitHub Template ini tersedia sebagai `.tf` file di [root repositori Github](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main). | AWS DevOps, DevOps insinyur | 

## Pemecahan masalah
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Masalah atau kesalahan saat Anda mengonfigurasi Amazon S3 dan DynamoDB sebagai backend jarak jauh Terraform. | Ikuti petunjuk dalam [dokumentasi Terraform](https://developer.hashicorp.com/terraform/language/settings/backends/s3) untuk menyiapkan izin yang diperlukan pada sumber daya Amazon S3 dan DynamoDB untuk konfigurasi backend jarak jauh. | 
| Tidak dapat menjalankan atau memulai alur kerja dengan `workflow_dispatch` acara tersebut. | Alur kerja yang dikonfigurasi untuk diterapkan dari `workflow_dispatch` acara akan berfungsi hanya jika alur kerja dikonfigurasi di cabang utama juga. | 

## Sumber daya terkait
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Menggunakan kembali alur kerja (dokumentasi](https://docs.github.com/en/actions/using-workflows/reusing-workflows)) GitHub 
+ [Memicu alur kerja (dokumentasi](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 

# Buat dan uji aplikasi iOS dengan AWS CodeCommit, AWS CodePipeline, dan AWS Device Farm
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Ringkasan
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-summary"></a>

Pola ini menguraikan langkah-langkah untuk membuat pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang menggunakan AWS CodePipeline untuk membangun dan menguji aplikasi iOS pada perangkat nyata di AWS. Pola ini menggunakan AWS CodeCommit untuk menyimpan kode aplikasi, alat sumber terbuka Jenkins untuk membangun aplikasi iOS, dan AWS Device Farm untuk menguji aplikasi yang dibangun pada perangkat nyata. Ketiga fase ini diatur bersama dalam pipeline dengan menggunakan AWS. CodePipeline

Pola ini didasarkan pada posting [Membangun dan menguji aplikasi iOS dan iPadOS dengan AWS DevOps dan layanan seluler](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) di blog DevOps AWS. Untuk petunjuk rinci, lihat posting blog.

## Prasyarat dan batasan
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Akun pengembang Apple
+ Membangun server (macOS)
+ [Xcode](https://developer.apple.com/xcode/) versi 11.3 (diinstal dan diatur di server build)
+ AWS Command Line Interface (AWS CLI[)](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) diinstal [dan](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) dikonfigurasi di workstation
+ Pengetahuan dasar tentang [Git](https://git-scm.com/docs)

**Batasan**
+ Server build aplikasi harus menjalankan macOS. 
+ Server build harus memiliki alamat IP publik, sehingga CodePipeline dapat menghubungkannya dari jarak jauh untuk memulai build.

## Arsitektur
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-architecture"></a>

**Tumpukan teknologi sumber**
+ Proses pembuatan aplikasi iOS lokal yang melibatkan penggunaan simulator atau pengujian manual pada perangkat fisik

**Tumpukan teknologi target**
+  CodeCommit Repositori AWS untuk menyimpan kode sumber aplikasi
+ Server Jenkins untuk membangun aplikasi menggunakan Xcode
+ Kumpulan perangkat AWS Device Farm untuk menguji aplikasi pada perangkat nyata

**Arsitektur target**

Saat pengguna melakukan perubahan ke repositori sumber, pipeline (AWS CodePipeline) mengambil kode dari repositori sumber, memulai build Jenkins, dan meneruskan kode aplikasi ke Jenkins. Setelah build, pipeline mengambil artefak build dan memulai pekerjaan AWS Device Farm untuk menguji aplikasi terhadap kumpulan perangkat.

 

![\[Pipeline CI/CD menggunakan AWS CodePipeline untuk membangun dan menguji aplikasi iOS pada perangkat nyata.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/06fbd82f-4aed-441c-818c-5f89f56af78e/images/0ae3d7b6-b40c-44ef-9580-8c8266c3d841.png)


## Alat
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-tools"></a>
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) adalah layanan pengiriman berkelanjutan yang dikelola sepenuhnya yang membantu Anda mengotomatiskan saluran pipa rilis untuk pembaruan aplikasi dan infrastruktur yang cepat dan andal. CodePipeline mengotomatiskan fase build, test, dan deploy dari proses rilis Anda setiap kali ada perubahan kode, berdasarkan model rilis yang Anda tentukan.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) adalah layanan kontrol sumber terkelola penuh yang menampung repositori berbasis Git yang aman. Ini memudahkan tim untuk berkolaborasi dalam kode dalam ekosistem yang aman dan sangat skalabel. CodeCommit menghilangkan kebutuhan untuk mengoperasikan sistem kontrol sumber Anda sendiri atau khawatir tentang penskalaan infrastrukturnya.
+ [AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html) adalah layanan pengujian aplikasi yang memungkinkan Anda meningkatkan kualitas web dan aplikasi seluler dengan mengujinya di berbagai browser desktop dan perangkat seluler nyata, tanpa harus menyediakan dan mengelola infrastruktur pengujian apa pun.
+ [Jenkins](https://www.jenkins.io/) adalah server otomatisasi sumber terbuka yang memungkinkan pengembang untuk membangun, menguji, dan menyebarkan perangkat lunak mereka.

## Epik
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal Jenkins di server build yang menjalankan macOS. | Jenkins akan digunakan untuk membangun aplikasi, jadi Anda harus menginstalnya terlebih dahulu di server build. Untuk mendapatkan petunjuk terperinci untuk tugas ini dan selanjutnya, lihat postingan blog AWS [Membangun dan menguji aplikasi iOS dan iPadOS dengan AWS DevOps dan layanan seluler](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) serta sumber daya lainnya di bagian [Sumber daya terkait](#build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources) di akhir pola ini. | DevOps | 
| Konfigurasikan Jenkins. | Ikuti petunjuk di layar untuk mengkonfigurasi Jenkins. | DevOps | 
| Instal CodePipeline plugin AWS untuk Jenkins. | Plugin ini harus diinstal pada server Jenkins agar Jenkins dapat berinteraksi dengan layanan CodePipeline AWS. | DevOps | 
| Buat proyek gaya bebas Jenkins. | Di Jenkins, buat proyek gaya bebas. Konfigurasikan proyek untuk menentukan pemicu dan opsi konfigurasi build lainnya. | DevOps | 

### Konfigurasikan AWS Device Farm
<a name="configure-aws-device-farm"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat proyek Device Farm. | Buka konsol AWS Device Farm. Buat proyek dan kumpulan perangkat untuk pengujian. Untuk instruksi, lihat posting blog. | Developer | 

### Konfigurasikan repositori sumber
<a name="configure-the-source-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CodeCommit repositori. | Buat repositori tempat kode sumber akan disimpan. | DevOps | 
| Komit kode aplikasi Anda ke repositori. | Connect ke CodeCommit repositori yang Anda buat. Dorong kode dari mesin lokal Anda ke repositori. | DevOps | 

### Konfigurasikan pipa
<a name="configure-the-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat pipeline di AWS CodePipeline. | Buka CodePipeline konsol AWS, dan buat pipeline. Pipa mengatur semua fase proses. CI/CD Untuk petunjuk, lihat postingan blog AWS [Membangun dan menguji aplikasi iOS dan iPadOS dengan AWS DevOps dan layanan seluler](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/). | DevOps | 
| Tambahkan tahap uji ke pipa. | Untuk menambahkan tahap pengujian dan mengintegrasikannya dengan AWS Device Farm, edit pipeline. | DevOps | 
| Memulai pipa. | Untuk memulai pipeline dan CI/CD prosesnya, pilih **Rilis perubahan**. | DevOps | 

### Lihat hasil tes aplikasi
<a name="view-application-test-results"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tinjau hasil tes. | Di konsol AWS Device Farm, pilih project yang Anda buat, dan tinjau hasil pengujian. Konsol akan menampilkan detail setiap tes. | Developer | 

## Sumber daya terkait
<a name="build-and-test-ios-apps-with-aws-codecommit-aws-codepipeline-and-aws-device-farm-resources"></a>

**Step-by-step instruksi untuk pola ini**
+ [Membangun dan menguji aplikasi iOS dan iPadOS dengan AWS DevOps dan layanan seluler](https://aws.amazon.com/blogs/devops/building-and-testing-ios-and-ipados-apps-with-aws-devops-and-mobile-services/) (postingan DevOps blog AWS)

**Konfigurasikan AWS Device Farm**
+ [Konsol AWS Device Farm](https://console.aws.amazon.com/devicefarm)

**Konfigurasikan repositori sumber**
+ [Buat repositori CodeCommit AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-create-repository.html)
+ [Connect ke CodeCommit repositori AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html)

**Konfigurasikan pipa**
+ [ CodePipeline Konsol AWS](https://console.aws.amazon.com/codesuite/codepipeline/home)

**Sumber daya tambahan**
+ [ CodePipeline Dokumentasi AWS](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [ CodeCommit Dokumentasi AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)
+ [Dokumentasi AWS Device Farm](https://docs.aws.amazon.com/devicefarm/latest/developerguide/welcome.html)
+ [Dokumentasi Jenkins](https://www.jenkins.io/doc/)
+ [Instalasi Jenkins di macOS](https://www.jenkins.io/download/weekly/macos/)
+ [AWS CodePipeline Plugin untuk Jenkins](https://plugins.jenkins.io/aws-codepipeline/)
+ [Instalasi Xcode](https://developer.apple.com/xcode/)
+ [Instalasi](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) [dan konfigurasi AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Dokumentasi Git](https://git-scm.com/docs)

# Konfigurasikan otentikasi TLS timbal balik untuk aplikasi yang berjalan di Amazon EKS
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Ringkasan
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-summary"></a>

Mutual Transport Layer Security (TLS) berbasis sertifikat adalah komponen TLS opsional yang menyediakan otentikasi peer dua arah antara server dan klien. Dengan TLS timbal balik, klien harus memberikan sertifikat X.509 selama proses negosiasi sesi. Server menggunakan sertifikat ini untuk mengidentifikasi dan mengotentikasi klien.

Mutual TLS adalah persyaratan umum untuk aplikasi Internet of Things (IoT) dan dapat digunakan business-to-business untuk aplikasi atau standar [seperti](https://docs.aws.amazon.com/wellarchitected/latest/financial-services-industry-lens/open-banking.html) Open Banking.

Pola ini menjelaskan cara mengonfigurasi TLS timbal balik untuk aplikasi yang berjalan pada cluster Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan pengontrol ingress NGINX. Anda dapat mengaktifkan fitur TLS timbal balik bawaan untuk pengontrol ingress NGINX dengan membuat anotasi sumber daya ingress. Untuk informasi selengkapnya tentang anotasi TLS timbal balik pada pengontrol NGINX, lihat [Autentikasi sertifikat klien](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#client-certificate-authentication) dalam dokumentasi Kubernetes.

**penting**  
Pola ini menggunakan sertifikat yang ditandatangani sendiri. Kami menyarankan Anda menggunakan pola ini hanya dengan cluster pengujian, dan bukan di lingkungan produksi. Jika Anda ingin menggunakan pola ini di lingkungan produksi, Anda dapat menggunakan [AWS Private Certificate Authority (AWS Private CA)](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html) atau standar infrastruktur kunci publik (PKI) yang ada untuk menerbitkan sertifikat pribadi.

## Prasyarat dan batasan
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-prereqs"></a>

**Prasyarat**
+ Akun Amazon Web Services (AWS) yang aktif.
+ Sebuah klaster Amazon EKS yang sudah ada.
+ AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows.
+ Utilitas baris perintah kubectl, diinstal dan dikonfigurasi untuk mengakses kluster Amazon EKS. Untuk informasi selengkapnya tentang ini, lihat [Menginstal kubectl di dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS.
+ Nama Domain Name System (DNS) yang ada untuk menguji aplikasi.

**Batasan**
+ Pola ini menggunakan sertifikat yang ditandatangani sendiri. Kami menyarankan Anda menggunakan pola ini hanya dengan cluster pengujian, dan bukan di lingkungan produksi.

## Arsitektur
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-architecture"></a>

![\[Mengkonfigurasi otentikasi TLS timbal balik untuk aplikasi yang berjalan di Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/ae2761e3-7ed2-4c2a-ba54-a4ddce8a1e7e/images/cefc60f9-2f29-4052-b7ae-df4eb6395e1c.png)


**Tumpukan teknologi**
+ Amazon EKS
+ Amazon Route 53
+ Kubectl

## Alat
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-tools"></a>
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.
+ [Kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) adalah utilitas baris perintah yang Anda gunakan untuk berinteraksi dengan cluster Amazon EKS.

## Epik
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-epics"></a>

### Menghasilkan sertifikat yang ditandatangani sendiri
<a name="generate-the-self-signed-certificates"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Hasilkan kunci CA dan sertifikat. | Hasilkan kunci dan sertifikat otoritas sertifikat (CA) dengan menjalankan perintah berikut.<pre>openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'</pre> | DevOps insinyur | 
| Hasilkan kunci server dan sertifikat, dan tandatangani dengan sertifikat CA. | Hasilkan kunci server dan sertifikat, dan tandatangani dengan sertifikat CA dengan menjalankan perintah berikut.<pre>openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt</pre>Pastikan Anda mengganti `<your_domain_name>` dengan nama domain yang ada. | DevOps insinyur | 
|  Buat kunci klien dan sertifikat, dan tandatangani dengan sertifikat CA. | Buat kunci klien dan sertifikat, dan tandatangani dengan sertifikat CA dengan menjalankan perintah berikut.<pre>openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt</pre> | DevOps insinyur | 

### Terapkan pengontrol masuk NGINX
<a name="deploy-the-nginx-ingress-controller"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Terapkan pengontrol ingress NGINX di kluster Amazon EKS Anda. | Menyebarkan pengontrol ingress NGINX dengan menggunakan perintah berikut.<pre>kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml</pre> | DevOps insinyur | 
|  Verifikasi bahwa layanan pengontrol ingress NGINX sedang berjalan. | Verifikasi bahwa layanan pengontrol ingress NGINX berjalan dengan menggunakan perintah berikut.<pre>kubectl get svc -n ingress-nginx</pre>Pastikan bahwa bidang alamat layanan berisi nama domain Network Load Balancer. | DevOps insinyur | 

### Buat namespace di cluster Amazon EKS untuk menguji TLS timbal balik
<a name="create-a-namespace-in-the-amazon-eks-cluster-to-test-mutual-tls"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat namespace di kluster Amazon EKS.  | Buat namespace yang dipanggil `mtls` di cluster Amazon EKS Anda dengan menjalankan perintah berikut. <pre>kubectl create ns mtls</pre>Ini menyebarkan aplikasi sampel untuk menguji TLS timbal balik. | DevOps insinyur | 

### Buat penyebaran dan layanan untuk aplikasi sampel
<a name="create-the-deployment-and-service-for-the-sample-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat deployment dan service Kubernetes di namespace mtls. | Buat file bernama `mtls.yaml`. Tempel kode berikut ke file. <pre>kind: Deployment<br />apiVersion: apps/v1<br />metadata:<br />  name: mtls-app<br />  labels:<br />    app: mtls<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: mtls<br />  template:<br />    metadata:<br />      labels:<br />        app: mtls<br />    spec:<br />      containers:<br />      - name: mtls-app<br />        image: hashicorp/http-echo<br />        args:<br />          - "-text=mTLS is working"<br /><br /><br />---<br /><br />kind: Service<br />apiVersion: v1<br />metadata:<br />  name: mtls-service<br />spec:<br />  selector:<br />    app: mtls<br />  ports:<br />    - port: 5678 # Default port for image</pre> Buat deployment dan service Kubernetes di `mtls` namespace dengan menjalankan perintah berikut.<pre>kubectl create -f mtls.yaml -n mtls</pre> | DevOps insinyur | 
| Verifikasi bahwa penerapan Kubernetes dibuat. | Jalankan perintah berikut untuk memverifikasi bahwa penerapan dibuat dan memiliki satu pod dalam status yang tersedia.<pre>kubectl get deploy -n mtls</pre> | DevOps insinyur | 
| Verifikasi bahwa layanan Kubernetes dibuat. | Verifikasi bahwa layanan Kubernetes dibuat dengan menjalankan perintah berikut.<pre>kubectl get service -n mtls</pre> | DevOps insinyur | 

### Buat rahasia di namespace mtls
<a name="create-a-secret-in-the-mtls-namespace"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat rahasia untuk sumber daya ingress. | Jalankan perintah berikut untuk membuat rahasia untuk pengontrol ingress NGINX dengan menggunakan sertifikat yang Anda buat sebelumnya.<pre>kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls </pre>Rahasia Anda memiliki sertifikat server untuk klien untuk mengidentifikasi server dan sertifikat CA untuk server untuk memverifikasi sertifikat klien. | DevOps insinyur | 

### Buat sumber daya ingress di namespace mtls
<a name="create-the-ingress-resource-in-the-mtls-namespace"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sumber daya ingress di namespace mtls. | Buat file bernama `ingress.yaml`. Rekatkan kode berikut ke dalam file (ganti `<your_domain_name>` dengan nama domain yang ada).<pre>apiVersion: networking.k8s.io/v1<br />kind: Ingress<br />metadata:<br />  annotations:<br />    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"<br />    nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs<br />  name: mtls-ingress<br />spec:<br />  ingressClassName: nginx<br />  rules:<br />  - host: "*.<your_domain_name>"<br />    http:<br />      paths:<br />      - path: /<br />        pathType: Prefix<br />        backend:<br />          service:<br />            name: mtls-service<br />            port:<br />              number: 5678<br />  tls:<br />  - hosts:<br />    - "*.<your_domain_name>"<br />    secretName: mtls-certs</pre>Buat sumber daya ingress di `mtls` namespace dengan menjalankan perintah berikut.<pre>kubectl create -f ingress.yaml -n mtls</pre>Ini berarti bahwa pengontrol ingress NGINX dapat merutekan lalu lintas ke aplikasi sampel Anda. | DevOps insinyur | 
| Verifikasi bahwa sumber daya ingress dibuat. | Verifikasi bahwa sumber daya ingress dibuat dengan menjalankan perintah berikut.<pre>kubectl get ing -n mtls</pre>Pastikan bahwa alamat sumber daya ingress menunjukkan penyeimbang beban yang dibuat untuk pengontrol ingress NGINX. | DevOps insinyur | 

### Konfigurasikan DNS untuk mengarahkan nama host ke penyeimbang beban
<a name="configure-dns-to-point-the-hostname-to-the-load-balancer"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat catatan CNAME yang menunjuk ke penyeimbang beban untuk pengontrol ingress NGINX. | Masuk ke AWS Management Console, buka konsol Amazon Route 53, dan buat catatan Canonical Name (CNAME) yang mengarah `mtls.<your_domain_name>` ke penyeimbang beban untuk pengontrol ingress NGINX.Untuk informasi selengkapnya, lihat [Membuat catatan menggunakan konsol Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) dalam dokumentasi Route 53. | DevOps insinyur | 

### Uji aplikasi
<a name="test-the-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji pengaturan TLS timbal balik tanpa sertifikat. | Jalankan perintah berikut.<pre>curl -k https://mtls.<your_domain_name> </pre>Anda harus menerima respons kesalahan “400 Tidak diperlukan sertifikat SSL dikirim”. | DevOps insinyur | 
| Uji pengaturan TLS timbal balik dengan sertifikat. | Jalankan perintah berikut.<pre>curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key</pre>Anda harus menerima respons “mTLS berfungsi”. | DevOps insinyur | 

## Sumber daya terkait
<a name="configure-mutual-tls-authentication-for-applications-running-on-amazon-eks-resources"></a>
+ [Membuat rekaman dengan menggunakan konsol Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html)
+ [Menggunakan Network Load Balancer dengan pengontrol ingress NGINX di Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/)
+ [Otentikasi Sertifikat Klien](https://kubernetes.github.io/ingress-nginx/examples/auth/client-certs/)

# Otomatiskan pembuatan sumber daya WorkSpaces Aplikasi Amazon menggunakan AWS CloudFormation
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation"></a>

*Ram Kandaswamy, Amazon Web Services*

## Ringkasan
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-summary"></a>

Pola ini menyediakan contoh kode dan langkah-langkah untuk mengotomatiskan pembuatan sumber daya [ WorkSpaces Aplikasi Amazon](https://aws.amazon.com/workspaces/applications/) di AWS Cloud dengan menggunakan [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)templat. Pola ini menunjukkan cara menggunakan CloudFormation tumpukan untuk mengotomatiskan pembuatan sumber daya WorkSpaces aplikasi Aplikasi Anda, termasuk pembuat gambar, gambar, instance armada, dan tumpukan. Anda dapat melakukan streaming WorkSpaces aplikasi Aplikasi Anda ke pengguna akhir pada browser yang HTML5 sesuai dengan menggunakan mode pengiriman desktop atau aplikasi.

## Prasyarat dan batasan
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Penerimaan syarat dan ketentuan WorkSpaces Aplikasi
+ [Pengetahuan dasar tentang sumber daya WorkSpaces Aplikasi, seperti [armada dan tumpukan dan pembuat](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html) gambar](https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-image-builders.html)

**Batasan**
+ Anda tidak dapat mengubah peran [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)(IAM) yang terkait dengan instance WorkSpaces Aplikasi setelah instance tersebut dibuat.
+ Anda tidak dapat mengubah properti (seperti [subnet](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics) atau [grup keamanan](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)) pada instance pembuat gambar WorkSpaces Aplikasi setelah pembuat gambar tersebut dibuat.

## Arsitektur
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-architecture"></a>

Diagram berikut menunjukkan kepada Anda cara mengotomatiskan pembuatan sumber daya WorkSpaces Aplikasi dengan menggunakan CloudFormation templat.

![\[Alur kerja untuk membuat sumber daya WorkSpaces Aplikasi secara otomatis.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/4f0205f5-5b91-4832-9f0f-2135ae866226/images/cb578939-d9af-4f60-93c9-286881df4c3a.png)


Diagram menunjukkan alur kerja berikut:

1. Anda membuat CloudFormation template berdasarkan kode YAMB di bagian [Informasi tambahan](#automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional) dari pola ini.

1.  CloudFormation Template membuat tumpukan CloudFormation uji.

   1. (Opsional) Anda membuat instance pembuat gambar dengan menggunakan WorkSpaces Aplikasi.

   1. (Opsional) Anda membuat gambar Windows dengan menggunakan perangkat lunak khusus Anda.

1.  CloudFormation Tumpukan membuat instance dan tumpukan armada WorkSpaces Aplikasi.

1. Anda menerapkan sumber daya WorkSpaces Aplikasi Anda ke pengguna akhir pada browser HTML5 yang sesuai.

## Alat
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-tools"></a>
+ [Amazon WorkSpaces Applications](https://docs.aws.amazon.com/appstream2/latest/developerguide/what-is-appstream.html) adalah layanan streaming aplikasi yang dikelola sepenuhnya yang memberi Anda akses instan ke aplikasi desktop Anda dari mana saja. WorkSpaces Aplikasi mengelola AWS sumber daya yang diperlukan untuk meng-host dan menjalankan aplikasi Anda, menskalakan secara otomatis, dan menyediakan akses ke pengguna sesuai permintaan.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda memodelkan dan menyiapkan AWS sumber daya Anda, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya. Anda dapat menggunakan template untuk mendeskripsikan sumber daya Anda dan dependensinya, dan meluncurkan dan mengonfigurasinya bersama-sama sebagai tumpukan, alih-alih mengelola sumber daya secara individual. Anda dapat mengelola dan menyediakan tumpukan di beberapa Akun AWS dan Wilayah AWS.

## Praktik terbaik
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-best-practices"></a>
+ **Konfigurasikan akses jaringan untuk pembuat gambar dengan benar** — Luncurkan pembuat gambar di subnet virtual private cloud (VPC) dengan akses internet yang tepat dengan menggunakan gateway NAT untuk akses internet khusus keluar.

  Uji konektivitas jaringan ke sumber daya yang diperlukan (seperti server aplikasi, database, dan server lisensi) sebelum membuat gambar. Verifikasi bahwa tabel rute VPC memungkinkan koneksi ke semua sumber daya jaringan yang diperlukan. Untuk informasi selengkapnya, lihat [Akses Internet](https://docs.aws.amazon.com/appstream2/latest/developerguide/internet-access.html) di dokumentasi WorkSpaces Aplikasi.
+ **Pantau kapasitas armada terhadap kuota layanan secara proaktif** — Jenis dan kuota ukuran instans WorkSpaces aplikasi adalah per, per Akun AWS. Wilayah AWS Jika Anda memiliki beberapa armada di Wilayah yang sama yang menggunakan jenis dan ukuran instans yang sama, jumlah total instans di semua armada di Wilayah tersebut harus kurang dari atau sama dengan kuota yang berlaku. Untuk informasi selengkapnya, lihat [Memecahkan Masalah Armada di](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-fleets.html) dokumentasi Aplikasi. WorkSpaces 
+ **Uji aplikasi dalam mode Image Builder Test sebelum penerapan armada** — Selalu validasi aplikasi dalam mode Image Builder Test sebelum membuat gambar dan menyebarkan ke armada. Mode pengujian mensimulasikan izin terbatas yang dimiliki pengguna akhir pada instance armada. Untuk informasi selengkapnya, lihat [Pemecahan Masalah Pembuat Gambar](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting-image-builder.html#troubleshooting-07) di dokumentasi WorkSpaces Aplikasi.

## Epik
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-epics"></a>

### (Opsional) Buat gambar WorkSpaces Aplikasi
<a name="optional-create-a-aas2-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal perangkat lunak khusus dan buat gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html)Pertimbangkan untuk menggunakan AppLocker fitur Windows untuk mengunci gambar lebih lanjut. | AWS DevOps, arsitek Cloud | 

### Menyebarkan template CloudFormation
<a name="deploy-the-cfn-template"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui CloudFormation template. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Administrator sistem AWS, Administrator cloud, arsitek Cloud, AWS Umum, administrator AWS | 
| Buat CloudFormation tumpukan dengan menggunakan template. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation.html) | Pemilik aplikasi, administrator sistem AWS, Windows Engineer | 

## Pemecahan masalah
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Berbagai masalah | Untuk informasi selengkapnya, lihat [Pemecahan Masalah](https://docs.aws.amazon.com/appstream2/latest/developerguide/troubleshooting.html) dalam dokumentasi WorkSpaces Aplikasi. | 

## Sumber daya terkait
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-resources"></a>

**Referensi**
+ [Memulai WorkSpaces Aplikasi Amazon: Siapkan dengan contoh aplikasi](https://docs.aws.amazon.com/appstream2/latest/developerguide/getting-started.html)
+ [Buat armada dan tumpukan WorkSpaces Aplikasi Amazon](https://docs.aws.amazon.com/appstream2/latest/developerguide/set-up-stacks-fleets.html)

**Tutorial dan video**
+ [Alur Kerja Pengguna WorkSpaces Aplikasi Amazon](https://www.youtube.com/watch?v=hVGQ87-Uhrc)
+ [Cara Memigrasi Aplikasi Formulir Windows Lama ke Aplikasi Amazon WorkSpaces ](https://www.youtube.com/watch?v=CIImtS2iVbg)
+ [AWS re: Invent 2018: Mengirimkan Aplikasi Desktop dengan Aman dengan Aplikasi Amazon WorkSpaces (01) BAP2](https://www.youtube.com/watch?v=xNIyc_inOhM)

## Informasi tambahan
<a name="automate-the-creation-of-appstream-2-0-resources-using-aws-cloudformation-additional"></a>

Kode berikut adalah contoh CloudFormation template yang dapat Anda gunakan untuk secara otomatis membuat sumber daya WorkSpaces Aplikasi.

```
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  SubnetIds:
    Type: 'List<AWS::EC2::Subnet::Id>'
  testSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup::Id'
  ImageName:
    Type: String
Resources:
  
  AppStreamFleet:
    Type: 'AWS::AppStream::Fleet'
    Properties:
      ComputeCapacity:
        DesiredInstances: 5
      InstanceType: stream.standard.medium
      Name: appstream-test-fleet
      DisconnectTimeoutInSeconds: 1200
      FleetType: ON_DEMAND
      IdleDisconnectTimeoutInSeconds: 1200
      ImageName: !Ref ImageName
      MaxUserDurationInSeconds: 345600
      VpcConfig:
        SecurityGroupIds:
          - !Ref testSecurityGroup
        SubnetIds: !Ref SubnetIds
  AppStreamStack:
    Type: 'AWS::AppStream::Stack'
    Properties:
      Description: AppStream stack for test
      DisplayName: AppStream test Stack
      Name: appstream-test-stack
      StorageConnectors:
        - ConnectorType: HOMEFOLDERS
      UserSettings:
        - Action: CLIPBOARD_COPY_FROM_LOCAL_DEVICE
          Permission: ENABLED
        - Action: CLIPBOARD_COPY_TO_LOCAL_DEVICE
          Permission: ENABLED
        - Action: FILE_DOWNLOAD
          Permission: ENABLED
        - Action: PRINTING_TO_LOCAL_DEVICE
          Permission: ENABLED
  AppStreamFleetAssociation:
    Type: 'AWS::AppStream::StackFleetAssociation'
    Properties:
      FleetName: appstream-test-fleet
      StackName: appstream-test-stack
    DependsOn:
      - AppStreamFleet
      - AppStreamStack
```

# Buat parser log khusus untuk Amazon ECS menggunakan router log Firelens
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router"></a>

*Varun Sharma, Amazon Web Services*

## Ringkasan
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-summary"></a>

Firelens adalah router log untuk Amazon Elastic Container Service (Amazon ECS) dan AWS Fargate. [Anda dapat menggunakan Firelens untuk merutekan log kontainer dari Amazon ECS ke Amazon CloudWatch dan tujuan lainnya (misalnya, [Splunk](https://www.splunk.com/) atau Sumo Logic).](https://www.sumologic.com/) Firelens bekerja dengan [Fluentd](https://www.fluentd.org/) atau [Fluent Bit](https://fluentbit.io/) sebagai agen logging, yang berarti Anda dapat menggunakan parameter definisi [tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html) untuk merutekan log.

Dengan memilih untuk mengurai log di tingkat sumber, Anda dapat menganalisis data logging Anda dan melakukan kueri untuk merespons masalah operasional secara lebih efisien dan efektif. Karena aplikasi yang berbeda memiliki pola logging yang berbeda, Anda perlu menggunakan parser khusus yang menyusun log dan membuat pencarian lebih mudah di tujuan akhir Anda.

Pola ini menggunakan router log Firelens dengan parser khusus untuk mendorong log CloudWatch dari contoh aplikasi Spring Boot yang berjalan di Amazon ECS. Anda kemudian dapat menggunakan Amazon CloudWatch Logs Insights untuk memfilter log berdasarkan bidang kustom yang dihasilkan oleh parser kustom. 

## Prasyarat dan batasan
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-prereqs"></a>

**Prasyarat**
+ Akun Amazon Web Services (AWS) yang aktif.
+ AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi pada mesin lokal Anda.
+ Docker, diinstal dan dikonfigurasi pada mesin lokal Anda.
+ Aplikasi kontainer berbasis Spring Boot yang ada di Amazon Elastic Container Registry (Amazon ECR). 

## Arsitektur
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-architecture"></a>

![\[Menggunakan router log Firelens untuk mendorong log CloudWatch dari aplikasi yang berjalan di Amazon ECS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/images/ef60e087-965a-40e9-9f80-35edbda2befe.png)


**Tumpukan teknologi**
+ CloudWatch
+ Amazon ECR
+ Amazon ECS
+ Fargate
+ Docker
+ Fluent Bit

## Alat
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-tools"></a>
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) — Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola AWS yang aman, terukur, dan andal.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) — Amazon Elastic Container Service (Amazon ECS) adalah layanan manajemen kontainer yang sangat skalabel dan cepat yang memudahkan untuk menjalankan, menghentikan, dan mengelola kontainer di cluster.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — IAM adalah layanan web untuk mengontrol akses ke layanan AWS secara aman.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) Command Line Interface (AWS CLI) adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan layanan AWS menggunakan perintah di shell baris perintah Anda.
+ [Docker](https://www.docker.com/) — Docker adalah platform terbuka untuk mengembangkan, mengirim, dan menjalankan aplikasi.

**Kode**

File-file berikut dilampirkan ke pola ini:
+ `customFluentBit.zip`— Berisi file untuk menambahkan parsing dan konfigurasi khusus.
+ `firelens_policy.json`— Berisi dokumen kebijakan untuk membuat kebijakan IAM.
+ `Task.json`- Berisi definisi tugas sampel untuk Amazon ECS.

## Epik
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-epics"></a>

### Buat gambar Fluent Bit kustom
<a name="create-a-custom-fluent-bit-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Masuk ke AWS Management Console, buka konsol Amazon ECR, dan buat repositori yang disebut. `fluentbit_custom`Untuk informasi selengkapnya tentang ini, lihat [Membuat repositori](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) di dokumentasi Amazon ECR. | Administrator sistem, Pengembang | 
| Buka zip customFluentBit paket.zip. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) |  | 
| Buat gambar Docker kustom. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Untuk informasi selengkapnya tentang ini, lihat [Mendorong gambar Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) di dokumentasi Amazon ECR.  | Administrator sistem, Pengembang | 

### Siapkan cluster Amazon ECS
<a name="set-up-the-amazon-ecs-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat cluster Amazon ECS. | Buat klaster Amazon ECS dengan mengikuti petunjuk dari bagian *Template Networking only* pada [Membuat klaster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) di dokumentasi Amazon ECS.Pastikan Anda memilih **Create VPC** untuk membuat virtual private cloud (VPC) baru untuk cluster Amazon ECS Anda. | Administrator sistem, Pengembang | 

### Siapkan tugas Amazon ECS
<a name="set-up-the-amazon-ecs-task"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Siapkan peran IAM eksekusi tugas Amazon ECS. | Buat peran IAM eksekusi tugas Amazon ECS dengan menggunakan kebijakan `AmazonECSTaskExecutionRolePolicy` terkelola. Untuk informasi selengkapnya tentang ini, lihat [peran IAM eksekusi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) dalam dokumentasi Amazon ECS.Pastikan Anda merekam Nama Sumber Daya Amazon (ARN) peran IAM. | Administrator sistem, Pengembang | 
|  Lampirkan kebijakan IAM ke peran IAM eksekusi tugas Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrator sistem, Pengembang | 
| Siapkan definisi tugas Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html)Untuk informasi selengkapnya tentang ini, lihat [Membuat definisi tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) dalam dokumentasi Amazon ECS. | Administrator sistem, Pengembang | 

### Jalankan tugas Amazon ECS
<a name="run-the-amazon-ecs-task"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan tugas Amazon ECS.  | Di konsol Amazon ECS, pilih **Cluster**, pilih klaster yang Anda buat sebelumnya, lalu jalankan tugas mandiri.Untuk informasi selengkapnya tentang ini, lihat [Menjalankan tugas mandiri](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_run_task.html) di dokumentasi Amazon ECS. | Administrator sistem, Pengembang | 

### Verifikasi CloudWatch log
<a name="verify-the-cloudwatch-logs"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi log.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router.html) | Administrator sistem, Pengembang | 

## Sumber daya terkait
<a name="create-a-custom-log-parser-for-amazon-ecs-using-a-firelens-log-router-resources"></a>
+ [Dasar-dasar Docker untuk Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) 
+ [Amazon ECS di AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) 
+ [Mengkonfigurasi parameter layanan dasar](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) 

## Lampiran
<a name="attachments-e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/e82b4992-c4e0-4af5-b87e-cb0b1c1ed8c9/attachments/attachment.zip)

# Buat kerangka orkestrasi sumber daya berbasis API menggunakan Actions dan Terragrunt GitHub
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande, dan Akash Kumar, Amazon Web Services*

## Ringkasan
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

Pola ini memanfaatkan alur kerja GitHub Actions untuk mengotomatiskan penyediaan sumber daya melalui muatan JSON standar, sehingga tidak perlu konfigurasi manual. Pipeline otomatis ini mengelola siklus hidup penerapan lengkap dan dapat berintegrasi dengan mulus dengan berbagai sistem frontend, dari komponen UI kustom hingga. ServiceNow Fleksibilitas solusi memungkinkan pengguna untuk berinteraksi dengan sistem melalui antarmuka pilihan mereka sambil mempertahankan proses standar.

Arsitektur pipa yang dapat dikonfigurasi dapat disesuaikan untuk memenuhi persyaratan organisasi yang berbeda. Implementasi contoh berfokus pada penyediaan Amazon Virtual Private Cloud (Amazon VPC) dan Amazon Simple Storage Service (Amazon S3). Pola ini secara efektif mengatasi tantangan manajemen sumber daya cloud umum dengan menstandarisasi permintaan di seluruh organisasi dan memberikan poin integrasi yang konsisten. Pendekatan ini memudahkan tim untuk meminta dan mengelola sumber daya sambil memastikan standardisasi.

## Prasyarat dan batasan
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+  GitHub Akun aktif dengan akses ke repositori yang dikonfigurasi

**Batasan**
+ Sumber daya baru memerlukan penambahan `terragrunt.hcl` file secara manual ke konfigurasi repositori.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

Diagram berikut menunjukkan komponen dan alur kerja pola ini.

![\[Alur kerja untuk mengotomatiskan penyediaan sumber daya dengan GitHub Actions dan Terraform.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Diagram arsitektur menunjukkan tindakan berikut:

1. Pengguna mengirimkan payload JSON ke GitHub Actions, memicu pipeline otomatisasi.

1. Pipeline GitHub Actions mengambil kode sumber daya yang diperlukan dari repositori Terragrunt dan Terraform, berdasarkan spesifikasi payload.

1. Pipeline mengasumsikan peran yang sesuai AWS Identity and Access Management (IAM) menggunakan ID yang ditentukan Akun AWS . Kemudian, pipeline menyebarkan sumber daya ke target Akun AWS dan mengelola status Terraform menggunakan bucket Amazon S3 khusus akun dan tabel Amazon DynamoDB.

Masing-masing Akun AWS berisi peran IAM untuk akses aman, bucket Amazon S3 untuk penyimpanan status Terraform, dan tabel DynamoDB untuk penguncian status. Desain ini memungkinkan penyebaran sumber daya yang terkontrol dan otomatis di seluruh Akun AWS. Proses penyebaran mempertahankan manajemen status dan kontrol akses yang tepat melalui bucket Amazon S3 khusus dan peran IAM di setiap akun.

## Alat
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Layanan AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

**Alat-alat lainnya**
+ [GitHub Actions](https://docs.github.com/en/actions) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) adalah alat orkestrasi yang memperluas keduanya dan kemampuan Terraform. OpenTofu Ini mengelola bagaimana pola infrastruktur generik diterapkan, membuatnya lebih mudah untuk skala dan memelihara perkebunan infrastruktur besar.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Praktik terbaik
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Simpan AWS kredensil dan data sensitif menggunakan rahasia GitHub repositori untuk akses aman.
+ Konfigurasikan penyedia OpenID Connect (OIDC) untuk GitHub Actions untuk mengambil peran IAM, menghindari kredensi statis.
+ Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Buat dan konfigurasikan repositori
<a name="create-and-configure-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Inisialisasi GitHub repositori. | Untuk menginisialisasi GitHub repositori, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 
| Konfigurasikan peran dan izin IAM. | Untuk mengonfigurasi peran dan izin IAM, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 
| Siapkan GitHub rahasia dan variabel. | Untuk petunjuk tentang cara mengatur rahasia dan variabel repositori di GitHub repositori, lihat [Membuat variabel konfigurasi untuk repositori dalam](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository) dokumentasi. GitHub Konfigurasikan variabel berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 
| Buat struktur repositori. | Untuk membuat struktur repositori, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 

### Memicu pipeline dan memvalidasi hasil
<a name="trigger-the-pipeline-and-validate-results"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan pipa menggunakan curl.  | Untuk menjalankan pipeline dengan menggunakan [curl](https://curl.se/), gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Untuk informasi selengkapnya tentang proses eksekusi pipeline, lihat [Informasi tambahan](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps insinyur | 
| Validasi hasil eksekusi pipeline | Untuk memvalidasi hasil, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)Anda juga dapat memverifikasi silang sumber daya yang dibuat dengan menggunakan `output.json` file yang dibuat di repositori yang berada di dalam sumber daya yang sama dengan file. `terragrunt.hcl` | DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kirim permintaan pembersihan. | Untuk menghapus sumber daya yang tidak lagi diperlukan, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps insinyur | 

## Sumber daya terkait
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blog**
+ [Gunakan peran IAM untuk menghubungkan GitHub Tindakan ke tindakan di AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Layanan AWS dokumentasi**
+ [Pembuatan peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Memantau file CloudTrail log dengan Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Praktik terbaik keamanan untuk Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub sumber daya**
+ [Buat acara pengiriman repositori](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Membuat webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Menerapkan kontrol akses yang kuat pada GitHub repositori](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Secara teratur mengaudit akses repositori](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Pemeriksaan keamanan di dalam CI/CD pipa](https://github.com/marketplace/actions/checkov-github-action)
+ [Gunakan otentikasi multi-faktor untuk akun GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Informasi tambahan
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Proses eksekusi pipa**

Berikut ini adalah langkah-langkah eksekusi pipeline:

1. **Memvalidasi format payload JSON - Memastikan** bahwa konfigurasi JSON yang masuk terstruktur dengan benar dan berisi semua parameter yang diperlukan

1. **Mengasumsikan peran IAM yang ditentukan** - Mengautentikasi dan mengasumsikan peran IAM yang diperlukan untuk operasi AWS 

1. **Diperlukan unduhan kode Terraform dan Terragrunt - Mengambil versi kode sumber** daya dan dependensi yang ditentukan

1. **Menjalankan penyebaran sumber daya** - Menerapkan konfigurasi untuk menyebarkan atau memperbarui AWS sumber daya di lingkungan target

**Contoh payload yang digunakan untuk pembuatan VPC**

Berikut ini adalah contoh kode untuk pembuatan bucket status backend Terraform:

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

Berikut ini adalah contoh payload untuk membuat VPC dengan Amazon VPC, `vpc_cidr` di mana mendefinisikan spesifikasi blok [CIDR untuk](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) VPC. Bucket status Terraform dipetakan ke variabel yang ditentukan dalam file. `terraform` `ref`Parameter berisi nama cabang kode yang akan dieksekusi.

```
{
    "ref": "main",
    "inputs": {
        "RequestParameters": {
            "RequestId": "1111111",
            "RequestType": "create",
            "ResourceType": "vpc",
            "AccountId": "1234567890",
            "AccountAlias": "account-alias",
            "RegionId": "us-west-2",
            "ApplicationName": "myapp",
            "DivisionName": "division-name",
            "EnvironmentId": "dev",
            "Suffix": "poc"
        },
        "ResourceParameters": [
            {
                "VPC": {
                    "vpc_cidr": "10.0.0.0/16"
                }
            }
        ]
    }
}
```

`RequestParameters`digunakan untuk melacak status permintaan di bagian pipeline dan `tfstate` dibuat berdasarkan informasi ini. Parameter berikut berisi metadata dan informasi kontrol:
+ `RequestId`— Pengidentifikasi unik untuk permintaan
+ `RequestType`— Jenis operasi (membuat, memperbarui, atau menghapus)
+ `ResourceType`— Jenis sumber daya yang akan disediakan
+ `AccountId`— Target Akun AWS untuk penyebaran
+ `AccountAlias`— Nama ramah untuk Akun AWS
+ `RegionId`— Wilayah AWS untuk penyebaran sumber daya
+ `ApplicationName`— Nama aplikasi
+ `DivisionName`— Divisi organisasi
+ `EnvironmentId`— Lingkungan (misalnya, dev dan prod)
+ `Suffix`— Pengenal tambahan untuk sumber daya

`ResourceParameters`berisi konfigurasi khusus sumber daya yang memetakan ke variabel yang ditentukan dalam file Terraform. Variabel khusus apa pun yang perlu diteruskan ke modul Terraform harus disertakan di dalamnya. `ResourceParameters` Parameter `vpc_cidr` ini wajib untuk Amazon VPC.

# Buat permintaan tarik otomatis untuk infrastruktur yang dikelola Terraform AWS dengan menggunakan Tindakan GitHub
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure"></a>

*Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay, dan Prafful Gupta, Amazon Web Services*

## Ringkasan
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-summary"></a>

Pola ini menyajikan utilitas otomatisasi yang dirancang untuk menghilangkan pekerjaan manual dan berulang yang terlibat dalam mengelola perubahan di beberapa repositori Terraform. Banyak organisasi menggunakan repositori Terraform untuk mengelola infrastruktur mereka sebagai kode (IAc), seringkali dengan ratusan repositori terpisah yang mewakili lingkungan, layanan, atau tim yang berbeda. Mengelola repositori ini dalam skala besar menghadirkan tantangan operasional yang signifikan. Tugas rutin seperti memperbarui parameter, memutakhirkan versi modul, atau menerapkan perubahan konfigurasi sering kali memerlukan pembuatan dan pengelolaan pull request (PRs) di banyak repositori beberapa kali sehari.

Bahkan untuk perubahan sederhana, proses berulang dan manual ini memakan waktu dan rawan kesalahan. Insinyur harus secara konsisten menerapkan perubahan yang sama di semua repositori yang ditargetkan dan membuat judul dan deskripsi PR yang bermakna. Selain itu, mereka sering harus berinteraksi dengan alat eksternal seperti Jira untuk mengambil atau menyertakan referensi pelacakan masalah. Tugas-tugas ini, meskipun perlu, adalah angkat berat yang tidak berdiferensiasi yang menghabiskan waktu teknik yang berharga dan mengurangi efisiensi secara keseluruhan. Kurangnya otomatisasi dalam alur kerja ini menciptakan gesekan, memperlambat pengiriman, dan meningkatkan beban kognitif pada tim yang bertugas memelihara infrastruktur Terraform skala besar.

**Ikhtisar solusi**

Untuk mengatasi tantangan ini, pola ini menawarkan utilitas yang sepenuhnya digerakkan oleh konfigurasi, memungkinkan pengguna untuk menentukan perubahan yang diinginkan dalam file konfigurasi terstruktur. File ini menentukan repositori target, modul, parameter, dan nilai menggunakan skema yang jelas.

Setelah dikonfigurasi, utilitas melakukan langkah-langkah otomatis berikut:

1. **Membaca konfigurasi yang ditentukan pengguna** untuk menentukan ruang lingkup dan sifat perubahan

1. **Membuat cabang baru** di setiap repositori target dengan pembaruan yang diperlukan diterapkan

1. **Menghasilkan PR** untuk setiap perubahan, memastikan konsistensi di semua repositori

1. **Mengirim pemberitahuan Slack** (opsional) untuk mengingatkan pemangku kepentingan dengan tautan langsung ke yang dibuat PRs

Dengan mengotomatiskan tugas-tugas berulang ini, utilitas secara signifikan mengurangi waktu, tenaga, dan risiko yang terkait dengan pengelolaan pembaruan infrastruktur skala besar. Ini memungkinkan tim untuk fokus pada pekerjaan teknik bernilai lebih tinggi sambil membantu memastikan bahwa perubahan diterapkan secara konsisten dan dapat ditelusuri di semua repositori.

## Prasyarat dan batasan
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Python versi 3.8 atau yang lebih baru.
+ Token akses GitHub pribadi (PAT). Untuk informasi selengkapnya, lihat [Membuat token akses pribadi (klasik)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic) dalam GitHub dokumentasi.
+  GitHub PAT dapat mengakses repositori target Anda sehingga utilitas dapat melakukan operasi seperti membuat cabang dan permintaan tarik. Untuk informasi lebih lanjut, lihat [repositori GitHub kode](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file#repository-access-verification) pola ini.

**Batasan**
+ **Kompleksitas konfigurasi** menghadirkan tantangan utama. Efektivitas otomatisasi dibatasi oleh kemampuan file konfigurasinya. Meskipun sistem menangani perubahan standar secara efisien, modifikasi infrastruktur yang kompleks mungkin memerlukan intervensi manual dan kasus tepi tertentu tetap berada di luar cakupan penanganan otomatis.
+ **Keamanan dan akses** menyajikan pertimbangan yang signifikan terutama dalam mengelola token GitHub akses dan batas tarif API. Organizations harus secara hati-hati menyeimbangkan kebutuhan akan otomatisasi dengan penyimpanan dan manajemen kredensi yang aman, memastikan kontrol akses yang tepat sambil mempertahankan efisiensi operasional.
+ Kendala **validasi menimbulkan batasan** penting lainnya karena sistem otomatis memiliki kemampuan terbatas untuk memvalidasi logika bisnis dan persyaratan khusus lingkungan. Ketergantungan yang kompleks dan interaksi lintas layanan sering kali memerlukan pengawasan manusia karena validasi otomatis tidak dapat sepenuhnya menangkap semua nuansa kontekstual dan aturan bisnis.
+ Masalah **skala dan kinerja** muncul ketika berhadapan dengan perubahan infrastruktur skala besar. Sistem harus beroperasi dalam batas GitHub API sambil mengelola banyak repositori secara bersamaan. Operasi intensif sumber daya di seluruh infrastruktur yang luas dapat menciptakan kemacetan kinerja yang memerlukan manajemen yang cermat.
+ **Batas integrasi** membatasi fleksibilitas sistem karena terutama dirancang untuk bekerja dengan alat khusus seperti GitHub dan Slack. Organizations yang menggunakan alat yang berbeda mungkin memerlukan solusi kustom dan opsi penyesuaian alur kerja dari pola ini terbatas pada titik integrasi yang didukung.

## Arsitektur
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen untuk solusi ini.

![\[Alur kerja untuk membuat permintaan tarik otomatis menggunakan GitHub Tindakan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e211359a-03b1-4e69-b152-eb7c09bdb01a/images/6cee0660-5b44-4abe-970c-c0a3c830a9aa.png)


Alur kerja terdiri dari langkah-langkah berikut:

1. Pengembang memicu GitHub Tindakan dengan menentukan repositori Terraform.

1. Utilitas otomatisasi membaca konfigurasi yang ditentukan.

1. Utilitas otomatisasi juga menarik repositori Terraform yang disediakan.

1. Utilitas otomatisasi membuat cabang baru dan membuat pembaruan ke templat Terraform secara lokal.

1. Utilitas otomatisasi mendorong cabang baru ke repositori dan membuat PR baru. 

1. Utilitas otomatisasi menggunakan pemberitahuan Slack yang menyertakan tautan PR untuk memberi tahu pengembang dan mengaktifkan templat Terraform untuk penerapan. AWS Cloud 

## Alat
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-tools"></a>
+ [GitHub](https://docs.github.com/)adalah platform pengembang yang dapat digunakan pengembang untuk membuat, menyimpan, mengelola, dan membagikan kode mereka.
+ [GitHub Actions](https://docs.github.com/en/actions) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.
+ [HashiCorp Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), penawaran Salesforce, adalah platform percakapan bertenaga AI yang menyediakan kolaborasi obrolan dan video, mengotomatiskan proses tanpa kode, dan mendukung berbagi informasi.

**Repositori kode**

Kode untuk pola ini tersedia di [Alur Kerja Pembaruan Infrastruktur Terraform GitHub Otomatis menggunakan GitHub ](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file) repositori Tindakan.

## Praktik terbaik
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-best-practices"></a>
+ **Manajemen perubahan** yang efektif sangat penting untuk implementasi yang sukses. Organizations harus mengadopsi strategi peluncuran bertahap untuk perubahan skala besar. Pertahankan konvensi penamaan cabang dan deskripsi PR yang konsisten dan pastikan dokumentasi komprehensif dari semua perubahan.
+ **Kontrol keamanan** harus diterapkan secara ketat, dengan fokus pada prinsip akses hak istimewa dan manajemen kredensi yang aman. Aktifkan aturan perlindungan cabang untuk mencegah perubahan yang tidak sah. Melakukan audit keamanan secara teratur untuk menjaga integritas sistem.
+ **Protokol pengujian** yang kuat harus mencakup `terraform plan` eksekusi otomatis dalam pipeline continuous integration dan continuous deployment (CI/CD). Protokol juga harus mencakup pemeriksaan validasi pra-komit, dan lingkungan tinjauan khusus untuk perubahan kritis. Pendekatan pengujian berlapis-lapis ini membantu menangkap masalah lebih awal dan memastikan stabilitas infrastruktur.
+ **Strategi pemantauan** perlu mencakup mekanisme peringatan yang komprehensif, pelacakan success/failure metrik terperinci, dan mekanisme coba ulang otomatis untuk operasi yang gagal. Strategi ini membantu memastikan visibilitas operasional dan memungkinkan respons cepat terhadap masalah apa pun yang muncul.
+ **Standar konfigurasi** harus menekankan kontrol versi untuk semua konfigurasi, mempertahankan modularitas untuk kegunaan kembali dan skalabilitas. Dokumentasi skema dan contoh yang jelas membantu tim memahami dan menggunakan sistem otomasi secara efektif.

## Epik
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-epics"></a>

### Instalasi dan pengaturan
<a name="installation-and-setup"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan repositori. | Untuk mengatur repositori, jalankan perintah berikut:<pre># Clone the automation tool repository<br />git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility<br />cd sample-terraform-pr-automation-utility<br /><br /># Copy example configuration<br />cp config.example.yaml config.yaml<br /></pre> | AWS DevOps | 
| Instal dependensi. | Untuk menginstal dan memverifikasi dependensi Python, jalankan perintah berikut:<pre># Install Python dependencies<br />pip3 install -r requirements.txt<br /><br /># Verify installation<br />python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"<br /></pre> | AWS DevOps | 
| Konfigurasikan GitHub token. | Untuk mengonfigurasi GitHub token dan kemudian memverifikasi bahwa itu berfungsi, jalankan perintah berikut:<pre># Set GitHub token environment variable<br />export GITHUB_TOKEN="your_github_token_here"<br /><br /># Verify token works<br />curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user<br /></pre> | AWS DevOps | 

### Siapkan file konfigurasi untuk perubahan Terraform
<a name="set-up-configuration-file-for-terraform-changes"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan `config.yaml` file. | Untuk menentukan repositori target Anda dan perubahan yang diinginkan, edit file `config.yam` l sebagai berikut:<pre>repositories:<br />  - owner: "your-org"<br />    repo: "your-terraform-repo"<br />    files:<br />      - path: "variables.tf"<br />        changes:<br />          variables:<br />            - app_version:<br />                default:<br />                  update:<br />                    - from: ["1.0.0"]<br />                      to: "1.1.0"<br /><br />settings:<br />  pr_title_template: "Infrastructure Update - {{timestamp}}"<br />  slack:<br />    username: "Terraform Bot"<br />    icon_emoji: ":terraform:"<br />    notify_on_success: true<br />    notify_on_error: true<br />    notify_batch_summary: true<br /></pre> | AWS DevOps | 

### Uji dan validasi
<a name="test-and-validate"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Lakukan pengujian pra-penerbangan. | Selalu uji konfigurasi Anda sebelum menjalankannya di repositori produksi. Gunakan salah satu perintah berikut ini:<pre># 1. Test configuration syntax<br />python3 -c "from main import get_config_content; get_config_content()"<br /><br /># 2. Run in dry-run mode first<br />DRY_RUN=true python3 main.py<br /><br /># 3. Test with minimal configuration<br /># Use a simple config.yaml with just one repository and one change</pre> | AWS DevOps | 
| Verifikasi akses repositori. | Untuk memverifikasi bahwa GitHub token dapat mengakses repositori, jalankan perintah berikut:<pre># Test GitHub token access<br />curl -H "Authorization: token $GITHUB_TOKEN" \<br />  https://api.github.com/repos/owner/repo-name<br /><br /># Should return repository information, not 404</pre> | AWS DevOps | 

### Jalankan utilitas otomatisasi
<a name="run-the-automation-utility"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan utilitas otomatisasi dengan menggunakan GitHub Actions UI. | Untuk menjalankan utilitas otomatisasi menggunakan GitHub Actions UI, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 
| (Alternatif) Jalankan utilitas otomatisasi dari baris perintah. | Jika mau, Anda dapat menjalankan utilitas otomatisasi dari baris perintah alih-alih dengan menggunakan UI GitHub Tindakan. Gunakan perintah berikut ini.<pre># Run actual automation<br />python3 main.py</pre> | AWS DevOps | 

### Validasi PRs dan perubahan
<a name="validate-prs-and-changes"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tinjau yang dibuat PRs dan perubahan. | Untuk memantau hasil eksekusi GitHub alur kerja, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 

### Bersihkan
<a name="clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| (Opsional) Bersihkan PRs. | Tutup ditinggalkan atau tidak perlu PRs. | AWS DevOps | 

## Sumber daya terkait
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-resources"></a>

**AWS Bimbingan Preskriptif**
+ [Menggunakan Terraform sebagai alat IAc untuk AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/choose-iac-tool/terraform.html)

**GitHub dokumentasi**
+ [Tentang permintaan tarik](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+ [Mengelola token akses pribadi Anda](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
+ [Memahami GitHub Tindakan](https://docs.github.com/en/actions/get-started/understand-github-actions)
+ [Quickstart untuk Tindakan GitHub ](https://docs.github.com/en/actions/get-started/quickstart)

# Buat pipeline CI dinamis untuk proyek Java dan Python secara otomatis
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically"></a>

*Aromal Raj Jayarajan, Vijesh Vijayakumaran Nair, MAHESH RAGHUNANDANAN, dan Amarnath Reddy, Amazon Web Services*

## Ringkasan
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-summary"></a>

Pola ini menunjukkan cara membuat pipeline dynamic continuous integration (CI) untuk proyek Java dan Python secara otomatis dengan menggunakan alat pengembang AWS.

Ketika tumpukan teknologi terdiversifikasi dan aktivitas pengembangan meningkat, akan menjadi sulit untuk membuat dan memelihara jaringan pipa CI yang konsisten di seluruh organisasi. Dengan mengotomatiskan proses di AWS Step Functions, Anda dapat memastikan bahwa pipeline CI Anda konsisten dalam penggunaan dan pendekatannya.

Untuk mengotomatiskan pembuatan pipeline CI dinamis, pola ini menggunakan input variabel berikut:
+ Bahasa pemrograman (hanya Java atau Python)
+ Nama pipa
+ Tahapan pipa yang dibutuhkan

**catatan**  
Step Functions mengatur pembuatan pipeline dengan menggunakan beberapa layanan AWS. Untuk informasi selengkapnya tentang layanan AWS yang digunakan dalam solusi ini, lihat bagian **Alat** dari pola ini.

## Prasyarat dan batasan
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Bucket Amazon S3 di Wilayah AWS yang sama dengan solusi ini sedang diterapkan
+ [Prinsip](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html) AWS Identity and Access Management (IAM) yang memiliki CloudFormation izin AWS yang diperlukan untuk membuat sumber daya yang diperlukan untuk solusi ini

**Batasan**
+ Pola ini hanya mendukung proyek Java dan Python.
+ Peran IAM yang disediakan dalam pola ini mengikuti prinsip hak istimewa paling sedikit. Izin peran IAM harus diperbarui berdasarkan sumber daya spesifik yang perlu dibuat oleh pipeline CI Anda.

## Arsitektur
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-architecture"></a>

**Tumpukan teknologi target**
+ AWS CloudFormation
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodePipeline
+ IAM
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Systems Manager
+ AWS Step Functions
+ AWS Lambda
+ Amazon DynamoDB

**Arsitektur target**

Diagram berikut menunjukkan contoh alur kerja untuk membuat pipeline CI dinamis untuk proyek Java dan Python secara otomatis dengan menggunakan alat pengembang AWS.

![\[Alur kerja untuk membuat pipeline CI dinamis untuk proyek Java dan Python secara otomatis menggunakan alat AWS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/bef2ccb8-68b3-4c0f-9ee7-4b93e9422d9c/images/b5ed003f-cf16-4130-8bfb-2bc2cb9a0d33.png)


Diagram menunjukkan alur kerja berikut:

1. Pengguna AWS menyediakan parameter input untuk pembuatan pipeline CI dalam format JSON. Input ini memulai alur kerja Step Functions (*state machine*) yang membuat pipeline CI dengan menggunakan alat pengembang AWS.

1. **Fungsi Lambda membaca folder bernama **input-reference**, yang disimpan dalam bucket Amazon S3, dan kemudian menghasilkan file buildspec.yml.** File yang dihasilkan ini menentukan tahapan pipeline CI dan disimpan kembali di bucket Amazon S3 yang sama yang menyimpan referensi parameter.

1. Step Functions memeriksa dependensi alur kerja pembuatan pipeline CI untuk setiap perubahan, dan memperbarui tumpukan dependensi sesuai kebutuhan.

1. Step Functions membuat sumber daya pipeline CI dalam CloudFormation tumpukan, termasuk CodeCommit repositori, CodeBuild proyek, dan pipeline. CodePipeline 

1.  CloudFormation Tumpukan menyalin kode sumber sampel untuk tumpukan teknologi yang dipilih (Java atau Python) dan file **buildspec.yl** ke repositori. CodeCommit 

1. Rincian runtime pipeline CI disimpan dalam tabel DynamoDB.

**Otomatisasi dan skala**
+ Pola ini hanya untuk digunakan dalam satu lingkungan pengembangan saja. Perubahan konfigurasi diperlukan untuk digunakan di beberapa lingkungan pengembangan.
+ Untuk menambahkan dukungan untuk lebih dari satu CloudFormation tumpukan, Anda dapat membuat CloudFormation template tambahan. Untuk informasi selengkapnya, lihat [Memulai AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.html) di CloudFormation dokumentasi.

## Alat
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-tools"></a>

**Alat**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi AWS Lambda dan layanan AWS lainnya untuk membangun aplikasi yang penting bagi bisnis.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) adalah layanan build terkelola penuh yang membantu Anda mengompilasi 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 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 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.
+ [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.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) menyediakan penyimpanan hierarkis yang aman untuk manajemen data konfigurasi dan manajemen rahasia.

**Kode**

Kode untuk pola ini tersedia di GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repositori. Repositori berisi CloudFormation template yang diperlukan untuk membuat arsitektur target yang diuraikan dalam pola ini.

## Praktik terbaik
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-best-practices"></a>
+ Jangan masukkan kredensil (*rahasia*) seperti token atau kata sandi langsung ke CloudFormation templat atau konfigurasi tindakan Step Functions. Jika Anda melakukannya, informasi akan ditampilkan di log DynamoDB. Sebagai gantinya, gunakan AWS Secrets Manager untuk menyiapkan dan menyimpan rahasia. Kemudian, rujuk rahasia yang disimpan di Secrets Manager dalam CloudFormation template dan konfigurasi tindakan Step Functions sesuai kebutuhan. Untuk informasi selengkapnya, lihat [Apa itu AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) dalam dokumentasi Secrets Manager.
+ Konfigurasikan enkripsi sisi server untuk CodePipeline artefak yang disimpan di Amazon S3. Untuk informasi selengkapnya, lihat [Mengonfigurasi enkripsi sisi server untuk artefak yang disimpan di Amazon S3 dalam dokumentasi](https://docs.aws.amazon.com/codepipeline/latest/userguide/S3-artifact-encryption.html). CodePipeline CodePipeline 
+ Terapkan izin hak istimewa paling sedikit saat mengonfigurasi peran IAM. Untuk informasi selengkapnya, lihat [Menerapkan izin hak istimewa terkecil dalam dokumentasi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Pastikan bucket Amazon S3 Anda tidak dapat diakses publik. Untuk informasi selengkapnya, lihat [Mengonfigurasi setelan blokir akses publik untuk bucket S3 Anda di dokumentasi](https://docs.aws.amazon.com/AmazonS3/latest/userguide/configuring-block-public-access-bucket.html) Amazon S3.
+ Pastikan Anda mengaktifkan pembuatan versi untuk bucket Amazon S3 Anda. Untuk informasi selengkapnya, lihat [Menggunakan pembuatan versi di bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) di dokumentasi Amazon S3.
+ Gunakan IAM Access Analyzer saat mengonfigurasi kebijakan IAM. Alat ini memberikan rekomendasi yang dapat ditindaklanjuti untuk membantu Anda membuat kebijakan IAM yang aman dan fungsional. Untuk informasi selengkapnya, lihat [Menggunakan AWS Identity and Access Management Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) dalam dokumentasi IAM.
+ Jika memungkinkan, tentukan kondisi akses tertentu saat mengonfigurasi kebijakan IAM.
+ Aktifkan CloudWatch pencatatan Amazon untuk tujuan pemantauan dan audit. Untuk informasi selengkapnya, lihat [Apa itu Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) dalam CloudWatch dokumentasi.

## Epik
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-epics"></a>

### Konfigurasikan prasyarat
<a name="configure-the-prerequisites"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat bucket Amazon S3. | Buat bucket Amazon S3 (atau gunakan bucket yang sudah ada) untuk menyimpan CloudFormation template, kode sumber, dan file input yang diperlukan untuk solusi tersebut.Untuk informasi selengkapnya, lihat [Langkah 1: Membuat bucket S3 pertama Anda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) di dokumentasi Amazon S3.Bucket Amazon S3 harus berada di Wilayah AWS yang sama dengan yang Anda gunakan solusinya. | AWS DevOps | 
| Kloning GitHub repositori. | Kloning GitHub [automated-ci-pipeline-creation](https://github.com/aws-samples/automated-ci-pipeline-creation)repositori dengan menjalankan perintah berikut di jendela terminal:<pre>git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git</pre>Untuk informasi selengkapnya, lihat [Mengkloning repositori dalam dokumentasi](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository). GitHub  | AWS DevOps | 
| Unggah folder Solution Templates dari GitHub repositori kloning ke bucket Amazon S3 Anda.  | Salin konten dari folder **Solution-Templates** yang dikloning dan unggah ke bucket Amazon S3 yang Anda buat.Untuk informasi selengkapnya, lihat [Mengunggah objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) di dokumentasi Amazon S3.Pastikan Anda mengunggah konten folder **Solution-Templates** saja. Anda dapat mengunggah file di tingkat root bucket Amazon S3 saja. | AWS DevOps | 

### Terapkan solusinya
<a name="deploy-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation tumpukan untuk menerapkan solusi dengan menggunakan file template.ymldi repositori kloning. GitHub  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Saat tumpukan Anda sedang dibuat, itu terdaftar di halaman **Stacks** dengan status **CREATE\$1IN\$1PROGRESS**. Pastikan Anda menunggu status tumpukan berubah menjadi **CREATE\$1COMPLETE** sebelum menyelesaikan langkah-langkah yang tersisa dalam pola ini. | Administrator AWS, AWS DevOps | 

### Uji penyiapan
<a name="test-the-setup"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan fungsi langkah yang Anda buat.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)**Pemformatan JSON**<pre>{<br />  "details": {<br />    "tech_stack": "Name of the Tech Stack (python/java)",<br />    "project_name": "Name of the Project that you want to create with",<br />    "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />    "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no",<br />  }<br />}</pre>**Contoh masukan JSON Java**<pre>{<br />  "details": {<br />    "tech_stack": "java",<br />    "project_name": "pipeline-java-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre>**Contoh masukan Python JSON**<pre>{<br />  "details": {<br />    "tech_stack": "python",<br />    "project_name": "pipeline-python-pjt",<br />    "pre_build": "yes",<br />    "build": "yes",<br />    "post_build": "yes",<br />    "reports": "yes"<br />  }<br />}</pre> | Administrator AWS, AWS DevOps | 
| Konfirmasikan bahwa CodeCommit repositori untuk pipa CI telah dibuat. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Periksa sumber daya CodeBuild proyek. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Validasi CodePipeline tahapan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 
| Konfirmasikan bahwa pipa CI berhasil berjalan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html) | AWS DevOps | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus tumpukan sumber daya di CloudFormation. | Hapus tumpukan sumber daya pipa CI di CloudFormation.Untuk informasi selengkapnya, lihat [Menghapus tumpukan di CloudFormation konsol AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) dalam CloudFormation dokumentasi.Pastikan Anda menghapus tumpukan bernama **-stack**<project\$1name>. | AWS DevOps | 
| Hapus dependensi pipeline CI di Amazon S3 dan. CloudFormation | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.html)Pastikan Anda menghapus tumpukan bernama **pipeline-creation-dependencies-stack**. | AWS DevOps | 
| Hapus bucket template Amazon S3. | Hapus bucket Amazon s3 yang Anda buat di bagian **Konfigurasikan prasyarat** dari pola ini, yang menyimpan templat untuk solusi ini.Untuk informasi selengkapnya, lihat [Menghapus bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) di dokumentasi Amazon S3. | AWS DevOps | 

## Sumber daya terkait
<a name="create-dynamic-ci-pipelines-for-java-and-python-projects-automatically-resources"></a>
+ [Membuat mesin status Step Functions yang menggunakan Lambda](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) (dokumentasi AWS Step Functions)
+ [AWS Step Functions WorkFlow Studio](https://docs.aws.amazon.com/step-functions/latest/dg/workflow-studio.html) (dokumentasi AWS Step Functions)
+ [DevOps dan AWS](https://aws.amazon.com/devops/)
+ [Bagaimana cara CloudFormation kerja AWS?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-whatis-howdoesitwork.html) ( CloudFormation Dokumentasi AWS)
+ [Lengkap CI/CD dengan AWS CodeCommit, AWS CodeBuild, AWS CodeDeploy, dan AWS CodePipeline](https://aws.amazon.com/blogs/devops/complete-ci-cd-with-aws-codecommit-aws-codebuild-aws-codedeploy-and-aws-codepipeline/) (postingan blog AWS)
+ [Kuota IAM dan AWS STS, persyaratan nama, dan batas karakter (dokumentasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) IAM)

# Menyebarkan kenari CloudWatch Synthetics dengan menggunakan Terraform
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

*Dhrubajyoti Mukherjie dan Jean-Francois Landerau, Amazon Web Services*

## Ringkasan
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-summary"></a>

Penting untuk memvalidasi kesehatan sistem dari perspektif pelanggan dan mengonfirmasi bahwa pelanggan dapat terhubung. Ini lebih sulit ketika pelanggan tidak terus-menerus memanggil titik akhir. [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) mendukung pembuatan kenari, yang dapat menguji titik akhir publik dan pribadi. Dengan menggunakan kenari, Anda dapat mengetahui status suatu sistem meskipun tidak digunakan. Burung kenari ini adalah skrip Dalang Node.js atau skrip Python Selenium.

Pola ini menjelaskan cara menggunakan HashiCorp Terraform untuk menyebarkan kenari yang menguji titik akhir pribadi. Ini menyematkan skrip Dalang yang menguji apakah URL kembali. `200-OK` Skrip Terraform kemudian dapat diintegrasikan dengan skrip yang menyebarkan titik akhir pribadi. Anda juga dapat memodifikasi solusi untuk memantau titik akhir publik.

## Prasyarat dan batasan
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**Prasyarat**
+ Akun Amazon Web Services (AWS) aktif dengan virtual private cloud (VPC) dan subnet pribadi
+ URL titik akhir yang dapat dicapai dari subnet pribadi
+ Terraform diinstal di lingkungan penerapan

**Keterbatasan**

Solusi saat ini berfungsi untuk versi runtime CloudWatch Synthetics berikut:
+ syn-nodejs-puppeteer-3,4
+ syn-nodejs-puppeteer-3,5
+ syn-nodejs-puppeteer-3,6
+ syn-nodejs-puppeteer-3,7

Saat versi runtime baru dirilis, Anda mungkin perlu memperbarui solusi saat ini. Anda juga perlu memodifikasi solusi untuk mengikuti pembaruan keamanan.

**Versi produk**
+ Terraform 1.3.0

## Arsitektur
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-architecture"></a>

Amazon CloudWatch Synthetics didasarkan pada, CloudWatch Lambda, dan Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch menawarkan wizard untuk membuat kenari dan dasbor yang menampilkan status kenari berjalan. Fungsi Lambda menjalankan skrip. Amazon S3 menyimpan log dan tangkapan layar dari kenari berjalan.

Pola ini mensimulasikan titik akhir pribadi melalui instans Amazon Elastic Compute Cloud (Amazon EC2) yang diterapkan di subnet yang ditargetkan. Fungsi Lambda memerlukan antarmuka jaringan elastis di VPC tempat titik akhir pribadi digunakan.

![\[Deskripsi mengikuti diagram.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


Diagram menunjukkan yang berikut:

1. Canary Synthetics memulai fungsi Lambda kenari.

1. Fungsi Canary Lambda terhubung ke interface elastic network.

1. Fungsi Lambda kenari memonitor status titik akhir.

1. Canary Synthetics mendorong data run ke bucket dan metrik S3. CloudWatch 

1.  CloudWatch Alarm dimulai berdasarkan metrik.

1.  CloudWatch Alarm memulai topik Amazon Simple Notification Service (Amazon SNS).

## Alat
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Layanan AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) membantu Anda memantau metrik sumber daya AWS Anda dan aplikasi yang Anda jalankan di AWS secara real time.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email.
+ [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.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan sumber daya AWS ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur AWS yang dapat diskalakan. Pola ini menggunakan titik akhir VPC dan antarmuka jaringan elastis.

**Layanan lainnya**
+ [HashiCorp Terraform](https://www.terraform.io/docs) adalah alat infrastruktur sumber terbuka sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud. Pola ini menggunakan Terraform untuk menyebarkan infrastruktur.
+ [Puppeteer](https://pptr.dev/) adalah perpustakaan Node.js. Runtime CloudWatch Synthetics menggunakan framework Puppeteer.

**Kode**

Solusinya tersedia di watch-synthetics-canary-terraform repositori GitHub [cloud](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform). Untuk informasi selengkapnya, lihat bagian *Informasi tambahan*.

## Epik
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-epics"></a>

### Menerapkan solusi untuk memantau URL pribadi
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kumpulkan persyaratan untuk memantau URL pribadi. | Kumpulkan definisi URL lengkap: domain, parameter, dan header. Untuk berkomunikasi secara pribadi ke Amazon S3 dan CloudWatch Amazon, gunakan titik akhir VPC. Perhatikan bagaimana VPC dan subnet dapat diakses ke titik akhir. Pertimbangkan frekuensi lari kenari. | Arsitek awan, Administrator jaringan | 
| Ubah solusi yang ada untuk memantau URL pribadi. | Ubah `terraform.tfvars` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arsitek awan | 
| Menyebarkan dan mengoperasikan solusi. | Untuk menerapkan solusi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arsitek awan, DevOps insinyur | 

## Pemecahan masalah
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penghapusan sumber daya yang disediakan macet. | Hapus fungsi Lambda kenari secara manual, elastis network interface yang sesuai, dan grup keamanan, dalam urutan itu. | 

## Sumber daya terkait
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Menggunakan pemantauan sintetis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Pantau titik akhir API Gateway dengan Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (posting blog)

## Informasi tambahan
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**Artefak repositori**

Artefak repositori berada dalam struktur berikut.

```
.
├── README.md
├── main.tf
├── modules
│   ├── canary
│   └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
```

`main.tf`File berisi modul inti, dan menyebarkan dua submodul:
+ `canary-infra`menyebarkan infrastruktur yang dibutuhkan untuk burung kenari.
+ `canary`menyebarkan burung kenari.

Parameter input untuk solusi terletak di `terraform.tfvars` file. Anda dapat menggunakan contoh kode berikut untuk membuat satu kenari.

```
module "canary" {
    source = "./modules/canary"
    name   = var.name
    runtime_version = var.runtime_version
    take_screenshot = var.take_screenshot
    api_hostname = var.api_hostname
    api_path = var.api_path
    reports-bucket = module.canary_infra.reports-bucket
    role = module.canary_infra.role
    security_group_id = module.canary_infra.security_group_id
    subnet_ids = var.subnet_ids
    frequency = var.frequency
    alert_sns_topic = var.alert_sns_topic
}
```

File.var yang sesuai mengikuti.

```
name   = "my-canary"
runtime_version = "syn-nodejs-puppeteer-3.7"
take_screenshot = false
api_hostname = "mydomain.internal"
api_path = "/path?param=value"
vpc_id = "vpc_id"
subnet_ids = ["subnet_id1"]
frequency = 5
alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
```

**Membersihkan solusinya**

Jika Anda menguji ini di lingkungan pengembangan, Anda dapat membersihkan solusi untuk menghindari biaya yang masih harus dibayar.

1. Di AWS Management Console, navigasikan ke konsol Amazon S3. Kosongkan bucket Amazon S3 yang dibuat oleh solusi. Pastikan untuk mengambil cadangan data, jika diperlukan.

1. Di lingkungan pengembangan Anda, dari `cloudwatch-synthetics-canary-terraform` direktori, jalankan `destroy` perintah.

   ```
   terraform destroy
   ```

# Terapkan ChatOps solusi untuk mengelola hasil pemindaian SAST dengan menggunakan Amazon Q Developer dalam tindakan kustom aplikasi obrolan dan CloudFormation
<a name="deploy-chatops-solution-to-manage-sast-scan-results"></a>

*Anand Bukkapatnam Tirumala, Amazon Web Services*

## Ringkasan
<a name="deploy-chatops-solution-to-manage-sast-scan-results-summary"></a>

Pola ini menyajikan solusi komprehensif yang menggunakan Pengembang Amazon Q dalam aplikasi obrolan untuk merampingkan pengelolaan kegagalan pemindaian pengujian keamanan aplikasi statis (SAST) yang dilaporkan melalui. SonarQube Pendekatan inovatif ini mengintegrasikan tindakan dan pemberitahuan khusus ke dalam antarmuka percakapan, memungkinkan kolaborasi yang efisien dan proses pengambilan keputusan dalam tim pengembangan.

Dalam lingkungan pengembangan perangkat lunak yang serba cepat saat ini, mengelola hasil pemindaian SAST secara efisien sangat penting untuk menjaga kualitas dan keamanan kode. Namun, banyak organisasi menghadapi tantangan signifikan berikut:
+ Kesadaran yang tertunda akan kerentanan kritis karena sistem notifikasi yang tidak efisien
+ Proses pengambilan keputusan yang lambat disebabkan oleh alur kerja persetujuan yang terputus
+ Kurangnya respons langsung dan dapat ditindaklanjuti terhadap kegagalan pemindaian SAST
+ Komunikasi dan kolaborasi yang terfragmentasi seputar temuan keamanan
+ Pengaturan infrastruktur manual yang memakan waktu dan rawan kesalahan untuk perkakas keamanan

Masalah-masalah ini sering menyebabkan peningkatan risiko keamanan, rilis yang tertunda, dan penurunan produktivitas tim. Untuk mengatasi tantangan ini secara efektif diperlukan solusi yang dapat merampingkan manajemen hasil SAST, meningkatkan kolaborasi tim, dan mengotomatiskan penyediaan infrastruktur.

Fitur utama dari solusi ini meliputi:
+ **Pemberitahuan yang disesuaikan** — Peringatan dan notifikasi real-time dikirimkan langsung ke saluran obrolan tim, memastikan kesadaran dan tindakan yang cepat pada kerentanan atau kegagalan pemindaian SAST.
+ **Persetujuan percakapan** - Pemangku kepentingan dapat memulai dan menyelesaikan alur kerja persetujuan untuk hasil pemindaian SAST dengan mulus dalam antarmuka obrolan, mempercepat proses pengambilan keputusan.
+ **Tindakan kustom** — Tim dapat menentukan dan menjalankan tindakan khusus berdasarkan hasil pemindaian SAST, seperti secara otomatis memicu pesan email untuk kegagalan gerbang kualitas, meningkatkan respons terhadap masalah keamanan.
+ **Kolaborasi terpusat** - Semua diskusi, keputusan, dan tindakan terkait pemindaian SAST disimpan dalam lingkungan obrolan terpadu, mendorong peningkatan kolaborasi dan berbagi pengetahuan di antara anggota tim.
+ **Infrastructure as code (IAc)** — Seluruh solusi dibungkus dengan AWS CloudFormation template, memungkinkan penyediaan infrastruktur yang lebih cepat dan lebih andal sekaligus mengurangi kesalahan pengaturan manual.

## Prasyarat dan batasan
<a name="deploy-chatops-solution-to-manage-sast-scan-results-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ [Peran AWS Identity and Access Management (IAM) dengan izin untuk membuat dan mengelola sumber daya yang terkait dengan yang Layanan AWS tercantum di Alat.](#deploy-chatops-solution-to-manage-sast-scan-results-tools)
+ Ruang kerja Slack.
+ Pengembang Amazon Q dalam aplikasi obrolan ditambahkan ke ruang kerja Slack yang diperlukan sebagai plugin. Untuk informasi selengkapnya, lihat [Menambahkan aplikasi ke ruang kerja Slack](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) di dokumentasi Slack. Catat ID ruang kerja Slack seperti yang ditunjukkan pada pendaftaran Konsol Manajemen AWS setelah berhasil.
+ Pengembang Amazon Q yang dikonfigurasi di klien aplikasi obrolan, dengan ID ruang kerja yang tersedia untuk dimasukkan di CloudFormation konsol. Untuk petunjuk, lihat [Mengkonfigurasi klien Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup) di *Pengembang Amazon Q di Panduan Administrator aplikasi obrolan*.
+ Akun email sumber yang dibuat dan diverifikasi di Amazon Simple Email Service (Amazon SES) untuk mengirimkan pesan email persetujuan. Untuk petunjuk penyiapan, lihat [Membuat dan memverifikasi identitas email](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) di *Panduan Pengembang Layanan Email Sederhana Amazon*.
+ Alamat email tujuan untuk menerima pemberitahuan persetujuan. Alamat ini dapat berupa kotak masuk bersama atau daftar distribusi tim tertentu.
+  SonarQube Contoh operasional yang dapat diakses dari Anda Akun AWS. Untuk informasi selengkapnya, lihat [petunjuk SonarQube penginstalan](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/).
+ [Token SonarQube pengguna](https://docs.sonarsource.com/sonarqube-server/latest/user-guide/managing-tokens/) dengan izin untuk memicu dan membuat proyek melalui pipeline.

**Batasan**
+ Pembuatan tombol tindakan khusus adalah proses manual dalam solusi ini. 
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="deploy-chatops-solution-to-manage-sast-scan-results-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![\[Alur kerja untuk menerapkan jaminan kualitas kode otomatis untuk manajemen rilis menggunakan Amazon Q Developer.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/a977924c-957e-4f91-99d6-ed790e343ea6.png)


Diagram menunjukkan alur kerja jaminan kualitas kode otomatis:

1. Persiapan dan unggah kode:
   + Pengembang mengompres basis kode menjadi file.zip.
   + Pengembang secara manual mengunggah file.zip ke bucket Amazon Simple Storage Service (Amazon S3) yang ditunjuk.

1. Pemicu dan orkestrasi peristiwa Amazon S3: AWS Step Functions 
   + Peristiwa upload Amazon S3 memicu alur kerja Step Functions.
   + Step Functions mengatur pemindaian SAST menggunakan. SonarQube
   + Alur kerja memantau status AWS CodeBuild pekerjaan untuk menentukan tindakan selanjutnya. Jika CodeBuild berhasil (quality gate pass), alur kerja berakhir. Jika CodeBuild gagal, AWS Lambda fungsi dipanggil untuk diagnostik. Untuk lebih jelasnya, lihat **AWS Step Functions logika** nanti di bagian ini.

1. AWS CodeBuild eksekusi:
   +  CodeBuild Pekerjaan mengeksekusi SonarQube pemindaian pada basis kode yang diunggah.
   + Artefak pemindaian disimpan dalam bucket Amazon S3 terpisah untuk audit dan analisis.

1. Analisis kegagalan (fungsi Lambda):
   + Pada CodeBuild kegagalan, fungsi `CheckBuildStatus` Lambda dipicu.
   + Setelah CodeBuild sukses, proses dihentikan dan tidak diperlukan tindakan lebih lanjut.

1. Fungsi Lambda menganalisis penyebab kegagalan (kegagalan gerbang kualitas atau masalah lainnya)
   + `CheckBuildStatus`Fungsi ini membuat muatan khusus dengan informasi kegagalan terperinci.
   + `CheckBuildStatus`Fungsi ini menerbitkan payload khusus ke topik Amazon Simple Notification Service (Amazon SNS).

1. Sistem pemberitahuan:
   + Amazon SNS meneruskan muatan ke Pengembang Amazon Q dalam aplikasi obrolan untuk integrasi Slack.

1. Integrasi kendur:
   + Pengembang Amazon Q dalam aplikasi obrolan memposting pemberitahuan di saluran Slack yang ditunjuk.

1. Proses persetujuan:
   + Pemberi persetujuan meninjau detail kegagalan dalam pemberitahuan Slack.
   + Pemberi persetujuan dapat memulai persetujuan menggunakan tombol **Approve** di Slack.

1. Penangan persetujuan:
   + Fungsi Lambda Persetujuan memproses tindakan persetujuan dari Slack.
   + Fungsi Persetujuan menerbitkan pesan khusus ke Amazon SES.

1. Pesan yang dihasilkan:
   + Fungsi Persetujuan menghasilkan pesan khusus untuk pemberitahuan pengembang.

1. Pemberitahuan pengembang:
   + Amazon SES mengirimkan pesan email ke pengembang dengan langkah berikutnya atau tindakan yang diperlukan.

Alur kerja ini menggabungkan pengunggahan kode manual dengan pemeriksaan kualitas otomatis, memberikan umpan balik langsung melalui Slack, dan memungkinkan intervensi manusia bila diperlukan, memastikan proses peninjauan kode yang kuat dan fleksibel.

**AWS Step Functions logika**

Seperti yang ditunjukkan pada diagram arsitektur sebelumnya, jika gerbang kualitas diteruskan SonarQube gagal, alur kerja masuk ke fungsi `CheckBuildStatus` Lambda. `CheckBuildStatus`Fungsi ini memicu pemberitahuan di saluran Slack. Setiap pemberitahuan mencakup informasi dengan langkah-langkah berikutnya yang disarankan. Berikut ini adalah jenis notifikasi:
+ **Aplikasi telah gagal dalam pemindaian keamanan kode** — Pengguna menerima pemberitahuan ini ketika kode yang diunggah tidak lulus pemindaian SonarQube keamanan. Pengguna dapat memilih **APPROVE** untuk menerima build. Namun, pemberitahuan tersebut menyarankan pengguna untuk berhati-hati terhadap potensi kualitas kode yang buruk dan risiko keamanan. Pemberitahuan tersebut mencakup detail berikut:
  + Langkah selanjutnya: Kesalahan: Status gerbang kualitas: GAGAL — Lihat detail di URL yang disediakan.
  + Triase kerentanan seperti yang disebutkan dalam dokumen di URL yang disediakan.
  + CodeBuild rincian tersedia di lokasi di URL yang disediakan.
+ **Pipeline pemindaian aplikasi telah gagal karena beberapa alasan lain** - Pengguna menerima pemberitahuan ini ketika pipa gagal karena beberapa alasan selain gagal pemindaian keamanan kode. Pemberitahuan tersebut mencakup detail berikut:
  + Untuk langkah selanjutnya, buka tautan yang disediakan untuk pemecahan masalah lebih lanjut.

Untuk melihat tangkapan layar notifikasi saat muncul di saluran Slack, buka [folder aset](https://github.com/aws-samples/chatops-slack/tree/main/assets) di repositori GitHub chatops-slack.

Diagram berikut menunjukkan contoh status langkah Step Functions setelah quality gate pass gagal.

![\[Alur kerja status langkah AWS Step Functions setelah Quality Gate Pass gagal.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/198312ed-e379-49a7-b706-8e79e2142f21/images/40b7ebf0-2518-4413-9717-0bfb7559adde.png)


## Alat
<a name="deploy-chatops-solution-to-manage-sast-scan-results-tools"></a>

**Layanan AWS**
+ [Pengembang Amazon Q dalam aplikasi obrolan](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html) memungkinkan Anda menggunakan saluran obrolan Amazon Chime, Microsoft Teams, dan Slack untuk memantau dan menanggapi peristiwa operasional di aplikasi Anda. AWS *Pemberitahuan akhir dukungan:* Pada 20 Februari 2026, AWS akan mengakhiri dukungan untuk layanan Amazon Chime. Setelah 20 Februari 2026, Anda tidak akan lagi dapat mengakses konsol Amazon Chime atau sumber daya aplikasi Amazon Chime. Untuk informasi lebih lanjut, kunjungi [posting blog](https://aws.amazon.com/blogs/messaging-and-targeting/update-on-support-for-amazon-chime/). Ini tidak memengaruhi ketersediaan layanan [Amazon Chime SDK](https://aws.amazon.com/chime/chime-sdk/).
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)adalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya 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.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.
+ [Amazon Simple Email Service (Amazon SES)](https://docs.aws.amazon.com/ses/latest/dg/Welcome.html) membantu Anda mengirim dan menerima pesan email dengan menggunakan alamat email dan domain Anda sendiri.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) membantu Anda mengoordinasikan dan mengelola pertukaran pesan antara penayang dan klien, termasuk server web dan alamat email.
+ [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.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting.

**Alat lainnya**
+ [Slack](https://slack.com/help/articles/115004071768-What-is-Slack-), penawaran Salesforce, adalah platform percakapan bertenaga AI yang menyediakan kolaborasi obrolan dan video, mengotomatiskan proses tanpa kode, dan mendukung berbagi informasi.
+ [SonarQube](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/)adalah alat analisis lokal yang dirancang untuk mendeteksi masalah pengkodean di lebih dari 30 bahasa, kerangka kerja, dan platform IAc.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [chatops-slack](https://github.com/aws-samples/chatops-slack).

## Praktik terbaik
<a name="deploy-chatops-solution-to-manage-sast-scan-results-best-practices"></a>
+ **CloudFormation manajemen tumpukan** - Jika Anda mengalami kegagalan selama eksekusi CloudFormation tumpukan, kami sarankan Anda menghapus tumpukan yang gagal. Kemudian, buat ulang dengan nilai parameter yang benar. Pendekatan ini mendukung penerapan yang bersih dan membantu menghindari potensi konflik atau implementasi sebagian.
+ **Konfigurasi email kotak masuk bersama** — Saat Anda mengonfigurasi `SharedInboxEmail` parameter, gunakan daftar distribusi umum yang dapat diakses oleh semua pengembang yang relevan. Pendekatan ini mempromosikan transparansi dan membantu pemberitahuan penting menjangkau anggota tim yang relevan.
+ **Alur kerja persetujuan produksi** — Untuk lingkungan produksi, batasi akses ke saluran Slack yang digunakan untuk persetujuan build. Hanya pemberi persetujuan yang ditunjuk yang harus menjadi anggota saluran ini. Praktik ini mempertahankan rantai tanggung jawab yang jelas dan meningkatkan keamanan dengan membatasi siapa yang dapat menyetujui perubahan kritis.
+ **Izin IAM** - Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html) dalam dokumentasi IAM.

## Epik
<a name="deploy-chatops-solution-to-manage-sast-scan-results-epics"></a>

### Lakukan pengaturan awal
<a name="perform-initial-setup"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori [chatops-slack](https://github.com/aws-samples/chatops-slack) untuk pola ini, gunakan perintah berikut.`git clone "git@github.com:aws-samples/chatops-slack.git"` | AWS DevOps, Membangun pemimpin, DevOps insinyur, administrator Cloud | 
| Buat file.zip yang berisi kode Lambda. | Buat file.zip untuk kode AWS Lambda fungsi untuk `CheckBuildStatus` dan `ApprovalEmail` fungsionalitas. Untuk membuat `notification.zip` dan`approval.zip`, gunakan perintah berikut.<pre>cd chatops-slack/src</pre><pre>chmod -R 775 *</pre><pre>zip -r approval.zip approval</pre><pre>zip -r notification.zip notification</pre> | AWS DevOps, Membangun pemimpin, DevOps insinyur, administrator Cloud | 

### Terapkan file tumpukan pre-requisite.yml.
<a name="deploy-the-pre-requisite-yml-stack-file"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan file `pre-requisite.yml` tumpukan. | File `pre-requisite.yml` CloudFormation stack menyebarkan sumber daya awal yang diperlukan sebelum Anda mengeksekusi file `app-security.yml` stack. Untuk menjalankan `pre-requisite.yml` file, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrator AWS, AWS DevOps, Pemimpin build, DevOps insinyur | 
| Unggah file.zip ke bucket Amazon S3. | Unggah `approval.zip` file `notification.zip` dan file yang Anda buat sebelumnya ke bucket Amazon S3 bernama. `S3LambdaBucket` File `app-security.yml` CloudFormation stack digunakan `S3LambdaBucket` untuk menyediakan fungsi Lambda. | AWS DevOps, Build lead, DevOps engineer, administrator sistem AWS | 

### Jalankan file tumpukan app-security.yl
<a name="execute-the-app-security-yml-stack-file"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan file `app-security.yml` tumpukan. | File `app-security.yml` tumpukan menyebarkan infrastruktur yang tersisa untuk notifikasi dan sistem persetujuan. Untuk menjalankan `app-security.yml` file, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | AWS DevOps, administrator sistem AWS, DevOps insinyur, Membangun prospek | 
| Uji pengaturan notifikasi. | Untuk menguji pengaturan notifikasi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html)Setelah pesan pengujian berhasil dikirim, Anda akan melihat pemberitahuan di saluran Slack. Untuk informasi selengkapnya, lihat [Menguji notifikasi dari Layanan AWS ke Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#test-notifications-slack) di *Pengembang Amazon Q di Panduan Administrator aplikasi obrolan*. | AWS DevOps, administrator sistem AWS, DevOps insinyur, Membangun prospek | 

### Mengatur alur persetujuan
<a name="set-up-approval-flow"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan tindakan Lambda khusus. | Untuk mengatur AWS Lambda tindakan kustom, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | Administrator AWS, AWS DevOps, Pemimpin build, DevOps insinyur, Admin Slack | 
| Validasi aliran persetujuan. | Untuk memvalidasi bahwa alur persetujuan berfungsi seperti yang diharapkan, pilih tombol **Setujui** di Slack.Slackbot harus mengirim pemberitahuan di utas pesan dengan string konfirmasi **Email Persetujuan berhasil dikirim**. | Administrator AWS, AWS DevOps, DevOps insinyur, Admin Slack | 

## Pemecahan masalah
<a name="deploy-chatops-solution-to-manage-sast-scan-results-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Kesalahan konfigurasi Slack | Untuk informasi tentang masalah pemecahan masalah yang terkait dengan kesalahan konfigurasi Slack, lihat Memecahkan Masalah Pengembang Amazon Q di Panduan Administrator Pengembang Amazon Q di aplikasi *obrolan*. | 
| Pemindaian gagal karena beberapa alasan lain | Kesalahan ini berarti bahwa tugas pembuatan kode telah gagal. Untuk memecahkan masalah, buka tautan yang ada di pesan. Kegagalan tugas pembuatan kode mungkin memiliki kemungkinan penyebab berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-chatops-solution-to-manage-sast-scan-results.html) | 

## Sumber daya terkait
<a name="deploy-chatops-solution-to-manage-sast-scan-results-resources"></a>

**AWS dokumentasi**
+ [Konfigurasikan klien Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html#slack-client-setup)
+ [Membuat tindakan kustom](https://docs.aws.amazon.com/chatbot/latest/adminguide/custom-actions.html#creating-custom-actions)
+ [Membuat [prosedur](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure) identitas alamat email](https://docs.aws.amazon.com/ses/latest/dg/creating-identities.html#verify-email-addresses-procedure)
+ [Tutorial: Memulai dengan Slack](https://docs.aws.amazon.com/chatbot/latest/adminguide/slack-setup.html)

**Sumber daya lainnya**
+ [Tambahkan aplikasi ke ruang kerja Slack Anda (dokumentasi](https://slack.com/intl/en-in/help/articles/202035138-Add-apps-to-your-Slack-workspace) Slack)
+ [Menghasilkan dan menggunakan token](https://docs.sonarsource.com/sonarqube/latest/user-guide/user-account/generating-and-using-tokens/) (SonarQube dokumentasi)
+ [Pengantar instalasi server](https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/install-the-server/introduction/) (SonarQube dokumentasi)

## Informasi tambahan
<a name="deploy-chatops-solution-to-manage-sast-scan-results-additional"></a>

Solusi ini menekankan Amazon Q Developer dalam tindakan kustom aplikasi obrolan untuk tujuan manajemen rilis. Namun, Anda dapat menggunakan kembali solusi dengan memodifikasi kode Lambda untuk kasus penggunaan spesifik Anda dan membangun di atasnya.

**Parameter file CloudFormation tumpukan**

Tabel berikut menunjukkan parameter dan deskripsi mereka untuk file CloudFormation `pre-requisite.yml` stack.


| 
| 
| **Kunci** | **Deskripsi** | 
| --- |--- |
| `StackName` | Nama CloudFormation tumpukan. | 
| `S3LambdaBucket` | Nama bucket Amazon S3 tempat Anda mengunggah kode Lambda. Nama harus unik secara global. | 
| `SonarToken` | Token SonarQube pengguna seperti yang dijelaskan dalam [Prasyarat](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). | 

Tabel berikut menunjukkan parameter dan deskripsi mereka untuk file CloudFormation `app-security.yml` stack.


| 
| 
| **Kunci** | **Deskripsi** | 
| --- |--- |
| `CKMSKeyArn` | Nama Sumber Daya AWS KMS key Amazon (ARN) yang digunakan dalam peran IAM dan fungsi Lambda yang dibuat di tumpukan ini. | 
| `CKMSKeyId` |  AWS KMS key ID yang digunakan dalam topik Amazon SNS dibuat di tumpukan ini. | 
| `EnvironmentType` | Nama lingkungan klien untuk penyebaran pipeline pemindaian aplikasi. Pilih nama lingkungan dari daftar dropdown nilai yang diizinkan. | 
| `S3LambdaBucket` | Nama bucket Amazon S3 yang berisi file `approval.zip` dan `notification.zip` file. | 
| `SESEmail` | Nama identitas email terdaftar di Amazon SES seperti yang dijelaskan dalam [Prasyarat](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs). Identitas ini adalah alamat email sumber. | 
| `SharedInboxMail` | Alamat email tujuan tempat pemberitahuan pemindaian dikirim. | 
| `SlackChannelId` | ID saluran saluran Slack tempat Anda ingin notifikasi dikirim. Untuk menemukan ID saluran, klik kanan nama saluran di **Detail Saluran** di aplikasi Slack. ID saluran ada di bagian bawah. | 
| `SlackWorkspaceId` | [ID ruang kerja Slack seperti yang dijelaskan dalam Prasyarat.](#deploy-chatops-solution-to-manage-sast-scan-results-prereqs) **Untuk menemukan ID ruang kerja Slack, masuk ke, buka Amazon Q Developer di konsol aplikasi obrolan Konsol Manajemen AWS, dan pilih **Klien yang dikonfigurasi**, **Slack**, WorkspaceID.** | 
| `StackName` | Nama CloudFormation tumpukan. | 
| `SonarFileDirectory` | Direktori yang berisi `sonar.project.<env>.properties` file. | 
| `SonarFileName` | Nama `sonar.project.<env>properties` file. | 
| `SourceCodeZip` | Nama file.zip yang berisi `sonar.project.<env>properties` file dan kode sumber. | 

# Terapkan sistem agen di Amazon Bedrock dengan framework CreWai dengan menggunakan Terraform
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework"></a>

*Vanitha Dontireddy, Amazon Web Services*

## Ringkasan
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-summary"></a>

[https://aws.amazon.com/bedrock/?nc1=h_ls](https://aws.amazon.com/bedrock/?nc1=h_ls) Solusi ini memungkinkan organisasi untuk membuat, menyebarkan, dan mengelola alur kerja agen AI yang canggih melalui infrastruktur sebagai kode (IAc). Dalam pola ini, kemampuan orkestrasi multi-agen CreWai digabungkan dengan model fondasi Amazon Bedrock dan otomatisasi infrastruktur Terraform. Hasilnya, tim dapat membangun sistem AI siap produksi yang menangani tugas-tugas kompleks dengan pengawasan manusia yang minimal. Pola ini menerapkan keamanan tingkat perusahaan, skalabilitas, dan praktik terbaik operasional. 

## Prasyarat dan batasan
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS dengan izin yang sesuai untuk [mengakses model dasar Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [Terraform versi 1.5 atau yang lebih baru diinstal](https://developer.hashicorp.com/terraform/install)
+ [Python versi 3.9 atau yang lebih baru diinstal](https://www.python.org/downloads/)
+ [Kerangka kerja CreWai diinstal](https://docs.crewai.com/installation)

**Batasan**
+ Interaksi agen dibatasi oleh jendela konteks model.
+ Pertimbangan manajemen status Terraform untuk penerapan skala besar berlaku untuk pola ini.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture"></a>

Dalam pola ini, interaksi berikut terjadi:
+ Amazon Bedrock menyediakan dasar untuk intelijen agen melalui rangkaian model fondasinya (FMs). Ini memungkinkan pemrosesan bahasa alami (NLP), penalaran, dan kemampuan pengambilan keputusan untuk agen AI sambil mempertahankan ketersediaan dan skalabilitas yang tinggi.
+ Kerangka CreWai berfungsi sebagai lapisan orkestrasi inti untuk membuat dan mengelola agen AI. Ini menangani protokol komunikasi agen, delegasi tugas, dan manajemen alur kerja sambil berintegrasi dengan Amazon Bedrock.
+ Terraform mengelola seluruh tumpukan infrastruktur melalui kode, termasuk sumber daya komputasi, jaringan, grup keamanan, dan peran AWS Identity and Access Management (IAM). Ini memastikan penerapan yang konsisten dan dikendalikan versi di seluruh lingkungan. Penerapan Terraform membuat yang berikut:
  + AWS Lambda fungsi untuk menjalankan aplikasi CreWai
  + Bucket Amazon Simple Storage Service (Amazon S3) untuk kode dan laporan
  + Peran IAM dengan izin yang sesuai
  +  CloudWatch Pencatatan Amazon
  + Eksekusi terjadwal oleh Amazon EventBridge

Diagram berikut mengilustrasikan arsitektur untuk menerapkan sistem multi-agen CreWai dengan menggunakan Amazon Bedrock dan Terraform.

![\[Alur kerja untuk menerapkan sistem multi-agen CreWai menggunakan Terraform dan Amazon Bedrock.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b46069e9-4c38-405f-b0f0-310eabb06b06/images/b3296b17-e388-46ba-8d71-2ec7ce3ed3e0.png)


Diagram menunjukkan alur kerja berikut:

1. Pengguna mengkloning repositori.

1. Pengguna menjalankan perintah `terraform apply` untuk menyebarkan AWS sumber daya.

1. Konfigurasi model Amazon Bedrock mencakup penentuan model pondasi (FM) yang akan digunakan untuk mengonfigurasi agen CrewAI.

1.  EventBridge Aturan dibuat untuk memicu fungsi Lambda sesuai dengan jadwal yang ditentukan.

1. Saat dipicu (baik berdasarkan jadwal atau manual), fungsi Lambda menginisialisasi dan mengasumsikan peran IAM dengan izin untuk mengakses dan Amazon Bedrock. Layanan AWS 

1. Kerangka kerja CreWai memuat konfigurasi agen dari file YAMAL dan membuat agen AI khusus (kru audit *keamanan AWS infrastruktur*). Fungsi Lambda secara berurutan mengeksekusi agen ini untuk memindai AWS sumber daya, menganalisis kerentanan keamanan, dan menghasilkan laporan audit yang komprehensif.

1. CloudWatch Log menangkap informasi eksekusi terperinci dari fungsi Lambda dengan periode retensi 365 hari AWS Key Management Service dan enkripsi AWS KMS() untuk persyaratan kepatuhan. Log memberikan visibilitas ke aktivitas agen, pelacakan kesalahan, dan metrik kinerja, memungkinkan pemantauan dan pemecahan masalah yang efektif dari proses audit keamanan.

1. Laporan audit keamanan dibuat dan disimpan secara otomatis di bucket Amazon S3 yang ditentukan. Pengaturan otomatis membantu menjaga pemantauan keamanan yang konsisten dengan overhead operasional minimal.

Setelah penerapan awal, alur kerja menyediakan audit dan pelaporan keamanan berkelanjutan untuk AWS infrastruktur Anda tanpa intervensi manual.

**Ikhtisar agen AI**

Pola ini menciptakan beberapa agen AI, masing-masing dengan peran, sasaran, dan alat unik:
+ **Agen analis keamanan** mengumpulkan dan menganalisis informasi AWS sumber daya.
+ **Agen penguji penetrasi** mengidentifikasi kerentanan dalam sumber daya. AWS 
+ **Agen pakar kepatuhan** memeriksa konfigurasi terhadap standar kepatuhan.
+ **Agen penulis laporan** mengumpulkan temuan ke dalam laporan komprehensif.

Agen-agen ini berkolaborasi dalam serangkaian tugas, memanfaatkan keterampilan kolektif mereka untuk melakukan audit keamanan dan menghasilkan laporan yang komprehensif. (`config/agents.yaml`File tersebut menguraikan kemampuan dan konfigurasi masing-masing agen dalam kru ini.)

Pemrosesan analisis keamanan terdiri dari tindakan berikut:

1. Agen analis keamanan memeriksa data yang dikumpulkan tentang AWS sumber daya seperti berikut:
   + Instans dan grup keamanan Amazon Elastic Compute Cloud (Amazon EC2)
   + Bucket dan konfigurasi Amazon S3
   + Peran, kebijakan, dan izin IAM
   + Konfigurasi virtual private cloud (VPC) dan pengaturan jaringan
   + Basis data Amazon RDS dan pengaturan keamanan
   + Fungsi dan konfigurasi Lambda
   + Lainnya Layanan AWS dalam lingkup audit

1. Agen penguji penetrasi mengidentifikasi potensi kerentanan.

1. Para agen berkolaborasi melalui kerangka CreWai untuk berbagi temuan.

Pembuatan laporan terdiri dari tindakan berikut:

1. Agen penulis laporan mengumpulkan temuan dari semua agen lainnya.

1. Masalah keamanan diatur oleh layanan, tingkat keparahan, dan dampak kepatuhan.

1. Rekomendasi remediasi dihasilkan untuk setiap masalah yang diidentifikasi.

1. Laporan audit keamanan komprehensif dibuat dalam format penurunan harga dan diunggah ke bucket Amazon S3 yang ditentukan. Laporan historis disimpan untuk pelacakan kepatuhan dan peningkatan postur keamanan.

Kegiatan penebangan dan pemantauan meliputi:
+ CloudWatch log menangkap detail eksekusi dan kesalahan apa pun.
+ Metrik eksekusi Lambda dicatat untuk pemantauan.

**catatan**  
Kode untuk `aws-security-auditor-crew` bersumber dari repositori GitHub [3P-Agentic\$1Frameworks](https://github.com/aws-samples/3P-Agentic-Frameworks/blob/main/crewai/aws-security-auditor-crew/README.md), tersedia dalam koleksi Sampel. AWS 

**Ketersediaan dan skala**

Anda dapat memperluas agen yang tersedia ke lebih dari empat agen inti. Untuk menskalakan dengan agen khusus tambahan, pertimbangkan jenis agen baru berikut:
+ Agen *spesialis intelijen ancaman* dapat melakukan hal berikut:
  + Memantau umpan ancaman eksternal dan berkorelasi dengan temuan internal
  + Memberikan konteks tentang ancaman yang muncul yang relevan dengan infrastruktur Anda
  + Memprioritaskan kerentanan berdasarkan eksploitasi aktif di alam liar
+ Agen *kerangka kepatuhan* dapat fokus pada bidang peraturan tertentu seperti berikut:
  + Agen kepatuhan Standar Keamanan Data Industri Kartu Pembayaran (PCI DSS)
  + Agen kepatuhan Undang-Undang Portabilitas dan Akuntabilitas Asuransi Kesehatan 1996 (HIPAA)
  + Agen kepatuhan Sistem dan Kontrol Organisasi 2 (SOC 2)
  + Agen kepatuhan Peraturan Perlindungan Data Umum (GDPR)

Dengan memperluas agen yang tersedia secara serius, solusi ini dapat memberikan wawasan keamanan yang lebih dalam dan lebih khusus sambil mempertahankan skalabilitas di seluruh lingkungan yang luas. AWS Untuk informasi selengkapnya tentang pendekatan implementasi, pengembangan alat, dan pertimbangan penskalaan, lihat Informasi [tambahan](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional).

## Alat
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-tools"></a>

**Layanan AWS**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) adalah layanan AI yang dikelola sepenuhnya yang membuat model foundation berkinerja tinggi (FMs) tersedia untuk digunakan melalui API terpadu.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) membantu Anda memusatkan log dari semua sistem, aplikasi, Layanan AWS sehingga Anda dapat memantau dan mengarsipkannya dengan aman.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS Dalam pola ini, ini digunakan untuk menjadwalkan dan mengatur alur kerja agen.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS SDK untuk Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS
+ [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. Dalam pola ini, ia menyediakan penyimpanan objek untuk artefak agen dan manajemen negara.

**Alat-alat lainnya**
+ [CrewAI](https://www.crewai.com/open-source) adalah kerangka kerja berbasis Python open source untuk membangun sistem AI multi-agen.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [deploy-crewai-agents-terraform](https://github.com/aws-samples/deploy-crewai-agents-terraform.git)repositori.

## Praktik terbaik
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-best-practices"></a>
+ Terapkan manajemen status yang tepat untuk Terraform dengan menggunakan backend Amazon S3 dengan penguncian Amazon DynamoDB. Untuk informasi selengkapnya, lihat [Praktik terbaik Backend dalam Praktik](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/backend.html) *terbaik untuk menggunakan Penyedia AWS Terraform*.
+ Gunakan ruang kerja untuk memisahkan lingkungan pengembangan, pementasan, dan produksi.
+ Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.
+ Aktifkan pencatatan dan pemantauan terperinci melalui CloudWatch Log.
+ Menerapkan mekanisme coba lagi dan penanganan kesalahan untuk operasi agen.

## Epik
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-epics"></a>

### Menyebarkan kerangka CreWai
<a name="deploy-crewai-framework"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori pola ini di mesin lokal Anda, jalankan perintah berikut:<pre>git clone "git@github.com:aws-samples/deploy-crewai-agents-terraform.git"<br />cd deploy-crewai-agents-terraform</pre> | DevOps insinyur | 
| Edit variabel lingkungan. | Untuk mengedit variabel lingkungan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps insinyur | 
| Buat infrastruktur. | Untuk membuat infrastruktur, jalankan perintah berikut:<pre>cd terraform</pre><pre>terraform init</pre><pre>terraform plan</pre>Tinjau rencana eksekusi dengan cermat. Jika perubahan yang direncanakan dapat diterima, maka jalankan perintah berikut:<pre>terraform apply --auto-approve</pre> | DevOps insinyur | 

### Akses agen CreWai
<a name="access-crewai-agents"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Akses agen. | Agen di Audit Keamanan AWS Infrastruktur dan kru Pelaporan dikerahkan sebagai fungsi Lambda. Untuk mengakses agen, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps insinyur | 
| (Opsional) Konfigurasikan eksekusi manual agen. | Agen dikonfigurasi untuk berjalan secara otomatis pada jadwal harian (tengah malam UTC). Namun, Anda dapat memicunya secara manual dengan menggunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Untuk detail selengkapnya, lihat [Menguji fungsi Lambda di konsol dalam dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html) Lambda. | DevOps insinyur | 
| Akses log agen untuk debugging. | Agen CreWai berjalan di lingkungan Lambda dengan izin yang diperlukan untuk melakukan audit keamanan dan menyimpan laporan di Amazon S3. Outputnya adalah laporan penurunan harga yang menyediakan analisis keamanan komprehensif AWS infrastruktur Anda.Untuk membantu proses debug detail perilaku agen, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps insinyur | 
| Lihat hasil eksekusi agen. | Untuk melihat hasil eksekusi agen, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)Laporan disimpan dengan nama file berbasis stempel waktu sebagai berikut: `security-audit-report-YYYY-MM-DD-HH-MM-SS.md)` | DevOps insinyur | 
| Pantau eksekusi agen. | Untuk memantau eksekusi agen melalui CloudWatch log, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html) | DevOps insinyur | 
|  Sesuaikan perilaku agen. | Untuk memodifikasi agen atau tugas mereka, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.html)<pre>cd terraform </pre><pre>terraform apply</pre> | DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus sumber daya yang dibuat. | Untuk menghapus semua infrastruktur yang dibuat oleh pola ini, jalankan perintah berikut:<pre>terraform plan -destroy </pre>Perintah berikut akan secara permanen menghapus semua sumber daya yang dibuat oleh pola ini. Perintah akan meminta konfirmasi sebelum menghapus sumber daya apa pun.Tinjau rencana penghancuran dengan hati-hati. Jika penghapusan yang direncanakan dapat diterima, maka jalankan perintah berikut:<pre>terraform destroy</pre> | DevOps insinyur | 

## Pemecahan masalah
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Perilaku agen | Untuk informasi tentang masalah ini, lihat [Menguji dan memecahkan masalah perilaku agen dalam dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html) Amazon Bedrock. | 
| Masalah jaringan Lambda | Untuk informasi tentang masalah ini, lihat [Memecahkan masalah jaringan di Lambda dalam dokumentasi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-networking.html). | 
| Izin IAM | Untuk informasi tentang masalah ini, lihat [Memecahkan Masalah IAM di dokumentasi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot.html). | 

## Sumber daya terkait
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-resources"></a>

**AWS Blog**
+ [Bangun sistem agen dengan CreWai dan Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/build-agentic-systems-with-crewai-and-amazon-bedrock/)

**AWS dokumentasi**
+ [Dokumentasi Amazon Bedrock](https://docs.aws.amazon.com/bedrock/)
+ [Bagaimana Agen Amazon Bedrock bekerja](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [AWS Kerangka Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)

**Sumber daya lainnya**
+ [Dokumentasi CreWai](https://docs.crewai.com/introduction)
+ [Dokumentasi Penyedia Terraform AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Informasi tambahan
<a name="deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-additional"></a>

Bagian ini berisi informasi tentang pendekatan implementasi, pengembangan alat, dan pertimbangan penskalaan yang terkait dengan diskusi sebelumnya dalam [Otomasi dan](#deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework-architecture) skala.

**Pendekatan implementasi**

Pertimbangkan pendekatan berikut untuk menambahkan agen:

1. Konfigurasi agen:
   + Tambahkan definisi agen baru ke `config/agents.yaml` file.
   + Tentukan latar belakang, tujuan, dan alat khusus untuk setiap agen.
   + Konfigurasikan kemampuan memori dan analisis berdasarkan spesialisasi agen.

1. Orkestrasi tugas:
   + Perbarui `config/tasks.yaml` file untuk menyertakan tugas khusus agen baru.
   + Buat dependensi antar tugas untuk membantu memastikan arus informasi yang tepat.
   + Menerapkan eksekusi tugas paralel jika sesuai.

**Implementasi teknis**

Berikut ini adalah tambahan pada `agents.yaml` file untuk agen Spesialis Intelijen Ancaman yang diusulkan:

```
Example new agent configuration in agents.yaml
threat_intelligence_agent:
 name: "Threat Intelligence Specialist"
 role: "Cybersecurity Threat Intelligence Analyst"
 goal: "Correlate AWS security findings with external threat intelligence"
 backstory: "Expert in threat intelligence with experience in identifying emerging threats and attack patterns relevant to cloud infrastructure." 
verbose: true 
allow_delegation: true 
tools: 
- "ThreatIntelligenceTool" 
- "AWSResourceAnalyzer"
```

**Pengembangan alat**

Dengan kerangka kerja CreWai, Anda dapat mengambil tindakan berikut untuk meningkatkan efektivitas kru audit keamanan Anda:
+ Buat alat khusus untuk agen baru.
+ Integrasikan dengan eksternal APIs untuk intelijen ancaman.
+ Mengembangkan analisa khusus untuk yang berbeda Layanan AWS.

**Pertimbangan penskalaan**

Saat memperluas sistem Audit dan Pelaporan Keamanan AWS Infrastruktur Anda untuk menangani lingkungan yang lebih besar atau audit yang lebih komprehensif, atasi faktor penskalaan berikut:
+ **Sumber daya komputasi**
  + Meningkatkan alokasi memori Lambda untuk menangani agen tambahan.
  + Pertimbangkan untuk membagi beban kerja agen di beberapa fungsi Lambda.
+ **Manajemen biaya**
  + Pantau penggunaan Amazon Bedrock API saat jumlah agen meningkat.
  + Menerapkan aktivasi agen selektif berdasarkan lingkup audit.
+ **Efisiensi kolaborasi**
  + Optimalkan berbagi informasi antar agen.
  + Menerapkan struktur agen hierarkis untuk lingkungan yang kompleks.
+ **Peningkatan basis pengetahuan**
  + Menyediakan agen dengan basis pengetahuan khusus untuk domain mereka.
  + Perbarui pengetahuan agen secara teratur dengan praktik terbaik keamanan baru.

# Menerapkan pekerjaan AWS Glue dengan pipeline AWS CodePipeline CI/CD
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline"></a>

*Bruno Klein dan Luis Henrique Massao Yamada, Amazon Web Services*

## Ringkasan
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-summary"></a>

Pola ini menunjukkan bagaimana Anda dapat mengintegrasikan AWS CodeCommit dan AWS CodePipeline dengan AWS Glue, dan menggunakan AWS Lambda untuk meluncurkan pekerjaan segera setelah pengembang mendorong perubahan mereka ke repositori AWS jarak jauh. CodeCommit  

Saat pengembang mengirimkan perubahan ke repositori ekstrak, transformasi, dan muat (ETL) dan mendorong perubahan ke AWS CodeCommit, pipeline baru akan dipanggil. Pipeline memulai fungsi Lambda yang meluncurkan pekerjaan AWS Glue dengan perubahan ini. Pekerjaan AWS Glue melakukan tugas ETL.

Solusi ini sangat membantu dalam situasi di mana bisnis, pengembang, dan insinyur data ingin meluncurkan pekerjaan segera setelah perubahan dilakukan dan didorong ke repositori target. Ini membantu mencapai tingkat otomatisasi dan reproduktifitas yang lebih tinggi, sehingga menghindari kesalahan selama peluncuran pekerjaan dan siklus hidup.

## Prasyarat dan batasan
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [Git](https://git-scm.com/) diinstal pada mesin lokal
+ [Amazon Cloud Development Kit (Amazon CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) diinstal pada mesin lokal
+ [Python](https://www.python.org/) diinstal pada mesin lokal
+ Kode di bagian *Lampiran*

**Batasan**
+ Pipeline selesai segera setelah pekerjaan AWS Glue berhasil diluncurkan. Itu tidak menunggu kesimpulan dari pekerjaan.
+ Kode yang disediakan dalam lampiran dimaksudkan untuk tujuan demo saja.

## Arsitektur
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-architecture"></a>

**Tumpukan teknologi target**
+ AWS Glue
+ AWS Lambda
+ AWS CodePipeline
+ AWS CodeCommit

**Arsitektur target**

![\[Menggunakan Lambda untuk meluncurkan pekerjaan Glue segera setelah pengembang mendorong perubahan ke repo. CodeCommit\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/99a67388-5939-4267-8324-b6ca8bfa7962/images/917c9041-b94d-4e95-a3c4-9a1115ead228.png)


 

Prosesnya terdiri dari langkah-langkah ini:

1. Pengembang atau insinyur data membuat modifikasi dalam kode ETL, melakukan, dan mendorong perubahan ke AWS. CodeCommit

1. Dorongan memulai pipa.

1. Pipeline memulai fungsi Lambda, yang `codecommit:GetFile` memanggil repositori dan mengunggah file ke Amazon Simple Storage Service (Amazon S3).

1. Fungsi Lambda meluncurkan pekerjaan AWS Glue baru dengan kode ETL.

1. Fungsi Lambda menyelesaikan pipeline.

**Otomatisasi dan skala**

Lampiran sampel menunjukkan bagaimana Anda dapat mengintegrasikan AWS Glue dengan AWS CodePipeline. Ini memberikan contoh dasar yang dapat Anda sesuaikan atau perluas untuk penggunaan Anda sendiri. Untuk detailnya, lihat bagian *Epik*.

## Alat
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — AWS CodePipeline adalah layanan [pengiriman berkelanjutan](https://aws.amazon.com/devops/continuous-delivery/) yang dikelola sepenuhnya yang membantu Anda mengotomatiskan saluran pipa rilis untuk pembaruan aplikasi dan infrastruktur yang cepat dan andal.
+ [AWS CodeCommit](https://aws.amazon.com/codecommit/) — AWS CodeCommit adalah layanan [kontrol sumber](https://aws.amazon.com/devops/source-control/) terkelola penuh yang menampung repositori berbasis Git yang aman.
+ [AWS Lambda](https://aws.amazon.com/lambda/) — AWS Lambda adalah layanan komputasi tanpa server yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server.
+ [AWS Glue](https://aws.amazon.com/glue) — AWS Glue adalah layanan integrasi data tanpa server yang memudahkan untuk menemukan, menyiapkan, dan menggabungkan data untuk analitik, pembelajaran mesin, dan pengembangan aplikasi.
+ [Klien](https://git-scm.com/downloads) Git — Git menyediakan alat GUI, atau Anda dapat menggunakan baris perintah atau alat desktop untuk memeriksa artefak yang diperlukan. GitHub 
+ [AWS CDK](https://aws.amazon.com/cdk/) — AWS CDK adalah kerangka kerja pengembangan perangkat lunak open source yang membantu Anda menentukan sumber daya aplikasi cloud Anda dengan menggunakan bahasa pemrograman yang sudah dikenal.

## Epik
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-epics"></a>

### Menyebarkan kode sampel
<a name="deploy-the-sample-code"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mengonfigurasi AWS CLI. | Konfigurasikan AWS Command Line Interface (AWS CLI) untuk menargetkan dan mengautentikasi dengan akun AWS Anda saat ini. Untuk petunjuk, lihat dokumentasi [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). | Pengembang, DevOps insinyur | 
| Ekstrak file proyek sampel. | Ekstrak file dari lampiran untuk membuat folder yang berisi file proyek sampel. | Pengembang, DevOps insinyur | 
| Menyebarkan kode sampel. | Setelah Anda mengekstrak file, jalankan perintah berikut dari lokasi ekstrak untuk membuat contoh dasar:<pre>cdk bootstrap<br />cdk deploy<br />git init<br />git remote add origin <code-commit-repository-url><br />git stage .<br />git commit -m "adds sample code"<br />git push --set-upstream origin main</pre>Setelah perintah terakhir, Anda dapat memantau status pipeline dan pekerjaan AWS Glue. | Pengembang, DevOps insinyur | 
| Sesuaikan kode. | Sesuaikan kode untuk file etl.py sesuai dengan kebutuhan bisnis Anda. Anda dapat merevisi kode ETL, memodifikasi tahapan pipeline, atau memperluas solusi. | Insinyur data | 

## Sumber daya terkait
<a name="deploy-an-aws-glue-job-with-an-aws-codepipeline-ci-cd-pipeline-resources"></a>
+ [Memulai dengan AWS CDK](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [Menambahkan pekerjaan di AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/add-job.html)
+ [Integrasi tindakan sumber di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/integrations-action-type.html#integrations-source)
+ [Memanggil fungsi AWS Lambda dalam pipeline di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html)
+ [Pemrograman AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming.html)
+ [AWS CodeCommit GetFile API](https://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetFile.html)

## Lampiran
<a name="attachments-99a67388-5939-4267-8324-b6ca8bfa7962"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/99a67388-5939-4267-8324-b6ca8bfa7962/attachments/attachment.zip)

# Menerapkan kode di beberapa Wilayah AWS menggunakan AWS CodePipeline, AWS CodeCommit, dan AWS CodeBuild
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild"></a>

*Anand Krishna Varanasi, Amazon Web Services*

## Ringkasan
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-summary"></a>

Pola ini menunjukkan cara membangun infrastruktur atau arsitektur di beberapa Wilayah Amazon Web Services (AWS) dengan menggunakan AWS CloudFormation. Ini mencakup integrasi berkelanjutan (CI) /penerapan berkelanjutan (CD) di beberapa Wilayah AWS untuk penerapan yang lebih cepat. ****Langkah-langkah dalam pola ini telah diuji untuk pembuatan CodePipeline pekerjaan AWS untuk diterapkan ke tiga Wilayah AWS sebagai contoh. Anda dapat mengubah jumlah Wilayah berdasarkan kasus penggunaan Anda.

## Prasyarat dan batasan
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ 
  +  CodeBuild Peran dengan *AmazonS3 FullAccess* dan kebijakan. *CloudWatchFullAccess* Kebijakan ini memberikan CodeBuild akses untuk menonton peristiwa AWS CodeCommit melalui Amazon CloudWatch dan menggunakan Amazon Simple Storage Service (Amazon S3) sebagai penyimpanan artefak.
  +  CloudFormation Peran AWS dengan kebijakan berikut, yang memberikan AWS CloudFormation, pada tahap Build akhir, kemampuan untuk membuat atau memperbarui fungsi AWS Lambda, mendorong atau menonton CloudWatch log Amazon, dan untuk membuat dan memperbarui set perubahan. 
    + *AWSLambdaFullAccess*
    + *AWSCodeDeployFullAccess*
    + *CloudWatchFullAccess*
    + *AWSCloudFormationFullAccess*
    + *AWSCodePipelineFullAccess*
**catatan**  
Dua peran AWS Identity and Access Management (IAM) untuk AWS CodeBuild dan AWS CloudFormation dengan kebijakan yang tepat CodeBuild untuk melakukan tugas CI yaitu pengujian, bundling, pengemasan artefak, dan penerapan ke beberapa Wilayah AWS secara paralel.  Periksa silang kebijakan yang dibuat oleh CodePipeline untuk memverifikasi bahwa CodeBuild dan AWS CloudFormation memiliki izin yang tepat dalam fase CI dan CD.

## Arsitektur
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-architecture"></a>

![\[CodePipeline Pekerjaan AWS yang diterapkan ke tiga Wilayah AWS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/d44c393c-7243-4d4e-8b84-88a8503af98f/images/5c27fc35-5e62-4292-8b18-a7bc7faf2631.png)


Arsitektur dan alur kerja Multiple-region pola ini terdiri dari langkah-langkah berikut.

1. Anda mengirim kode Anda ke CodeCommit repositori.

1. Setelah menerima pembaruan kode atau komit apa pun, CodeCommit memanggil CloudWatch acara, yang pada gilirannya memulai CodePipeline pekerjaan.

1. CodePipeline melibatkan CI yang ditangani oleh. CodeBuild Tugas-tugas berikut dilakukan.
   + Pengujian CloudFormation template AWS (opsional)
   + Pengemasan CloudFormation template AWS untuk setiap Wilayah yang disertakan dalam penerapan. Misalnya, pola ini diterapkan secara paralel ke tiga Wilayah AWS, jadi CodeBuild mengemas CloudFormation template AWS ke dalam tiga bucket S3, satu di setiap Wilayah yang ditentukan. Bucket S3 digunakan oleh CodeBuild sebagai repositori artefak saja.

1. CodeBuild mengemas artefak sebagai input untuk fase Deploy berikutnya, yang berjalan secara paralel di tiga Wilayah AWS. Jika Anda menentukan jumlah Wilayah yang berbeda, CodePipeline akan menyebarkan ke Wilayah tersebut.

## Alat
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-tools"></a>

**Alat**
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) — CodePipeline adalah layanan pengiriman berkelanjutan yang dapat Anda gunakan untuk memodelkan, memvisualisasikan, dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak Anda secara terus menerus.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) — CodeBuild adalah layanan build terkelola penuh yang mengompilasi kode sumber Anda, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) — CodeCommit adalah layanan kontrol versi yang dihosting oleh Amazon Web Services yang dapat Anda gunakan untuk menyimpan dan mengelola aset secara pribadi (seperti kode sumber dan file biner) di cloud.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation adalah layanan yang membantu Anda memodelkan dan menyiapkan sumber daya Amazon Web Services sehingga Anda dapat menghabiskan lebih sedikit waktu untuk mengelola sumber daya tersebut dan lebih banyak waktu untuk berfokus pada aplikasi yang berjalan di AWS.
+ [AWS Identity and Access Management](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) — AWS Identity and Access Management (IAM) adalah layanan web yang membantu Anda mengontrol akses ke sumber daya AWS dengan aman.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) - Amazon Simple Storage Service (Amazon S3) Simple Storage Service adalah penyimpanan untuk internet. Ini dirancang untuk membuat komputasi skala web lebih mudah bagi pengembang.

**Kode**

Contoh kode berikut adalah untuk `BuildSpec.yaml` file (Build phase).

```
---
artifacts:
discard-paths: true
files:
- packaged-first-region.yaml
- packaged-second-region.yaml
- packaged-third-region.yaml
phases:
build:
commands:
- echo "********BUILD PHASE - CF PACKAGING**********"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_FIRST_REGION --output-template-file packaged-first-region.yaml --region $FIRST_REGION"
- "aws cloudformation package --template-file sam-template.yaml --s3-bucket $S3_SECOND_REGION --output-template-file packaged-second-region.yaml --region $SECOND_REGION"
- "aws cloudformation package --template-file sam-template-anand.yaml --s3-bucket $S3_THIRD_REGION --output-template-file packaged-third-region.yaml --region $THIRD_REGION"
install:
commands:
- echo "********BUILD PHASE - PYTHON SETUP**********"
runtime-versions:
python: 3.8
post_build:
commands:
- echo "********BUILD PHASE - PACKAGING COMPLETION**********"
pre_build:
commands:
- echo "********BUILD PHASE - DEPENDENCY SETUP**********"
- "npm install --silent --no-progress"
- echo "********BUILD PHASE - DEPENDENCY SETUP DONE**********"
version: 0.2
```

## Epik
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-epics"></a>

### Siapkan kode dan CodeCommit repositori
<a name="prepare-the-code-and-the-codecommit-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pilih Wilayah AWS utama untuk penerapan. | Masuk ke akun AWS Anda dan pilih Wilayah utama untuk penerapan. CodeCommit Repositori akan berada di Wilayah utama. | DevOps | 
| Buat CodeCommit repositori. | Buat CodeCommit repositori, dan tekan kode yang diperlukan ke dalamnya. Kode umumnya mencakup template AWS CloudFormation atau AWS SAM, kode Lambda jika ada, dan CodeBuild `buildspec.yaml` file sebagai input ke AWS. CodePipeline | DevOps | 
| Dorong kode ke dalam CodeCommit repositori. | Di bagian *Lampiran*, unduh kode untuk contoh ini, lalu dorong kode yang diperlukan ke dalamnya. Secara umum, kode dapat menyertakan templat AWS CloudFormation atau AWS SAM, kode Lambda, dan CodeBuild `buildspec.yaml` file sebagai input ke pipeline. | DevOps | 

### Fase sumber: Buat pipa
<a name="source-phase-create-the-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CodePipeline pekerjaan. | Di CodePipeline konsol, pilih **Buat pipeline**. | DevOps | 
| Beri nama CodePipeline pekerjaan dan pilih setelan peran layanan. | Masukkan nama untuk pekerjaan, dan pertahankan setelan peran layanan default sehingga CodePipeline menciptakan peran dengan kebijakan yang diperlukan terlampir. | DevOps | 
| Tentukan lokasi untuk toko artefak. | Di bawah **Pengaturan lanjutan**, pertahankan opsi default sehingga CodePipeline membuat bucket S3 untuk digunakan untuk penyimpanan artefak kode. Jika Anda menggunakan bucket S3 yang ada, bucket harus berada di Region utama yang Anda tentukan di epik pertama. | DevOps | 
| Tentukan kunci enkripsi. | Simpan opsi **default, AWS Managed Key** Default, atau pilih untuk menggunakan kunci terkelola pelanggan AWS Key Management Service (AWS KMS) Anda sendiri. | DevOps | 
| Tentukan penyedia sumber. | Di bawah **penyedia Sumber**, pilih **AWS CodeCommit**. | DevOps | 
| Tentukan repositori. | Pilih CodeCommit repositori yang Anda buat di epik pertama. Jika Anda menempatkan kode di cabang, pilih cabang. | DevOps | 
| Tentukan bagaimana perubahan kode terdeteksi. | Pertahankan default, **Amazon CloudWatch Events**, sebagai pemicu perubahan CodeCommit untuk memulai CodePipeline pekerjaan. | DevOps | 

### Fase build: Konfigurasikan pipeline
<a name="build-phase-configure-the-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan penyedia build. | Untuk penyedia build, pilih **AWS CodeBuild**. | DevOps | 
| Tentukan Wilayah AWS. | Pilih Wilayah utama, yang Anda tentukan dalam epik pertama. | DevOps | 

### Fase build: Buat dan konfigurasikan proyek
<a name="build-phase-create-and-configure-the-project"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat proyek | Pilih **Buat proyek**, dan masukkan nama untuk proyek tersebut. | DevOps | 
| Tentukan gambar lingkungan. | Untuk demonstrasi pola ini, gunakan gambar CodeBuild terkelola default. Anda juga memiliki opsi untuk menggunakan gambar Docker khusus jika Anda memilikinya. | DevOps | 
| Tentukan sistem operasi. | Pilih Amazon Linux 2 atau Ubuntu.Amazon Linux 2 mendekati akhir dukungan. Untuk informasi selengkapnya, lihat [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/). | DevOps | 
| Tentukan peran layanan. | Pilih peran yang Anda buat CodeBuild sebelum Anda mulai membuat CodePipeline pekerjaan. (Lihat bagian *Prasyarat*.) | DevOps | 
| Tetapkan opsi tambahan. | Untuk **Timeout** dan **Timeout Antrian**, pertahankan nilai default. Untuk sertifikat, pertahankan pengaturan default kecuali Anda memiliki sertifikat khusus yang ingin Anda gunakan. | DevOps | 
| Buat variabel lingkungan. | Untuk setiap Wilayah AWS yang ingin Anda terapkan, buat variabel lingkungan dengan memberikan nama bucket S3 dan nama Region (misalnya, us-east-1). | DevOps | 
| Berikan nama file buildspec, jika bukan buildspec.yml. | Biarkan bidang ini kosong jika nama file adalah default,`buildspec.yaml`. Jika Anda mengganti nama file buildspec, masukkan nama di sini. Pastikan itu cocok dengan nama file yang ada di CodeCommit repositori. | DevOps | 
| Tentukan logging. | Untuk melihat log untuk CloudWatch Acara Amazon, pertahankan pengaturan default. Atau Anda dapat menentukan nama grup atau logger tertentu. | DevOps | 

### Lewati fase Deploy
<a name="skip-the-deploy-phase"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Lewati fase penyebaran dan selesaikan pembuatan pipa. | Ketika Anda mengatur pipeline, CodePipeline memungkinkan Anda untuk membuat hanya satu tahap dalam fase Deploy. Untuk menerapkan ke beberapa Wilayah AWS, lewati fase ini. Setelah pipeline dibuat, Anda dapat menambahkan beberapa tahap fase Deploy. | DevOps | 

### Fase penerapan: Konfigurasikan pipeline untuk penerapan ke Wilayah pertama
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-first-region"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan tahapan ke fase Deploy. | Edit pipeline dan pilih **Add stage** di fase Deploy. Tahap pertama ini adalah untuk Wilayah primer. | DevOps | 
| Berikan nama tindakan untuk panggung. | Masukkan nama unik yang mencerminkan tahap pertama (primer) dan Wilayah. <region>Misalnya, masukkan **primery\$1 \$1deploy**. | DevOps | 
| Tentukan penyedia tindakan. | Untuk **penyedia Action**, pilih AWS CloudFormation. | DevOps | 
| Konfigurasikan Wilayah untuk tahap pertama. | Pilih Wilayah (primer) pertama, Wilayah yang sama di mana CodePipeline dan CodeBuild diatur. Ini adalah Wilayah utama tempat Anda ingin menyebarkan tumpukan. | DevOps | 
| Tentukan artefak input. | Pilih **BuildArtifact**. Ini adalah output dari fase build. | DevOps | 
| Tentukan tindakan yang akan diambil. | Untuk **mode Tindakan**, pilih **Buat atau perbarui tumpukan**. | DevOps | 
| Masukkan nama untuk CloudFormation tumpukan. |  | DevOps | 
| Tentukan template untuk Wilayah pertama. | Pilih nama paket khusus Wilayah yang dikemas oleh CodeBuild dan dibuang ke bucket S3 untuk Region (primer) pertama. | DevOps | 
| Tentukan kemampuannya. | Kemampuan diperlukan jika template tumpukan menyertakan sumber daya IAM atau jika Anda membuat tumpukan langsung dari template yang berisi makro. Untuk pola ini, gunakan CAPABILITY\$1IAM, CAPABILITY\$1NAMED\$1IAM, CAPABILITY\$1AUTO\$1EXPAND. | DevOps | 

### Fase penyebaran: Konfigurasikan pipeline untuk penerapan ke Wilayah kedua
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-second-region"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan tahap kedua ke fase Deploy. | Untuk menambahkan tahap untuk Wilayah kedua, edit pipeline dan pilih **Tambah tahap** di fase Deploy. Penting: Proses pembuatan Wilayah kedua sama dengan Wilayah pertama, kecuali untuk nilai-nilai berikut. | DevOps | 
| Berikan nama tindakan untuk tahap kedua. | Masukkan nama unik yang mencerminkan tahap kedua dan Wilayah kedua. | DevOps | 
| Konfigurasikan Wilayah untuk tahap kedua. | Pilih Wilayah kedua tempat Anda ingin menyebarkan tumpukan. | DevOps | 
| Tentukan template untuk Wilayah kedua. | Pilih nama paket khusus Wilayah yang dikemas oleh CodeBuild dan dibuang ke bucket S3 untuk Wilayah kedua. | DevOps | 

### Fase penyebaran: Konfigurasikan pipeline untuk penerapan ke Wilayah ketiga
<a name="deploy-phase-configure-the-pipeline-for-deployment-to-the-third-region"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan tahap ketiga ke fase Deploy. | Untuk menambahkan tahap untuk Wilayah ketiga, edit pipeline dan pilih **Tambah tahap** di fase Deploy. Penting: Proses pembuatan Wilayah kedua sama dengan dua Wilayah sebelumnya, kecuali untuk nilai-nilai berikut. | DevOps | 
| Berikan nama tindakan untuk tahap ketiga. | Masukkan nama unik yang mencerminkan tahap ketiga dan Wilayah ketiga. | DevOps | 
| Konfigurasikan Wilayah untuk tahap ketiga. | Pilih Wilayah ketiga tempat Anda ingin menyebarkan tumpukan. | DevOps | 
| Tentukan template untuk Wilayah ketiga. | Pilih nama paket khusus Wilayah yang dikemas oleh CodeBuild dan dibuang ke bucket S3 untuk Wilayah ketiga. | DevOps | 

### Bersihkan penyebaran
<a name="clean-up-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus sumber daya AWS. | Untuk membersihkan penyebaran, hapus CloudFormation tumpukan di setiap Wilayah. Kemudian hapus CodeCommit, CodeBuild, dan CodePipeline sumber daya dari Wilayah utama. | DevOps | 

## Sumber daya terkait
<a name="deploy-code-in-multiple-aws-regions-using-aws-codepipeline-aws-codecommit-and-aws-codebuild-resources"></a>
+ [Apa itu AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Model Aplikasi AWS Tanpa Server](https://aws.amazon.com/serverless/sam/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
+ [Referensi struktur CloudFormation arsitektur AWS untuk AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CloudFormation.html)

## Lampiran
<a name="attachments-d44c393c-7243-4d4e-8b84-88a8503af98f"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/d44c393c-7243-4d4e-8b84-88a8503af98f/attachments/attachment.zip)

# Terapkan beban kerja dari DevOps pipeline Azure ke kluster Amazon EKS pribadi
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Ringkasan
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

Pola ini menunjukkan cara menerapkan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) dari DevOps pipeline Azure ke cluster Amazon Elastic Kubernetes Service (Amazon EKS) pribadi. Ini mengatasi tantangan kritis yang dihadapi oleh organisasi yang meningkatkan postur keamanan mereka dengan beralih ke titik akhir server API pribadi untuk kluster Amazon EKS mereka.

Titik akhir publik mengekspos server API Kubernetes langsung ke internet, menciptakan permukaan serangan yang lebih besar yang berpotensi ditargetkan oleh aktor jahat. Dengan beralih ke titik akhir pribadi, akses ke bidang kontrol cluster dibatasi ke dalam virtual private cloud (VPC) pelanggan.

Meskipun transisi cluster Amazon EKS ke titik akhir API pribadi secara signifikan meningkatkan keamanan, ini memperkenalkan tantangan konektivitas untuk platform eksternal seperti Azure. CI/CD DevOps Titik akhir pribadi hanya dapat diakses dari dalam VPC cluster atau jaringan peered. Oleh karena itu, DevOps agen Azure standar yang dihosting Microsoft, yang beroperasi di luar jaringan AWS pribadi, tidak dapat menjangkau server API Kubernetes secara langsung. Ini merusak alur kerja penerapan tipikal yang mengandalkan alat seperti kubectl atau Helm yang berjalan pada agen ini karena mereka gagal membuat koneksi ke cluster.

Untuk mengatasi masalah ini, pola ini menampilkan pendekatan yang efisien dengan menggunakan DevOps agen Azure yang dihosting sendiri dalam kluster Amazon EKS pribadi. Solusi ini menawarkan optimalisasi biaya yang unggul, efisiensi operasional, dan skalabilitas sambil menjaga persyaratan keamanan. Pendekatan ini terutama menguntungkan perusahaan yang ingin merampingkan DevOps proses multi-cloud mereka tanpa mengorbankan kinerja atau keamanan.

## Prasyarat dan batasan
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Command Line Interface [(AWS CLI) versi 2.13.17 atau yang lebih baru, diinstal.](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [kubectl versi 1.25.1 atau yang lebih baru, diinstal.](https://kubernetes.io/docs/tasks/tools/)
+ [Cluster Amazon EKS pribadi versi 1.24 atau yang lebih baru [dibuat](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html), dengan izin untuk membuat ruang nama, rahasia, dan penerapan.](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Node pekerja di cluster Amazon EKS dengan konektivitas keluar ke internet sehingga DevOps agen Azure yang menjalankannya dapat terhubung ke kumpulan agen Azure DevOps .
+ GitHub akun [dibuat](https://github.com/signup).
+  DevOps [Proyek Azure dengan akses untuk mengonfigurasi koneksi layanan, yang merupakan koneksi terautentikasi antara Azure Pipelines dan layanan eksternal atau jarak jauh, dibuat.](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account)
+  AWS Toolkit for Azure DevOps Versi 1.15 atau yang lebih baru diinstal untuk DevOps proyek Azure yang dijelaskan pada poin sebelumnya. Untuk petunjuk penginstalan, lihat [AWS Toolkit for Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools)di Visual Studio Marketplace.

**Batasan**
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

Pola ini menciptakan yang berikut:
+ Repositori **Amazon ECR - Repositori** Amazon Elastic Container Registry (Amazon ECR) menyimpan image Docker dengan agen Azure dan aplikasi sampel yang DevOps digunakan.
+ **Azure DevOps agent pool - Kumpulan agen** yang DevOps dihosting sendiri Azure mendaftarkan agen yang berjalan di cluster Amazon EKS pribadi.
+ **Peran IAM - Peran** AWS Identity and Access Management (IAM) untuk koneksi layanan Azure untuk menyediakan akses yang diperlukan ke agen yang berjalan di klaster Amazon EKS pribadi.
+ **Koneksi DevOps layanan Azure** - Koneksi layanan di DevOps akun Azure untuk menggunakan peran IAM yang menyediakan akses yang diperlukan untuk pekerjaan pipeline untuk diakses. Layanan AWS

Diagram berikut menunjukkan arsitektur penerapan DevOps agen Azure yang dihosting sendiri pada kluster Amazon EKS pribadi dan menerapkan aplikasi sampel pada cluster yang sama.

![\[Penerapan DevOps agen Azure yang dihosting sendiri dan aplikasi sampel di klaster Amazon EKS pribadi.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


Diagram menunjukkan alur kerja berikut:

1. Terapkan DevOps agen Azure yang dihosting sendiri sebagai penerapan di dalam klaster Amazon EKS.

1.  DevOps Agen Azure terhubung ke kumpulan agen pada DevOps akun Azure menggunakan token akses pribadi (PAT) untuk otentikasi.

1. Azure Pipelines mengonfigurasi pipeline untuk diterapkan dengan menggunakan kode dari repositori. GitHub 

1. Pipa berjalan pada agen dari kumpulan agen yang dikonfigurasi dalam konfigurasi pipa. DevOps Agen Azure mendapatkan informasi pekerjaan dari pipa dengan terus-menerus melakukan polling ke akun DevOps Azure.

1.  DevOps Agen Azure membuat image Docker sebagai bagian dari pekerjaan pipeline dan mendorong gambar ke repositori Amazon ECR.

1.  DevOps Agen Azure menyebarkan aplikasi sampel pada cluster Amazon EKS pribadi di namespace yang disebut. `webapp` 

## Alat
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**Alat**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

**Alat-alat lainnya**
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) adalah antarmuka baris perintah yang membantu Anda menjalankan perintah terhadap klaster Kubernetes.

**Repositori kode**
+ Kode untuk pola ini tersedia di repositori GitHub [deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops).

## Praktik terbaik
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ Untuk Amazon EKS, lihat [Panduan Praktik Terbaik Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html).
+ Ikuti prinsip hak istimewa terkecil dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### Buat koneksi layanan
<a name="create-a-service-connection"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Temukan GUID DevOps organisasi Azure. | Masuk ke DevOps akun Azure Anda, lalu gunakan URL berikut untuk menemukan GUID organisasi: `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` Di URL, ganti `{DevOps_org_ID}` dengan ID organisasi Azure DevOps Anda. | AWS DevOps | 
| Konfigurasikan iDP di file. Akun AWS | Untuk mengonfigurasi penyedia Identitas (iDP) di Akun AWS sambungan layanan Azure, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Untuk detail selengkapnya, lihat [Cara federasi AWS dari Azure menggunakan DevOps OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/). | AWS DevOps | 
| Buat kebijakan IAM di. Akun AWS | Untuk membuat kebijakan IAM guna memberikan izin yang diperlukan ke peran IAM yang digunakan oleh DevOps pipeline Azure, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Buat peran IAM di. Akun AWS | Untuk mengonfigurasi peran IAM dalam Akun AWS koneksi layanan Azure, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre>Dalam kebijakan, berikan informasi Anda untuk placeholder berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Buat koneksi layanan di DevOps akun Azure. | Untuk mengonfigurasi koneksi layanan Azure, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Untuk detail selengkapnya, lihat [Membuat sambungan layanan](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection) di dokumentasi Microsoft. | AWS DevOps | 
| Tambahkan peran IAM ke file konfigurasi Amazon EKS. | Peran IAM harus memiliki izin yang diperlukan untuk melakukan operasi yang diperlukan di cluster Amazon EKS. Karena ini adalah peran pipeline, peran IAM harus dapat mengelola hampir semua jenis sumber daya di cluster. Oleh karena itu, izin `system:masters` grup sesuai untuk peran ini.Untuk menambahkan konfigurasi yang diperlukan ke `aws-auth ConfigMap` dalam Kubernetes, gunakan kode berikut:<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre>Ganti `{account_id}` dengan Akun AWS ID Anda.Untuk informasi selengkapnya, lihat [Cara Amazon EKS bekerja dengan IAM](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles) di dokumentasi Amazon EKS. | AWS DevOps | 

### Buat kolam agen
<a name="create-an-agent-pool"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat kumpulan agen yang dihosting sendiri. | Untuk mengonfigurasi kumpulan agen yang dihosting sendiri di DevOps akun Azure, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Untuk detail selengkapnya, lihat [Membuat dan mengelola kumpulan agen](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser) di dokumentasi Microsoft. |  | 

### Buat gambar DevOps agen Azure dan dorong ke Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Gambar Docker yang digunakan untuk menyebarkan DevOps agen Azure dan aplikasi sampel (`webapp`) pada kluster Amazon EKS pribadi harus disimpan dalam repositori Amazon ECR. Untuk membuat repositori Amazon ECR, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Untuk detail selengkapnya, lihat [Membuat repositori pribadi Amazon ECR untuk menyimpan gambar dalam dokumentasi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) Amazon ECR. | AWS DevOps | 
| Buat Dockerfile untuk membangun agen DevOps Azure. | Buat Dockerfile untuk membangun image Docker yang telah menginstal agen DevOps Azure. Simpan konten berikut dalam file bernama`Dockerfile`:<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| Buat skrip untuk DevOps agen Azure. | Untuk membuat `start.sh` skrip, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Buat gambar Docker dengan agen Azure DevOps .  | Untuk membuat image Docker untuk menginstal DevOps agen Azure, gunakan Dockerfile yang Anda buat sebelumnya untuk membangun image. Di direktori yang sama tempat Dockerfile disimpan, jalankan perintah berikut:<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre>Ganti `aws_account_id` dan `region` dengan Akun AWS ID Anda dan Wilayah AWS. | AWS DevOps | 

### Terapkan DevOps agen Azure ke cluster Amazon EKS pribadi
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hasilkan token akses pribadi Azure. | Agen yang berjalan di kluster Amazon EKS pribadi memerlukan token akses pribadi (PAT) sehingga dapat mengautentikasi dengan akun Azure DevOps . Untuk menghasilkan PAT, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>kubectl create -f ado-secret.yaml</pre>Untuk detail selengkapnya, lihat [Mendaftarkan agen menggunakan token akses pribadi (PAT)](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops) di dokumentasi Microsoft. | AWS DevOps | 
| Gunakan file manifes Kubernetes untuk penerapan agen. | Untuk menerapkan DevOps agen Azure di kluster Amazon EKS pribadi, salin file manifes berikut dan simpan file sebagai: `agent-deployment.yaml` <pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre>Ganti `aws_account_id` dan `<Azure account URL>` dengan Akun AWS ID dan URL DevOps akun Azure Anda. | AWS DevOps | 
| Terapkan agen di cluster Amazon EKS pribadi. | Untuk menerapkan agen Azure Devops di klaster Amazon EKS pribadi, gunakan perintah berikut:<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| Verifikasi agen sedang berjalan. | Untuk memverifikasi bahwa DevOps agen Azure sedang berjalan, gunakan perintah berikut:<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre>Output yang diharapkan harus serupa dengan yang berikut:<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre>Pastikan bahwa `READY ` kolom menunjukkan`1/1`. | AWS DevOps | 
| Verifikasi agen terdaftar di kolam DevOps agen Azure. | Untuk memverifikasi bahwa agen dikerahkan di klaster Amazon EKS pribadi dan terdaftar di kumpulan agen`eks-agent`, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Anda harus melihat satu agen terdaftar dengan **Status** **Online**, dan nama agen harus dimulai dengan **azure-pipelines-agent-eks-\$1**. | AWS DevOps | 

### Menyebarkan aplikasi sampel
<a name="deploy-sample-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Garpu repositori aplikasi sampel ke akun Anda GitHub .  | Lakukan fork repositori AWS Sampel berikut ke akun Anda GitHub :[https://github.com/aws-samples/deploy-kubernetes-resources-to- amazon-eks-using-azure -devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| Buat pipa. | Untuk membuat pipeline di DevOps akun Azure Anda, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| Verifikasi bahwa aplikasi sampel digunakan. | Setelah pipeline selesai, verifikasi keberhasilan penerapan aplikasi sampel dengan memeriksa repositori Amazon ECR dan kluster Amazon EKS.Untuk memverifikasi artefak di repositori Amazon ECR, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)Misalnya, `20250501.1-image` dan `20250501.1-helm`.Untuk memverifikasi penerapan pada kluster Amazon EKS pribadi di namespace`webapp`, gunakan perintah berikut:<pre>kubectl get deploy -n webapp </pre>Output yang diharapkan adalah sebagai berikut:<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre>Catatan: Jika ini adalah proses pipeline pertama Anda, Anda mungkin perlu mengotorisasi koneksi layanan dan kumpulan agen. Cari permintaan izin di antarmuka DevOps pipeline Azure, dan setujui untuk melanjutkan. | AWS DevOps | 

## Pemecahan masalah
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Pipeline gagal saat nama repositori Amazon ECR tidak cocok `webapp` | Aplikasi sampel mengharapkan nama repositori Amazon ECR cocok dengan parameter di. `projectName: webapp` `azure_pipeline.yml`Untuk mengatasi masalah ini, ganti nama repositori Amazon ECR Anda menjadi`webapp`, atau perbarui yang berikut ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 
| Kesalahan: Kluster Kubernetes tidak dapat dijangkau: server telah meminta klien untuk memberikan kredensyal | Jika Anda menemukan kesalahan ini di langkah “Tarik dan Terapkan Bagan Helm” di pipeline Azure Anda, akar penyebabnya biasanya berasal dari konfigurasi peran IAM yang salah di cluster Amazon EKS Anda. `aws-auth ConfigMap`Untuk mengatasi masalah ini, periksa hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 

## Sumber daya terkait
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS Blog**
+ [Cara federasi AWS dari Azure menggunakan DevOps OpenID Connect](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**Layanan AWS dokumentasi**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Dokumentasi Microsoft**
+ [Apa itu Azure? DevOps](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [Apa itu Azure Pipelines?](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)

# Jalankan kueri Amazon Redshift SQL dengan menggunakan Terraform
<a name="execute-redshift-sql-queries-using-terraform"></a>

*Sylvia Qi dan Aditya Ambati, Amazon Web Services*

## Ringkasan
<a name="execute-redshift-sql-queries-using-terraform-summary"></a>

Menggunakan infrastruktur sebagai kode (IAc) untuk penyebaran dan pengelolaan Amazon Redshift adalah praktik umum di dalamnya. DevOps IAc memfasilitasi penyebaran dan konfigurasi berbagai sumber daya Amazon Redshift, seperti cluster, snapshot, dan grup parameter. Namun, IAc tidak meluas ke pengelolaan sumber daya database seperti tabel, skema, tampilan, dan prosedur tersimpan. Elemen-elemen database ini dikelola melalui query SQL dan tidak secara langsung didukung oleh alat IAC. Meskipun ada solusi dan alat untuk mengelola sumber daya ini, Anda mungkin memilih untuk tidak memperkenalkan alat tambahan ke dalam tumpukan teknologi Anda.

Pola ini menguraikan metodologi yang menggunakan Terraform untuk menyebarkan sumber daya database Amazon Redshift, termasuk tabel, skema, tampilan, dan prosedur tersimpan. Pola membedakan antara dua jenis query SQL:
+ **Kueri yang tidak dapat diulang** — Kueri ini dijalankan satu kali selama penerapan Amazon Redshift awal untuk membuat komponen basis data penting. 
+ **Kueri berulang** — Kueri ini tidak dapat diubah dan dapat dijalankan kembali tanpa memengaruhi database. Solusinya menggunakan Terraform untuk memantau perubahan dalam kueri yang dapat diulang dan menerapkannya sesuai dengan itu.

Untuk detail selengkapnya, lihat *Panduan solusi* di Informasi [tambahan](#execute-redshift-sql-queries-using-terraform-additional).

## Prasyarat dan batasan
<a name="execute-redshift-sql-queries-using-terraform-prereqs"></a>

**Prasyarat**

Anda harus memiliki yang aktif Akun AWS dan menginstal yang berikut ini pada mesin penyebaran Anda:
+ [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) (AWS CLI)
+ [AWS CLI Profil](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) yang dikonfigurasi dengan izin Amazon Redshift read/write 
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versi 1.6.2 atau yang lebih baru
+ [Python3](https://www.python.org/downloads/)
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)

**Batasan**
+ Solusi ini mendukung satu database Amazon Redshift karena Terraform hanya memungkinkan pembuatan satu database selama pembuatan cluster.
+ Pola ini tidak menyertakan pengujian untuk memvalidasi perubahan pada kueri berulang sebelum menerapkannya. Kami menyarankan Anda memasukkan tes tersebut untuk meningkatkan keandalan.
+ Untuk mengilustrasikan solusinya, pola ini menyediakan `redshift.tf` file contoh yang menggunakan file status Terraform lokal. Namun, untuk lingkungan produksi, kami sangat menyarankan Anda menggunakan file status jarak jauh dengan mekanisme penguncian untuk meningkatkan stabilitas dan kolaborasi.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**

Solusi ini dikembangkan dan diuji pada [Amazon Redshift patch](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-179) 179.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [amazon-redshift-sql-deploy-terraform](https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform).

## Arsitektur
<a name="execute-redshift-sql-queries-using-terraform-architecture"></a>

Diagram berikut mengilustrasikan cara Terraform mengelola sumber daya database Amazon Redshift dengan menangani kueri SQL yang tidak dapat diulang dan yang dapat diulang.

![\[Proses Terraform untuk mengelola sumber daya database Amazon Redshift menggunakan kueri SQL.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/0f4467ac-761b-4b6b-a32f-e18a2ca2245d/images/3b6ff9e8-e3d1-48ed-9fa1-4b14f7d3d65b.png)


Diagram menunjukkan langkah-langkah berikut:

1. Terraform menerapkan kueri SQL yang tidak dapat diulang selama penerapan klaster Amazon Redshift awal.

1. Pengembang melakukan perubahan pada kueri SQL berulang.

1. Terraform memantau perubahan dalam kueri SQL yang dapat diulang.

1. Terraform menerapkan kueri SQL yang dapat diulang ke database Amazon Redshift.

Solusi yang disediakan oleh pola ini dibuat berdasarkan [modul Terraform untuk Amazon Redshift](https://registry.terraform.io/modules/terraform-aws-modules/redshift/aws/latest). Modul Terraform menyediakan cluster dan database Amazon Redshift. Untuk menyempurnakan modul, kami menggunakan `terraform_data` sumber daya, yang memanggil skrip Python khusus untuk menjalankan kueri SQL menggunakan operasi Amazon Redshift API. [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html) Akibatnya, modul dapat melakukan hal berikut:
+ Menyebarkan sejumlah sumber daya database dengan menggunakan kueri SQL setelah database disediakan.
+ Pantau terus menerus untuk perubahan dalam kueri SQL yang dapat diulang dan terapkan perubahan tersebut menggunakan Terraform.

Untuk detail selengkapnya, lihat *Panduan solusi* di Informasi [tambahan](#execute-redshift-sql-queries-using-terraform-additional).

## Alat
<a name="execute-redshift-sql-queries-using-terraform-tools"></a>

**Layanan AWS**
+ [Amazon Redshift adalah layanan](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) gudang data skala petabyte yang dikelola sepenuhnya di. AWS Cloud

**Alat-alat lainnya**
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.
+ [Python](https://www.python.org/) adalah bahasa pemrograman tujuan umum yang digunakan dalam pola ini untuk mengeksekusi query SQL. 

## Praktik terbaik
<a name="execute-redshift-sql-queries-using-terraform-best-practices"></a>
+ [Praktik terbaik Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)
+ [Menggunakan Amazon Redshift Data API untuk berinteraksi dengan klaster Amazon Redshift](https://aws.amazon.com/blogs/big-data/using-the-amazon-redshift-data-api-to-interact-with-amazon-redshift-clusters/)

## Epik
<a name="execute-redshift-sql-queries-using-terraform-epics"></a>

### Terapkan solusi menggunakan Terraform
<a name="deploy-the-solution-using-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| **Kloning repositori.** | Untuk mengkloning repositori Git yang berisi kode Terraform untuk menyediakan cluster Amazon Redshift, gunakan perintah berikut.<pre>git clone https://github.com/aws-samples/amazon-redshift-sql-deploy-terraform.git</pre> | DevOps insinyur | 
| **Perbarui variabel Terraform.** | Untuk menyesuaikan penerapan klaster Amazon Redshift sesuai dengan kebutuhan spesifik Anda, perbarui parameter berikut dalam file. `terraform.tfvars`<pre>region                    = "<AWS_REGION>"<br />cluster_identifier        = "<REDSHIFT_CLUSTER_IDENTIFIER>"<br />node_type                 = "<REDSHIFT_NODE_TYPE>"<br />number_of_nodes           = "<REDSHIFT_NODE_COUNT>"<br />database_name             = "<REDSHIFT_DB_NAME>"<br />subnet_ids                = "<REDSHIFT_SUBNET_IDS>"<br />vpc_security_group_ids    = "<REDSHIFT_SECURITY_GROUP_IDS>"<br />run_nonrepeatable_queries = true<br />run_repeatable_queries    = true<br />sql_path_bootstrap        = "<BOOTSTRAP_SQLS_PATH>"<br />sql_path_nonrepeatable    = "<NON-REPEATABLE_SQLS_PATH>"<br />sql_path_repeatable       = "<REPEATABLE_SQLS_PATH>"<br />sql_path_finalize         = "<FINALIZE_SQLS_PATH>"<br />create_random_password    = false<br />master_username           = "<REDSHIFT_MASTER_USERNAME>"</pre> | DevOps insinyur | 
| Terapkan sumber daya menggunakan Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DevOps insinyur | 
| (Opsional) Jalankan kueri SQL tambahan. | Repositori sampel menyediakan beberapa kueri SQL untuk tujuan demo. Untuk menjalankan kueri SQL Anda sendiri, tambahkan ke folder berikut:`/bootstrap` `/nonrepeatable` `/repeatable` `/finalize` |  | 

### Memantau eksekusi pernyataan SQL
<a name="monitor-the-execution-of-sql-statements"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memantau penyebaran pernyataan SQL. | Anda dapat memantau hasil eksekusi SQL ke cluster Amazon Redshift. Untuk contoh output yang menunjukkan eksekusi SQL yang gagal dan berhasil, lihat *Contoh pernyataan SQL dalam Informasi* [tambahan](#execute-redshift-sql-queries-using-terraform-additional).  | DBA, DevOps insinyur | 
| Pembersihan sumber daya  | Untuk menghapus semua sumber daya yang digunakan oleh Terraform, jalankan perintah berikut.<pre>terraform destroy</pre> | DevOps insinyur | 

### Validasi hasilnya
<a name="validate-the-results"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi data di cluster Amazon Redshift. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/execute-redshift-sql-queries-using-terraform.html) | DBA, AWS DevOps | 

## Sumber daya terkait
<a name="execute-redshift-sql-queries-using-terraform-resources"></a>

**AWS dokumentasi**
+ [Cluster yang disediakan Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)
+ [Memecahkan masalah untuk Amazon Redshift Data API](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-troubleshooting.html)

**Sumber daya lainnya**
+ [Perintah: terapkan](https://developer.hashicorp.com/terraform/cli/commands/apply) (dokumentasi Terraform)

## Informasi tambahan
<a name="execute-redshift-sql-queries-using-terraform-additional"></a>

**Panduan solusi**

Untuk menggunakan solusinya, Anda harus mengatur kueri Amazon Redshift SQL Anda dengan cara tertentu. Semua kueri SQL harus disimpan dalam file dengan ekstensi. `.sql`

Dalam contoh kode yang disediakan dengan pola ini, query SQL diatur dalam struktur folder berikut. Anda dapat memodifikasi kode (`sql-queries.tf`dan`sql-queries.py`) untuk bekerja dengan struktur apa pun yang sesuai dengan kasus penggunaan unik Anda.

```
/bootstrap
     |- Any # of files
     |- Any # of sub-folders
/nonrepeatable
     |- Any # of files
     |- Any # of sub-folders
/repeatable
     /udf
          |- Any # of files
          |- Any # of sub-folders
     /table
          |- Any # of files
          |- Any # of sub-folders
     /view
          |- Any # of files
          |- Any # of sub-folders
     /stored-procedure
          |- Any # of files
          |- Any # of sub-folders
/finalize
     |- Any # of files
     |- Any # of sub-folders
```

Mengingat struktur folder sebelumnya, selama penerapan klaster Amazon Redshift, Terraform mengeksekusi kueri dengan urutan berikut:

1. `/bootstrap`

1. `/nonrepeatable`

1. `/repeatable`

1. `/finalize`

`/repeatable`Folder berisi empat subfolder:`/udf`,, `/table``/view`, dan`/stored-procedure`. Subfolder ini menunjukkan urutan di mana Terraform mengeksekusi kueri SQL.

Script Python yang mengeksekusi query SQL adalah. `sql-queries.py` Pertama, skrip membaca semua file dan subfolder dari direktori sumber tertentu, misalnya, `sql_path_bootstrap` parameter. Kemudian skrip mengeksekusi kueri dengan memanggil operasi Amazon [ExecuteStatement](https://docs.aws.amazon.com/redshift-data/latest/APIReference/API_ExecuteStatement.html)Redshift API. Anda mungkin memiliki satu atau lebih kueri SQL dalam sebuah file. Cuplikan kode berikut menunjukkan fungsi Python yang mengeksekusi pernyataan SQL yang disimpan dalam file terhadap cluster Amazon Redshift.

```
def execute_sql_statement(filename, cluster_id, db_name, secret_arn, aws_region):
    """Execute SQL statements in a file"""
    redshift_client = boto3.client(
        'redshift-data', region_name=aws_region)
    contents = get_contents_from_file(filename),
    response = redshift_client.execute_statement(
        Sql=contents[0],
        ClusterIdentifier=cluster_id,
        Database=db_name,
        WithEvent=True,
        StatementName=filename,
        SecretArn=secret_arn
    )
    ...
```

Skrip Terraform `sql-queries.tf` membuat sumber daya [terraform\$1data](https://developer.hashicorp.com/terraform/language/resources/terraform-data) yang memanggil skrip. `sql-queries.py` Ada `terraform_data` sumber daya untuk masing-masing dari empat folder:`/bootstrap`,`/nonrepeatable`,`/repeatable`, dan`/finalize`. Cuplikan kode berikut menunjukkan `terraform_data` sumber daya yang mengeksekusi query SQL dalam folder. `/bootstrap`

```
locals {
  program               = "${path.module}/sql-queries.py"
  redshift_cluster_name = try(aws_redshift_cluster.this[0].id, null)
}

resource "terraform_data" "run_bootstrap_queries" {
  count      = var.create && var.run_nonrepeatable_queries && (var.sql_path_bootstrap != "") && (var.snapshot_identifier == null) ? 1 : 0
  depends_on = [aws_redshift_cluster.this[0]]

  provisioner "local-exec" {
    command = "python3 ${local.program} ${var.sql_path_bootstrap} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn} ${local.aws_region}"
  }
}
```

Anda dapat mengontrol apakah akan menjalankan query ini dengan menggunakan variabel berikut. Jika Anda tidak ingin menjalankan kueri di`sql_path_bootstrap`,,`sql_path_nonrepeatable`, atau `sql_path_repeatable``sql_path_finalize`, setel nilainya. `""`

```
  run_nonrepeatable_queries = true
  run_repeatable_queries    = true
  sql_path_bootstrap        = "src/redshift/bootstrap"
  sql_path_nonrepeatable    = "src/redshift/nonrepeatable"
  sql_path_repeatable       = "src/redshift/repeatable"
  sql_path_finalize         = "src/redshift/finalize"
```

Saat Anda menjalankan`terraform apply`, Terraform mempertimbangkan `terraform_data` sumber daya yang ditambahkan setelah skrip selesai, terlepas dari hasil skripnya. Jika beberapa kueri SQL gagal, dan Anda ingin menjalankannya kembali, Anda dapat menghapus sumber daya secara manual dari status Terraform, dan menjalankannya lagi. `terraform apply` Misalnya, perintah berikut menghapus `run_bootstrap_queries` sumber daya dari status Terraform.

`terraform state rm module.redshift.terraform_data.run_bootstrap_queries[0]`

Contoh kode berikut menunjukkan bagaimana `run_repeatable_queries` sumber daya memantau perubahan dalam `repeatable` folder dengan menggunakan [hash sha256](https://developer.hashicorp.com/terraform/language/functions/sha256). Jika ada file di dalam folder yang diperbarui, Terraform menandai seluruh direktori untuk pembaruan. Kemudian, Terraform menjalankan kueri di direktori lagi selama berikutnya. `terraform apply`

```
resource "terraform_data" "run_repeatable_queries" {
  count      = var.create_redshift && var.run_repeatable_queries && (var.sql_path_repeatable != "") ? 1 : 0
  depends_on = [terraform_data.run_nonrepeatable_queries]

  # Continuously monitor and apply changes in the repeatable folder
  triggers_replace = {
    dir_sha256 = sha256(join("", [for f in fileset("${var.sql_path_repeatable}", "**") : filesha256("${var.sql_path_repeatable}/${f}")]))
  }

  provisioner "local-exec" {
    command = "python3 ${local.sql_queries} ${var.sql_path_repeatable} ${local.redshift_cluster_name} ${var.database_name} ${var.redshift_secret_arn}"
  }
}
```

Untuk memperbaiki kode, Anda dapat menerapkan mekanisme untuk mendeteksi dan menerapkan perubahan hanya pada file yang telah diperbarui dalam `repeatable` folder, daripada menerapkan perubahan ke semua file tanpa pandang bulu.

**Contoh pernyataan SQL**

Output berikut menunjukkan eksekusi SQL gagal, bersama dengan pesan kesalahan.

```
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/nonrepeatable testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): src/redshift/nonrepeatable/table/admin/admin.application_family.sql
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Status: FAILED
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): SQL execution failed.
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec): Error message: ERROR: syntax error at or near ")"
module.redshift.terraform_data.run_nonrepeatable_queries[0] (local-exec):   Position: 244
module.redshift.terraform_data.run_nonrepeatable_queries[0]: Creation complete after 3s [id=ee50ba6c-11ae-5b64-7e2f-86fd8caa8b76]
```

Output berikut menunjukkan eksekusi SQL yang sukses.

```
module.redshift.terraform_data.run_bootstrap_queries[0]: Provisioning with 'local-exec'...
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Executing: ["/bin/sh" "-c" "python3 modules/redshift/sql-queries.py src/redshift/bootstrap testcluster-1 db1 arn:aws:secretsmanager:us-east-1:XXXXXXXXXXXX:secret:/redshift/master_user/password-8RapGH us-east-1"]
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): src/redshift/bootstrap/db.sql
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): -------------------------------------------------------------------
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): Status: FINISHED
module.redshift.terraform_data.run_bootstrap_queries[0] (local-exec): SQL execution successful.
module.redshift.terraform_data.run_bootstrap_queries[0]: Creation complete after 2s [id=d565ef6d-be86-8afd-8e90-111e5ea4a1be]
```

# Ekspor laporan AWS Backup dari seluruh organisasi di AWS Organizations sebagai file CSV
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file"></a>

*Aromal Raj Jayarajan dan Purushotham G K, Amazon Web Services*

## Ringkasan
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-summary"></a>

Pola ini menunjukkan cara mengekspor laporan pekerjaan AWS Backup dari seluruh organisasi di AWS Organizations sebagai file CSV. Solusinya menggunakan AWS Lambda dan Amazon EventBridge untuk mengkategorikan laporan pekerjaan AWS Backup berdasarkan statusnya, yang dapat membantu saat mengonfigurasi otomatisasi berbasis status.

AWS Backup membantu organisasi mengelola dan mengotomatiskan perlindungan data secara terpusat di seluruh layanan AWS, di cloud, dan di tempat. Namun, untuk pekerjaan AWS Backup yang dikonfigurasi dalam AWS Organizations, pelaporan konsolidasi hanya tersedia di AWS Management Console dari setiap akun manajemen organisasi. Membawa pelaporan ini ke luar akun manajemen dapat mengurangi upaya yang diperlukan untuk mengaudit dan meningkatkan ruang lingkup untuk otomatisasi, pemberitahuan, dan peringatan.

## Prasyarat dan batasan
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [Organisasi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html) aktif di AWS Organizations yang mencakup setidaknya akun manajemen dan akun anggota
+ AWS Backup dikonfigurasi pada tingkat organisasi di AWS Organizations (untuk informasi selengkapnya, lihat [Mengotomatiskan pencadangan terpusat pada skala di seluruh layanan AWS menggunakan AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) di AWS Blog)
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git), diinstal dan dikonfigurasi pada mesin lokal Anda

**Keterbatasan**

Solusi yang disediakan dalam pola ini mengidentifikasi sumber daya AWS yang dikonfigurasi hanya untuk pekerjaan AWS Backup. Laporan tidak dapat mengidentifikasi sumber daya AWS yang tidak dikonfigurasi untuk pencadangan melalui AWS Backup.

## Arsitektur
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-architecture"></a>

**Tumpukan teknologi target**
+ AWS Backup
+ AWS CloudFormation
+ Amazon EventBridge
+ AWS Lambda
+ AWS Security Token Service (AWS STS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Identity and Access Management (IAM)

**Arsitektur target**

Diagram berikut menunjukkan contoh alur kerja untuk mengekspor laporan pekerjaan AWS Backup dari seluruh organisasi di AWS Organizations sebagai file CSV.

![\[Menggunakan EventBridge, Lambda, AWS STS, dan IAM untuk mengekspor laporan pekerjaan AWS Backup dari seluruh organisasi dalam format CSV.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/74955aad-cc6d-488b-aa34-ae43f50fec60/images/5c39c79f-e731-4ad0-b404-51ebe0976420.png)


Diagram menunjukkan alur kerja berikut:

1. Aturan EventBridge acara terjadwal memanggil fungsi Lambda di akun AWS anggota (pelaporan).

1. Fungsi Lambda kemudian menggunakan AWS STS untuk mengambil peran IAM yang memiliki izin yang diperlukan untuk terhubung ke akun manajemen.

1. Fungsi Lambda kemudian melakukan hal berikut:
   + Meminta laporan pekerjaan AWS Backup yang dikonsolidasikan dari layanan AWS Backup
   + Mengkategorikan hasil berdasarkan status pekerjaan AWS Backup
   + Mengonversi respons ke file CSV
   + Mengunggah hasil ke bucket Amazon S3 di akun pelaporan dalam folder yang diberi label berdasarkan tanggal pembuatannya

## Alat
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-tools"></a>

**Alat**
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) adalah layanan yang dikelola sepenuhnya yang membantu Anda memusatkan dan mengotomatiskan perlindungan data di seluruh layanan AWS, di cloud, dan di tempat.
+ [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.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, fungsi AWS Lambda, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di akun AWS lainnya.
+ [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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [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.

**Kode**

Kode untuk pola ini tersedia di GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repositori.

## Praktik terbaik
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-best-practices"></a>
+ [Praktik terbaik keamanan untuk Amazon S3 (Panduan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) Pengguna *Amazon S3*)
+ [Praktik terbaik untuk bekerja dengan fungsi AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) (Panduan Pengembang *AWS Lambda*)
+ [Praktik terbaik untuk akun manajemen](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_best-practices_mgmt-acct.html) (*Panduan Pengguna AWS Organizations*)

## Epik
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-epics"></a>

### Menyebarkan komponen solusi
<a name="deploy-the-solution-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning GitHub repositori. | Kloning GitHub [aws-backup-report-generator](https://github.com/aws-samples/aws-backup-report-generator)repositori dengan menjalankan perintah berikut di jendela terminal:<pre>git clone https://github.com/aws-samples/aws-backup-report-generator.git</pre>Untuk informasi selengkapnya, lihat [Mengkloning repositori di Dokumen](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository). GitHub  | AWS DevOps, DevOps insinyur | 
| Menerapkan komponen solusi di akun AWS anggota (pelaporan). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | DevOps insinyur, AWS DevOps | 

### Pengujian solusi
<a name="test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pastikan EventBridge aturan berjalan sebelum pengujian. | Pastikan EventBridge aturan berjalan dengan menunggu setidaknya 24 jam, atau dengan meningkatkan frekuensi laporan dalam file **template-reporting.yml. CloudFormation ** template.**Untuk meningkatkan frekuensi laporan**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps insinyur | 
| Periksa bucket Amazon S3 untuk laporan yang dihasilkan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus komponen solusi dari akun anggota (pelaporan). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps insinyur | 
| Hapus komponen solusi dari akun manajemen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file.html) | AWS DevOps, DevOps insinyur | 

## Sumber daya terkait
<a name="export-aws-backup-reports-from-across-an-organization-in-aws-organizations-as-a-csv-file-resources"></a>
+ [Tutorial: Menggunakan AWS Lambda dengan acara terjadwal](https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-tutorial.html) (dokumentasi AWS Lambda)
+ [Membuat acara terjadwal untuk menjalankan fungsi AWS Lambda (](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/scheduled-events-invoking-lambda-example.html)AWS SDK untuk dokumentasi) JavaScript 
+ [Tutorial IAM: Delegasikan akses di seluruh akun AWS menggunakan peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (dokumentasi IAM)
+ [Terminologi dan konsep AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) (dokumentasi AWS Organizations)
+ [Membuat rencana laporan menggunakan konsol AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-report-plan-console.html) (dokumentasi AWS Backup)
+ [Membuat laporan audit](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-audit-report.html) (dokumentasi AWS Backup)
+ [Membuat laporan sesuai permintaan](https://docs.aws.amazon.com/aws-backup/latest/devguide/create-on-demand-reports.html) (dokumentasi AWS Backup)
+ [Apa itu AWS Backup?](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) (Dokumentasi AWS Backup)
+ [Mengotomatiskan pencadangan terpusat pada skala di seluruh layanan AWS menggunakan AWS Backup](https://aws.amazon.com/blogs/storage/automate-centralized-backup-at-scale-across-aws-services-using-aws-backup/) (postingan blog AWS)

# Ekspor tag untuk daftar EC2 instans Amazon ke file CSV
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file"></a>

*Sida Ju dan Pac Joonhyun, Amazon Web Services*

## Ringkasan
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-summary"></a>

Pola ini menunjukkan cara mengekspor tag secara terprogram untuk daftar instans Amazon Elastic Compute Cloud (Amazon EC2) ke file CSV.

Dengan menggunakan contoh skrip Python yang disediakan, Anda dapat mengurangi berapa lama waktu yang dibutuhkan untuk meninjau dan mengkategorikan instance EC2 Amazon Anda berdasarkan tag tertentu. Misalnya, Anda dapat menggunakan skrip untuk mengidentifikasi dan mengkategorikan daftar contoh yang ditandai oleh tim keamanan Anda untuk pembaruan perangkat lunak dengan cepat.

## Prasyarat dan batasan
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-prereqs"></a>

**Prasyarat**
+ Python 3 diinstal dan dikonfigurasi
+ AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi

**Batasan**

Contoh skrip Python yang disediakan dalam pola ini dapat mencari EC2 instance Amazon hanya berdasarkan atribut berikut:
+ Contoh IDs
+  IPv4 Alamat pribadi
+  IPv4 Alamat publik

## Alat
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-tools"></a>
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.
+ [virtualenv](https://virtualenv.pypa.io/en/latest/) membantu Anda membuat lingkungan Python yang terisolasi.
+ [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.

**Repositori kode**

Contoh skrip Python untuk pola ini tersedia di repositori GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags

## Epik
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-epics"></a>

### Instal dan konfigurasikan prasyarat
<a name="install-and-configure-the-prerequisites"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning GitHub repositori. | Jika Anda menerima kesalahan saat menjalankan perintah AWS CLI, [pastikan Anda menggunakan versi AWS CLI terbaru](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-troubleshooting.html).Kloning instances-export-tags repositori GitHub [search-ec2-](https://github.com/aws-samples/search-ec2-instances-export-tags) dengan menjalankan perintah Git berikut di jendela terminal:<pre>git clone https://github.com/aws-samples/search-ec2-instances-export-tags.git</pre> | DevOps insinyur | 
| Instal dan aktifkan virtualenv. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html)Untuk informasi selengkapnya, lihat Panduan Pengguna [virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html). | DevOps insinyur | 
| Instal dependensi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file.html) | DevOps insinyur | 
| Konfigurasikan profil bernama AWS.  | Jika Anda belum melakukannya, konfigurasikan profil bernama AWS yang menyertakan kredensil yang diperlukan untuk menjalankan skrip. Untuk membuat profil bernama, jalankan perintah [aws configure](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods).Untuk informasi selengkapnya, lihat [Menggunakan profil bernama](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) dalam dokumentasi AWS CLI. | DevOps insinyur | 

### Konfigurasikan dan jalankan skrip Python
<a name="configure-and-run-the-python-script"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat file input. | Buat file input yang berisi daftar EC2 instance Amazon yang Anda inginkan skrip untuk mencari dan mengekspor tag. Anda dapat mencantumkan contoh IDs, IPv4 alamat pribadi, atau IPv4 alamat publik.Pastikan bahwa setiap EC2 instance Amazon terdaftar pada barisnya sendiri di file input.**Contoh file masukan**<pre>1    i-0547c351bdfe85b9f<br />2    54.157.194.156<br />3    172.31.85.33<br />4    54.165.198.144<br />5    i-0b6223b5914111a4b<br />6    172.31.85.44<br />7    54.165.198.145<br />8    172.31.80.219<br />9    172.31.94.199</pre> | DevOps insinyur | 
| Jalankan skrip Python. | Jalankan skrip dengan menjalankan perintah berikut di terminal:<pre>python search_instances.py -i INPUTFILE -o OUTPUTFILE -r REGION [-p PROFILE]</pre>Ganti `INPUTFILE` dengan nama file input Anda. Ganti `OUTPUTFILE` dengan nama yang ingin Anda berikan pada file keluaran CSV. Ganti `REGION` dengan Wilayah AWS tempat EC2 sumber daya Amazon Anda berada. Jika Anda menggunakan profil bernama AWS, ganti `PROFILE` dengan profil bernama yang Anda gunakan.Untuk mendapatkan daftar parameter yang didukung dan deskripsinya, jalankan perintah berikut:<pre>python search_instances.py -h</pre>Untuk informasi selengkapnya dan untuk melihat contoh file keluaran, lihat `README.md` file di repositori GitHub [search-ec2](https://github.com/aws-samples/search-ec2-instances-export-tags) -. instances-export-tags | DevOps insinyur | 

## Sumber daya terkait
<a name="export-tags-for-a-list-of-amazon-ec2-instances-to-a-csv-file-resources"></a>
+ [Mengonfigurasi AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (Panduan Pengguna *AWS CLI*)

# Buat CloudFormation template AWS yang berisi aturan terkelola AWS Config menggunakan Troposfer
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere"></a>

*Lucas Nation dan Freddie Wilson, Amazon Web Services*

## Ringkasan
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-summary"></a>

Banyak organisasi menggunakan aturan [terkelola AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_use-managed-rules.html) untuk mengevaluasi kepatuhan sumber daya Amazon Web Services (AWS) mereka terhadap praktik terbaik umum. Namun, aturan ini dapat memakan waktu lama untuk dipelihara dan pola ini membantu Anda memanfaatkan [Troposfer, pustaka](https://troposphere.readthedocs.io/en/latest/quick_start.html) Python, untuk membuat dan mengelola aturan terkelola AWS Config.

Pola ini membantu Anda mengelola aturan terkelola AWS Config dengan menggunakan skrip Python untuk mengonversi spreadsheet Microsoft Excel yang berisi aturan terkelola AWS menjadi templat AWS. CloudFormation Troposfer bertindak sebagai infrastruktur sebagai kode (IAc) dan ini berarti Anda dapat memperbarui spreadsheet Excel dengan aturan terkelola, alih-alih menggunakan file berformat JSON atau YAML. Anda kemudian menggunakan template untuk meluncurkan CloudFormation tumpukan AWS yang membuat dan memperbarui aturan terkelola di akun AWS Anda.

 CloudFormation Template AWS mendefinisikan setiap aturan yang dikelola AWS Config dengan menggunakan spreadsheet Excel dan membantu Anda menghindari pembuatan aturan individual secara manual di AWS Management Console. *Skrip default setiap parameter aturan terkelola ke kamus kosong dan default cakupan dari. `ComplianceResourceTypes` `THE_RULE_IDENTIFIER.template file`* Untuk informasi selengkapnya tentang pengenal aturan, lihat [Membuat aturan terkelola AWS Config dengan templat AWS dalam CloudFormation dokumentasi AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) Config.

## Prasyarat dan batasan
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ Keakraban dengan menggunakan CloudFormation templat AWS untuk membuat aturan terkelola AWS Config. Untuk informasi selengkapnya tentang hal ini, lihat [Membuat aturan terkelola AWS Config dengan CloudFormation templat AWS](https://docs.aws.amazon.com/config/latest/developerguide/aws-config-managed-rules-cloudformation-templates.html) dalam dokumentasi AWS Config.  
+ Python 3, diinstal dan dikonfigurasi. Untuk informasi lebih lanjut tentang ini, lihat dokumentasi [Python](https://www.python.org/).
+ Lingkungan pengembangan terintegrasi (IDE) yang ada.  
+ Identifikasi unit organisasi Anda (OUs) dalam kolom dalam contoh spreadsheet `excel_config_rules.xlsx` Excel (terlampir).

## Epik
<a name="generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere-epics"></a>

### Kustomisasi dan konfigurasikan aturan terkelola AWS Config
<a name="customize-and-configure-the-aws-config-managed-rules"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui contoh spreadsheet Excel. | Unduh contoh spreadsheet `excel_config_rules.xlsx` Excel (terlampir) dan beri label sebagai aturan `Implemented` terkelola AWS Config yang ingin Anda gunakan. Aturan yang ditandai sebagai `Implemented` akan ditambahkan ke CloudFormation template AWS. | Developer | 
| (Opsional) Perbarui file config\$1rules\$1params.json dengan parameter aturan AWS Config. | Beberapa aturan yang dikelola AWS Config memerlukan parameter dan harus diteruskan ke skrip Python sebagai file JSON dengan menggunakan opsi. `--param-file` Misalnya, aturan `access-keys-rotated` terkelola menggunakan `maxAccessKeyAge` parameter berikut:<pre>{<br />         "access-keys-rotated": {<br />             "InputParameters": {<br />                 "maxAccessKeyAge": 90<br />             }<br />         }<br />     }</pre>Dalam parameter sampel ini, `maxAccessKeyAge` diatur ke 90 hari. Skrip membaca file parameter dan menambahkan apa pun `InputParameters` yang ditemukannya. | Developer | 
| (Opsional) Perbarui file config\$1rules\$1params.json dengan AWS Config. ComplianceResourceTypes | Secara default, skrip Python mengambil template yang ditentukan `ComplianceResourceTypes` AWS. Jika Anda ingin mengganti cakupan aturan terkelola AWS Config tertentu, maka Anda harus meneruskannya ke skrip Python sebagai file JSON menggunakan opsi. `--param-file`Misalnya, kode contoh berikut menunjukkan bagaimana `ComplianceResourceTypes` for `ec2-volume-inuse-check` diatur ke `["AWS::EC2::Volume"]` daftar:<pre>{<br />         "ec2-volume-inuse-check": {<br />             "Scope": {<br />                 "ComplianceResourceTypes": [<br />                     "AWS::EC2::Volume"<br />                 ]<br />             }<br />         }<br />     }</pre> | Developer | 

### Jalankan skrip Python
<a name="run-the-python-script"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal paket pip dari file requirements.txt.  | Download `requirements.txt` file (terlampir) dan jalankan perintah berikut di IDE Anda untuk menginstal paket Python:`pip3 install -r requirements.txt` | Developer | 
| Jalankan skrip Python.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html)Anda juga dapat menambahkan parameter opsional berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Developer | 

### Menerapkan aturan terkelola AWS Config
<a name="deploy-the-aws-config-managed-rules"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Luncurkan CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-an-aws-cloudformation-template-containing-aws-config-managed-rules-using-troposphere.html) | Developer | 

## Lampiran
<a name="attachments-07c1cfff-fc9e-4a1f-bd36-48f025808bd8"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/07c1cfff-fc9e-4a1f-bd36-48f025808bd8/attachments/attachment.zip)

# Berikan instans SageMaker notebook akses sementara ke CodeCommit repositori di akun AWS lain
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account"></a>

*Healge Aufderheide, Amazon Web Services*

## Ringkasan
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-summary"></a>

Pola ini menunjukkan cara memberikan instans SageMaker notebook Amazon dan pengguna akses sementara ke CodeCommit repositori AWS yang ada di akun AWS lain. Pola ini juga menunjukkan bagaimana Anda dapat memberikan izin granular untuk tindakan tertentu yang dapat dilakukan setiap entitas pada setiap repositori.

Organizations sering menyimpan CodeCommit repositori di akun AWS yang berbeda dari akun yang menampung lingkungan pengembangannya. Pengaturan multi-akun ini membantu mengontrol akses ke repositori dan mengurangi risiko penghapusan yang tidak disengaja. Untuk memberikan izin lintas akun ini, merupakan praktik terbaik untuk menggunakan peran AWS Identity and Access Management (IAM). Kemudian, identitas IAM yang telah ditentukan sebelumnya di setiap akun AWS dapat mengambil peran sementara untuk membuat rantai kepercayaan yang terkontrol di seluruh akun.

**catatan**  
Anda dapat menerapkan prosedur serupa untuk memberikan identitas IAM lainnya akses lintas akun ke repositori. CodeCommit Untuk informasi selengkapnya, lihat [Mengonfigurasi akses lintas akun ke CodeCommit repositori AWS menggunakan peran dalam Panduan](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) Pengguna * CodeCommit AWS*.

## Prasyarat dan batasan
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif dengan CodeCommit repositori (*akun* A)
+ Akun AWS aktif kedua dengan instance SageMaker notebook (*akun B*)
+ Pengguna AWS dengan izin yang memadai untuk membuat dan memodifikasi peran IAM di akun A
+ Pengguna AWS kedua dengan izin yang cukup untuk membuat dan memodifikasi peran IAM di akun B

## Arsitektur
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-architecture"></a>

Diagram berikut menunjukkan contoh alur kerja untuk memberikan instance SageMaker notebook dan pengguna dalam satu akun AWS akses lintas akun ke repositori: CodeCommit 

![\[Alur kerja untuk akses lintas akun CodeCommit\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/54d0fdb3-6d25-4433-9f67-c87846633d61/images/97a799af-ce88-4495-a61c-d0cd22493ce2.png)


Diagram menunjukkan alur kerja berikut:

1. Peran pengguna AWS dan peran instans SageMaker notebook di akun B mengasumsikan [profil bernama](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles).

1. Kebijakan izin profil bernama menentukan peran CodeCommit akses di akun A yang kemudian diasumsikan oleh profil.

1. Kebijakan kepercayaan peran CodeCommit akses di akun A memungkinkan profil bernama di akun B untuk mengambil peran CodeCommit akses.

1. Kebijakan izin IAM CodeCommit repositori di akun A memungkinkan peran CodeCommit akses untuk mengakses repositori. CodeCommit 

**Tumpukan teknologi**
+ CodeCommit
+ Git
+ IAM
+ pip
+ SageMaker

## Alat
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-tools"></a>
+ [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.
+ [Git](https://git-scm.com/) adalah sistem kontrol versi terdistribusi untuk melacak perubahan kode sumber selama pengembangan perangkat lunak.
+ [git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html)adalah utilitas yang membantu Anda mendorong dan menarik kode dari CodeCommit repositori dengan memperluas Git.
+ [pip](https://pypi.org/project/pip/) adalah penginstal paket untuk Python. Anda dapat menggunakan pip untuk menginstal paket dari Python Package Index dan indeks lainnya.

## Praktik terbaik
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-best-practices"></a>

Saat Anda menetapkan izin dengan kebijakan IAM, pastikan Anda hanya memberikan izin yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Menerapkan izin hak istimewa paling sedikit dalam dokumentasi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).

Saat menerapkan pola ini, pastikan Anda melakukan hal berikut:
+ Konfirmasikan bahwa prinsip IAM hanya memiliki izin yang diperlukan untuk melakukan tindakan spesifik yang diperlukan dalam setiap repositori. Misalnya, disarankan untuk mengizinkan prinsip IAM yang disetujui untuk mendorong dan menggabungkan perubahan ke cabang repositori tertentu, tetapi hanya meminta penggabungan ke cabang yang dilindungi. 
+ Konfirmasikan bahwa prinsip-prinsip IAM diberi peran IAM yang berbeda berdasarkan peran dan tanggung jawab masing-masing untuk setiap proyek. Misalnya, pengembang akan memiliki izin akses yang berbeda dari manajer rilis atau AWS Administrator. 

## Epik
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-epics"></a>

### Konfigurasikan peran IAM
<a name="configure-the-iam-roles"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan kebijakan peran CodeCommit akses dan izin. | Untuk mengotomatiskan proses penyiapan manual yang didokumentasikan dalam epik ini,**** Anda dapat menggunakan [ CloudFormation template AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html).Di akun yang berisi CodeCommit repositori (*akun A*), lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)Sebelum memindahkan penyiapan ini ke lingkungan produksi Anda, sebaiknya tulis kebijakan IAM Anda sendiri yang menerapkan izin [hak](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) istimewa paling sedikit. Untuk informasi selengkapnya, lihat bagian **Informasi tambahan** dari pola ini. | AWS Umum, AWS DevOps | 
| Berikan peran instans SageMaker notebook dalam izin akun B untuk mengambil peran CodeCommit akses di akun A. | Di akun yang berisi peran IAM instance SageMaker notebook (*akun B),* lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)*Untuk melihat Nama Sumber Daya Amazon (ARN) repositori Anda, lihat [Melihat detail CodeCommit repositori](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-view-repository-details.html) di Panduan Pengguna AWS. CodeCommit * | AWS Umum, AWS DevOps | 

### Siapkan instance SageMaker buku catatan Anda di akun B
<a name="set-up-your-sagemaker-notebook-instance-in-account-b"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan profil pengguna pada instans SageMaker notebook AWS untuk mengambil peran dalam akun A.  | [Pastikan Anda telah menginstal AWS Command Line Interface (AWS CLI) versi terbaru](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).Di akun yang berisi instance SageMaker notebook (*akun B),* lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.html)<pre>------.aws/config--------------<br />[profile remoterepouser]<br />role_arn = arn:aws:iam::<ID of Account A>:role/<rolename><br />role_session_name = remoteaccesssession<br />region = eu-west-1<br />credential_source  = Ec2InstanceMetadata<br />----------------------------------</pre> | AWS Umum, AWS DevOps | 
| Instal git-remote-codecommit utilitas. | Ikuti petunjuk di [Langkah 2: Instal git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install) di *Panduan CodeCommit Pengguna AWS*. | Ilmuwan data | 

### Akses repositori
<a name="access-the-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Akses CodeCommit repositori dengan menggunakan perintah Git atau. SageMaker | **Untuk menggunakan Git**Prinsipal IAM yang mengasumsikan peran instance SageMaker notebook di akun B sekarang dapat menjalankan perintah Git untuk mengakses CodeCommit repositori di akun A. Misalnya, pengguna dapat menjalankan perintah seperti,, dan. `git clone` `git pull` `git push`Untuk petunjuk, lihat [Connect ke CodeCommit repositori AWS](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) di * CodeCommit Panduan Pengguna AWS*.Untuk informasi tentang cara menggunakan Git CodeCommit, lihat [Memulai AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html) di *Panduan CodeCommit Pengguna AWS*.**Untuk menggunakan SageMaker**Untuk menggunakan Git dari SageMaker konsol, Anda harus mengizinkan Git untuk mengambil kredensi dari repositori Anda. CodeCommit Untuk petunjuknya, lihat [Mengaitkan CodeCommit repositori di akun AWS yang berbeda dengan instans notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi-git-cross.html) dalam dokumentasi. SageMaker  | Git, konsol bash | 

## Sumber daya terkait
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-resources"></a>
+ [Konfigurasikan akses lintas akun ke CodeCommit repositori AWS menggunakan peran (dokumentasi AWS)](https://docs.aws.amazon.com/codecommit/latest/userguide/cross-account.html) CodeCommit 
+ [Tutorial IAM: Delegasikan akses di seluruh akun AWS menggunakan peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) (dokumentasi IAM)

## Informasi tambahan
<a name="give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account-additional"></a>

**Membatasi CodeCommit izin untuk tindakan tertentu**

Untuk membatasi tindakan yang dapat dilakukan oleh kepala sekolah IAM di CodeCommit repositori, ubah tindakan yang diizinkan dalam kebijakan akses. CodeCommit 

Untuk informasi selengkapnya tentang operasi CodeCommit API, lihat [referensi CodeCommit izin](https://docs.aws.amazon.com/codecommit/latest/userguide/auth-and-access-control-permissions-reference.html) di *Panduan CodeCommit Pengguna AWS*.

**catatan**  
Anda juga dapat mengedit kebijakan terkelola [AWSCodeCommitPowerUser](https://docs.aws.amazon.com/codecommit/latest/userguide/security-iam-awsmanpol.html#managed-policies-poweruser)AWS agar sesuai dengan kasus penggunaan Anda.

**Membatasi CodeCommit izin ke repositori tertentu**

Untuk membuat lingkungan multitenant di mana lebih dari satu repositori kode hanya dapat diakses oleh pengguna tertentu, lakukan hal berikut:

1. Buat beberapa peran CodeCommit akses di akun A. Kemudian, konfigurasikan kebijakan kepercayaan setiap peran akses agar pengguna tertentu di akun B dapat mengambil peran tersebut.

1. Batasi repositori kode apa yang dapat diasumsikan oleh setiap peran dengan menambahkan kondisi **“Sumber Daya”** ke kebijakan setiap peran CodeCommit akses.

**Contoh kondisi “Sumber Daya” yang membatasi akses prinsipal IAM ke repositori tertentu CodeCommit **

```
"Resource" : [<REPOSITORY_ARN>,<REPOSITORY_ARN> ]
```

**catatan**  
Untuk membantu mengidentifikasi dan membedakan beberapa repositori kode di akun AWS yang sama, Anda dapat menetapkan awalan yang berbeda ke nama repositori. ****Misalnya, Anda dapat memberi nama repositori kode dengan awalan yang sejajar dengan grup pengembang yang berbeda, seperti myproject-subproject1-repo1 dan myproject-subproject2-repo1.**** Kemudian, Anda dapat membuat peran IAM untuk setiap grup pengembang berdasarkan awalan yang ditetapkan. **Misalnya, Anda dapat membuat peran bernama **myproject-subproject1-repoaccess dan memberikannya akses ke semua repositori kode yang menyertakan awalan myproject-subproject1**.**

**Contoh kondisi “Resource” yang mengacu pada ARN repositori kode yang menyertakan awalan tertentu**

```
"Resource" : arn:aws:codecommit:<region>:<account-id>:myproject-subproject1-*
```

# Menerapkan strategi percabangan GitHub Flow untuk lingkungan multi-akun DevOps
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens dan Abhilash Vinod, Amazon Web Services*

## Ringkasan
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Saat mengelola repositori kode sumber, strategi percabangan yang berbeda memengaruhi pengembangan perangkat lunak dan proses rilis yang digunakan tim pengembangan. Contoh strategi percabangan umum termasuk Trunk, GitHub Flow, dan Gitflow. Strategi-strategi ini menggunakan cabang yang berbeda, dan kegiatan yang dilakukan di setiap lingkungan berbeda. Organizations yang menerapkan DevOps proses akan mendapat manfaat dari panduan visual untuk membantu mereka memahami perbedaan antara strategi percabangan ini. Menggunakan visual ini di organisasi Anda membantu tim pengembangan menyelaraskan pekerjaan mereka dan mengikuti standar organisasi. Pola ini memberikan visual ini dan menjelaskan proses penerapan strategi percabangan GitHub Flow di organisasi Anda.

Pola ini merupakan bagian dari rangkaian dokumentasi tentang memilih dan menerapkan strategi DevOps percabangan untuk organisasi dengan banyak Akun AWS. Seri ini dirancang untuk membantu Anda menerapkan strategi dan praktik terbaik yang benar sejak awal, untuk merampingkan pengalaman Anda di cloud. GitHub Flow hanyalah salah satu strategi percabangan yang mungkin dapat digunakan organisasi Anda. Seri dokumentasi ini juga mencakup model percabangan [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) dan [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Jika Anda belum melakukannya, kami sarankan Anda meninjau [Memilih strategi percabangan Git untuk DevOps lingkungan multi-akun](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) sebelum menerapkan panduan dalam pola ini. Harap gunakan uji tuntas untuk memilih strategi percabangan yang tepat untuk organisasi Anda.

Panduan ini menyediakan diagram yang menunjukkan bagaimana organisasi dapat menerapkan strategi GitHub Flow. Disarankan agar Anda meninjau Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) untuk meninjau praktik terbaik. Pola ini mencakup tugas, langkah, dan batasan yang direkomendasikan untuk setiap langkah dalam DevOps proses.

## Prasyarat dan batasan
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Prasyarat**
+ Git, [diinstal](https://git-scm.com/downloads). Ini digunakan sebagai alat repositori kode sumber.
+ [Draw.io, diinstal.](https://github.com/jgraph/drawio-desktop/releases) Aplikasi ini digunakan untuk melihat dan mengedit diagram.

## Arsitektur
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arsitektur target**

Diagram berikut dapat digunakan seperti [kotak Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Anda menyusun cabang pada sumbu vertikal dengan AWS lingkungan pada sumbu horizontal untuk menentukan tindakan apa yang harus dilakukan dalam setiap skenario. Angka-angka menunjukkan urutan tindakan dalam alur kerja. Contoh ini membawa Anda dari `feature` cabang melalui penerapan dalam produksi.

![\[Punnett square dari aktivitas GitHub Flow di setiap cabang dan lingkungan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/780a5bce-3cd2-4092-8537-b7a77c3d6b8d/images/8a2a774a-cd85-466e-838e-a9a1f3b58a63.png)


Untuk informasi selengkapnya tentang Akun AWS, lingkungan, dan cabang dalam pendekatan GitHub Flow, lihat [Memilih strategi percabangan Git untuk lingkungan multi-akun DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Otomatisasi dan skala**

Integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDjaringan pipa juga menyediakan tata kelola dan pagar pembatas untuk tim pengembangan dengan menegakkan konsistensi, standar, praktik terbaik, dan tingkat penerimaan minimal untuk penerimaan dan penerapan fitur. Untuk informasi selengkapnya, lihat [Mempraktikkan Integrasi Berkelanjutan dan Pengiriman Berkelanjutan di AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS menawarkan serangkaian layanan pengembang yang dirancang untuk membantu Anda membangun CI/CD jaringan pipa. Misalnya, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)adalah layanan pengiriman berkelanjutan yang dikelola sepenuhnya yang membantu Anda mengotomatiskan saluran pipa rilis untuk pembaruan aplikasi dan infrastruktur yang cepat dan andal. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)mengkompilasi kode sumber, menjalankan tes, dan menghasilkan paket ready-to-deploy perangkat lunak. Untuk informasi selengkapnya, lihat [Alat Pengembang di AWS](https://aws.amazon.com/products/developer-tools/).

## Alat
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS layanan dan alat**

AWS menyediakan serangkaian layanan pengembang yang dapat Anda gunakan untuk menerapkan pola ini:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)adalah layanan repositori artefak terkelola yang sangat skalabel yang membantu Anda menyimpan dan berbagi paket perangkat lunak untuk pengembangan aplikasi.
+ [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 CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)mengotomatiskan penerapan ke Amazon Elastic Compute Cloud (Amazon EC2) atau instans, fungsi AWS Lambda , atau layanan Amazon Elastic Container Service (Amazon ECS) atau lokal.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.

**Alat-alat lainnya**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) adalah aplikasi untuk membuat diagram alur dan diagram. Repositori kode berisi template dalam format.drawio untuk Draw.io.
+ [Figma](https://www.figma.com/design-overview/) adalah alat desain online yang dirancang untuk kolaborasi. Repositori kode berisi template dalam format.fig untuk Figma.

**Repositori kode**

File sumber untuk diagram dalam pola ini tersedia di GitHub [Git Branching Strategy for GitHub Flow](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/github-flow) repository. Ini termasuk file dalam format PNG, draw.io, dan Figma. Anda dapat memodifikasi diagram ini untuk mendukung proses organisasi Anda.

## Praktik terbaik
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Ikuti praktik dan rekomendasi terbaik dalam Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) dan [Memilih strategi percabangan Git untuk](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) lingkungan multi-akun. DevOps Ini membantu Anda menerapkan pengembangan GitHub berbasis Flow secara efektif, mendorong kolaborasi, meningkatkan kualitas kode, dan merampingkan proses pengembangan.

## Epik
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Meninjau alur kerja GitHub Alur
<a name="reviewing-the-github-flow-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tinjau proses GitHub Flow standar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps insinyur | 
| Tinjau proses GitHub Alur perbaikan bug. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) | DevOps insinyur | 
| Tinjau proses GitHub Flow hotfix. | GitHub Flow dirancang untuk memungkinkan pengiriman berkelanjutan, di mana perubahan kode sering dan andal digunakan ke lingkungan yang lebih tinggi. Kuncinya adalah bahwa setiap `feature` cabang dapat diterapkan kapan saja.`Hotfix`cabang, yang mirip dengan `feature` atau `bugfix` cabang, dapat mengikuti proses yang sama seperti salah satu cabang lainnya. Namun, mengingat urgensinya, hotfix biasanya memiliki prioritas yang lebih tinggi. Bergantung pada kebijakan tim dan kedekatan situasi, langkah-langkah tertentu dalam proses dapat dipercepat. Misalnya, ulasan kode untuk perbaikan terbaru mungkin dilacak dengan cepat. Oleh karena itu, sementara proses perbaikan terbaru sejajar dengan fitur atau proses perbaikan bug, urgensi seputar perbaikan terbaru dapat memerlukan modifikasi dalam kepatuhan prosedural. Sangat penting untuk menetapkan pedoman tentang mengelola perbaikan terbaru untuk memastikan bahwa mereka ditangani secara efisien dan aman. | DevOps insinyur | 

## Pemecahan masalah
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Konflik cabang | Masalah umum yang dapat terjadi dengan model GitHub Flow adalah di mana perbaikan terbaru perlu terjadi dalam produksi tetapi perubahan yang sesuai perlu terjadi di`feature`,`bugfix`, atau `hotfix` cabang di mana sumber daya yang sama sedang dimodifikasi. Kami menyarankan agar Anda sering menggabungkan perubahan dari `main` cabang yang lebih rendah untuk menghindari konflik yang signifikan saat Anda bergabung. `main` | 
| Kedewasaan tim | GitHub Flow mendorong penyebaran harian ke lingkungan yang lebih tinggi, merangkul integrasi berkelanjutan sejati dan pengiriman berkelanjutan (CI/CD). Sangat penting bahwa tim memiliki kematangan teknik untuk membangun fitur dan membuat tes otomatisasi untuk mereka. Tim harus melakukan peninjauan permintaan gabungan lengkap sebelum perubahan disetujui. Ini menumbuhkan budaya teknik yang kuat yang mempromosikan kualitas, akuntabilitas, dan efisiensi dalam proses pengembangan. | 

## Sumber daya terkait
<a name="implement-a-github-flow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Panduan ini tidak termasuk pelatihan untuk Git; namun, ada banyak sumber daya berkualitas tinggi yang tersedia di internet jika Anda memerlukan pelatihan ini. Kami menyarankan Anda memulai dengan situs [dokumentasi Git](https://git-scm.com/doc).

Sumber daya berikut dapat membantu Anda dengan perjalanan percabangan GitHub Flow Anda di. AWS Cloud

**AWS DevOps bimbingan**
+ [AWS DevOps Bimbingan](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Arsitektur Referensi Pipeline Deployment](https://pipelines.devops.aws.dev/)
+ [Apa itu DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps sumber daya](https://aws.amazon.com/devops/resources/)

**GitHub Panduan aliran**
+ [GitHub Tutorial Mulai Cepat Aliran](https://docs.github.com/en/get-started/using-github/github-flow) () GitHub
+ [Mengapa GitHub Mengalir?](https://githubflow.github.io/)

**Sumber daya lainnya**
+ [Metodologi aplikasi dua belas faktor](https://12factor.net/) (12factor.net)

# Menerapkan strategi percabangan Gitflow untuk lingkungan multi-akun DevOps
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens, Stephen, Abhilash Vinod DiCato, dan Tim Wondergem, Amazon Web Services*

## Ringkasan
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-summary"></a>

Saat mengelola repositori kode sumber, strategi percabangan yang berbeda memengaruhi pengembangan perangkat lunak dan proses rilis yang digunakan tim pengembangan. Contoh strategi percabangan umum termasuk Trunk, Gitflow, dan GitHub Flow. Strategi-strategi ini menggunakan cabang yang berbeda, dan kegiatan yang dilakukan di setiap lingkungan berbeda. Organizations yang menerapkan DevOps proses akan mendapat manfaat dari panduan visual untuk membantu mereka memahami perbedaan antara strategi percabangan ini. Menggunakan visual ini di organisasi Anda membantu tim pengembangan menyelaraskan pekerjaan mereka dan mengikuti standar organisasi. Pola ini memberikan visual ini dan menjelaskan proses penerapan strategi percabangan Gitflow di organisasi Anda.

Pola ini merupakan bagian dari rangkaian dokumentasi tentang memilih dan menerapkan strategi DevOps percabangan untuk organisasi dengan banyak Akun AWS. Seri ini dirancang untuk membantu Anda menerapkan strategi dan praktik terbaik yang benar sejak awal, untuk merampingkan pengalaman Anda di cloud. Gitflow hanyalah salah satu kemungkinan strategi percabangan yang dapat digunakan organisasi Anda. Seri dokumentasi ini juga mencakup model percabangan [Trunk](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) dan [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html). Jika Anda belum melakukannya, kami sarankan Anda meninjau [Memilih strategi percabangan Git untuk DevOps lingkungan multi-akun](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) sebelum menerapkan panduan dalam pola ini. Harap gunakan uji tuntas untuk memilih strategi percabangan yang tepat untuk organisasi Anda.

Panduan ini menyediakan diagram yang menunjukkan bagaimana organisasi dapat menerapkan strategi Gitflow. Disarankan agar Anda meninjau Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) untuk meninjau praktik terbaik. Pola ini mencakup tugas, langkah, dan batasan yang direkomendasikan untuk setiap langkah dalam DevOps proses.

## Prasyarat dan batasan
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Prasyarat**
+ Git, [diinstal](https://git-scm.com/downloads). Ini digunakan sebagai alat repositori kode sumber.
+ [Draw.io, diinstal.](https://github.com/jgraph/drawio-desktop/releases) Aplikasi ini digunakan untuk melihat dan mengedit diagram.
+ (Opsional) Plugin Gitflow, [diinstal](https://github.com/nvie/gitflow).

## Arsitektur
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arsitektur target**

Diagram berikut dapat digunakan seperti [kotak Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Anda menyusun cabang pada sumbu vertikal dengan AWS lingkungan pada sumbu horizontal untuk menentukan tindakan apa yang harus dilakukan dalam setiap skenario. Angka-angka menunjukkan urutan tindakan dalam alur kerja. Contoh ini membawa Anda dari cabang fitur melalui penerapan dalam produksi.

![\[Kotak Punnett dari aktivitas Gitflow di setiap cabang dan lingkungan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/1dee2a06-cc54-4797-b9a9-78b6685edd33/images/d8be49bf-dca1-4892-ac4c-11996a7258c2.png)


Untuk informasi selengkapnya tentang Akun AWS, lingkungan, dan cabang dalam pendekatan Gitflow, lihat [Memilih strategi percabangan Git untuk lingkungan DevOps multi-akun](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/).

**Otomatisasi dan skala**

Integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDjaringan pipa juga menyediakan tata kelola dan pagar pembatas untuk tim pengembangan dengan menegakkan konsistensi, standar, praktik terbaik, dan tingkat penerimaan minimal untuk penerimaan dan penerapan fitur. Untuk informasi selengkapnya, lihat [Mempraktikkan Integrasi Berkelanjutan dan Pengiriman Berkelanjutan di AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS menawarkan serangkaian layanan pengembang yang dirancang untuk membantu Anda membangun CI/CD jaringan pipa. Misalnya, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)adalah layanan pengiriman berkelanjutan yang dikelola sepenuhnya yang membantu Anda mengotomatiskan saluran pipa rilis untuk pembaruan aplikasi dan infrastruktur yang cepat dan andal. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)mengkompilasi kode sumber, menjalankan tes, dan menghasilkan paket ready-to-deploy perangkat lunak. Untuk informasi selengkapnya, lihat [Alat Pengembang di AWS](https://aws.amazon.com/products/developer-tools/).

## Alat
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS layanan dan alat**

AWS menyediakan serangkaian layanan pengembang yang dapat Anda gunakan untuk menerapkan pola ini:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)adalah layanan repositori artefak terkelola yang sangat skalabel yang membantu Anda menyimpan dan berbagi paket perangkat lunak untuk pengembangan aplikasi.
+ [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 CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)mengotomatiskan penerapan ke Amazon Elastic Compute Cloud (Amazon EC2) atau instans, fungsi AWS Lambda , atau layanan Amazon Elastic Container Service (Amazon ECS) atau lokal.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.

**Alat lainnya**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) adalah aplikasi untuk membuat diagram alur dan diagram. Repositori kode berisi template dalam format.drawio untuk Draw.io.
+ [Figma](https://www.figma.com/design-overview/) adalah alat desain online yang dirancang untuk kolaborasi. Repositori kode berisi template dalam format.fig untuk Figma.
+ (Opsional) [Plugin Gitflow](https://github.com/nvie/gitflow) adalah kumpulan ekstensi Git yang menyediakan operasi repositori tingkat tinggi untuk model percabangan Gitflow.

**Repositori kode**

File sumber untuk diagram dalam pola ini tersedia dalam [Strategi Percabangan GitHub Git untuk GitFlow](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/gitflow) repositori. Ini termasuk file dalam format PNG, draw.io, dan Figma. Anda dapat memodifikasi diagram ini untuk mendukung proses organisasi Anda.

## Praktik terbaik
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Ikuti praktik dan rekomendasi terbaik dalam Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) dan [Memilih strategi percabangan Git untuk](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) lingkungan multi-akun. DevOps Ini membantu Anda menerapkan pengembangan berbasis GitFlow secara efektif, mendorong kolaborasi, meningkatkan kualitas kode, dan merampingkan proses pengembangan.

## Epik
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Meninjau alur kerja Gitflow
<a name="reviewing-the-gitflow-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tinjau proses Gitflow standar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps insinyur | 
| Tinjau proses Gitflow hotfix. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps insinyur | 
| Tinjau proses Gitflow perbaikan bug. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Konflik cabang | Masalah umum yang dapat terjadi dengan model Gitflow adalah di mana perbaikan terbaru perlu terjadi dalam produksi tetapi perubahan yang sesuai perlu terjadi di lingkungan yang lebih rendah, di mana cabang lain memodifikasi sumber daya yang sama. Kami menyarankan Anda hanya memiliki satu cabang rilis yang aktif pada satu waktu. Jika Anda memiliki lebih dari satu aktif pada satu waktu, perubahan lingkungan mungkin bertabrakan, dan Anda mungkin tidak dapat memindahkan cabang ke produksi. | 
| Penggabungan | Rilis harus digabungkan kembali ke main dan dikembangkan sesegera mungkin untuk mengkonsolidasikan pekerjaan kembali ke cabang utama. | 
| Penggabungan squash | Hanya gunakan gabungan squash saat Anda menggabungkan dari `feature` cabang ke cabang. `develop` Menggunakan penggabungan squash di cabang yang lebih tinggi menyebabkan kesulitan saat menggabungkan perubahan kembali ke cabang yang lebih rendah. | 

## Sumber daya terkait
<a name="implement-a-gitflow-branching-strategy-for-multi-account-devops-environments-resources"></a>

Panduan ini tidak termasuk pelatihan untuk Git; namun, ada banyak sumber daya berkualitas tinggi yang tersedia di internet jika Anda memerlukan pelatihan ini. Kami menyarankan Anda memulai dengan situs [dokumentasi Git](https://git-scm.com/doc).

Sumber daya berikut dapat membantu Anda dengan perjalanan percabangan Gitflow Anda di. AWS Cloud

**AWS DevOps bimbingan**
+ [AWS DevOps Bimbingan](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [AWS Arsitektur Referensi Pipeline Deployment](https://pipelines.devops.aws.dev/)
+ [Apa itu DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps sumber daya](https://aws.amazon.com/devops/resources/)

**Panduan Gitflow**
+ Blog [Gitflow asli (posting blog](https://nvie.com/posts/a-successful-git-branching-model/) Vincent Driessen)
+ [Alur kerja Gitflow (Atlassian](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow))
+ [Gitflow on GitHub: Cara menggunakan alur kerja Git Flow dengan Repos GitHub Berbasis](https://youtu.be/WQuxeEvaCxs) (video) YouTube 
+ [Contoh Init Aliran Git](https://www.youtube.com/watch?v=d4cDLBFbekw) (YouTube video)
+ [Cabang Rilis Gitflow dari Awal hingga Selesai](https://www.youtube.com/watch?v=rX80eKPdA28) (YouTube video)

**Sumber daya lainnya**

[Metodologi aplikasi dua belas faktor](https://12factor.net/) (12factor.net)

# Menerapkan strategi percabangan Trunk untuk lingkungan multi-akun DevOps
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments"></a>

*Mike Stephens dan Rayjan Wilson, Amazon Web Services*

## Ringkasan
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-summary"></a>

Saat mengelola repositori kode sumber, strategi percabangan yang berbeda memengaruhi pengembangan perangkat lunak dan proses rilis yang digunakan tim pengembangan. Contoh strategi percabangan umum termasuk Trunk, GitHub Flow, dan Gitflow. Strategi-strategi ini menggunakan cabang yang berbeda, dan kegiatan yang dilakukan di setiap lingkungan berbeda. Organizations yang menerapkan DevOps proses akan mendapat manfaat dari panduan visual untuk membantu mereka memahami perbedaan antara strategi percabangan ini. Menggunakan visual ini di organisasi Anda membantu tim pengembangan menyelaraskan pekerjaan mereka dan mengikuti standar organisasi. Pola ini memberikan visual ini dan menjelaskan proses penerapan strategi percabangan Trunk di organisasi Anda.

Pola ini merupakan bagian dari rangkaian dokumentasi tentang memilih dan menerapkan strategi DevOps percabangan untuk organisasi dengan banyak Akun AWS. Seri ini dirancang untuk membantu Anda menerapkan strategi dan praktik terbaik yang benar sejak awal, untuk merampingkan pengalaman Anda di cloud. Trunk hanyalah salah satu strategi percabangan yang mungkin dapat digunakan organisasi Anda. Seri dokumentasi ini juga mencakup model percabangan [GitHub Flow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-github-flow-branching-strategy-for-multi-account-devops-environments.html) dan [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/implement-a-gitflow-branching-strategy-for-multi-account-devops-environments.html). Jika Anda belum melakukannya, kami sarankan Anda meninjau [Memilih strategi percabangan Git untuk DevOps lingkungan multi-akun](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) sebelum menerapkan panduan dalam pola ini. Harap gunakan uji tuntas untuk memilih strategi percabangan yang tepat untuk organisasi Anda.

Panduan ini menyediakan diagram yang menunjukkan bagaimana organisasi dapat menerapkan strategi Trunk. Disarankan agar Anda meninjau Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) resmi untuk meninjau praktik terbaik. Pola ini mencakup tugas, langkah, dan batasan yang direkomendasikan untuk setiap langkah dalam DevOps proses.

## Prasyarat dan batasan
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-prereqs"></a>

**Prasyarat**
+ Git, [diinstal](https://git-scm.com/downloads). Ini digunakan sebagai alat repositori kode sumber.
+ [Draw.io, diinstal.](https://github.com/jgraph/drawio-desktop/releases) Aplikasi ini digunakan untuk melihat dan mengedit diagram.

## Arsitektur
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-architecture"></a>

**Arsitektur target**

Diagram berikut dapat digunakan seperti [kotak Punnett](https://en.wikipedia.org/wiki/Punnett_square) (Wikipedia). Anda menyusun cabang pada sumbu vertikal dengan AWS lingkungan pada sumbu horizontal untuk menentukan tindakan apa yang harus dilakukan dalam setiap skenario. Angka-angka menunjukkan urutan tindakan dalam alur kerja. Contoh ini membawa Anda dari `feature` cabang melalui penerapan dalam produksi.

![\[Alun-alun Punnett dari aktivitas Trunk di setiap cabang dan lingkungan\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/5df23e4d-84fe-4ab3-a54f-96b6406abc57/images/ad549ef4-90ad-47c1-bd01-f21d6ce5511a.png)


Untuk informasi selengkapnya tentang Akun AWS, lingkungan, dan cabang dalam pendekatan Trunk, lihat [Memilih strategi percabangan Git untuk lingkungan multi-akun DevOps ](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach).

**Otomatisasi dan skala**

Integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) is the process of automating the software release lifecycle. It automates much or all of the manual processes traditionally required to get new code from an initial commit into production. A CI/CD pipeline encompasses the sandbox, development, testing, staging, and production environments. In each environment, the CI/CD pipeline provisions any infrastructure that is needed to deploy or test the code. By using CI/CD, development teams can make changes to code that are then automatically tested and deployed. CI/CDjaringan pipa juga menyediakan tata kelola dan pagar pembatas untuk tim pengembangan dengan menegakkan konsistensi, standar, praktik terbaik, dan tingkat penerimaan minimal untuk penerimaan dan penerapan fitur. Untuk informasi selengkapnya, lihat [Mempraktikkan Integrasi Berkelanjutan dan Pengiriman Berkelanjutan di AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html).

AWS menawarkan serangkaian layanan pengembang yang dirancang untuk membantu Anda membangun CI/CD jaringan pipa. Misalnya, [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)adalah layanan pengiriman berkelanjutan yang dikelola sepenuhnya yang membantu Anda mengotomatiskan saluran pipa rilis untuk pembaruan aplikasi dan infrastruktur yang cepat dan andal. [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)mengkompilasi kode sumber, menjalankan tes, dan menghasilkan paket ready-to-deploy perangkat lunak. Untuk informasi selengkapnya, lihat [Alat Pengembang di AWS](https://aws.amazon.com/products/developer-tools/).

## Alat
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-tools"></a>

**AWS layanan dan alat**

AWS menyediakan serangkaian layanan pengembang yang dapat Anda gunakan untuk menerapkan pola ini:
+ [AWS CodeArtifact](https://docs.aws.amazon.com/codeartifact/latest/ug/welcome.html)adalah layanan repositori artefak terkelola yang sangat skalabel yang membantu Anda menyimpan dan berbagi paket perangkat lunak untuk pengembangan aplikasi.
+ [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 CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)mengotomatiskan penerapan ke Amazon Elastic Compute Cloud (Amazon EC2) atau instans, fungsi AWS Lambda , atau layanan Amazon Elastic Container Service (Amazon ECS) atau lokal.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.

**Alat-alat lainnya**
+ [Draw.io Desktop](https://github.com/jgraph/drawio-desktop/releases) — Aplikasi untuk membuat diagram alur dan diagram.
+ [Figma](https://www.figma.com/design-overview/) adalah alat desain online yang dirancang untuk kolaborasi. Repositori kode berisi template dalam format.fig untuk Figma.

**Repositori kode**

File sumber untuk diagram dalam pola ini tersedia di GitHub [Git Branching Strategy untuk repositori Trunk](https://github.com/awslabs/git-branching-strategies-for-multiaccount-devops/tree/main/trunk). Ini termasuk file dalam format PNG, draw.io, dan Figma. Anda dapat memodifikasi diagram ini untuk mendukung proses organisasi Anda.

## Praktik terbaik
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-best-practices"></a>

Ikuti praktik dan rekomendasi terbaik dalam Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html) dan [Memilih strategi percabangan Git untuk](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/) lingkungan multi-akun. DevOps Ini membantu Anda menerapkan pengembangan berbasis Trunk secara efektif, mendorong kolaborasi, meningkatkan kualitas kode, dan merampingkan proses pengembangan.

## Epik
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-epics"></a>

### Meninjau alur kerja Trunk
<a name="reviewing-the-trunk-workflow"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tinjau proses Trunk standar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-a-trunk-branching-strategy-for-multi-account-devops-environments.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Konflik cabang | Masalah umum yang dapat terjadi dengan model Trunk adalah di mana perbaikan terbaru perlu terjadi dalam produksi tetapi perubahan yang sesuai perlu terjadi di `feature` cabang, di mana sumber daya yang sama sedang dimodifikasi. Kami menyarankan agar Anda sering menggabungkan perubahan dari cabang yang lebih rendah untuk menghindari konflik signifikan pada penggabungan `main` ke. `main` | 

## Sumber daya terkait
<a name="implement-a-trunk-branching-strategy-for-multi-account-devops-environments-resources"></a>

Panduan ini tidak termasuk pelatihan untuk Git; namun, ada banyak sumber daya berkualitas tinggi yang tersedia di internet jika Anda memerlukan pelatihan ini. Kami menyarankan Anda memulai dengan situs [dokumentasi Git](https://git-scm.com/doc).

Sumber daya berikut dapat membantu Anda dengan perjalanan percabangan Trunk Anda di. AWS Cloud

**AWS DevOps bimbingan**
+ [AWS DevOps Bimbingan](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html)
+ [Arsitektur Referensi Pipeline Deployment AWS](https://pipelines.devops.aws.dev/)
+ [Apa itu DevOps?](https://aws.amazon.com/devops/what-is-devops/)
+ [DevOps sumber daya](https://aws.amazon.com/devops/resources/)

**Bimbingan batang**
+ [Pengembangan Berbasis Batang](https://trunkbaseddevelopment.com/)

**Sumber daya lainnya**
+ [Metodologi aplikasi dua belas faktor](https://12factor.net/) (12factor.net)

# Menerapkan pemindaian Checkov kustom terpusat untuk menegakkan kebijakan sebelum menerapkan infrastruktur AWS
<a name="centralized-custom-checkov-scanning"></a>

*Benjamin Morris, Amazon Web Services*

## Ringkasan
<a name="centralized-custom-checkov-scanning-summary"></a>

Pola ini menyediakan kerangka kerja GitHub Tindakan untuk menulis kebijakan Checkov kustom dalam satu repositori yang dapat digunakan kembali di seluruh organisasi. GitHub Dengan mengikuti pola ini, tim keamanan informasi dapat menulis, menambah, dan memelihara kebijakan khusus berdasarkan persyaratan perusahaan. Kebijakan kustom dapat ditarik ke semua pipeline dalam GitHub organisasi secara otomatis. Pendekatan ini dapat digunakan untuk menegakkan standar perusahaan untuk sumber daya sebelum sumber daya digunakan.

## Prasyarat dan batasan
<a name="centralized-custom-checkov-scanning-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+  GitHub Organisasi yang menggunakan GitHub Tindakan
+ AWS infrastruktur yang digunakan dengan HashiCorp Terraform atau AWS CloudFormation

**Keterbatasan**
+ Pola ini ditulis untuk GitHub Tindakan. Namun, dapat disesuaikan dengan kerangka kerja integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang serupa seperti. GitLab Tidak diperlukan versi GitHub berbayar khusus.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Titik akhir layanan dan kuota](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) dalam AWS dokumentasi, dan pilih tautan untuk layanan.

## Arsitektur
<a name="centralized-custom-checkov-scanning-architecture"></a>

Pola ini dirancang untuk digunakan sebagai GitHub repositori yang berisi alur kerja yang GitHub dapat digunakan kembali dan kebijakan Checkov kustom. Alur kerja yang dapat digunakan kembali dapat memindai Terraform dan CloudFormation infrastruktur sebagai repositori kode (IAc).

Diagram berikut menunjukkan repositori ** GitHub alur kerja Reusable dan repositori** **kebijakan Custom Checkov** sebagai ikon terpisah. Namun, Anda dapat mengimplementasikan repositori ini baik sebagai repositori terpisah atau repositori tunggal. Kode contoh menggunakan satu repositori, dengan file untuk alur kerja (`.github/workflows`) dan file untuk kebijakan khusus (`custom_policies`folder dan file `.checkov.yml` konfigurasi) di repositori yang sama.

![\[GitHub Tindakan menggunakan GitHub alur kerja yang dapat digunakan kembali dan kebijakan Checkov khusus untuk mengevaluasi IAc.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/6c0c941f-14f9-4569-92da-9f81ab3e525c/images/a1539ce5-0ee6-4af1-bd01-cafad0f71708.png)


Diagram menunjukkan alur kerja berikut:

1. Seorang pengguna membuat permintaan tarik dalam GitHub repositori.

1. Alur kerja pipeline dimulai di GitHub Actions, termasuk referensi ke alur kerja Checkov yang dapat digunakan kembali.

1. Alur kerja pipeline mengunduh alur kerja Checkov yang dapat digunakan kembali yang direferensikan dari repositori eksternal dan menjalankan alur kerja Checkov tersebut dengan menggunakan Tindakan. GitHub 

1. Alur kerja Checkov yang dapat digunakan kembali mengunduh kebijakan kustom dari repositori eksternal.

1. Alur kerja Checkov yang dapat digunakan kembali mengevaluasi IAc di GitHub repositori terhadap kebijakan Checkov bawaan dan kustom. Alur kerja Checkov yang dapat digunakan kembali lolos atau gagal berdasarkan apakah masalah keamanan ditemukan.

**Otomatisasi dan skala**

Pola ini memungkinkan manajemen pusat konfigurasi Checkov, sehingga pembaruan kebijakan dapat diterapkan di satu lokasi. Namun, pola ini memang mengharuskan setiap repositori menggunakan alur kerja yang berisi referensi ke alur kerja pusat yang dapat digunakan kembali. Anda dapat menambahkan referensi ini secara manual atau menggunakan skrip untuk mendorong file ke `.github/workflows` folder untuk setiap repositori.

## Alat
<a name="centralized-custom-checkov-scanning-tools"></a>

**Layanan AWS**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan Wilayah. Checkov dapat memindai CloudFormation.

**Alat lainnya**
+ [Checkov](https://www.checkov.io/) adalah alat analisis kode statis yang memeriksa IAc untuk kesalahan konfigurasi keamanan dan kepatuhan.
+ [GitHub Tindakan](https://github.com/features/actions) diintegrasikan ke dalam GitHub platform untuk membantu Anda membuat, berbagi, dan menjalankan alur kerja dalam GitHub repositori Anda. Anda dapat menggunakan GitHub Tindakan untuk mengotomatiskan tugas seperti membangun, menguji, dan menerapkan kode Anda.
+ [Terraform](https://www.terraform.io/) adalah alat IAc HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal. Checkov dapat memindai Terraform.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [centralized-custom-checkov-sast](https://github.com/aws-samples/centralized-custom-checkov-sast)repositori.

## Praktik terbaik
<a name="centralized-custom-checkov-scanning-best-practices"></a>
+ Untuk mempertahankan postur keamanan yang konsisten, selaraskan kebijakan keamanan perusahaan Anda dengan kebijakan Checkov.
+ Pada fase awal penerapan kebijakan kustom Checkov, Anda dapat menggunakan opsi soft-fail dalam pemindaian Checkov Anda untuk memungkinkan IAc dengan masalah keamanan digabungkan. Saat proses matang, beralih dari opsi soft-fail ke opsi hard-fail.

## Epik
<a name="centralized-custom-checkov-scanning-epics"></a>

### Buat repositori Checkov pusat untuk kebijakan kustom
<a name="create-a-central-checkov-repository-for-custom-policies"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Checkov pusat. | Buat repositori untuk menyimpan kebijakan Checkov kustom yang akan digunakan dalam organisasi.Untuk memulai dengan cepat, Anda dapat menyalin isi repositori pola ini ke GitHub [centralized-custom-checkov-sast ](https://github.com/aws-samples/centralized-custom-checkov-sast)repositori Checkov pusat Anda. | DevOps insinyur | 
| Buat repositori untuk alur kerja yang dapat digunakan kembali. | Jika repositori untuk alur kerja yang dapat digunakan kembali sudah ada, atau Anda berencana untuk menyertakan file alur kerja yang dapat digunakan kembali dalam repositori yang sama dengan kebijakan Checkov kustom, Anda dapat melewati langkah ini.Buat GitHub repositori untuk menyimpan alur kerja yang dapat digunakan kembali. Pipeline repositori lain akan mereferensikan repositori ini. | DevOps insinyur | 

### Buat alur kerja Checkov yang dapat digunakan kembali dan contoh
<a name="create-reusable-and-example-checkov-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan alur kerja Checkov yang dapat digunakan kembali. | Buat alur kerja GitHub Tindakan Checkov (file YAMAL) yang dapat digunakan kembali di repositori alur kerja yang dapat digunakan kembali. Anda dapat menyesuaikan alur kerja yang dapat digunakan kembali ini dari file alur kerja yang disediakan dalam pola ini.Contoh perubahan yang mungkin ingin Anda lakukan adalah mengubah alur kerja yang dapat digunakan kembali untuk menggunakan opsi soft-fail. Pengaturan `soft-fail` untuk `true` memungkinkan pekerjaan selesai dengan sukses bahkan jika ada pemindaian Checkov yang gagal. Untuk instruksi, lihat [Gagal keras dan lunak](https://www.checkov.io/2.Basics/Hard%20and%20soft%20fail.html) dalam dokumentasi Checkov. | DevOps insinyur | 
| Tambahkan alur kerja contoh. | Tambahkan contoh alur kerja Checkov yang mereferensikan alur kerja. `reusable` Ini akan memberikan template untuk cara menggunakan kembali `reusable` alur kerja. Dalam contoh repositori, `checkov-source.yaml` adalah alur kerja yang dapat digunakan kembali dan `checkov-scan.yaml` merupakan contoh yang dikonsumsi. `checkov-source`Untuk detail selengkapnya tentang menulis contoh alur kerja Checkov, lihat Informasi [tambahan](#centralized-custom-checkov-scanning-additional). | DevOps insinyur | 

### Mengaitkan kebijakan perusahaan dengan kebijakan kustom Checkov
<a name="associate-company-policies-to-checkov-custom-policies"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan kebijakan yang dapat ditegakkan dengan Checkov. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/centralized-custom-checkov-scanning.html)Untuk detail selengkapnya tentang membuat kebijakan kustom Checkov, lihat [Ikhtisar Kebijakan Kustom](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html) di dokumentasi Checkov. | Keamanan dan Kepatuhan | 
| Tambahkan kebijakan kustom Checkov. | Ubah kebijakan perusahaan yang diidentifikasi menjadi kebijakan Checkov khusus di repositori pusat. Anda dapat menulis kebijakan Checkov sederhana baik dalam Python atau YAMAL. | Keamanan | 

### Menerapkan kebijakan kustom Checkov terpusat
<a name="implement-centralized-checkov-custom-policies"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan alur kerja Checkov yang dapat digunakan kembali ke semua repositori. | Pada titik ini, Anda harus memiliki contoh alur kerja Checkov yang mereferensikan alur kerja yang dapat digunakan kembali. Salin contoh alur kerja Checkov yang mereferensikan alur kerja yang dapat digunakan kembali ke setiap repositori yang memerlukannya. | DevOps insinyur | 
| Buat mekanisme untuk memastikan bahwa Checkov berjalan sebelum bergabung. | Untuk memastikan bahwa alur kerja Checkov dijalankan untuk setiap permintaan tarik, buat [pemeriksaan status](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) yang memerlukan alur kerja Checkov yang berhasil sebelum permintaan tarik dapat digabungkan. GitHub memungkinkan Anda mengharuskan alur kerja tertentu dijalankan sebelum permintaan tarik dapat digabungkan. | DevOps insinyur | 
| Buat PAT di seluruh organisasi, dan bagikan sebagai rahasia. | Jika GitHub organisasi Anda terlihat publik, Anda dapat melewati langkah ini.Pola ini mengharuskan alur kerja Checkov dapat mengunduh kebijakan khusus dari repositori kebijakan khusus di organisasi Anda. GitHub Anda harus memberikan izin sedemikian rupa sehingga alur kerja Checkov dapat mengakses repositori tersebut.Untuk melakukan ini, [buat token akses pribadi](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) (PAT) dengan izin untuk membaca repositori organisasi. Bagikan PAT ini dengan repositori, baik sebagai rahasia seluruh organisasi (jika pada paket berbayar) atau rahasia di setiap repositori (versi gratis). Dalam kode sampel, nama default untuk rahasia adalah`ORG_PAT`. | DevOps insinyur | 
| (Opsional) Lindungi file alur kerja Checkov dari modifikasi. | Untuk melindungi file alur kerja Checkov dari perubahan yang tidak diinginkan, Anda dapat menggunakan file. `CODEOWNERS` `CODEOWNERS`File ini biasanya digunakan di root direktori.Misalnya, untuk meminta persetujuan dari `secEng` grup GitHub organisasi Anda saat `checkov-scan.yaml` file diubah, tambahkan yang berikut ini ke file repositori: `CODEOWNERS`<pre>[Checkov]<br />.github/workflows/checkov-scan.yaml @myOrg/secEng</pre>`CODEOWNERS`File khusus untuk repositori tempat tinggalnya. Untuk melindungi alur kerja Checkov yang digunakan oleh repositori, Anda harus menambahkan (atau memperbarui) `CODEOWNERS` file di setiap repositori.Untuk informasi selengkapnya tentang melindungi file alur kerja Checkov, lihat Informasi [tambahan](#centralized-custom-checkov-scanning-additional). Untuk informasi selengkapnya tentang `CODEOWNERS` file, lihat dokumentasi resmi untuk CI/CD penyedia Anda (seperti [GitHub](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)). | DevOps insinyur | 

## Sumber daya terkait
<a name="centralized-custom-checkov-scanning-resources"></a>
+ [Ikhtisar Kebijakan Kustom Checkov](https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html)
+ [CloudFormation Pemindaian Konfigurasi](https://www.checkov.io/7.Scan%20Examples/Cloudformation.html)
+ [GitHub Tindakan Alur Kerja yang Dapat Digunakan Kembali](https://docs.github.com/en/actions/using-workflows/reusing-workflows)

## Informasi tambahan
<a name="centralized-custom-checkov-scanning-additional"></a>

**Menulis file alur kerja Checkov**

Saat menulis`checkov-scan.yaml`, pertimbangkan kapan Anda ingin menjalankannya. `on`Kunci tingkat atas menentukan kapan alur kerja berjalan. Dalam repositori contoh, alur kerja akan berjalan ketika ada permintaan tarik yang menargetkan `main` cabang (dan kapan saja cabang sumber permintaan tarik diubah). Alur kerja juga dapat dijalankan sesuai kebutuhan karena `workflow_dispatch` kuncinya.

Anda dapat mengubah kondisi pemicu alur kerja berdasarkan seberapa sering Anda ingin alur kerja dijalankan. Misalnya, Anda dapat mengubah alur kerja untuk dijalankan setiap kali kode didorong ke cabang mana pun dengan mengganti `pull_request` dengan `push` dan menghapus `branches` kunci.

Anda dapat memodifikasi contoh file alur kerja yang Anda buat dalam repositori individual. Misalnya, Anda dapat menyesuaikan nama cabang target dari `main` `production` jika repositori terstruktur di sekitar cabang. `production`

**Melindungi file alur kerja Checkov**

Pemindaian Checkov memberikan informasi yang berguna tentang kemungkinan kesalahan konfigurasi keamanan. Namun, beberapa pengembang mungkin menganggapnya sebagai penghalang produktivitas mereka dan mencoba untuk menghapus atau menonaktifkan alur kerja pemindaian.

Ada beberapa cara untuk mengatasi masalah ini, termasuk pesan yang lebih baik tentang nilai jangka panjang dari pemindaian keamanan dan dokumentasi yang lebih jelas tentang cara menerapkan infrastruktur yang aman. Ini adalah pendekatan “lunak” penting untuk DevSecOps kolaborasi yang dapat dilihat sebagai solusi untuk akar masalah ini. Namun, Anda juga dapat menggunakan kontrol teknis seperti `CODEOWNERS` file sebagai pagar pembatas untuk membantu pengembang tetap berada di jalur yang benar.

**Pola pengujian di kotak pasir**

Untuk menguji pola ini di lingkungan kotak pasir, ikuti langkah-langkah berikut:

1. Buat GitHub organisasi baru. Buat token dengan akses hanya-baca ke semua repositori di organisasi. Karena token ini untuk lingkungan kotak pasir, bukan lingkungan berbayar, Anda tidak akan dapat menyimpan token ini dalam rahasia seluruh organisasi.

1. Buat `checkov` repositori untuk menyimpan konfigurasi Checkov dan `github-workflows` repositori untuk menyimpan konfigurasi alur kerja yang dapat digunakan kembali. Isi repositori dengan isi repositori contoh.

1. Buat repositori aplikasi, dan salin dan tempel `checkov-scan.yaml` alur kerja ke foldernya. `.github/workflows` Tambahkan rahasia ke repositori yang berisi PAT yang Anda buat untuk akses hanya-baca organisasi. Rahasia default adalah`ORG_PAT`.

1. Buat permintaan tarik yang menambahkan beberapa Terraform atau CloudFormation kode ke repositori aplikasi. Checkov harus memindai dan mengembalikan hasilnya.

# Menerapkan diagnostik Kubernetes yang didukung AI dan pemecahan masalah dengan integrasi K8SGPT dan Amazon Bedrock
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration"></a>

*Ishwar Chauthaiwale, Muskan., dan Prafful Gupta, Amazon Web Services*

## Ringkasan
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-summary"></a>

Pola ini menunjukkan cara menerapkan diagnostik dan pemecahan masalah Kubernetes yang didukung AI dengan mengintegrasikan K8SGPT dengan model Anthropic Claude v2 yang tersedia di Amazon Bedrock. Solusi ini menyediakan analisis bahasa alami dan langkah-langkah remediasi untuk masalah klaster Kubernetes melalui arsitektur host bastion yang aman. Dengan menggabungkan keahlian K8SGPT Kubernetes dengan kemampuan bahasa canggih Amazon Bedrock, tim dapat dengan cepat mengidentifikasi dan menyelesaikan masalah DevOps klaster. Dengan kemampuan ini, dimungkinkan untuk mengurangi mean time to resolution (MTTR) hingga 50 persen. 

Pola cloud-native ini memanfaatkan Amazon Elastic Kubernetes Service (Amazon EKS) untuk manajemen Kubernetes. Pola ini menerapkan praktik terbaik keamanan melalui peran yang tepat AWS Identity and Access Management (IAM) dan isolasi jaringan. Solusi ini sangat berharga bagi organisasi yang ingin merampingkan operasi Kubernetes mereka dan meningkatkan kemampuan pemecahan masalah mereka dengan bantuan AI.

## Prasyarat dan batasan
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS dengan izin yang sesuai
+ AWS Command Line Interface (AWS CLI) [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Klaster Amazon EKS
+ [Akses ke model Anthropic Claude 2 di Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ Host bastion dengan pengaturan grup keamanan yang diperlukan
+ [K8sgpt diinstal](https://docs.k8sgpt.ai/getting-started/installation/)

**Batasan**
+ Analisis K8sgpt dibatasi oleh ukuran jendela konteks model Claude v2.
+ Batas tarif Amazon Bedrock API berlaku berdasarkan kuota akun Anda.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ Amazon EKS [versi 1.31 atau](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) yang lebih baru
+ [Model Claude 2 di Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html)
+ [K8sgpt v0.4.2 atau yang lebih baru](https://github.com/k8sgpt-ai/k8sgpt/releases)

## Arsitektur
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-architecture"></a>

Diagram berikut menunjukkan arsitektur untuk diagnostik Kubernetes bertenaga AI menggunakan K8SGPT yang terintegrasi dengan Amazon Bedrock di. AWS Cloud

![\[Alur kerja untuk diagnostik Kubernetes menggunakan K8sgpt terintegrasi dengan Amazon Bedrock.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/09bc08f6-e191-4cef-b26b-dcb6225b15cc/images/8789891d-4a90-44b0-a108-387f6d96496b.png)


Arsitektur menunjukkan alur kerja berikut:

1. Pengembang mengakses lingkungan melalui koneksi aman ke host bastion. EC2 Instans Amazon ini berfungsi sebagai titik masuk aman dan berisi instalasi antarmuka baris perintah (CLI) K8sgpt dan konfigurasi yang diperlukan.

1. Host bastion, yang dikonfigurasi dengan peran IAM tertentu, membuat koneksi aman ke cluster Amazon EKS dan titik akhir Amazon Bedrock. K8sgpt diinstal dan dikonfigurasi pada host bastion untuk melakukan analisis klaster Kubernetes.

1. Amazon EKS mengelola bidang kontrol Kubernetes dan node pekerja, menyediakan lingkungan target untuk analisis K8sgpt. Layanan ini berjalan di beberapa Availability Zone dalam virtual private cloud (VPC), yang membantu menyediakan ketersediaan dan ketahanan yang tinggi. Amazon EKS memasok data operasional melalui Kubernetes API, memungkinkan analisis klaster yang komprehensif.

1. K8sgpt mengirimkan data analisis ke Amazon Bedrock, yang menyediakan model dasar Claude v2 (FM) untuk pemrosesan bahasa alami. Layanan ini memproses analisis K8sgpt untuk menghasilkan penjelasan yang dapat dibaca manusia dan menawarkan saran remediasi terperinci berdasarkan masalah yang diidentifikasi. Amazon Bedrock beroperasi sebagai layanan AI tanpa server dengan ketersediaan dan skalabilitas tinggi.

**catatan**  
Sepanjang alur kerja ini, IAM mengontrol akses antar komponen melalui peran dan kebijakan, mengelola otentikasi untuk host bastion, Amazon EKS, dan interaksi Amazon Bedrock. IAM menerapkan prinsip hak istimewa paling sedikit dan memungkinkan komunikasi lintas layanan yang aman di seluruh arsitektur.

**Otomatisasi dan skala**

Operasi K8SGPT dapat diotomatisasi dan diskalakan di beberapa kluster Amazon EKS melalui berbagai alat dan. Layanan AWS Solusi ini mendukung integrasi berkelanjutan dan integrasi penerapan berkelanjutan (CI/CD) menggunakan [Jenkins](https://www.jenkins.io/), [GitHub Actions](https://docs.github.com/en/actions/get-started/understand-github-actions), atau [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)untuk analisis terjadwal. Operator K8sgpt memungkinkan pemantauan in-cluster berkelanjutan dengan kemampuan deteksi dan pelaporan masalah otomatis. Untuk penerapan skala perusahaan, Anda dapat menggunakan [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) untuk menjadwalkan pemindaian dan memicu respons otomatis dengan skrip khusus. AWS Integrasi SDK memungkinkan kontrol terprogram di seluruh armada cluster yang besar.

## Alat
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-tools"></a>

**Layanan AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

**Alat lainnya**
+ [K8SGPT](https://k8sgpt.ai/) adalah alat bertenaga AI open source yang mengubah manajemen Kubernetes. Ini bertindak sebagai ahli rekayasa keandalan situs virtual (SRE), secara otomatis memindai, mendiagnosis, dan memecahkan masalah klaster Kubernetes. Administrator dapat berinteraksi dengan K8sgpt menggunakan bahasa alami dan mendapatkan wawasan yang jelas dan dapat ditindaklanjuti tentang status cluster, pod crash, dan kegagalan layanan. Alat analisis bawaan alat mendeteksi berbagai masalah, mulai dari komponen yang salah konfigurasi hingga kendala sumber daya, dan memberikan penjelasan dan solusi. easy-to-understand

## Praktik terbaik
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-best-practices"></a>
+ Menerapkan kontrol akses aman dengan menggunakan AWS Systems Manager Session Manager untuk [akses host bastion](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html).
+ Pastikan autentikasi K8sgpt menggunakan peran IAM khusus dengan izin hak istimewa paling sedikit untuk interaksi Amazon Bedrock dan Amazon EKS. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.
+ Konfigurasikan [penandaan sumber daya](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/what-are-tags.html), aktifkan CloudWatch [pencatatan Amazon untuk jejak audit](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html), dan terapkan [anonimisasi data](https://aws.amazon.com/solutions/guidance/data-anonymization-on-aws/) untuk informasi sensitif. 
+ Pertahankan pencadangan reguler konfigurasi K8SGPT sambil menyiapkan jadwal pemindaian otomatis selama jam sibuk untuk meminimalkan dampak operasional.

## Epik
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-epics"></a>

### Tambahkan Amazon Bedrock ke daftar penyedia backend AI.
<a name="add-br-to-ai-backend-provider-list"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tetapkan Amazon Bedrock sebagai penyedia backend AI untuk K8sgpt. | Untuk menyetel Amazon Bedrock sebagai [backend AI menyediakan](https://docs.k8sgpt.ai/reference/providers/backend/) r untuk K8sgpt, gunakan perintah berikut: AWS CLI <pre>k8sgpt auth add -b amazonbedrock \<br /> -r us-west-2 \<br /> -m anthropic.claude-v2 \<br /> -n endpoint-name <br /></pre>Contoh perintah digunakan `us-west-2` untuk Wilayah AWS. Namun, Anda dapat memilih Wilayah lain, asalkan kluster Amazon EKS dan model Amazon Bedrock yang sesuai tersedia dan diaktifkan di Wilayah yang dipilih tersebut.Untuk memeriksa `amazonbedrock` apakah ditambahkan ke daftar penyedia backend AI dan dalam `Active` status, jalankan perintah berikut:<pre>k8sgpt auth list</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>Default: <br />> openai<br />Active: <br />> amazonbedrock<br />Unused: <br />> openai<br />> localai<br />> ollama<br />> azureopenai<br />> cohere<br />> amazonsagemaker<br />> google<br />> noopai<br />> huggingface<br />> googlevertexai<br />> oci<br />> customrest<br />> ibmwatsonxai</pre> | AWS DevOps | 

### Pindai sumber daya menggunakan filter
<a name="scan-resources-using-a-filter"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Lihat daftar filter yang tersedia. | Untuk melihat daftar semua filter yang tersedia, gunakan AWS CLI perintah berikut:<pre>k8sgpt filters list</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>Active: <br />> Deployment<br />> ReplicaSet<br />> PersistentVolumeClaim<br />> Service<br />> CronJob<br />> Node<br />> MutatingWebhookConfiguration<br />> Pod<br />> Ingress<br />> StatefulSet<br />> ValidatingWebhookConfiguration</pre> | AWS DevOps | 
| Pindai pod di namespace tertentu dengan menggunakan filter. | Perintah ini berguna untuk debugging tertarget dari masalah pod tertentu dalam klaster Kubernetes, menggunakan kemampuan Amazon Bedrock AI untuk menganalisis dan menjelaskan masalah yang ditemukannya.Untuk memindai pod di namespace tertentu dengan menggunakan filter, gunakan perintah berikut: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Pod -n default</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>100% |████████████████████████████████████████████████████████| (1/1, 645 it/s)        <br />AI Provider: amazonbedrock<br /><br />0: Pod default/crashme()<br />- Error: the last termination reason is Error container=crashme pod=crashme<br />Error: The pod named crashme terminated because the container named crashme crashed.<br />Solution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.</pre> | AWS DevOps | 
| Pindai penyebaran di namespace tertentu dengan menggunakan filter. | Perintah ini berguna untuk mengidentifikasi dan memecahkan masalah khusus penerapan, terutama ketika status sebenarnya tidak cocok dengan status yang diinginkan.Untuk memindai penyebaran di namespace tertentu dengan menggunakan filter, gunakan perintah berikut: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Deployment -n default</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>100% |██████████████████████████████████████████████████████████| (1/1, 10 it/min)        <br />AI Provider: amazonbedrock<br /><br />0: Deployment default/nginx()<br />- Error: Deployment default/nginx has 1 replicas but 2 are available<br /> Error: The Deployment named nginx in the default namespace has 1 replica specified but 2 pod replicas are running.<br />Solution: Check if any other controllers like ReplicaSet or StatefulSet have created extra pods. Delete extra pods or adjust replica count to match available pods.</pre> | AWS DevOps | 
| Pindai node di namespace tertentu dengan menggunakan filter. | Untuk memindai node di namespace tertentu dengan menggunakan filter, gunakan perintah berikut: AWS CLI <pre>k8sgpt analyze --backend amazonbedrock --explain --filter Node -n default </pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> | AWS DevOps | 

### Menganalisis output terperinci
<a name="analyze-detailed-outputs"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Dapatkan output terperinci. |  Untuk mendapatkan output terperinci, gunakan AWS CLI perintah berikut:<pre>k8sgpt analyze --backend amazonbedrock --explain --ouput json</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>{<br />  "provider": "amazonbedrock",<br />  "errors": null,<br />  "status": "ProblemDetected",<br />  "problems": 1,<br />  "results": [<br />    {<br />      "kind": "Pod",<br />      "name": "default/crashme",<br />      "error": [<br />        {<br />          "Text": "the last termination reason is Error container=crashme pod=crashme",<br />          "KubernetesDoc": "",<br />          "Sensitive": []<br />        }<br />      ],<br />      "details": " Error: The pod named crashme terminated because the container named crashme crashed.\nSolution: Check logs for crashme pod to identify reason for crash. Restart pod or redeploy application to resolve crash.",<br />      "parentObject": ""<br />    }<br />  ]<br />}</pre> | AWS DevOps | 
| Periksa pod yang bermasalah. | Untuk memeriksa pod bermasalah tertentu, gunakan AWS CLI perintah berikut:<pre>kubectl get pods --all-namespaces | grep -v Running</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>NAMESPACE    NAME      READY    STATUS          RESTARTS      AGE                                       <br />default     crashme     0/1   CrashLoopBackOff   260(91s ago)   21h</pre> | AWS DevOps | 
| Dapatkan wawasan khusus aplikasi. | Perintah ini sangat berguna ketika:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.html)Untuk mendapatkan wawasan khusus aplikasi, gunakan perintah berikut:<pre>k8sgpt analyze --backend amazonbedrock --explain -L app=nginx -n default</pre>Berikut ini adalah contoh output yang diharapkan dari perintah ini:<pre>AI Provider: amazonbedrock<br /><br />No problems detected</pre> |  | 

## Sumber daya terkait
<a name="implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration-resources"></a>

**Blog AWS**
+ [Mengotomatiskan pemecahan masalah Amazon EKS menggunakan alur kerja agen Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/automate-amazon-eks-troubleshooting-using-an-amazon-bedrock-agentic-workflow/)
+ [Gunakan K8SGPT dan Amazon Bedrock untuk pemeliharaan klaster Kubernetes yang disederhanakan](https://aws.amazon.com/blogs/machine-learning/use-k8sgpt-and-amazon-bedrock-for-simplified-kubernetes-cluster-maintenance/)

**AWS dokumentasi**
+ AWS CLI [perintah: buat-cluster dan [deskripsikan-cluster](https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/eks/describe-cluster.html)
+ [Memulai Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) (dokumentasi Amazon EKS)
+ [Praktik terbaik keamanan dalam IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (dokumentasi IAM)

**Sumber daya lainnya**
+ [K8sgpt](https://k8sgpt.ai/)

# 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:`make install` | Developer | 
| Bootstrap Akun AWS dan Wilayah AWS untuk AWS CDK. | Bootstrap required Akun AWS dan Region dengan menjalankan perintah berikut:`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.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.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`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.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>`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***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)*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)**Pemecahan masalah di konsol***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)*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.**Pendekatan 1: Hapus parameter di Parameter Store**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.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)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)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)**Pendekatan 2: Dorong komit di setiap subfolder monorepo**Metode ini melibatkan membuat perubahan kecil dan mendorongnya di setiap subfolder layanan mikro di dalam monorepo untuk memulai jaringan pipa masing-masing.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)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)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 

# Integrasikan repositori Bitbucket dengan AWS Amplify menggunakan AWS CloudFormation
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation"></a>

*Alwin Abraham, Amazon Web Services*

## Ringkasan
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-summary"></a>

AWS Amplify membantu Anda menerapkan dan menguji situs web statis dengan cepat tanpa harus menyiapkan infrastruktur yang biasanya diperlukan. Anda dapat menerapkan pendekatan pola ini jika organisasi Anda ingin menggunakan Bitbucket untuk kontrol sumber, baik untuk memigrasikan kode aplikasi yang ada atau membuat aplikasi baru. Dengan menggunakan AWS CloudFormation untuk mengatur Amplify secara otomatis, Anda memberikan visibilitas ke dalam konfigurasi yang Anda gunakan.

Pola ini menjelaskan cara membuat pipeline dan penerapan pipeline dan penerapan berkelanjutan front-end dan lingkungan penerapan berkelanjutan (CI/CD) dengan menggunakan AWS untuk mengintegrasikan repositori Bitbucket dengan CloudFormation AWS Amplify. Pendekatan pola berarti Anda dapat membuat pipeline front-end Amplify untuk penerapan berulang.

## Prasyarat dan batasan
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-prereqs"></a>

**Prasyarat******
+ Akun Amazon Web Services (AWS) yang aktif
+ Akun Bitbucket aktif dengan akses administrator
+ [Akses ke terminal yang menggunakan [cURL](https://curl.se/) atau aplikasi Postman](https://www.postman.com/)
+ Keakraban dengan Amplify
+ Keakraban dengan AWS CloudFormation
+ Keakraban dengan file berformat YAML

## Arsitektur
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-architecture"></a>

![\[Diagram showing user interaction with Bitbucket repository connected to AWS Amplify in AWS Cloud region.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/images/25d73a9d-d2ae-40bc-9ebc-57f9bd13884a.png)


**Tumpukan teknologi**
+ Amplify
+ AWS CloudFormation
+ Bitbucket

## Alat
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-tools"></a>
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/) — Amplify membantu pengembang mengembangkan dan menerapkan aplikasi seluler dan web bertenaga cloud.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation adalah layanan yang membantu Anda memodelkan dan menyiapkan sumber daya AWS sehingga Anda dapat menghabiskan lebih sedikit waktu untuk mengelola sumber daya tersebut dan lebih banyak waktu untuk berfokus pada aplikasi yang berjalan di AWS.
+ [Bitbucket](https://bitbucket.org/) - Bitbucket adalah solusi manajemen repositori Git yang dirancang untuk tim profesional. Ini memberi Anda tempat sentral untuk mengelola repositori Git, berkolaborasi pada kode sumber Anda, dan memandu Anda melalui alur pengembangan.

 

**Kode**

`bitbucket-amplify.yml`File (terlampir) berisi CloudFormation template AWS untuk pola ini.

## Epik
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-epics"></a>

### Konfigurasikan repositori Bitbucket
<a name="configure-the-bitbucket-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| (Opsional) Buat repositori Bitbucket.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Anda juga dapat menggunakan repositori Bitbucket yang ada. | DevOps insinyur | 
| Buka pengaturan ruang kerja. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps insinyur | 
| Buat OAuth konsumen. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html) | DevOps insinyur | 
| Dapatkan token OAuth akses.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)`curl -X POST -u "KEY:SECRET" https://bitbucket.org/site/oauth2/access_token -d grant_type=client_credentials `Ganti `KEY` dan `SECRET` dengan kunci dan rahasia yang Anda rekam sebelumnya. 2. Rekam token akses tanpa menggunakan tanda kutip. Token hanya berlaku untuk waktu terbatas dan waktu default adalah dua jam. Anda harus menjalankan CloudFormation template AWS dalam jangka waktu ini. | DevOps insinyur | 

### Buat dan terapkan tumpukan AWS CloudFormation
<a name="create-and-deploy-the-aws-cloudformation-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Unduh CloudFormation templat AWS. | Unduh CloudFormation templat `bitbucket-amplify.yml` AWS (terlampir). Template ini membuat CI/CD pipeline di Amplify, selain proyek dan cabang Amplify. |  | 
| Buat dan terapkan CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)5. Pilih **Berikutnya** dan kemudian pilih **Create Stack**. | DevOps insinyur | 

### Uji CI/CD pipa
<a name="test-the-ci-cd-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan kode ke cabang di repositori Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation.html)Untuk informasi selengkapnya tentang ini, lihat [Perintah Git Dasar](https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html) dalam dokumentasi Bitbucket.  | Pengembang aplikasi | 

## Sumber daya terkait
<a name="integrate-a-bitbucket-repository-with-aws-amplify-using-aws-cloudformation-resources"></a>

[Metode otentikasi](https://developer.atlassian.com/bitbucket/api/2/reference/meta/authentication) (dokumentasi Atlassian)

## Lampiran
<a name="attachments-24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/24ae87ed-aa5d-4114-9c5d-bdcb4d40a78b/attachments/attachment.zip)

# Luncurkan CodeBuild proyek di seluruh akun AWS menggunakan Step Functions dan fungsi proxy Lambda
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function"></a>

*Richard Milner-Watts dan Amit Anjarlekar, Amazon Web Services*

## Ringkasan
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-summary"></a>

Pola ini menunjukkan cara meluncurkan proyek AWS secara asinkron CodeBuild di beberapa akun AWS dengan menggunakan AWS Step Functions dan fungsi proxy AWS Lambda. Anda dapat menggunakan contoh mesin status Step Functions pola untuk menguji keberhasilan CodeBuild proyek Anda.

CodeBuild membantu Anda menjalankan tugas operasional menggunakan AWS Command Line Interface (AWS CLI) dari lingkungan runtime yang dikelola sepenuhnya. Anda dapat mengubah perilaku CodeBuild proyek Anda saat runtime dengan mengganti variabel lingkungan. Selain itu, Anda dapat menggunakan CodeBuild untuk mengelola alur kerja. Untuk informasi selengkapnya, lihat [Alat Service Catalog](https://service-catalog-tools-workshop.com/tools.html) di situs web AWS Workshop dan [Menjadwalkan pekerjaan di Amazon RDS for PostgreSQL CodeBuild menggunakan AWS EventBridge dan Amazon di Blog AWS Database](https://aws.amazon.com/blogs/database/schedule-jobs-in-amazon-rds-for-postgresql-using-aws-codebuild-and-amazon-eventbridge/).

## Prasyarat dan batasan
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-prereqs"></a>

**Prasyarat**
+ Dua akun AWS aktif: akun sumber untuk menjalankan fungsi proxy Lambda dengan Step Functions dan akun target untuk membangun proyek sampel jarak jauh CodeBuild 

**Batasan**
+ Pola ini tidak dapat digunakan untuk menyalin [artefak](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-artifacts.html) antar akun.

## Arsitektur
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-architecture"></a>

Diagram berikut menunjukkan arsitektur yang dibangun pola ini.

![\[Diagram arsitektur peluncuran CodeBuild proyek di beberapa akun AWS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/857ba3ae-eb9a-4d6b-b73e-e596f41c8cb8.png)


Diagram menunjukkan alur kerja berikut:

1. Mesin status Step Functions mem-parsing peta input yang disediakan dan memanggil fungsi proxy Lambda (`codebuild-proxy-lambda`) untuk setiap akun, Wilayah, dan proyek yang Anda tentukan.

1. Fungsi proxy Lambda menggunakan AWS Security Token Service (AWS STS) untuk mengambil peran proxy IAM (`codebuild-proxy-role`), yang dikaitkan dengan kebijakan IAM (`codebuild-proxy-policy`) di akun target.

1. Menggunakan peran yang diasumsikan, fungsi Lambda meluncurkan CodeBuild proyek dan mengembalikan ID pekerjaan. CodeBuild Step Functions menyatakan mesin melakukan loop dan melakukan polling CodeBuild pekerjaan hingga menerima status sukses atau gagal.

Logika mesin negara ditunjukkan pada gambar berikut.

![\[Alur kerja mesin status Step Functions\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/809a5716-56e5-477c-aac6-02243675a2f2/images/4729bbfc-79ad-455d-a85a-b96cce00f432.png)


**Tumpukan teknologi**
+ AWS CloudFormation
+ CodeBuild
+ IAM
+ Lambda
+ Step Functions
+ X-Ray

## Alat
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-tools"></a>
+ [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.
+ [AWS CloudFormation Designer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-json-editor.html) menyediakan editor JSON dan YAMAL terintegrasi yang membantu Anda melihat dan mengedit CloudFormation templat.
+ [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 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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi AWS Lambda dan layanan AWS lainnya untuk membangun aplikasi yang penting bagi bisnis.
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) membantu Anda mengumpulkan data tentang permintaan yang disajikan aplikasi Anda, dan menyediakan alat yang dapat Anda gunakan untuk melihat, memfilter, dan mendapatkan wawasan tentang data tersebut guna mengidentifikasi masalah dan peluang pengoptimalan.

**Kode**

Kode sampel untuk pola ini tersedia di repositori GitHub [Cross Account CodeBuild Proxy](https://github.com/aws-samples/cross-account-codebuild-proxy). Pola ini menggunakan AWS Lambda Powertools for Python library untuk menyediakan fungsionalitas logging dan tracing. Untuk informasi selengkapnya tentang pustaka ini dan utilitasnya, lihat [Powertools for AWS Lambda (Python)](https://docs.powertools.aws.dev/lambda/python/latest/).

## Praktik terbaik
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-best-practices"></a>

1. Sesuaikan nilai waktu tunggu di mesin status Fungsi Langkah untuk meminimalkan permintaan polling untuk status pekerjaan. Gunakan waktu eksekusi yang diharapkan untuk CodeBuild proyek.

1. Sesuaikan `MaxConcurrency` properti peta di Step Functions untuk mengontrol berapa banyak CodeBuild proyek yang dapat dijalankan secara paralel.

1. Jika diperlukan, tinjau kode sampel untuk kesiapan produksi. Pertimbangkan data apa yang mungkin dicatat oleh solusi dan apakah CloudWatch enkripsi Amazon default sudah cukup.

## Epik
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-epics"></a>

### Buat fungsi proxy Lambda dan peran IAM terkait di akun sumber
<a name="create-the-lambda-proxy-function-and-associated-iam-role-in-the-source-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Rekam akun AWS IDs. | Akun AWS IDs diperlukan untuk mengatur akses di seluruh akun.Catat ID akun AWS untuk akun sumber dan target Anda. Untuk informasi selengkapnya, lihat [Menemukan ID akun AWS Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId) di dokumentasi IAM. | AWS DevOps | 
| Unduh CloudFormation templat AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)Dalam CloudFormation templat AWS, `<SourceAccountId>` adalah ID akun AWS untuk akun sumber, dan `<TargetAccountId>` merupakan ID akun AWS untuk akun target. | AWS DevOps | 
| Buat dan terapkan CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html)Anda harus membuat CloudFormation tumpukan AWS untuk fungsi Lambda proxy sebelum membuat sumber daya apa pun di akun target. Saat Anda membuat kebijakan kepercayaan di akun target, peran IAM diterjemahkan dari nama peran ke pengenal internal. Inilah sebabnya mengapa peran IAM harus sudah ada. | AWS DevOps | 
| Konfirmasikan pembuatan fungsi proxy dan mesin status. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Buat peran IAM di akun target dan luncurkan proyek sampel CodeBuild
<a name="create-an-iam-role-in-the-target-account-and-launch-a-sample-codebuild-project"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat dan terapkan CloudFormation tumpukan AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Verifikasi pembuatan CodeBuild proyek sampel.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

### Uji fungsi proxy Lambda lintas akun
<a name="test-the-cross-account-lambda-proxy-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Luncurkan mesin negara. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 
| Validasi variabel lingkungan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | AWS DevOps | 

## Pemecahan masalah
<a name="launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Eksekusi Step Functions memakan waktu lebih lama dari yang diharapkan. | Sesuaikan `MaxConcurrency` properti peta di mesin status Step Function untuk mengontrol berapa banyak CodeBuild proyek yang dapat berjalan secara paralel. | 
| Pelaksanaan CodeBuild pekerjaan memakan waktu lebih lama dari yang diharapkan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/launch-a-codebuild-project-across-aws-accounts-using-step-functions-and-a-lambda-proxy-function.html) | 

# Kelola failover Multi-AZ untuk cluster EMR dengan menggunakan Application Recovery Controller
<a name="multi-az-failover-spark-emr-clusters-arc"></a>

*Aarti Rajput, Ashish Bhatt, Neeti Mishra, dan Nidhi Sharma, Amazon Web Services*

## Ringkasan
<a name="multi-az-failover-spark-emr-clusters-arc-summary"></a>

Pola ini menawarkan strategi pemulihan bencana yang efisien untuk beban kerja EMR Amazon untuk membantu memastikan ketersediaan tinggi dan konsistensi data di beberapa Availability Zone dalam satu. Wilayah AWS Desainnya menggunakan [Amazon Application Recovery Controller](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) dan [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) untuk mengelola operasi failover dan distribusi lalu lintas untuk cluster EMR berbasis Apache Spark. 

Dalam kondisi standar, Availability Zone utama menghosting cluster EMR aktif dan aplikasi dengan fungsionalitas penuh read/write . Jika Availability Zone gagal secara tak terduga, lalu lintas secara otomatis dialihkan ke Availability Zone sekunder, tempat klaster EMR baru diluncurkan. Kedua Availability Zone mengakses bucket Amazon Simple Storage Service (Amazon S3) bersama melalui titik akhir [gateway khusus](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html), yang memastikan pengelolaan data yang konsisten. Pendekatan ini meminimalkan waktu henti dan memungkinkan pemulihan cepat untuk beban kerja data besar yang penting selama kegagalan Availability Zone. Solusi ini berguna dalam industri seperti keuangan atau ritel, di mana analitik real-time sangat penting.

## Prasyarat dan batasan
<a name="multi-az-failover-spark-emr-clusters-arc-prereqs"></a>

**Prasyarat**
+ Aktif [Akun AWS](https://aws.amazon.com/resources/create-account/)
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) di Amazon Elastic Compute Cloud (Amazon) EC2
+ Akses dari simpul master cluster EMR ke Amazon S3.
+ AWS Infrastruktur multi-AZ

**Batasan**
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat halaman [titik akhir dan kuota Layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ [Amazon EMR 6.x dan rilis yang lebih baru](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html)

## Arsitektur
<a name="multi-az-failover-spark-emr-clusters-arc-architecture"></a>

**Tumpukan teknologi target**
+ Kluster EMR Amazon
+ Pengontrol Pemulihan Aplikasi Amazon
+ Penyeimbang Beban Aplikasi
+ Buket Amazon S3
+ Titik akhir gateway untuk Amazon S3

**Arsitektur target**

![\[Arsitektur untuk mekanisme pemulihan otomatis dengan Application Recovery Cotnroller.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e5ecdb66-0eef-4a6a-8367-982a55104748/images/e982d580-13db-4bdd-9f6b-6400d7c31c01.png)


Arsitektur ini memberikan ketahanan aplikasi dengan menggunakan beberapa Availability Zones dan menerapkan mekanisme pemulihan otomatis melalui Application Recovery Controller.

1. Application Load Balancer merutekan lalu lintas ke lingkungan EMR Amazon yang aktif, yang biasanya merupakan cluster EMR utama di Availability Zone utama.

1. Cluster EMR aktif memproses permintaan aplikasi dan terhubung ke Amazon S3 melalui titik akhir gateway Amazon S3 khusus untuk operasi baca dan tulis.

1. Amazon S3 berfungsi sebagai repositori data pusat dan berpotensi digunakan sebagai pos pemeriksaan atau sebagai penyimpanan bersama antara kluster EMR. Cluster EMR mempertahankan konsistensi data ketika mereka menulis langsung ke Amazon S3 melalui protokol `s3://` dan EMR File System ([EMRFS](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-fs.html)). 

1. Application Recovery Controller terus memantau kesehatan Availability Zone primer dan secara otomatis mengelola operasi failover bila diperlukan.

1. Jika Application Recovery Controller mendeteksi kegagalan dalam klaster EMR primer, dibutuhkan tindakan berikut:
   + Memulai proses failover ke cluster EMR sekunder di Availability Zone 2.
   + Memperbarui konfigurasi routing untuk mengarahkan lalu lintas ke cluster sekunder.

## Alat
<a name="multi-az-failover-spark-emr-clusters-arc-tools"></a>

**Layanan AWS**
+ [Amazon Application Recovery Controller****](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) membantu Anda mengelola dan mengoordinasikan pemulihan aplikasi Anda di seluruh Wilayah AWS dan Availability Zone. Layanan ini menyederhanakan proses dan meningkatkan keandalan pemulihan aplikasi dengan mengurangi langkah-langkah manual yang diperlukan oleh alat dan proses tradisional.
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) beroperasi pada layer aplikasi, yang merupakan lapisan ketujuh dari model Open Systems Interconnection (OSI). Ini mendistribusikan lalu lintas aplikasi yang masuk di beberapa target, seperti EC2 instance, di beberapa Availability Zone. Hal ini akan meningkatkan ketersediaan aplikasi Anda.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html) adalah platform data besar yang menyediakan pemrosesan data, analisis interaktif, dan pembelajaran mesin untuk kerangka kerja open source seperti Apache Spark, Apache Hive, dan Presto.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) menyediakan antarmuka layanan web sederhana yang dapat Anda gunakan untuk menyimpan dan mengambil sejumlah data, kapan saja, dari mana saja. Dengan menggunakan layanan ini, Anda dapat dengan mudah membangun aplikasi yang menggunakan penyimpanan asli cloud.
+ [Titik akhir Gateway untuk Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html) S3 adalah gateway yang Anda tentukan dalam tabel rute untuk mengakses Amazon S3 dari virtual private cloud (VPC) melalui jaringan. AWS 

## Praktik terbaik
<a name="multi-az-failover-spark-emr-clusters-arc-best-practices"></a>
+ Ikuti [praktik AWS terbaik untuk keamanan, identitas, dan kepatuhan](https://aws.amazon.com/architecture/security-identity-compliance/?cards-all.sort-by=%5b…%5d.sort-order=desc&awsf.content-type=*all&awsf.methodology=*all) untuk memastikan arsitektur yang kuat dan aman.
+ Sejajarkan arsitektur dengan [AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/) Framework.
+ Gunakan Amazon S3 Access Grants untuk mengelola akses dari cluster EMR berbasis Spark ke Amazon S3. Untuk detailnya, lihat posting blog [Gunakan Amazon EMR dengan Hibah Akses S3 untuk Menskalakan akses Spark ke](https://aws.amazon.com/blogs/big-data/use-amazon-emr-with-s3-access-grants-to-scale-spark-access-to-amazon-s3/) Amazon S3.
+ [Tingkatkan kinerja Spark dengan Amazon](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3-performance.html) S3.

## Epik
<a name="multi-az-failover-spark-emr-clusters-arc-epics"></a>

### Siapkan lingkungan Anda
<a name="set-up-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Masuk ke Konsol Manajemen AWS. | Masuk ke [Konsol Manajemen AWS](https://console.aws.amazon.com/) sebagai pengguna IAM. Untuk instruksi, lihat [AWS dokumentasi](https://docs.aws.amazon.com/signin/latest/userguide/introduction-to-iam-user-sign-in-tutorial.html). | AWS DevOps | 
| Konfigurasikan AWS CLI. **** | Instal AWS CLI atau perbarui ke versi terbaru sehingga Anda dapat berinteraksi dengan Layanan AWS di Konsol Manajemen AWS. Untuk instruksi, lihat [AWS CLI dokumentasi](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). | AWS DevOps | 

### Menerapkan aplikasi Spark di cluster EMR Anda
<a name="deploy-a-spark-application-on-your-emr-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat ember S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Buat cluster EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Konfigurasikan pengaturan keamanan untuk cluster EMR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Connect ke cluster EMR. | Connect ke master node dari EMR cluster melalui SSH dengan menggunakan key pair yang disediakan.Pastikan bahwa file key pair hadir di direktori yang sama dengan aplikasi Anda.Jalankan perintah berikut untuk mengatur izin yang benar untuk key pair dan untuk membuat koneksi SSH:<pre>chmod 400 <key-pair-name><br />ssh -i ./<key-pair-name> hadoop@<master-node-public-dns></pre> | AWS DevOps | 
| Menyebarkan aplikasi Spark. | Setelah Anda membuat koneksi SSH, Anda akan berada di konsol Hadoop.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 
| Pantau aplikasi Spark. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

### Alihkan lalu lintas ke Availability Zone lain
<a name="shift-traffic-to-another-availability-zone"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat Application Load Balancer. | Siapkan grup target yang merutekan lalu lintas antara node master EMR Amazon yang digunakan di dua Availability Zone dalam file. Wilayah AWSUntuk petunjuk, lihat [Membuat grup target untuk Application Load Balancer Anda](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html) dalam dokumentasi Elastic Load Balancing. | AWS DevOps | 
| Konfigurasikan pergeseran zona di Application Recovery Controller. | Pada langkah ini, Anda akan menggunakan [fitur zonal shift](https://docs.aws.amazon.com/r53recovery/latest/dg/arc-zonal-shift.html) di Application Recovery Controller untuk mengalihkan lalu lintas ke Availability Zone lain.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html)Untuk menggunakan AWS CLI, lihat [Contoh penggunaan AWS CLI dengan pergeseran zona](https://docs.aws.amazon.com/r53recovery/latest/dg/getting-started-cli-zonalshift.html) dalam dokumentasi Application Recovery Controller. | AWS DevOps | 
| Verifikasi konfigurasi dan kemajuan pergeseran zona. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-az-failover-spark-emr-clusters-arc.html) | AWS DevOps | 

## Sumber daya terkait
<a name="multi-az-failover-spark-emr-clusters-arc-resources"></a>
+ AWS CLI perintah:
  + [buat-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/create-cluster.html)
  + [deskripsikan-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/emr/describe-cluster.html)
  + [arc-zonal-shift](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/arc-zonal-shift/index.html)
+ [Mengonfigurasi jenis instans klaster EMR Amazon dan praktik terbaik untuk instans Spot](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html) (dokumentasi EMR Amazon)
+ [Praktik terbaik keamanan dalam IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (dokumentasi IAM)
+ [Gunakan profil instance](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) (dokumentasi IAM)
+ [Gunakan zonal shift dan zonal autoshift untuk memulihkan aplikasi di ARC (dokumentasi Application Recovery](https://docs.aws.amazon.com/r53recovery/latest/dg/multi-az.html) Controller)

# Kelola blue/green penerapan layanan mikro ke beberapa akun dan Wilayah dengan menggunakan layanan kode AWS dan kunci Multi-wilayah AWS KMS
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys"></a>

*Balaji Vedagiri, Vanitha Dontireddy, Ashish Kumar, Faisal Shahdad, Vivek Thangamuthu, dan Anand Krishna Varanasi, Amazon Web Services*

## Ringkasan
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-summary"></a>

Pola ini menjelaskan cara menerapkan aplikasi layanan mikro global dari akun AWS pusat ke beberapa akun beban kerja dan Wilayah sesuai dengan strategi penerapan. blue/green Pola ini mendukung hal-hal berikut:
+ Perangkat lunak dikembangkan di akun pusat, sedangkan beban kerja dan aplikasi tersebar di beberapa akun dan Wilayah AWS.
+ Kunci multi-wilayah AWS Key Management System (AWS KMS) tunggal digunakan untuk enkripsi dan dekripsi guna menutupi pemulihan bencana.
+ Kunci KMS adalah khusus Wilayah dan harus dipelihara atau dibuat di tiga Wilayah berbeda untuk artefak pipa. Kunci Multi-wilayah KMS membantu mempertahankan ID kunci yang sama di seluruh Wilayah.
+ Model percabangan alur kerja Git diimplementasikan dengan dua cabang (pengembangan dan utama) dan kode digabungkan dengan menggunakan pull requests (). PRs Fungsi AWS Lambda yang diterapkan dari tumpukan ini membuat PR dari cabang pengembangan ke cabang utama. Penggabungan PR ke cabang utama memulai CodePipeline pipeline AWS, yang mengatur aliran integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) dan menyebarkan tumpukan di seluruh akun.

Pola ini menyediakan contoh infrastruktur sebagai penyiapan kode (IAc) melalui CloudFormation tumpukan AWS untuk mendemonstrasikan kasus penggunaan ini. blue/green Penyebaran layanan mikro diimplementasikan dengan menggunakan AWS. CodeDeploy

## Prasyarat dan batasan
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-prereqs"></a>

**Prasyarat**
+ Empat akun AWS aktif:
  + Akun alat untuk mengelola pipeline kode dan memelihara CodeCommit repositori AWS.
  + Tiga akun beban kerja (pengujian) untuk menerapkan beban kerja layanan mikro.
+ Pola ini menggunakan Wilayah berikut. Jika Anda ingin menggunakan Wilayah lain, Anda harus melakukan modifikasi yang sesuai pada tumpukan Multi-wilayah AWS CodeDeploy dan AWS KMS.
  + Akun Tools (AWS CodeCommit): `ap-south-1`
  + Akun beban kerja (tes) 1: `ap-south-1`
  + Akun beban kerja (tes) 2: `eu-central-1`
  + Akun beban kerja (tes) 3: `us-east-1`
+ Tiga bucket Amazon Simple Storage Service (Amazon S3) untuk Wilayah penerapan di setiap akun beban kerja. (Ini disebut`S3BUCKETNAMETESTACCOUNT1`, `S3BUCKETNAMETESTACCOUNT2 ` dan `S3BUCKETNAMETESTACCOUNT3 ` kemudian dalam pola ini.)

  Misalnya, Anda dapat membuat bucket ini di akun dan Wilayah tertentu dengan nama bucket unik sebagai berikut (ganti *xxxx* dengan nomor acak):

  ```
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-xxxx-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-xxxx-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-xxxx-us-east-1 --region us-east-1
  
  #Example
  ##In Test Account 1
  aws s3 mb s3://ecs-codepipeline-18903-ap-south-1 --region ap-south-1
  ##In Test Account 2
  aws s3 mb s3://ecs-codepipeline-18903-eu-central-1 --region eu-central-1
  ##In Test Account 3
  aws s3 mb s3://ecs-codepipeline-18903-us-east-1 --region us-east-1
  ```

**Batasan**

Pola ini menggunakan AWS CodeBuild dan file konfigurasi lainnya untuk menerapkan layanan mikro sampel. Jika Anda memiliki jenis beban kerja yang berbeda (misalnya, tanpa server), Anda harus memperbarui semua konfigurasi yang relevan.

## Arsitektur
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-architecture"></a>

**Tumpukan teknologi target**
+ AWS CloudFormation
+ AWS CodeCommit
+ AWS CodeBuild
+ AWS CodeDeploy
+ AWS CodePipeline

**Arsitektur target**

![\[Arsitektur target untuk menyebarkan layanan mikro ke beberapa akun dan Wilayah\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a144c977-6823-4b08-a215-fae779b3ce7c/images/eedfabdb-f266-4190-b271-5caf7ac9b47b.png)


**Otomatisasi dan skala**

Penyiapan otomatis dengan menggunakan AWS CloudFormation stack templates (IAc). Ini dapat dengan mudah diskalakan untuk beberapa lingkungan dan akun.

## Alat
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-tools"></a>

**Layanan AWS**
+ [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.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) adalah layanan build terkelola penuh yang membantu Anda mengompilasi 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 CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) mengotomatiskan penerapan ke Amazon Elastic Compute Cloud (Amazon EC2) atau instans lokal, fungsi AWS Lambda, atau layanan Amazon Elastic Container Service (Amazon ECS).
+ [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.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [Amazon Elastic Container Service (Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)) adalah layanan manajemen kontainer yang cepat dan dapat diskalakan yang membantu Anda menjalankan, menghentikan, dan mengelola kontainer di klaster.
+ [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.

**Alat tambahan**
+ [Git](https://git-scm.com/docs) adalah sistem kontrol versi terdistribusi open-source yang bekerja dengan CodeCommit repositori AWS.
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. Pola ini menggunakan Docker untuk membangun dan menguji gambar kontainer secara lokal.
+ [cfn-lint](https://github.com/aws-cloudformation/cfn-lint) dan [cfn-nag](https://github.com/stelligent/cfn_nag) adalah alat sumber terbuka yang membantu Anda meninjau CloudFormation tumpukan untuk setiap kesalahan dan masalah keamanan.

**Repositori kode**

Kode untuk pola ini tersedia di [ Blue/Green penerapan GitHub Global di beberapa wilayah dan repositori akun](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline).

## Epik
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ekspor variabel lingkungan untuk penyebaran CloudFormation tumpukan. | Tentukan variabel lingkungan yang akan digunakan sebagai masukan ke CloudFormation tumpukan nanti dalam pola ini.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Package dan deploy CloudFormation tumpukan untuk infrastruktur
<a name="package-and-deploy-the-cloudformation-stacks-for-the-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Kloning repositori [sampel ke repositori](https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline) baru di lokasi kerja Anda:<pre>##In work location<br />git clone https://github.com/aws-samples/ecs-blue-green-global-deployment-with-multiregion-cmk-codepipeline.git</pre> | AWS DevOps | 
| Package resource Cloudformation. | Pada langkah ini, Anda mengemas artefak lokal yang referensi CloudFormation template untuk membuat sumber daya infrastruktur yang diperlukan untuk layanan seperti Amazon Virtual Private Cloud (Amazon VPC) dan Application Load Balancer.Template tersedia di `Infra` folder repositori kode.<pre>##In TestAccount1##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT1 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT1REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT1}.template</pre><pre>##In TestAccount2##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT2 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT2REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT2}.template</pre><pre>##In TestAccount3##<br />aws cloudformation package \<br />    --template-file mainInfraStack.yaml \<br />    --s3-bucket $S3BUCKETNAMETESTACCOUNT3 \<br />    --s3-prefix infraStack \<br />    --region $TESTACCOUNT3REGION \<br />    --output-template-file infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Validasi template paket. | Validasi template paket:<pre>aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT1}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT2}.template<br /><br />aws cloudformation validate-template \<br />    --template-body file://infrastructure_${TESTACCOUNT3}.template</pre> | AWS DevOps | 
| Menyebarkan file paket ke akun beban kerja, | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Dorong gambar sampel dan skala Amazon ECS
<a name="push-a-sample-image-and-scale-amazon-ecs"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Dorong gambar sampel ke repositori Amazon ECR. | Dorong gambar sampel (NGINX) ke repositori `web` Amazon Elastic Container Registry (Amazon ECR) bernama (seperti yang ditetapkan dalam parameter). Anda dapat menyesuaikan gambar sesuai kebutuhan.Untuk masuk dan menyetel kredensional untuk mendorong gambar ke Amazon ECR, ikuti petunjuk dalam dokumentasi [Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) ECR.Perintahnya adalah:<pre>  docker pull nginx<br />  docker images<br />  docker tag <imageid> aws_account_id.dkr.ecr.region.amazonaws.com/<web>:latest<br />  docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<web>:tag </pre> | AWS DevOps | 
| Skala Amazon ECS dan verifikasi akses. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Siapkan layanan kode dan sumber daya
<a name="set-up-code-services-and-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CodeCommit repositori di akun alat. | Buat CodeCommit repositori di akun alat dengan menggunakan `codecommit.yaml` template, yang ada di `code` folder repositori. GitHub Anda harus membuat repositori ini hanya di Wilayah tunggal di mana Anda berencana untuk mengembangkan kode.<pre>aws cloudformation deploy --stack-name codecommitrepoStack --parameter-overrides  CodeCommitReponame=$CODECOMMITREPONAME \<br />ToolsAccount=$TOOLSACCOUNT --template-file codecommit.yaml  --region $TOOLSACCOUNTREGION \<br />--capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Buat bucket S3 untuk mengelola artefak yang dihasilkan oleh. CodePipeline | Buat bucket S3 untuk mengelola artefak yang dihasilkan CodePipeline dengan menggunakan `pre-reqs-bucket.yaml` template, yang ada di `code` folder repositori. GitHub Tumpukan harus digunakan di ketiga beban kerja (pengujian) dan akun alat dan Wilayah.<pre>aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />aws cloudformation deploy --stack-name pre-reqs-artifacts-bucket --parameter-overrides BucketStartName=$BUCKETSTARTNAME \<br />TestAccount1=$TESTACCOUNT1 TestAccount2=$TESTACCOUNT2 \<br />TestAccount3=$TESTACCOUNT3 CodeCommitAccount=$CODECOMMITACCOUNT ToolsAccount=$TOOLSACCOUNT \<br />--template-file pre-reqs_bucket.yaml --region $TOOLSACCOUNTREGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Siapkan kunci KMS Multi-wilayah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Siapkan CodeBuild proyek di akun alat. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 
| Siapkan CodeDeploy di akun beban kerja. | Gunakan `codedeploy.yaml` template di `code` folder GitHub repositori untuk mengatur CodeDeploy di ketiga akun beban kerja. Outputnya `mainInfraStack` mencakup Amazon Resource Names (ARNs) dari cluster Amazon ECS dan pendengar Application Load Balancer.Nilai dari tumpukan infrastruktur sudah diekspor, sehingga diimpor oleh template CodeDeploy tumpukan.<pre>##WorkloadAccount1##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides  ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT1REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount2##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT2REGION --capabilities CAPABILITY_NAMED_IAM<br /><br />##WorkloadAccount3##<br />aws cloudformation deploy --stack-name ecscodedeploystack \<br />--parameter-overrides ToolsAccount=$TOOLSACCOUNT mainInfrastackname=mainInfrastack \<br />--template-file codedeploy.yaml  --region $TESTACCOUNT3REGION --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Siapkan CodePipeline di akun alat
<a name="set-up-codepipeline-in-the-tools-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat pipeline kode di akun alat. | Di akun alat, jalankan perintah:<pre>aws cloudformation deploy --stack-name ecscodepipelinestack --parameter-overrides  \<br />TestAccount1=$TESTACCOUNT1 TestAccount1Region=$TESTACCOUNT1REGION \<br />TestAccount2=$TESTACCOUNT2 TestAccount2Region=$TESTACCOUNT2REGION \<br />TestAccount3=$TESTACCOUNT3 TestAccount3Region=$TESTACCOUNT3REGION \<br />CMKARNTools=$CMKTROOLSARN CMKARN1=$CMKARN1 CMKARN2=$CMKARN2 CMKARN3=$CMKARN3 \<br />CodeCommitRepoName=$CODECOMMITREPONAME BucketStartName=$BUCKETSTARTNAME \<br />--template-file codepipeline.yaml --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 
| Menyediakan akses CodePipeline dan CodeBuild peran dalam kebijakan kunci AWS KMS dan kebijakan bucket S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | AWS DevOps | 

### Panggil dan uji pipa
<a name="call-and-test-the-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Dorong perubahan ke CodeCommit repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

### Bersihkan
<a name="clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan semua sumber daya yang digunakan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) |  | 

## Pemecahan masalah
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Perubahan yang Anda komit ke repositori tidak diterapkan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys.html) | 

## Sumber daya terkait
<a name="manage-blue-green-deployments-of-microservices-to-multiple-accounts-and-regions-by-using-aws-code-services-and-aws-kms-multi-region-keys-resources"></a>
+ [Mendorong gambar Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (dokumentasi Amazon ECR)
+ [Connect ke CodeCommit repositori AWS (dokumentasi](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-connect.html) CodeCommit AWS)
+ [Memecahkan masalah AWS (dokumentasi CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/troubleshooting.html) CodeBuild AWS)

# Pantau repositori Amazon ECR untuk izin wildcard menggunakan AWS dan AWS Config CloudFormation
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config"></a>

*Vikrant Telkar, Wassim Benhallam, dan Sajid Momin, Amazon Web Services*

## Ringkasan
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-summary"></a>

Di Amazon Web Services (AWS) Cloud, Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri image container terkelola yang mendukung repositori pribadi dengan izin berbasis sumber daya menggunakan AWS Identity and Access Management (IAM).

IAM mendukung wildcard `*` "" di atribut sumber daya dan tindakan, yang membuatnya lebih mudah untuk secara otomatis memilih beberapa item yang cocok. [Di lingkungan pengujian, Anda dapat mengizinkan semua pengguna AWS yang diautentikasi mengakses repositori ECR Amazon dengan menggunakan [izin `ecr:*` wildcard](https://docs.aws.amazon.com/lambda/latest/operatorguide/wildcard-permissions-iam.html) dalam elemen utama untuk pernyataan kebijakan repositori Anda.](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) Izin `ecr:*` wildcard dapat berguna saat mengembangkan dan menguji di akun pengembangan yang tidak dapat mengakses data produksi Anda.

Namun, Anda harus memastikan bahwa izin `ecr:*` wildcard tidak digunakan di lingkungan produksi Anda karena dapat menyebabkan kerentanan keamanan yang serius. Pendekatan pola ini membantu Anda mengidentifikasi repositori Amazon ECR yang berisi izin `ecr:*` wildcard dalam pernyataan kebijakan repositori.   Pola ini menyediakan langkah-langkah dan CloudFormation template AWS untuk membuat aturan khusus di AWS Config. Fungsi AWS Lambda kemudian memantau pernyataan kebijakan repositori Amazon ECR Anda untuk izin wildcard. `ecr:*` Jika menemukan pernyataan kebijakan repositori yang tidak sesuai, Lambda memberi tahu AWS Config untuk mengirim peristiwa ke Amazon EventBridge dan EventBridge kemudian memulai topik Amazon Simple Notification Service (Amazon SNS). Topik SNS memberi tahu Anda melalui email tentang pernyataan kebijakan repositori yang tidak sesuai.

## Prasyarat dan batasan
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi. Untuk informasi selengkapnya tentang ini, lihat [Menginstal, memperbarui, dan menghapus instalan AWS CLI dalam](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) dokumentasi AWS CLI.
+ Repositori ECR Amazon yang sudah ada dengan pernyataan kebijakan terlampir, diinstal dan dikonfigurasi di lingkungan pengujian Anda. Untuk informasi selengkapnya tentang ini, lihat [Membuat repositori pribadi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) dan [Menyetel pernyataan kebijakan repositori dalam dokumentasi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/set-repository-policy.html) Amazon ECR.
+ AWS Config, dikonfigurasi di Wilayah AWS pilihan Anda. Untuk informasi selengkapnya tentang ini, lihat [Memulai AWS Config di dokumentasi](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) AWS Config.
+ `aws-config-cloudformation.template`File (terlampir), diunduh ke mesin lokal Anda.

 

**Batasan**
+ Solusi pola ini bersifat Regional dan sumber daya Anda harus dibuat di Wilayah yang sama. 

## Arsitektur
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-architecture"></a>

Diagram berikut menunjukkan cara AWS Config mengevaluasi pernyataan kebijakan repositori Amazon ECR. 

![\[AWS Config workflow with Lambda, Amazon ECR, EventBridge, SNS, and email notification components.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/images/49bbf14b-0a18-4d4a-86ab-162d37708e01.png)


Diagram menunjukkan alur kerja berikut:

1. AWS Config memulai aturan khusus. 

1. Aturan kustom memanggil fungsi Lambda untuk mengevaluasi kepatuhan pernyataan kebijakan repositori Amazon ECR. Fungsi Lambda kemudian mengidentifikasi pernyataan kebijakan repositori yang tidak sesuai.

1. Fungsi Lambda mengirimkan status ketidakpatuhan ke AWS Config.

1. AWS Config mengirimkan acara ke. EventBridge

1. EventBridge menerbitkan pemberitahuan ketidakpatuhan ke topik SNS.

1. Amazon SNS mengirimkan peringatan email kepada Anda atau pengguna yang berwenang.

**Otomatisasi dan skala**

Solusi pola ini dapat memantau sejumlah pernyataan kebijakan repositori Amazon ECR, tetapi semua sumber daya yang ingin Anda evaluasi harus dibuat di Wilayah yang sama.

## Alat
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) — AWS CloudFormation membantu Anda memodelkan dan menyiapkan sumber daya AWS Anda, menyediakannya dengan cepat dan konsisten, serta mengelolanya sepanjang siklus hidupnya. Anda dapat menggunakan template untuk mendeskripsikan sumber daya Anda dan dependensinya, dan meluncurkan dan mengonfigurasinya bersama-sama sebagai tumpukan, alih-alih mengelola sumber daya secara individual. Anda dapat mengelola dan menyediakan tumpukan di beberapa akun AWS dan Wilayah AWS.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) — AWS Config memberikan tampilan terperinci tentang konfigurasi sumber daya AWS di akun AWS Anda. Ini mencakup bagaimana sumber daya terkait satu sama lain dan bagaimana sumber daya tersebut dikonfigurasi di masa lalu sehingga Anda dapat melihat bagaimana konfigurasi dan hubungan berubah dari waktu ke waktu.
+ [Amazon ECR****](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) —**** Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola AWS yang aman, terukur, dan andal. Amazon ECR mendukung repositori pribadi dengan izin berbasis sumber daya menggunakan IAM.                                 
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) — Amazon EventBridge adalah layanan bus acara tanpa server yang dapat Anda gunakan untuk menghubungkan aplikasi Anda dengan data dari berbagai sumber. EventBridge mengirimkan aliran data real-time dari aplikasi Anda, aplikasi perangkat lunak sebagai layanan (SaaS), dan layanan AWS ke target seperti fungsi AWS Lambda, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di akun lain.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — AWS Lambda adalah layanan komputasi yang mendukung menjalankan kode tanpa menyediakan atau mengelola server. Lambda menjalankan kode Anda hanya saat diperlukan dan menskalakan secara otomatis, dari beberapa permintaan per hari hingga ribuan per detik. Anda hanya membayar untuk waktu komputasi yang Anda gunakan—tidak ada biaya saat kode Anda tidak berjalan.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — Amazon Simple Notification Service (Amazon SNS) mengoordinasikan dan mengelola pengiriman atau pengiriman pesan antara penerbit dan klien, termasuk server web dan alamat email. Pelanggan menerima semua pesan yang dipublikasikan ke topik tempat mereka berlangganan, dan semua pelanggan ke suatu topik menerima pesan yang sama. 

**Kode**

Kode untuk pola ini tersedia dalam `aws-config-cloudformation.template` file (terlampir).

## Epik
<a name="monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config-epics"></a>

### Buat CloudFormation tumpukan AWS
<a name="create-the-aws-cloudformation-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation tumpukan AWS. | Buat CloudFormation tumpukan AWS dengan menjalankan perintah berikut di AWS CLI:<pre>$ aws cloudformation create-stack --stack-name=AWSConfigECR \<br />    --template-body  file://aws-config-cloudformation.template \<br />    --parameters ParameterKey=<email>,ParameterValue=<myemail@example.com> \<br />    --capabilities CAPABILITY_NAMED_IAM</pre> | AWS DevOps | 

### Uji aturan kustom AWS Config
<a name="test-the-aws-config-custom-rule"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji aturan kustom AWS Config. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/monitor-amazon-ecr-repositories-for-wildcard-permissions-using-aws-cloudformation-and-aws-config.html) | AWS DevOps | 

## Lampiran
<a name="attachments-01bbf5f8-27aa-4c64-9a03-7fcccc0955b8"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/01bbf5f8-27aa-4c64-9a03-7fcccc0955b8/attachments/attachment.zip)

# Optimalkan penerapan tanpa server multi-akun dengan menggunakan alur kerja dan Tindakan AWS CDK GitHub
<a name="optimize-multi-account-serverless-deployments"></a>

*Sarat Chandra Pothula dan VAMSI KRISHNA SUNKAVALLI, Amazon Web Services*

## Ringkasan
<a name="optimize-multi-account-serverless-deployments-summary"></a>

Organizations yang menerapkan infrastruktur tanpa server di berbagai lingkungan Akun AWS dan sering menghadapi tantangan seperti duplikasi kode, proses manual, dan praktik yang tidak konsisten. Solusi pola ini menunjukkan cara menggunakan alur kerja AWS Cloud Development Kit (AWS CDK) dalam Go and GitHub Actions yang dapat digunakan kembali untuk merampingkan manajemen infrastruktur tanpa server multi-akun. Solusi ini menunjukkan bagaimana Anda dapat mendefinisikan sumber daya cloud sebagai kode, menerapkan proses integration/continuous penerapan berkelanjutan standar (CI/CD), dan membuat komponen modular yang dapat digunakan kembali. 

Dengan menggunakan alat ini, organisasi dapat mengelola sumber daya lintas akun secara efisien, menerapkan pipeline penyebaran yang konsisten, dan menyederhanakan arsitektur tanpa server yang kompleks. Pendekatan ini juga meningkatkan keamanan dan kepatuhan dengan menegakkan praktik standar untuk digunakan Akun AWS, pada akhirnya meningkatkan produktivitas dan mengurangi kesalahan dalam pengembangan dan penerapan aplikasi tanpa server.

## Prasyarat dan batasan
<a name="optimize-multi-account-serverless-deployments-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Identity and Access Management (IAM) [peran dan izin](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html) ada untuk proses penerapan. Ini termasuk izin untuk mengakses repositori Amazon Elastic Container Registry (Amazon ECR) Registry, membuat AWS Lambda fungsi, dan sumber daya lain yang diperlukan di seluruh target. Akun AWS
+ AWS Command Line Interface [(AWS CLI) versi 2.9.11 atau yang lebih baru, [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) dan dikonfigurasi.](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ AWS Cloud Development Kit (AWS CDK) [versi 2.114.1 atau yang lebih baru, [diinstal dan di-bootstrap](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)
+ Go 1.22 atau yang lebih baru, [diinstal](https://go.dev/doc/install).
+ [Docker 24.0.6 atau yang lebih baru, diinstal.](https://docs.docker.com/engine/install/)

**Batasan**
+ **Kompatibilitas bahasa** — Go adalah bahasa populer untuk aplikasi tanpa server. Namun, selain Go, AWS CDK mendukung bahasa pemrograman lainnya, termasuk C \$1, Java, Python, dan. TypeScript Jika organisasi Anda memiliki basis kode atau keahlian dalam bahasa lain, Anda mungkin perlu mengadaptasi atau mempelajari Go untuk sepenuhnya menggunakan solusi yang dijelaskan dalam pola.
+ **Kurva belajar** — Mengadopsi alur kerja AWS CDK, Go (jika baru bagi organisasi), dan alur kerja yang GitHub dapat digunakan kembali mungkin melibatkan kurva pembelajaran untuk pengembang dan tim. DevOps Pelatihan dan dokumentasi mungkin diperlukan untuk memastikan kelancaran adopsi dan penggunaan teknologi ini secara efektif.

## Arsitektur
<a name="optimize-multi-account-serverless-deployments-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![\[Arsitektur alur kerja AWS CDK dan GitHub Actions untuk manajemen infrastruktur tanpa server multi-akun.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8d61917b-bd27-44fa-ae95-55358aaf8812/images/a4b36793-95c7-42f7-a92f-99b4722c9c64.png)


Solusi ini melakukan langkah-langkah berikut:

1. Pengembang mengkloning repositori, membuat cabang baru, dan membuat perubahan pada kode aplikasi di lingkungan lokal mereka.

1. Pengembang melakukan perubahan ini dan mendorong cabang baru ke repositori. GitHub 

1. Pengembang membuat permintaan tarik di GitHub repositori, mengusulkan untuk menggabungkan fitur atau cabang fitur baru mereka ke cabang utama.

1. Permintaan tarik ini memicu alur kerja GitHub Tindakan integrasi berkelanjutan (CI). CI dan alur kerja penerapan berkelanjutan (CD) dalam pola ini menggunakan alur kerja yang dapat digunakan kembali, yang merupakan templat modular yang telah ditentukan sebelumnya yang dapat dibagikan dan dieksekusi di berbagai proyek atau repositori. Alur kerja yang dapat digunakan kembali mempromosikan standardisasi dan efisiensi dalam proses. CI/CD 

1. Alur kerja CI menyiapkan lingkungan yang diperlukan, menghasilkan tag Docker untuk gambar, dan membangun image Docker menggunakan kode aplikasi. 

1. Alur kerja CI mengautentikasi AWS dengan menggunakan peran Akun AWS GitHub OIDC pusat. Untuk alur kerja CI, peran Akun AWS GitHub OIDC pusat menggunakan AWS Security Token Service (AWS STS) untuk mendapatkan kredensil sementara. Kredensi ini memungkinkan peran untuk membangun dan mendorong gambar Docker ke repositori Amazon ECR pusat. Akun AWS

1. Alur kerja CI mendorong image Docker yang dibangun ke Amazon ECR.

1. Alur kerja CI menyimpan tag gambar ke Systems Manager Parameter Store.

1. Setelah alur kerja CI berhasil diselesaikan, tag gambar Docker akan dikeluarkan. 

1. Saat memicu alur kerja CD, pengembang secara manual memasukkan tag gambar gambar Docker yang ingin mereka terapkan. Tag gambar ini sesuai dengan tag yang dihasilkan dan didorong ke Amazon ECR selama alur kerja CI.

1. Pengembang secara manual memicu alur kerja CD, yang menggunakan alur kerja CD yang dapat digunakan kembali. 

1. Alur kerja CD mengautentikasi dengan AWS menggunakan peran Akun AWS GitHub OIDC pusat. Untuk alur kerja CD, pertama kali AWS STS digunakan untuk mengasumsikan peran Akun AWS GitHub OIDC pusat. Kemudian, peran ini mengasumsikan peran bootstrap CDK untuk penerapan akun target. 

1. Alur kerja CD menggunakan AWS CDK untuk mensintesis template AWS CloudFormation .

1. Alur kerja CD menyebarkan aplikasi ke target Akun AWS dengan menggunakan penyebaran CDK, menggunakan tag gambar yang ditentukan secara manual untuk fungsi Lambda.

## Alat
<a name="optimize-multi-account-serverless-deployments-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS CloudFormation merupakan bagian integral dari proses AWS CDK penyebaran. CDK mensintesis CloudFormation template dan kemudian digunakan CloudFormation untuk membuat atau memperbarui sumber daya di lingkungan. AWS 
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) menyediakan penyimpanan hierarkis yang aman untuk manajemen data konfigurasi dan manajemen rahasia.

**Alat-alat lainnya**
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.
+ [Go](https://go.dev/doc/install) adalah bahasa pemrograman open source yang didukung Google.

**Repositori kode**

Kode untuk pola ini tersedia di cicd-github-actions repositori GitHub [aws-cdk-golang-serverless-](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions).

## Praktik terbaik
<a name="optimize-multi-account-serverless-deployments-best-practices"></a>
+ **Desain modular** - Atur AWS CDK kode Anda ke dalam konstruksi atau tumpukan modular dan dapat digunakan kembali, mempromosikan penggunaan kembali kode dan pemeliharaan di beberapa akun dan proyek.
+ **Pemisahan kekhawatiran** — Pisahkan kode infrastruktur dari kode aplikasi, memungkinkan penyebaran dan pengelolaan independen setiap komponen.
+ **Pembuatan versi dan kekekalan** — Perlakukan infrastruktur Anda sebagai kode (IAc), dan gunakan Git untuk kontrol versi. Merangkul prinsip-prinsip infrastruktur yang tidak dapat diubah dengan menciptakan sumber daya baru alih-alih memodifikasi yang sudah ada.
+ **Pengujian dan validasi** — Menerapkan strategi pengujian komprehensif, termasuk pengujian unit, pengujian integrasi, dan end-to-end pengujian, untuk membantu mendukung kebenaran dan keandalan AWS CDK kode dan penerapan Anda.
+ **Keamanan dan kepatuhan** — Ikuti praktik terbaik AWS keamanan, seperti akses hak istimewa, komunikasi aman, dan enkripsi data. Menerapkan pemeriksaan kepatuhan dan mekanisme audit untuk memastikan kepatuhan terhadap kebijakan organisasi dan persyaratan peraturan. Menerapkan praktik terbaik keamanan untuk gambar kontainer, seperti memindai kerentanan, menegakkan penandatanganan gambar, dan mematuhi persyaratan kepatuhan untuk organisasi Anda.
+ **Pemantauan dan pencatatan** - Siapkan mekanisme pemantauan dan pencatatan untuk melacak kesehatan dan kinerja aplikasi dan infrastruktur tanpa server Anda. Gunakan Layanan AWS seperti Amazon CloudWatch, AWS CloudTrail, dan AWS X-Ray untuk tujuan pemantauan dan audit.
+ **Otomatisasi dan CI/CD** — Gunakan alur kerja yang GitHub dapat digunakan kembali dan CI/CD alat lain untuk mengotomatiskan proses pembuatan, pengujian, dan penerapan, yang dapat membantu mendukung penerapan yang konsisten dan berulang di beberapa akun.
+ **Manajemen lingkungan** - Mempertahankan lingkungan yang terpisah (misalnya, pengembangan, pementasan, dan produksi). Menerapkan strategi untuk mempromosikan perubahan antar lingkungan, memastikan pengujian dan validasi yang tepat sebelum penerapan produksi.
+ **Dokumentasi dan kolaborasi** — Dokumentasikan kode infrastruktur, proses penyebaran, dan praktik terbaik untuk memfasilitasi berbagi pengetahuan dan kolaborasi dalam tim Anda.
+ **Optimalisasi biaya** — Menerapkan strategi pemantauan dan pengoptimalan biaya, seperti rightsizing sumber daya, memanfaatkan auto-scaling, dan memanfaatkan layanan pengoptimalan biaya seperti dan. AWS AWS Budgets AWS Cost Explorer
+ **Pemulihan dan pencadangan bencana** - Rencanakan skenario pemulihan bencana dengan menerapkan mekanisme pencadangan dan pemulihan untuk aplikasi dan sumber daya infrastruktur tanpa server Anda.
+ **Peningkatan berkelanjutan** - Tinjau secara teratur dan perbarui praktik, alat, dan proses Anda agar selaras dengan praktik terbaik terbaru, rekomendasi keamanan, dan kemajuan teknologi dalam ekosistem tanpa server.
+ **Tingkatkan postur keamanan** — Gunakan [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)untuk meningkatkan postur keamanan virtual private cloud (VPC) Anda dengan mengonfigurasi titik akhir VPC antarmuka untuk Amazon AWS Lambda ECR,, dan Parameter Store. AWS Systems Manager 

## Epik
<a name="optimize-multi-account-serverless-deployments-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR di pusat. Akun AWS | Untuk berbagi gambar kontainer di beberapa Akun AWS, Anda harus mengonfigurasi akses lintas akun untuk Amazon ECR. Pertama, buat repositori Amazon ECR di pusat. Akun AWSUntuk membuat repositori Amazon ECR, jalankan perintah berikut:<pre>aws ecr create-repository --repository-name sample-repo</pre>Dalam tugas selanjutnya, berikan akses tarik ke yang lain Akun AWS yang perlu menggunakan gambar kontainer. | AWS DevOps | 
| Tambahkan izin lintas akun ke repositori Amazon ECR. | Untuk menambahkan izin lintas akun ke repositori Amazon ECR di pusat Akun AWS, jalankan kode berikut:<pre>{<br />  "Version": "2008-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "LambdaECRImageRetrievalPolicy",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "lambda.amazonaws.com"<br />      },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />      "Condition": {<br />        "StringLike": {<br />          "aws:sourceArn": "arn:aws:lambda:<Target_Region>:<Target_Account_ID>:function:*"<br />        }<br />      }<br />    },<br />    {<br />      "Sid": "new statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<Target_Account_ID>:root"<br />        },<br />      "Action": [<br />        "ecr:BatchGetImage",<br />        "ecr:GetDownloadUrlForLayer",<br />      ],<br />    }<br />  ] <br />}</pre> | AWS DevOps | 
| Konfigurasikan peran untuk peran GitHub OIDC di pusat. Akun AWS | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Bootstrap AWS lingkungan di target Akun AWS. | Siapkan lingkungan CDK secara spesifik Akun AWS dan Wilayah AWS yang memungkinkan penyebaran lintas akun dari akun pusat dan menerapkan prinsip hak istimewa paling sedikit ke peran eksekusi. CloudFormation Untuk [bootstrap](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) AWS lingkungan, jalankan perintah berikut:<pre>cdk bootstrap aws://<Target_Account_ID>/<Target_Region> --trust <Central_Account_ID> --cloudformation-execution-policies arn:aws:iam::aws:policy/<Least_Privilege_Policy></pre> | AWS DevOps | 
| Berikan akses peran Akun AWS OIDC pusat ke peran Akun AWS bootstrap target. | Bootstrap CDK membuat peran IAM berikut yang dirancang untuk diasumsikan oleh pusat Akun AWS selama berbagai tahap proses penyebaran CDK:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Setiap peran memiliki izin khusus yang disesuaikan dengan tujuannya, mengikuti prinsip hak istimewa paling sedikit. `Target_Account_ID`Dan `Target_Region` di setiap nama peran membantu menunjukkan bahwa peran ini unik di berbagai wilayah Akun AWS dan wilayah. Pendekatan ini mendukung identifikasi dan manajemen yang jelas dalam pengaturan multi-akun, Multi-wilayah.<pre>Target Account CDK Bootstrap Roles<br />arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region><br />arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)Untuk memperbarui kebijakan izin untuk peran OIDC di pusat Akun AWS, gunakan kode berikut:<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "sts:AssumeRole",<br />            "Resource": [<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-deploy-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-file-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-image-publishing-role-<Target_Account_ID>-<Target_Region>",<br />                "arn:aws:iam::<Target_Account_ID>:role/cdk-lookup-role-<Target_Account_ID>-<Target_Region>"<br />            ]<br />        }<br />    ]<br /> }<br /></pre> | AWS DevOps | 

### Bangun gambar Docker
<a name="build-the-docker-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori proyek. | Untuk mengkloning [GitHub repositori](https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions) pola ini, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/aws-cdk-golang-serverless-cicd-github-actions.git</pre> | AWS DevOps | 
| Pergi ke jalur Dockerfile. | Untuk menavigasi ke jalur Dockerfile, jalankan perintah berikut:<pre>cd lambda</pre> | AWS DevOps | 
| Otentikasi Docker dengan Amazon ECR. | Amazon ECR memerlukan akses aman ke repositori kontainer pribadi Anda. Dengan masuk dengan cara ini, Anda mengizinkan Docker di mesin atau CI/CD lingkungan lokal Anda untuk berinteraksi dengan Amazon ECR dengan aman.Untuk mengautentikasi Docker dengan Amazon ECR, jalankan perintah berikut:<pre>aws ecr get-login-password --region <AWS_REGION> | docker login --username AWS --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com</pre>Merevisi placeholder `AWS_REGION` dan `AWS_Account_ID` dengan informasi Anda. | AWS DevOps | 
| membuat gambar Docker. | Untuk membangun image Docker, jalankan perintah berikut:<pre>docker build --platform linux/arm64 -t sample-app .</pre> | AWS DevOps | 
| Tandai dan dorong Gambar Docker. | Untuk menandai dan mendorong image Docker ke repositori Amazon ECR, jalankan perintah berikut:<pre>docker tag sample-app:latest <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre><pre>docker push <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPOSITORY>:<DOCKER_TAG></pre>Merevisi placeholder`AWS_Account_ID`,, `AWS_REGION``ECR_REPOSITORY`, dan `DOCKER_TAG` dengan informasi Anda. | AWS DevOps | 

### Menerapkan aplikasi AWS CDK
<a name="deploy-the-cdk-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Sintesis tumpukan CDK dengan variabel khusus lingkungan. | Untuk menghasilkan CloudFormation template untuk infrastruktur Anda seperti yang didefinisikan dalam kode CDK Anda, jalankan perintah berikut:<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk synth</pre>Merevisi placeholder berikut dengan informasi Anda:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | AWS DevOps | 
| Menyebarkan tumpukan CDK. | Untuk menyebarkan tumpukan CDK ke Anda Akun AWS, jalankan perintah berikut. `--require-approval never`Bendera berarti bahwa CDK akan secara otomatis menyetujui dan mengeksekusi *semua* perubahan. Ini termasuk perubahan yang biasanya ditandai CDK sebagai membutuhkan tinjauan manual (seperti perubahan kebijakan IAM atau penghapusan sumber daya). Pastikan kode CDK dan CI/CD pipeline Anda telah teruji dengan baik dan aman sebelum menggunakan `--require-approval never` flag di lingkungan produksi.<pre>ENV=<environment> IMAGETAG=<image_tag> ECR_ARN=<ecr_repo_arn> cdk deploy --require-approval never</pre> | AWS DevOps | 

### Otomatiskan CI/CD menggunakan alur kerja GitHub Tindakan
<a name="automate-ci-cd-using-github-actions-workflows"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat cabang fitur, dan tambahkan perubahan Anda. | Gunakan repositori kloning yang Anda buat sebelumnya, buat cabang fitur, lalu tambahkan perubahan Anda ke kode aplikasi. Gunakan salah satu perintah berikut ini:<pre>git checkout -b <feature_branch><br />git add .<br />git commit -m "add your changes"<br />git push origin <feature_branch></pre>Berikut ini adalah contoh perubahan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html)GitHub Tindakan akan menggunakan alur kerja yang dapat digunakan kembali dan memicu saluran pipa. CI/CD  | AWS DevOps | 
| Gabungkan perubahan Anda. | Buat permintaan tarik, dan gabungkan perubahan Anda ke main. | AWS DevOps | 

## Pemecahan masalah
<a name="optimize-multi-account-serverless-deployments-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| `AccessDenied`kesalahan saat menerapkan sumber daya di seluruh Akun AWS, misalnya,`AccessDenied: User not authorized to perform: "sts:AssumeRole"`. | Untuk membantu mengatasi masalah ini, lakukan hal berikut untuk memverifikasi izin lintas akun:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Masalah kompatibilitas karena ketidakcocokan versi, misalnya, `undefined: awscdkStack` kesalahan dengan versi CDK yang sudah ketinggalan zaman. | Untuk membantu mengatasi masalah ini, lakukan hal berikut untuk memverifikasi bahwa Anda menggunakan versi AWS CDK dan Go yang diperlukan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/optimize-multi-account-serverless-deployments.html) | 
| Kegagalan pipa CI/CD, misalnya, `Error: No such file or directory` karena konfigurasi YAMB yang salah atau `Permission denied` untuk cabang yang dilindungi. | Untuk membantu menyelesaikan masalah dengan konfigurasi GitHub Tindakan, verifikasi bahwa alur kerja yang dapat digunakan kembali direferensikan dan dikonfigurasi dengan benar. | 

## Sumber daya terkait
<a name="optimize-multi-account-serverless-deployments-resources"></a>

**Sumber daya AWS**
+ [AWS Praktik Terbaik untuk Keamanan, Identitas, & Kepatuhan](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [AWS CDK Lokakarya](https://cdkworkshop.com/60-go.html)
+ [AWS Perpustakaan Cloud Development Kit](https://pkg.go.dev/github.com/aws/aws-cdk-go/awscdk/v2)
+ [Buat fungsi Lambda menggunakan gambar kontainer](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [Identity and Access Management untuk Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security-iam.html)
+ [Bekerja dengan AWS CDK di Go](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html)

**Sumber daya lainnya**
+ [Mengkonfigurasi OpenID Connect di Amazon](https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web GitHub Services (dokumentasi)
+ [Dokumentasi Golang](https://golang.org/doc/)
+ [Quickstart untuk GitHub Tindakan](https://docs.github.com/en/actions/writing-workflows/quickstart) (GitHub dokumentasi)
+ [Menggunakan kembali alur kerja (dokumentasi](https://docs.github.com/en/actions/sharing-automations/reusing-workflows)) GitHub 

# Menyediakan AWS Service Catalog produk berdasarkan AWS CloudFormation template dengan menggunakan GitHub Actions
<a name="provision-aws-service-catalog-products-using-github-actions"></a>

*Ashish Bhatt dan Ruchika Modi, Amazon Web Services*

## Ringkasan
<a name="provision-aws-service-catalog-products-using-github-actions-summary"></a>

Pola ini memberi organisasi pendekatan yang efisien menggunakan [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)produk dan portofolio untuk penyediaan standar dan kepatuhan di seluruh tim. Layanan AWS [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu menggabungkan komponen penting dalam produk dan portofolio Service Catalog untuk penyediaan infrastruktur jaringan dasar. AWS Cloud[Pola ini juga mempromosikan DevOps praktik dengan mengintegrasikan infrastruktur sebagai kode (IAc) ke dalam alur kerja pengembangan otomatis dengan menggunakan Tindakan. GitHub ](https://github.com/features/actions)

AWS Service Catalog memungkinkan organisasi untuk membuat dan mengelola layanan TI yang disetujui AWS, menawarkan manfaat seperti standardisasi, kontrol terpusat, penyediaan layanan mandiri, dan manajemen biaya. Dengan mengotomatiskan penyebaran portofolio dan produk Service Catalog melalui GitHub Actions, perusahaan dapat melakukan hal berikut:
+ Mencapai penerapan yang konsisten dan berulang. 
+ Gunakan kontrol versi untuk IAc. 
+ Integrasikan manajemen sumber daya cloud dengan alur kerja pengembangan yang ada. 

Kombinasi ini merampingkan operasi cloud, menegakkan kepatuhan, dan mempercepat pengiriman layanan yang disetujui sekaligus mengurangi kesalahan manual dan meningkatkan efisiensi secara keseluruhan.

## Prasyarat dan batasan
<a name="provision-aws-service-catalog-products-using-github-actions-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS 
+ Akses ke [GitHub repositori](https://docs.github.com/en/get-started/quickstart/create-a-repo)
+ Pemahaman dasar AWS CloudFormation dan AWS Service Catalog
+ Bucket Amazon Simple Storage Service (Amazon S3) untuk meng-host template CloudFormation 
+ Peran AWS Identity and Access Management (IAM) bernama `github-actions` yang digunakan untuk konektivitas antara dan GitHub AWS

**Keterbatasan**
+ Kode pola yang dapat digunakan kembali ini telah diuji hanya dengan GitHub Tindakan.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**

Solusi pola ini dibuat dengan menggunakan tindakan [GitHub Marketplace](https://github.com/marketplace) berikut dan versinya masing-masing:
+ `actions/checkout@v4`
+ `aws-actions/configure-aws-credentials@v2`
+ `aws-actions/aws-cloudformation-github-deploy@v1.2.0`

## Arsitektur
<a name="provision-aws-service-catalog-products-using-github-actions-architecture"></a>

Diagram berikut menunjukkan arsitektur untuk solusi ini.

![\[Menggunakan GitHub Tindakan untuk menyediakan produk Service Catalog berdasarkan CloudFormation template.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/49f82fa7-0c74-4581-bf92-95505dca264c/images/a13c7b41-534e-4a9e-bdca-2974fa40a49a.png)


1. Administrator atau insinyur platform mendorong CloudFormation templat standar ke GitHub repositori, tempat templat dipertahankan. GitHub Repo juga berisi alur kerja yang mengotomatiskan penyediaan menggunakan Tindakan. AWS Service Catalog GitHub 

1. GitHub Tindakan memicu alur kerja yang terhubung ke penyedia AWS Cloud OpenID Connect (OIDC) untuk menyediakan Service Catalog.

1. Service Catalog berisi portofolio dan produk yang dapat langsung digunakan pengembang untuk menyediakan sumber daya standar AWS . Pola ini menggabungkan AWS sumber daya seperti virtual private cloud (VPCs), subnet, NAT dan gateway internet, dan tabel rute.

1. Setelah pengembang membuat produk Service Catalog, Service Catalog mengubahnya menjadi sumber daya yang telah dikonfigurasi sebelumnya dan terstandarisasi AWS . Akibatnya, pengembang menghemat waktu karena mereka tidak perlu menyediakan sumber daya individu dan mengonfigurasinya secara manual.

## Alat
<a name="provision-aws-service-catalog-products-using-github-actions-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS Ini adalah layanan infrastruktur sebagai kode (IAc) yang dapat dengan mudah digunakan sebagai salah satu jenis produk dengan AWS Service Catalog.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted.html)membantu Anda mengelola katalog layanan TI secara terpusat yang disetujui. AWS Pengguna akhir dapat dengan cepat men-deploy hanya layanan IT yang disetujui yang mereka butuhkan, mengikuti batasan yang ditetapkan oleh organisasi 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.

**Lainnya**
+ [GitHub Actions](https://docs.github.com/en/actions) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [service-catalog-with-github-actions](https://github.com/aws-samples/service-catalog-with-github-actions). Repo berisi file-file menarik berikut:
+ `github/workflows`:
  + `e2e-test.yaml`— Panggilan file ini`workflow.yaml`, yang merupakan [alur kerja yang dapat digunakan kembali](https://docs.github.com/en/actions/sharing-automations/reusing-workflows). Alur kerja ini dipicu segera setelah ada komit dan push pada cabang.
  + `workflow.yaml`— File ini berisi alur kerja yang dapat digunakan kembali untuk solusi ini dan dikonfigurasi `workflow_call` sebagai pemicunya. Sebagai alur kerja yang dapat digunakan kembali, `workflow.yaml` dapat dipanggil dari alur kerja lainnya.
+ `templates`:
  + `servicecatalog-portfolio.yaml`— CloudFormation Template ini mencakup sumber daya yang menyediakan portofolio Service Catalog dan produk Service Catalog. Template berisi serangkaian parameter yang digunakan saat menyediakan portofolio dan produk Service Catalog. Satu parameter menerima URL file Amazon S3 tempat `vpc.yaml` template diunggah. Meskipun pola ini menyertakan `vpc.yaml` file untuk menyediakan AWS sumber daya, Anda juga dapat menggunakan URL file parameter S3 untuk konfigurasi.
  + `vpc.yaml`— CloudFormation Template ini berisi AWS sumber daya yang akan ditambahkan dalam produk Service Catalog. AWS sumber daya termasuk VPCs, subnet, gateway internet, gateway NAT, dan tabel rute. `vpc.yaml`Template adalah contoh bagaimana Anda dapat menggunakan CloudFormation template apa pun dengan produk Service Catalog dan template portofolio.

## Praktik terbaik
<a name="provision-aws-service-catalog-products-using-github-actions-best-practices"></a>
+ Lihat [Praktik Terbaik Keamanan untuk AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html) dalam AWS Service Catalog dokumentasi. 
+ Lihat [Pengerasan keamanan untuk GitHub Tindakan](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions) dalam GitHub dokumentasi.

## Epik
<a name="provision-aws-service-catalog-products-using-github-actions-epics"></a>

### Siapkan workstation lokal
<a name="set-up-local-workstation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan Git di workstation lokal Anda. | Untuk menginstal dan mengkonfigurasi Git di workstation lokal Anda, gunakan instruksi [Memulai — Menginstal Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) dalam dokumentasi Git. | Pengembang aplikasi | 
| Kloning repo GitHub proyek. | Untuk mengkloning repo GitHub proyek, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps insinyur | 

### Siapkan penyedia OIDC
<a name="set-up-the-oidc-provider"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan penyedia OIDC. | Buat penyedia OpenID Connect (OIDC) yang memungkinkan alur kerja GitHub Actions mengakses sumber daya AWS, tanpa perlu menyimpan kredensialnya sebagai rahasia yang berumur panjang. AWS GitHub Untuk petunjuk, lihat [Mengonfigurasi OpenID Connect di Amazon](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services) Web Services GitHub dalam dokumentasi.Setelah penyedia OIDC dikonfigurasi, kebijakan kepercayaan peran IAM`github-actions`, yang disebutkan sebelumnya dalam [Prasyarat](#provision-aws-service-catalog-products-using-github-actions-prereqs), akan diperbarui. | Administrator AWS, AWS DevOps, AWS Umum | 

### Pipeline Trigger GitHub Actions untuk menyebarkan portofolio dan produk Service Catalog
<a name="trigger-github-actions-pipeline-to-deploy-sc-portfolio-and-products"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui`e2e-test.yaml`. | `e2e-test.yaml`File memicu alur kerja yang dapat digunakan kembali di. `workflow.yaml` Perbarui dan validasi nilai untuk parameter input berikut di`e2e-test.yaml`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps insinyur | 

### Validasi penerapan
<a name="validate-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi sumber daya Service Catalog. | Untuk memvalidasi resource Service Catalog, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | AWS DevOps | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus CloudFormation tumpukan. | Untuk menghapus CloudFormation tumpukan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html)Untuk informasi selengkapnya, lihat [Menghapus tumpukan dari CloudFormation konsol](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) di CloudFormation dokumentasi | DevOps insinyur, administrator AWS | 

## Pemecahan masalah
<a name="provision-aws-service-catalog-products-using-github-actions-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| `e2e-test``Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions``Did you forget to run actions/checkout before running your local action?` | Untuk memastikan bahwa Anda mengaktifkan pengaturan repositori yang benar, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | 

## Sumber daya terkait
<a name="provision-aws-service-catalog-products-using-github-actions-resources"></a>

**AWS dokumentasi**
+ [Ikhtisar Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)

**Sumber daya lainnya**
+ [Tentang peristiwa yang memicu alur kerja](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#about-events-that-trigger-workflows) (GitHub dokumentasi)
+ [Menggunakan kembali alur kerja (dokumentasi](https://docs.github.com/en/actions/sharing-automations/reusing-workflows)) GitHub 

## Informasi tambahan
<a name="provision-aws-service-catalog-products-using-github-actions-additional"></a>

Untuk melihat tangkapan layar yang terkait dengan [Epik](#provision-aws-service-catalog-products-using-github-actions-epics), buka folder **Gambar** di repo pola ini. GitHub Tangkapan layar berikut tersedia:
+ [AWS Service Catalog portofolio, bagian Administrasi](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_portfolio.png)
+ [AWS Service Catalog produk, bagian Administrasi](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product.png)
+ [AWS Service Catalog produk, User/Provisioning bagian](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product_User.png)

# Menyediakan peran IAM dengan hak istimewa paling sedikit dengan menerapkan solusi mesin penjual otomatis peran
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution"></a>

*Benjamin Morris, Nima Fotouhi, Aman Kaur Gandhi, dan Cad Moon, Amazon Web Services*

## Ringkasan
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-summary"></a>

Izin peran over-scoped AWS Identity and Access Management (IAM) untuk jaringan pipa dapat menimbulkan risiko yang tidak perlu bagi organisasi. Pengembang terkadang memberikan izin luas selama pengembangan tetapi mengabaikan untuk mengurangi izin setelah memecahkan masalah kode mereka. Hal ini menyebabkan masalah di mana peran yang kuat hadir tanpa kebutuhan bisnis dan mungkin tidak pernah ditinjau oleh insinyur keamanan.

Pola ini menawarkan solusi untuk masalah ini: mesin penjual otomatis peran (RVM). Menggunakan model penyebaran yang aman dan terpusat, RVM mendemonstrasikan cara menyediakan peran IAM dengan hak istimewa paling sedikit untuk saluran pipa repositori individu dengan sedikit usaha dari pengembang. GitHub Karena RVM adalah solusi utama, Anda dapat mengonfigurasi tim keamanan Anda sebagai pengulas yang diperlukan untuk menyetujui perubahan. Pendekatan ini memungkinkan keamanan untuk menolak permintaan peran pipeline yang memiliki izin berlebih. 

RVM mengambil kode Terraform sebagai input dan menghasilkan peran IAM siap pipeline sebagai output. Input yang diperlukan adalah Akun AWS ID, nama GitHub repositori, dan kebijakan izin. RVM menggunakan input ini untuk membuat kebijakan kepercayaan dan kebijakan izin peran. Kebijakan kepercayaan yang dihasilkan memungkinkan GitHub repositori yang ditentukan untuk mengambil peran dan menggunakannya untuk operasi pipa.

RVM menggunakan peran IAM (dikonfigurasi selama bootstrap). Peran ini memiliki izin untuk mengasumsikan a role-provisioning-role di setiap akun di organisasi. Peran dikonfigurasi melalui AWS Control Tower Account Factory for Terraform (AFT) atau. AWS CloudFormation StackSets Itu role-provisioning-roles adalah peran yang benar-benar menciptakan peran pipeline untuk pengembang.

## Prasyarat dan batasan
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Sebuah GitHub organisasi yang digunakan untuk menyebarkan infrastruktur sebagai kode (IAc) melalui GitHub Actions. (GitHub Enterprise/Premium/Ultimate*tidak***** diperlukan.)
+  AWS Lingkungan multi-akun. Lingkungan ini tidak perlu menjadi bagian dari AWS Organizations.
+ Mekanisme untuk menerapkan peran IAM di semua Akun AWS (misalnya, AFT atau CloudFormation StackSets).
+ Terraform versi 1.3 atau yang terakhir [diinstal dan](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) dikonfigurasi.
+  AWS [Penyedia Terraform versi 4 atau yang lebih baru [diinstal](https://github.com/hashicorp/terraform-provider-aws/releases) dan dikonfigurasi.](https://developer.hashicorp.com/terraform/language/providers/configuration)

**Batasan**
+ Kode pola ini khusus untuk GitHub Actions dan Terraform. Namun, konsep umum pola dapat digunakan kembali dalam kerangka kerja integrasi dan pengiriman berkelanjutan (CI/CD) lainnya.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [AWS Layanan menurut Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-architecture"></a>

Diagram berikut menggambarkan alur kerja untuk pola ini.

![\[Alur kerja untuk mengotomatiskan pembuatan dan penerapan peran IAM dengan menggunakan Tindakan. GitHub\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/215c590e-0c84-411d-be6e-b1739f1e19d2/images/82fcdc9f-9576-4e7c-b7fe-b45046ba79d2.png)


Alur kerja untuk penggunaan tipikal mesin penjual otomatis peran terdiri dari langkah-langkah berikut:

1. Pengembang mendorong kode yang berisi kode Terraform untuk peran IAM yang baru diminta ke repositori RVM. GitHub Tindakan ini memicu pipeline Tindakan RVM GitHub .

1. Pipeline menggunakan kebijakan kepercayaan OpenID Connect (OIDC) untuk mengasumsikan peran asumsi peran RVM.

1. Saat pipeline RVM berjalan, ia mengasumsikan peran alur kerja RVM di akun tempat ia menyediakan peran IAM baru pengembang. (Peran alur kerja RVM disediakan dengan menggunakan AFT atau.) CloudFormation StackSets

1. RVM menciptakan peran IAM pengembang dengan izin dan kepercayaan yang sesuai, sehingga peran tersebut dapat diasumsikan oleh pipeline aplikasi lain.

1. Pengembang aplikasi dapat mengonfigurasi pipeline aplikasi mereka untuk mengambil peran yang disediakan RVM ini.

Peran yang dibuat mencakup izin yang diminta oleh pengembang dan `ReadOnlyAccess` kebijakan. Peran ini hanya dapat diasumsikan oleh pipeline yang berjalan melawan `main` cabang repositori yang ditentukan pengembang. Pendekatan ini membantu memastikan bahwa perlindungan dan tinjauan cabang dapat diperlukan untuk menggunakan peran tersebut.

**Otomatisasi dan skala**

Izin hak istimewa paling sedikit memerlukan perhatian terhadap detail untuk setiap peran yang disediakan. Model ini mengurangi kompleksitas yang diperlukan untuk membuat peran ini, memungkinkan pengembang untuk membuat peran yang mereka butuhkan tanpa banyak pembelajaran atau usaha tambahan.

## Alat
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-tools"></a>

**Layanan AWS**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)adalah layanan manajemen akun yang membantu Anda mengkonsolidasikan beberapa Akun AWS ke dalam organisasi yang Anda buat dan kelola secara terpusat.

**Alat-alat lainnya**
+ [Git](https://git-scm.com/docs) adalah sistem kontrol versi terdistribusi open source. Ini termasuk kemampuan untuk membuat [akun organisasi](https://docs.github.com/en/get-started/learning-about-github/types-of-github-accounts#organization-accounts).
+ [GitHub Actions](https://docs.github.com/en/actions/writing-workflows/quickstart) adalah platform integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang terintegrasi erat dengan GitHub repositori. Anda dapat menggunakan GitHub Actions untuk mengotomatiskan pipeline build, test, dan deployment.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [role-vending-machine](https://github.com/aws-samples/role-vending-machine)repositori.

## Praktik terbaik
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-best-practices"></a>
+ **Buat jalan yang benar mudah dan cara yang salah sulit** — Buatlah mudah untuk melakukan hal yang benar. Jika pengembang berjuang dengan proses penyediaan RVM, mereka mungkin mencoba membuat peran melalui cara lain, yang merusak sifat sentral RVM. Pastikan tim keamanan Anda memberikan panduan yang jelas tentang cara menggunakan RVM dengan aman dan efektif.

  Anda juga harus menyulitkan pengembang untuk melakukan hal yang salah. Gunakan kebijakan kontrol layanan (SCPs) atau batas izin untuk membatasi peran apa yang dapat membuat peran lain. Pendekatan ini dapat membantu membatasi pembuatan peran hanya untuk RVM dan sumber tepercaya lainnya.
+ **Berikan contoh yang baik** - Tidak dapat dihindari, beberapa pengembang akan mengadaptasi peran yang ada di repositori RVM sebagai templat informal untuk memberikan izin untuk peran baru mereka. Jika Anda memiliki contoh izin paling sedikit yang dapat disalin, hal itu dapat mengurangi risiko pengembang meminta izin yang luas dan berat wildcard. Jika Anda memulai dengan peran yang sangat diizinkan dengan banyak wildcard, masalah itu dapat berlipat ganda seiring berjalannya waktu.
+ **Gunakan konvensi dan ketentuan penamaan** — Bahkan jika pengembang tidak mengetahui semua nama sumber daya yang akan dibuat aplikasi mereka, mereka tetap harus membatasi izin peran dengan menggunakan konvensi penamaan. Misalnya, jika mereka membuat bucket Amazon S3, nilai kunci sumber daya mereka mungkin terlihat seperti `arn:aws:s3:::myorg-myapp-dev-*` sehingga peran mereka tidak memiliki izin di luar bucket yang cocok dengan nama itu. Menegakkan konvensi penamaan melalui kebijakan IAM memiliki manfaat tambahan untuk meningkatkan kepatuhan terhadap konvensi penamaan. Peningkatan ini terjadi karena sumber daya yang tidak cocok tidak akan diizinkan untuk dibuat.
+ **Required pull request (PR) review** — Nilai solusi RVM adalah menciptakan lokasi pusat di mana peran pipeline baru dapat ditinjau. Namun, desain ini hanya berguna jika ada pagar pembatas yang membantu memastikan keamanan, kode berkualitas tinggi berkomitmen untuk RVM. Lindungi cabang yang digunakan untuk menyebarkan kode (misalnya,`main`) dari dorongan langsung dan memerlukan persetujuan untuk setiap permintaan gabungan yang menargetkannya.
+ **Konfigurasikan peran hanya-baca** — Secara default, RVM menyediakan `readonly` versi dari setiap peran yang diminta. Peran ini dapat digunakan dalam CI/CD pipeline yang tidak menulis data, seperti alur kerja `terraform plan` pipeline. Pendekatan ini membantu mencegah perubahan yang tidak diinginkan jika alur kerja hanya-baca berperilaku buruk.

  Secara default, `ReadOnlyAccess` kebijakan AWS terkelola dilampirkan ke peran hanya-baca dan peran baca-tulis. Kebijakan ini mengurangi kebutuhan iterasi saat menentukan izin yang diperlukan, tetapi mungkin terlalu permisif untuk beberapa organisasi. Jika mau, Anda dapat menghapus kebijakan dari kode Terraform.
+ **Berikan izin minimum** - Ikuti prinsip hak istimewa paling sedikit dan berikan izin minimum yang diperlukan untuk melakukan tugas. Untuk informasi selengkapnya, lihat [Berikan hak istimewa terkecil](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) dan [praktik terbaik Keamanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dalam dokumentasi IAM.

## Epik
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-epics"></a>

### Siapkan lingkungan
<a name="prepare-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin repositori sampel ke organisasi Anda GitHub . | [Kloning](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) repositori pola ini atau [fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) repositori ini ke GitHub organisasi Anda sehingga Anda dapat menyesuaikannya dengan kebutuhan Anda.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps insinyur | 
| Tentukan Akun AWS untuk RVM. | Tentukan penyebaran infrastruktur mana yang Akun AWS akan digunakan untuk RVM. Jangan gunakan akun manajemen atau root. | Arsitek awan | 
| (Opsional) Izinkan jaringan pipa organisasi untuk dibuat PRs. | Langkah ini hanya diperlukan jika Anda ingin mengizinkan `generate_providers_and_account_vars` alur kerja dibuat PRs.Untuk memungkinkan pipeline organisasi Anda dibuat PRs, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Untuk informasi selengkapnya, lihat [Mengelola setelan GitHub Tindakan untuk repositori](https://docs.github.com/en/enterprise-server@3.10/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests) dalam dokumentasi. GitHub  | DevOps insinyur | 
| Berikan izin hanya-baca ke akun RVM. | Buat kebijakan delegasi di akun manajemen Anda yang memberikan izin hanya-baca akun RVM Anda. Ini memungkinkan GitHub alur kerja RVM Anda menarik daftar akun AWS organisasi secara dinamis saat skrip berjalan. `generate_providers_and_account_vars.py` Gunakan kode berikut dan ganti `<YOUR RVM Account ID>` dengan Akun AWS ID yang Anda pilih di Langkah 2:<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "Statement",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "AWS": "arn:aws:iam::<YOUR RVM Account ID>:root"<br />      },<br />      "Action": [<br />        "organizations:ListAccounts",<br />        "organizations:DescribeOrganization",<br />        "organizations:DescribeOrganizationalUnit",<br />        "organizations:ListRoots",<br />        "organizations:ListAWSServiceAccessForOrganization",<br />        "organizations:ListDelegatedAdministrators"<br />      ],<br />      "Resource": "*"<br />    }<br />  ]<br />}</pre> | Administrator awan | 
| Perbarui nilai default dari repo sampel. | Untuk mengonfigurasi RVM agar beroperasi di lingkungan spesifik Anda dan Wilayah AWS, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps insinyur | 

### Inisialisasi infrastruktur
<a name="initialize-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bootstrap repo RVM. | Langkah ini diperlukan untuk menciptakan kepercayaan OIDC dan peran IAM yang digunakan oleh pipa RVM itu sendiri, sehingga dapat mulai beroperasi dan menjual peran lain.Dalam konteks akun RVM Anda, jalankan `terraform apply` perintah secara manual dari direktori. `scripts/bootstrap` Berikan nilai yang diperlukan berdasarkan dokumentasi variabel. | DevOps insinyur | 

### Konfigurasikan operasi
<a name="configure-operations"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan `github-workflow-rvm` dan `github-workflow-rvm-readonly` peran ke semua akun. | Pilih metode penerapan yang selaras dengan praktik organisasi Anda, seperti AFT atau. StackSets Gunakan metode tersebut untuk menerapkan dua peran IAM dalam `scripts/assumed_role/main.tf` file (nama default `github-workflow-rvm` dan`github-workflow-rvm-readonly`) ke setiap akun tempat Anda ingin RVM dapat membuat peran pipeline.Peran IAM ini memiliki kebijakan kepercayaan yang memungkinkan peran asumsi peran akun RVM (atau yang setara) untuk mengasumsikannya`readonly`. Peran juga memiliki kebijakan izin IAM yang memungkinkan mereka membaca dan menulis (kecuali menggunakan `readonly` peran) peran yang cocok`github-workflow-role-*`. | Administrator AWS | 
| Jalankan `generate_providers_and_account_vars` alur kerja. | Untuk mengonfigurasi RVM Anda sehingga siap untuk membuat peran pipeline, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html)Setelah alur kerja selesai, RVM siap untuk:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Saya membuat peran dengan menggunakan RVM, tetapi GitHub tidak dapat mengasumsikan itu. | Verifikasi bahwa nama GitHub repositori cocok dengan nama yang diberikan ke modul. `github_workflow_roles` Peran dicakup sehingga hanya satu repositori yang dapat mengasumsikan mereka.Demikian pula, verifikasi bahwa cabang yang digunakan dalam GitHub pipeline cocok dengan nama cabang yang disediakan untuk `github_workflow_roles` modul. Biasanya, peran yang dibuat RVM dengan izin tulis hanya dapat digunakan oleh alur kerja yang dicakup ke `main` cabang (yaitu, penerapan yang bersumber dari). `main` | 
| Peran hanya-baca saya gagal menjalankan pipeline karena tidak memiliki izin untuk membaca sumber daya tertentu. | Meskipun `ReadOnlyAccess` kebijakan menyediakan izin hanya-baca yang luas, kebijakan tersebut tidak memiliki beberapa tindakan baca (misalnya, tindakan tertentu AWS Security Hub CSPM ).Anda dapat menambahkan izin tindakan tertentu dengan menggunakan `inline_policy_readonly` parameter `github-workflow-roles` modul. | 

## Sumber daya terkait
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-resources"></a>
+ [Praktik terbaik untuk menggunakan AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-bestpractices.html)
+ [Mengatur AWS Lingkungan Anda Menggunakan Beberapa Akun](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html)
+ [Ikhtisar AWS Control Tower Account Factory untuk Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html)
+ [Praktik terbaik kebijakan](https://docs.aws.amazon.com/codepipeline/latest/userguide/security_iam_service-with-iam-policy-best-practices.html) 

## Informasi tambahan
<a name="provision-least-privilege-iam-roles-by-deploying-a-role-vending-machine-solution-additional"></a>

**Menggunakan GitHub lingkungan**

GitHub lingkungan adalah pendekatan alternatif untuk pembatasan berbasis cabang untuk akses peran. Jika Anda lebih suka menggunakan GitHub lingkungan, berikut adalah contoh sintaks untuk kondisi tambahan dalam kebijakan kepercayaan IAM. Sintaks ini menetapkan bahwa peran hanya dapat digunakan ketika GitHub tindakan berjalan di `Production` lingkungan.

```
"StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:environment:Production"
}
```

Contoh sintaks menggunakan nilai placeholder berikut:
+ `octo-org`adalah nama GitHub organisasi.
+ `octo-repo`adalah nama repositori.
+ `Production`adalah nama GitHub lingkungan yang spesifik.

# Publikasikan CloudWatch metrik Amazon ke file CSV
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file"></a>

*Abdullahi Olaoye, Amazon Web Services*

## Ringkasan
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-summary"></a>

Pola ini menggunakan skrip Python untuk mengambil metrik CloudWatch Amazon dan mengonversi informasi metrik menjadi file nilai yang dipisahkan koma (CSV) untuk meningkatkan keterbacaan. Skrip mengambil layanan AWS yang metriknya harus diambil sebagai argumen yang diperlukan. Anda dapat menentukan profil kredensi AWS Region dan AWS sebagai argumen opsional. Jika Anda tidak menentukan argumen tersebut, skrip menggunakan Region default dan profil yang dikonfigurasi untuk workstation tempat skrip dijalankan. Setelah skrip berjalan, ia menghasilkan dan menyimpan file CSV di direktori yang sama.

Lihat bagian *Lampiran* untuk skrip dan file terkait yang disediakan dengan pola ini.

## Prasyarat dan batasan
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-prereqs"></a>

**Prasyarat**
+ Python 3.x
+ Antarmuka Baris Perintah AWS (AWS CLI)

**Batasan**

Skrip saat ini mendukung layanan AWS berikut:
+ AWS Lambda
+ Awan Komputasi Elastis Amazon (Amazon EC2)
  + Secara default, skrip tidak mengumpulkan metrik volume Amazon Elastic Block Store (Amazon EBS). Untuk mengumpulkan metrik Amazon EBS, Anda harus memodifikasi file terlampir`metrics.yaml`.
+ Amazon Relational Database Service (Amazon RDS)
  + Namun, skrip tidak mendukung Amazon Aurora.
+ Penyeimbang Beban Aplikasi
+ Penyeimbang Beban Jaringan
+ Amazon API Gateway

## Alat
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-tools"></a>
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) adalah layanan pemantauan yang dibangun untuk DevOps insinyur, pengembang, insinyur keandalan situs (SREs), dan manajer TI. CloudWatch menyediakan data dan wawasan yang dapat ditindaklanjuti untuk membantu Anda memantau aplikasi Anda, menanggapi perubahan kinerja di seluruh sistem, mengoptimalkan pemanfaatan sumber daya, dan mendapatkan pandangan terpadu tentang kesehatan operasional. CloudWatch mengumpulkan data pemantauan dan operasional dalam bentuk log, metrik, dan peristiwa, serta memberikan tampilan terpadu tentang sumber daya, aplikasi, dan layanan AWS yang berjalan di AWS dan server lokal.

## Epik
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-epics"></a>

### Instal dan konfigurasikan prasyarat
<a name="install-and-configure-the-prerequisites"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal prasyarat. | Jalankan perintah berikut:<pre>$ pip3 install -r requirements.txt</pre> | Developer | 
| Mengonfigurasi AWS CLI. | Jalankan perintah berikut: <pre>$ aws configure</pre> | Developer | 

### Konfigurasikan skrip Python
<a name="configure-the-python-script"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buka naskahnya. | Untuk mengubah konfigurasi default skrip, buka`metrics.yaml`. | Developer | 
| Atur periode untuk skrip. | Ini adalah periode waktu untuk mengambil. Periode default adalah 5 menit (300 detik). Anda dapat mengubah periode waktu, tetapi perhatikan batasan berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/publish-amazon-cloudwatch-metrics-to-a-csv-file.html)Jika tidak, operasi API tidak akan mengembalikan titik data apa pun. | Developer | 
| Atur jam untuk skrip. | Nilai ini menentukan berapa jam metrik yang ingin Anda ambil. Pengaturan default-nya adalah 1 jam. Untuk mengambil beberapa hari metrik, berikan nilai dalam jam. Misalnya, selama 2 hari, tentukan 48. | Developer | 
| Ubah nilai statistik untuk skrip.  | (Opsional) Nilai statistik global adalah`Average`, yang digunakan saat mengambil metrik yang tidak memiliki nilai statistik tertentu yang ditetapkan. Skrip mendukung nilai statistik`Maximum`,`SampleCount`, dan`Sum`. | Developer | 

### Jalankan skrip Python
<a name="run-the-python-script"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan penulisan. | Gunakan perintah berikut ini. <pre>$ python3 cwreport.py <service> </pre>Untuk melihat daftar nilai layanan dan opsional `region ` dan `profile ` parameter, jalankan perintah berikut:<pre> $ python3 cwreport.py -h</pre>Untuk informasi selengkapnya tentang parameter opsional, lihat bagian *Informasi tambahan*. | Developer | 

## Sumber daya terkait
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-resources"></a>
+ [Mengkonfigurasi AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Menggunakan CloudWatch metrik Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)
+ [ CloudWatch Dokumentasi Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)
+ [EC2 CloudWatch Metrik-metrik](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)
+ [Metrik AWS Lambda](https://docs.aws.amazon.com/lambda/latest/operatorguide/logging-metrics.html)
+ [Metrik Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-metrics.html#rds-cw-metrics-instance)
+ [Metrik Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)
+ [Metrik Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-cloudwatch-metrics.html)
+ [Metrik Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-metrics-and-dimensions.html)

## Informasi tambahan
<a name="publish-amazon-cloudwatch-metrics-to-a-csv-file-additional"></a>

**Penggunaan skrip**

```
$ python3 cwreport.py -h
```

**Contoh sintaks**

```
python3 cwreport.py <service> <--region=Optional Region> <--profile=Optional credential profile>
```

**Parameter**
+ **layanan (wajib)** - Layanan yang ingin Anda jalankan skrip. Skrip saat ini mendukung layanan ini: AWS Lambda, Amazon, EC2 Amazon RDS, Application Load Balancer, Network Load Balancer, dan API Gateway.
+ **region (opsional)** - Wilayah AWS untuk mengambil metrik. Wilayah default adalah`ap-southeast-1`.
+ **profil (opsional)** - Profil bernama AWS CLI untuk digunakan. Jika parameter ini tidak ditentukan, profil kredensi default yang dikonfigurasi akan digunakan.

**Contoh**
+ Untuk menggunakan Region default `ap-southeast-1` dan kredensional yang dikonfigurasi default untuk mengambil metrik Amazon EC2 : `$ python3 cwreport.py ec2`
+ Untuk menentukan Wilayah dan mengambil metrik API Gateway: `$ python3 cwreport.py apigateway --region us-east-1`
+ Untuk menentukan profil AWS dan mengambil EC2 metrik Amazon: `$ python3 cwreport.py ec2 --profile testprofile`
+ Untuk menentukan Wilayah dan profil untuk mengambil EC2 metrik Amazon: `$ python3 cwreport.py ec2 --region us-east-1 --profile testprofile`

## Lampiran
<a name="attachments-0a915a9d-2eef-4da1-8283-3cf4a115b3b2"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/0a915a9d-2eef-4da1-8283-3cf4a115b3b2/attachments/attachment.zip)

# Hapus EC2 entri Amazon di Akun AWS seberang AWS Managed Microsoft AD dengan menggunakan AWS Lambda otomatisasi
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad dan Tamilselvan P, Amazon Web Services*

## Ringkasan
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) adalah alat skrip Microsoft yang mengelola informasi domain dan interaksi pengguna dengan layanan jaringan. Ini banyak digunakan di antara penyedia layanan terkelola (MSPs) untuk mengelola kredensi karyawan dan izin akses. Karena penyerang AD dapat menggunakan akun tidak aktif untuk mencoba dan meretas organisasi, penting untuk menemukan akun yang tidak aktif dan menonaktifkannya pada jadwal pemeliharaan rutin. Dengan AWS Directory Service for Microsoft Active Directory, Anda dapat menjalankan Microsoft Active Directory sebagai layanan terkelola. Pola ini dapat membantu Anda mengonfigurasi AWS Lambda otomatisasi untuk menemukan dan menghapus akun yang tidak aktif dengan cepat.

Jika skenario berikut berlaku untuk organisasi Anda, pola ini dapat membantu Anda:
+ **Manajemen AD terpusat** — Jika organisasi Anda memiliki beberapa Akun AWS, masing-masing dengan penerapan AD sendiri, mungkin sulit untuk mengelola akun pengguna dan izin akses secara konsisten di semua akun. Dengan solusi pembersihan AD lintas akun, Anda dapat menonaktifkan atau menghapus akun yang tidak aktif dari semua instans AD secara terpusat.
+ **Restrukturisasi atau migrasi AD** — Jika organisasi Anda berencana untuk merestrukturisasi atau memigrasikan penerapan AD, solusi pembersihan AD lintas akun dapat membantu Anda mempersiapkan lingkungan. Solusinya dapat membantu Anda menghapus akun yang tidak perlu atau tidak aktif, menyederhanakan proses migrasi, dan mengurangi potensi konflik atau masalah.

Bila Anda menggunakan pola ini, Anda bisa mendapatkan manfaat berikut:
+ Tingkatkan kinerja database dan server, dan perbaiki kerentanan keamanan Anda dari akun yang tidak aktif.
+ Jika server iklan Anda di-host di cloud, menghapus akun yang tidak aktif juga dapat mengurangi biaya penyimpanan sekaligus meningkatkan kinerja. Tagihan bulanan Anda mungkin berkurang karena biaya bandwidth dan sumber daya komputasi keduanya dapat turun.
+ Jauhkan penyerang potensial dengan Active Directory yang bersih.

## Prasyarat dan batasan
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-prereqs"></a>

**Prasyarat**
+ Orang tua yang aktif Akun AWS dan satu atau beberapa akun anak. Dalam pola ini, *akun induk* adalah tempat Active Directory dibuat. *Akun anak* meng-host server Windows dan bergabung melalui akun induk Active Directory.
+ Git [diinstal](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) dan dikonfigurasi pada workstation lokal.
+ Terraform [diinstal](https://learn.hashicorp.com/tutorials/terraform/install-cli) dan dikonfigurasi pada workstation lokal.
+ AWS Managed Microsoft AD direktori dikonfigurasi di akun induk dan dibagikan ke semua akun anak. *Untuk detail selengkapnya, lihat [Tutorial: Berbagi AWS Managed Microsoft AD direktori Anda untuk EC2 domain-join yang mulus](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html) di Panduan Administrasi.AWS Directory Service *
+ Koneksi peering cloud pribadi virtual (VPC) atau AWS Transit Gateway koneksi yang tersedia antara VPC AWS Directory Service (akun induk) dan VPC dari instans Amazon Elastic Compute Cloud (Amazon EC2) (akun anak). *Untuk detail selengkapnya, lihat [Mengkonfigurasi koneksi peering VPC antara pemilik direktori dan akun konsumen direktori di](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc) Panduan Administrasi AWS Directory Service .*
+ Mesin Windows dikonfigurasi dengan `EC2WindowsUserdata` skrip pada semua akun induk dan anak. File skrip tersedia di root [repositori kode](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup) pola ini.
+ Peran lintas akun AWS Identity and Access Management (IAM) tersedia di setiap akun anak yang dikonfigurasi dengan kebijakan kepercayaan untuk mengizinkan penggunaan AWS Lambda fungsi dari akun induk. Untuk informasi selengkapnya, lihat [Mengirim dan menerima acara antara Akun AWS EventBridge di Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEvents-CrossAccountEventDelivery.html) *di Panduan EventBridge Pengguna Amazon*.
+ Nilai rahasia berikut tersedia di AWS Systems Manager Parameter Store dari akun induk:
  + `domainJoinUser`— Nama pengguna layanan direktori
  + `domainJoinPassword`— Kata sandi layanan direktori

  Untuk informasi selengkapnya tentang rahasia, lihat [Membuat AWS Secrets Manager rahasia](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) di *Panduan AWS Secrets Manager Pengguna*.

**Batasan**
+ Membuat sumber daya di akun anak tidak otomatis dengan Terraform. Anda harus membuat sumber daya berikut secara manual dengan menggunakan Konsol Manajemen AWS:
  +  EventBridge Aturan Amazon untuk mengirim peristiwa EC2 penghentian Amazon ke akun induk
  + Pembuatan peran EC2 lintas akun Amazon di akun anak dengan kebijakan kepercayaan
  + Pengintip VPC atau koneksi Transit Gateway
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ [Terraform versi 1.1.9 atau yang lebih baru](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versi 3.0 atau lebih tinggi](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Arsitektur
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-architecture"></a>

Diagram berikut menampilkan arsitektur tingkat tinggi dari solusi.

![\[Proses untuk menggunakan otomatisasi Lambda untuk menghapus EC2 entri dari seluruh akun AWS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c397d873-e10d-44b6-8352-5f1380ab94ca/images/bd6c80a7-e490-47db-bd47-165314e1ea8a.png)


Diagram arsitektur menggambarkan proses berikut:

1. Di akun anak, EventBridge aturan mengumpulkan semua peristiwa EC2 penghentian Amazon. Aturan mengirimkan peristiwa-peristiwa EventBridge yang ada di akun induk.

1. Dari akun induk, EventBridge kumpulkan semua peristiwa dan berisi aturan untuk memicu fungsi `ADcleanup-Lambda` Lambda.

1. Akun induk menerima peristiwa penghentian apa pun dari akun induk atau anak dan memicu fungsi Lambda.

1. Fungsi Lambda membuat panggilan ke grup Amazon Auto EC2 Scaling menggunakan modul boto Python dan mendapatkan ID instance acak. Instance ID digunakan untuk menjalankan perintah Systems Manager.

1. Fungsi Lambda membuat panggilan lain ke Amazon EC2 menggunakan modul boto. Fungsi Lambda mendapatkan alamat IP pribadi dari server Windows yang sedang berjalan dan menyimpan alamat dalam variabel sementara. Pada langkah 5.1 dan 5.2, EC2 instance Windows yang berjalan dikumpulkan dari akun anak.

1. Fungsi Lambda membuat panggilan lain ke Systems Manager untuk mendapatkan informasi komputer yang terhubung. AWS Directory Service

1.  AWS Systems Manager Dokumen membantu menjalankan PowerShell perintah di server Amazon EC2 Windows untuk mendapatkan alamat IP pribadi komputer yang terhubung ke AD. (Dokumen Systems Manager menggunakan ID instance yang diperoleh pada langkah 4.)

1. Nama pengguna dan kata sandi domain AD disimpan di AWS Systems Manager Parameter Store. AWS Lambda dan Systems Manager melakukan panggilan ke Parameter Store dan mendapatkan nilai nama pengguna dan kata sandi yang akan digunakan untuk terhubung ke AD.

1. Menggunakan dokumen Systems Manager, PowerShell skrip dijalankan di server Amazon EC2 Windows menggunakan id instance yang diperoleh sebelumnya di langkah 4.

1. Amazon EC2 terhubung AWS Directory Service dengan menggunakan PowerShell perintah dan menghapus komputer yang tidak digunakan atau tidak aktif.

## Alat
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-tools"></a>

**AWS layanan**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)menyediakan beberapa cara untuk menggunakan Microsoft Active Directory (AD) dengan yang lain Layanan AWS seperti Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) untuk SQL Server, dan FSx Amazon untuk Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)memungkinkan beban kerja dan sumber daya yang sadar direktori Anda AWS untuk menggunakan Microsoft Active Directory di file. AWS Cloud
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) menyediakan kapasitas komputasi yang dapat diskalakan di. AWS Cloud Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan dan dengan cepat meningkatkannya ke atas atau ke bawah.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya. Dengan IAM, Anda dapat menentukan siapa atau apa yang dapat mengakses layanan dan sumber daya AWS, mengelola izin berbutir halus secara terpusat, dan menganalisis akses untuk menyempurnakan izin. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)membantu Anda mengelola aplikasi dan infrastruktur yang berjalan di AWS Cloud. Ini menyederhanakan aplikasi dan manajemen sumber daya, mempersingkat waktu untuk mendeteksi dan menyelesaikan masalah operasional, dan membantu Anda mengelola AWS sumber daya Anda dengan aman dalam skala besar.
+ [AWS Systems Manager dokumen](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) menentukan tindakan yang dilakukan Systems Manager pada instans terkelola Anda. Systems Manager mencakup lebih dari 100 dokumen pra-konfigurasi yang dapat Anda gunakan dengan menentukan parameter di runtime.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) adalah kemampuan AWS Systems Manager dan menyediakan penyimpanan hierarkis yang aman untuk manajemen data konfigurasi dan manajemen rahasia.

**Alat-alat lainnya**
+ [HashiCorp Terraform](https://www.terraform.io/docs) adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)adalah program manajemen otomatisasi dan konfigurasi Microsoft yang berjalan di Windows, Linux, dan macOS.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [aws-lambda-ad-cleanup-terraform-samples](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/tree/main/multiple-account-cleanup).

## Praktik terbaik
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Bergabung dengan domain secara otomatis.**Saat Anda meluncurkan instance Windows yang akan menjadi bagian dari Directory Service domain, bergabunglah dengan domain selama proses pembuatan instance alih-alih menambahkan instance secara manual nanti. Untuk bergabung dengan domain secara otomatis, pilih direktori yang benar dari daftar dropdown **direktori Gabung Domain** saat meluncurkan instance baru. Untuk detail selengkapnya, lihat [Menggabungkan instans Amazon EC2 Windows dengan mulus ke Direktori AWS Managed Microsoft AD Aktif Anda](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) di *Panduan Directory Service Administrasi*.
+ **Hapus akun yang tidak digunakan.**Adalah umum untuk menemukan akun di AD yang belum pernah digunakan. Seperti akun yang dinonaktifkan atau tidak aktif yang tetap berada di sistem, akun yang tidak digunakan yang diabaikan dapat memperlambat sistem iklan Anda atau membuat organisasi Anda rentan terhadap pelanggaran data.
+ **Otomatiskan pembersihan Direktori Aktif.**Untuk membantu mengurangi risiko keamanan dan mencegah akun usang memengaruhi kinerja AD, lakukan pembersihan AD harus dilakukan secara berkala. Anda dapat menyelesaikan sebagian besar tugas manajemen dan pembersihan AD dengan menulis skrip. Contoh tugas termasuk menghapus akun yang dinonaktifkan dan tidak aktif, menghapus grup kosong dan tidak aktif, dan menemukan akun pengguna dan kata sandi yang kedaluwarsa.

## Epik
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-epics"></a>

### Siapkan akun anak
<a name="set-up-child-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran lintas akun di akun anak. | Untuk membuat peran lintas akun di akun anak, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 
| Buat aturan acara di akun anak. | Untuk membuat EventBridge aturan untuk setiap akun anak, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Untuk detail selengkapnya, lihat [Membuat aturan yang bereaksi terhadap peristiwa EventBridge di Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-create-rule.html) *di Panduan EventBridge Pengguna Amazon*. | DevOps insinyur | 
| Buat EC2 instance dan bergabunglah dengan AD. | Untuk membuat EC2 instance untuk Windows, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 

### Siapkan workstation lokal
<a name="set-up-the-local-workstation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat folder proyek dan tambahkan file. | Untuk mengkloning repositori dan membuat folder proyek, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 
| Membangun `adcleanup.zip` file. | Untuk mengompres `lambda_function.py` file, jalankan perintah berikut:`zip -r adcleanup.zip lambda_function.py` | DevOps insinyur | 

### Menyediakan arsitektur target menggunakan konfigurasi Terraform
<a name="provision-the-target-architecture-using-the-terraform-configuration"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Berikan nilai untuk variabel Terraform. | Untuk akun anak, berikan nilai untuk `arn` variabel berikut sebagai tipe string dalam `terraform.tfvars` file:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 
| Inisialisasi konfigurasi Terraform. | Untuk menginisialisasi direktori kerja Anda yang berisi file Terraform, jalankan perintah berikut:`terraform init` | DevOps insinyur | 
| Pratinjau perubahan. | Anda dapat melihat pratinjau perubahan yang akan dilakukan Terraform pada infrastruktur sebelum infrastruktur Anda diterapkan. Untuk memvalidasi bahwa Terraform akan membuat perubahan sesuai kebutuhan, jalankan perintah berikut:`terraform plan —-var-file=examples/terraform.tfvars` | DevOps insinyur | 
| Jalankan tindakan yang diusulkan. | Untuk memverifikasi bahwa hasil dari `terraform plan` perintah seperti yang diharapkan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 

### Verifikasi penyebaran
<a name="verify-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan dan uji fungsi Lambda. | Untuk memverifikasi bahwa penerapan berhasil terjadi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Hasil eksekusi menunjukkan output dari fungsi. | DevOps insinyur | 
| Lihat hasil eksekusi EventBridge aturan dari akun induk. | Untuk melihat hasil EventBridge aturan yang didasarkan pada peristiwa EC2 penghentian Amazon dari akun induk, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Di CloudWatch konsol, halaman **Grup log** menunjukkan hasil fungsi Lambda. | DevOps insinyur | 
| Lihat hasil eksekusi EventBridge aturan dari akun anak. | Untuk melihat hasil EventBridge aturan yang didasarkan pada peristiwa EC2 penghentian Amazon dari akun anak, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad.html)Di CloudWatch konsol, halaman **Grup log** menunjukkan hasil fungsi Lambda. | DevOps insinyur | 

### Membersihkan infrastruktur setelah digunakan
<a name="clean-up-infrastructure-after-use"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan infrastruktur. | Untuk membersihkan infrastruktur yang Anda buat, gunakan perintah berikut:`terraform destroy`Untuk mengkonfirmasi `destroy` perintah, ketik`yes`. | DevOps insinyur | 
| Verifikasi setelah pembersihan. | Verifikasi bahwa sumber daya berhasil dihapus. | DevOps insinyur | 

## Pemecahan masalah
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Masalah koneksi antara AWS Directory Service (akun induk) dan EC2 instans Amazon (akun anak) - Anda tidak dapat bergabung dengan komputer akun anak ke AD meskipun peering VPC tersedia. | Tambahkan perutean di. VPCs Untuk petunjuk, lihat [Mengkonfigurasi koneksi peering VPC antara pemilik direktori dan akun konsumen direktori dalam dokumentasi](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html#step1_configure_owner_account_vpc). AWS Directory Service  | 

## Sumber daya terkait
<a name="remove-amazon-ec2-entries-across-aws-accounts-from-aws-managed-microsoft-ad-resources"></a>

**AWS dokumentasi**
+ [Amazon EventBridge dan AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Konfigurasikan izin instans yang diperlukan untuk Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Identitas dan manajemen akses untuk Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Kebijakan IAM berbasis identitas untuk Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)
+ [Menggabungkan instans Amazon EC2 Windows secara manual ke AWS Managed Microsoft AD Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Hapus EC2 entri Amazon dalam hal yang sama Akun AWS dari AWS Managed Microsoft AD dengan menggunakan AWS Lambda otomatisasi](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)

**Sumber daya lainnya**
+ [AWS Penyedia](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (dokumentasi Terraform)
+ [Konfigurasi Backend (dokumentasi](https://developer.hashicorp.com/terraform/language/backend) Terraform)
+ [Instal Terraform (dokumentasi](https://learn.hashicorp.com/tutorials/terraform/install-cli) Terraform)
+ Modul [boto Python (repositori Indeks](https://pypi.org/project/boto/) Paket Python)
+ [Unduhan biner Terraform (dokumentasi](https://www.terraform.io/downloads) Terraform)

# Hapus EC2 entri Amazon dalam hal yang sama Akun AWS dari AWS Managed Microsoft AD dengan menggunakan AWS Lambda otomatisasi
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad"></a>

*Dr. Rahul Sharad Gaikwad dan Tamilselvan P, Amazon Web Services*

## Ringkasan
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-summary"></a>

Active Directory (AD) adalah alat skrip Microsoft yang mengelola informasi domain dan interaksi pengguna dengan layanan jaringan. Ini banyak digunakan di antara penyedia layanan terkelola (MSPs) untuk mengelola kredensi karyawan dan izin akses. Karena penyerang AD dapat menggunakan akun tidak aktif untuk mencoba dan meretas organisasi, penting untuk menemukan akun yang tidak aktif dan menonaktifkannya pada jadwal pemeliharaan rutin. Dengan AWS Directory Service for Microsoft Active Directory, Anda dapat menjalankan Microsoft Active Directory sebagai layanan terkelola. 

Pola ini dapat membantu Anda mengonfigurasi AWS Lambda otomatisasi untuk menemukan dan menghapus akun yang tidak aktif dengan cepat. Bila Anda menggunakan pola ini, Anda bisa mendapatkan manfaat berikut:
+ Tingkatkan kinerja database dan server, dan perbaiki kerentanan keamanan Anda dari akun yang tidak aktif.
+ Jika server iklan Anda di-host di cloud, menghapus akun yang tidak aktif juga dapat mengurangi biaya penyimpanan sekaligus meningkatkan kinerja. Tagihan bulanan Anda mungkin berkurang karena biaya bandwidth dan sumber daya komputasi keduanya dapat turun.
+ Jauhkan penyerang potensial dengan Active Directory yang bersih.

## Prasyarat dan batasan
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Git [diinstal](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) dan dikonfigurasi pada workstation lokal.
+ Terraform [diinstal](https://learn.hashicorp.com/tutorials/terraform/install-cli) dan dikonfigurasi pada workstation lokal.
+ Komputer Windows dengan modul Active Directory (`ActiveDirectory`).
+ Sebuah direktori di AWS Managed Microsoft AD dan kredensional disimpan dalam [parameter di AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html).
+ AWS Identity and Access Management [*(IAM) peran dengan izin untuk yang Layanan AWS tercantum di Alat.*](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools) Untuk informasi selengkapnya tentang IAM, lihat [Sumber daya terkait](#remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources).

**Batasan**
+ Pola ini tidak mendukung penyiapan lintas akun.
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ [Terraform versi 1.1.9 atau yang lebih baru](https://developer.hashicorp.com/terraform/install)
+ [Terraform AWS Provider versi 3.0 atau lebih tinggi](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade)

## Arsitektur
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![\[Proses untuk menggunakan otomatisasi Lambda untuk menghapus EC2 entri dari Microsoft AD yang Dikelola.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/6b50dcc5-4f4b-4eea-85a7-04cebc9f7454/images/b7fc5962-bfb8-4f5a-968e-7487b1d48c4f.png)


Diagram menunjukkan alur kerja berikut:

1. Amazon EventBridge memicu AWS Lambda fungsi berdasarkan ekspresi cron. (Untuk pola ini, jadwal ekspresi cron adalah sekali per hari.)

1. Peran dan kebijakan IAM yang diperlukan dibuat dan dilampirkan AWS Lambda melalui Terraform.

1.  AWS Lambda Fungsi ini dijalankan dan panggilan ke Grup Auto Scaling Amazon Elastic Compute Cloud (Amazon EC2) dengan menggunakan modul boto Python. Fungsi Lambda mendapatkan id instance acak. Id instance digunakan untuk menjalankan AWS Systems Manager perintah.

1. AWS Lambda membuat panggilan lain ke Amazon EC2 menggunakan modul boto dan mendapatkan alamat IP pribadi dari server Windows yang sedang berjalan dan menyimpan alamat dalam variabel sementara.

1. AWS Lambda membuat panggilan lain ke Systems Manager untuk mendapatkan informasi komputer yang terhubung ke Directory Service.

1.  AWS Systems Manager Dokumen membantu mengeksekusi PowerShell skrip di server Amazon EC2 Windows untuk mendapatkan alamat IP pribadi komputer yang terhubung dengan AD.

1. Nama pengguna dan kata sandi domain AD disimpan di AWS Systems Manager Parameter Store. AWS Lambda dan Systems Manager melakukan panggilan ke Parameter Store dan mendapatkan nilai nama pengguna dan kata sandi yang akan digunakan untuk menghubungkan AD.

1. Menggunakan dokumen Systems Manager, PowerShell skrip dijalankan di server Amazon EC2 Windows menggunakan id instance yang diperoleh sebelumnya di langkah 3.

1. Amazon EC2 terhubung Directory Service dengan menggunakan PowerShell perintah dan menghapus komputer yang tidak digunakan atau tidak aktif.

## Alat
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-tools"></a>

**Layanan AWS**
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)menyediakan beberapa cara untuk menggunakan Microsoft Active Directory (AD) dengan yang lain Layanan AWS seperti Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS) untuk SQL Server, dan FSx Amazon untuk Windows File Server.
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)memungkinkan beban kerja dan sumber daya yang sadar direktori Anda AWS untuk menggunakan Microsoft Active Directory di file. AWS Cloud
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) menyediakan kapasitas komputasi yang dapat diskalakan di. AWS Cloud Anda dapat meluncurkan server virtual sebanyak yang Anda butuhkan dan dengan cepat meningkatkannya ke atas atau ke bawah.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, AWS Lambda fungsi, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya. Dengan IAM, Anda dapat menentukan siapa atau apa yang dapat mengakses layanan dan sumber daya AWS, mengelola izin berbutir halus secara terpusat, dan menganalisis akses untuk menyempurnakan izin. AWS
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)membantu Anda mengelola aplikasi dan infrastruktur yang berjalan di AWS Cloud. Ini menyederhanakan aplikasi dan manajemen sumber daya, mempersingkat waktu untuk mendeteksi dan menyelesaikan masalah operasional, dan membantu Anda mengelola AWS sumber daya Anda dengan aman dalam skala besar.
+ [AWS Systems Manager dokumen](https://docs.aws.amazon.com/systems-manager/latest/userguide/documents.html) menentukan tindakan yang dilakukan Systems Manager pada instans terkelola Anda. Systems Manager mencakup lebih dari 100 dokumen pra-konfigurasi yang dapat Anda gunakan dengan menentukan parameter di runtime.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) adalah kemampuan AWS Systems Manager dan menyediakan penyimpanan hierarkis yang aman untuk manajemen data konfigurasi dan manajemen rahasia.

**Alat-alat lainnya**
+ [HashiCorp Terraform](https://www.terraform.io/docs) adalah alat infrastruktur sumber terbuka sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)adalah program manajemen otomatisasi dan konfigurasi Microsoft yang berjalan di Windows, Linux, dan macOS.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori C** **ode**

Kode untuk pola ini tersedia di repositori [solusi GitHub Custom AD Cleanup Automation](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/). 

## Praktik terbaik
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-best-practices"></a>
+ **Bergabung dengan domain secara otomatis.**Saat Anda meluncurkan instance Windows yang akan menjadi bagian dari Directory Service domain, bergabunglah dengan domain selama proses pembuatan instance alih-alih menambahkan instance secara manual nanti. Untuk bergabung dengan domain secara otomatis, pilih direktori yang benar dari daftar dropdown **direktori Gabung Domain** saat meluncurkan instance baru. Untuk detail selengkapnya, lihat [Menggabungkan instans Amazon EC2 Windows dengan mulus ke Direktori AWS Managed Microsoft AD Aktif Anda](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html) di *Panduan Directory Service Administrasi*.
+ **Hapus akun yang tidak digunakan.**Adalah umum untuk menemukan akun di AD yang belum pernah digunakan. Seperti akun yang dinonaktifkan atau tidak aktif yang tetap berada di sistem, akun yang tidak digunakan yang diabaikan dapat memperlambat sistem iklan Anda atau membuat organisasi Anda rentan terhadap pelanggaran data.
+ **Otomatiskan pembersihan Direktori Aktif.**Untuk membantu mengurangi risiko keamanan dan mencegah akun usang memengaruhi kinerja AD, lakukan pembersihan AD harus dilakukan secara berkala. Anda dapat menyelesaikan sebagian besar tugas manajemen dan pembersihan AD dengan menulis skrip. Contoh tugas termasuk menghapus akun yang dinonaktifkan dan tidak aktif, menghapus grup kosong dan tidak aktif, dan menemukan akun pengguna dan kata sandi yang kedaluwarsa. 

## Epik
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-epics"></a>

### Siapkan lingkungan Anda
<a name="set-up-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat folder proyek, dan tambahkan file. | Untuk mengkloning repositori dan membuat folder proyek, lakukan hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 

### Menyediakan arsitektur target dengan menggunakan konfigurasi Terraform
<a name="provision-the-target-architecture-by-using-the-terraform-configuration"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Inisialisasi konfigurasi Terraform. | Untuk menginisialisasi direktori kerja Anda yang berisi file Terraform, jalankan perintah berikut.`terraform init` | DevOps insinyur | 
| Pratinjau perubahan. | Anda dapat melihat pratinjau perubahan yang akan dilakukan Terraform pada infrastruktur sebelum infrastruktur Anda diterapkan. Untuk memvalidasi bahwa Terraform akan membuat perubahan sesuai kebutuhan, jalankan perintah berikut.`terraform plan` | DevOps insinyur | 
| Jalankan tindakan yang diusulkan. | Untuk memverifikasi bahwa hasil dari `terraform plan` perintah seperti yang diharapkan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html) | DevOps insinyur | 
| Bersihkan infrastruktur. | Untuk membersihkan infrastruktur yang Anda buat, gunakan perintah berikut.`terraform destroy`Untuk mengonfirmasi perintah hancurkan, ketik`yes`. | DevOps insinyur | 

### Verifikasi penyebaran
<a name="verify-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan dan uji fungsi Lambda. | Untuk memverifikasi bahwa penerapan berhasil terjadi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Hasil eksekusi menunjukkan output dari fungsi. | DevOps insinyur | 
| Lihat hasil fungsi Lambda. | Dalam pola ini, EventBridge aturan mengeksekusi fungsi Lambda sekali per hari. Untuk melihat hasil fungsi Lambda, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad.html)Di CloudWatch konsol, halaman **Grup log** menunjukkan hasil fungsi Lambda. | DevOps insinyur | 

### Membersihkan infrastruktur setelah digunakan
<a name="clean-up-infrastructure-after-use"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan infrastruktur. | Untuk membersihkan infrastruktur yang Anda buat, gunakan perintah berikut.`terraform destroy`Untuk mengonfirmasi perintah hancurkan, ketik`yes`. | DevOps insinyur | 
| Verifikasi setelah pembersihan. | Verifikasi bahwa sumber daya berhasil dihapus. | DevOps insinyur | 

## Pemecahan masalah
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Jika Anda mencoba menghapus komputer AD, Anda mendapatkan pesan “Akses Ditolak”. Komputer AD tidak dapat dihapus karena, secara default, tindakan mencoba menghapus dua alamat IP pribadi yang terhubung sebagai bagian dari layanan AD. | Untuk menghindari kesalahan ini, gunakan operasi Python berikut untuk mengabaikan dua komputer pertama ketika Anda mencantumkan perbedaan antara output komputer AD dan output dari mesin Anda yang menjalankan Windows.<pre>Difference = Difference[2:]</pre> | 
| Ketika Lambda mengeksekusi PowerShell skrip pada server Windows, ia mengharapkan modul Active Directory tersedia secara default. Jika modul tidak tersedia, fungsi Lambda membuat kesalahan yang menyatakan “Get- AdComputer is not installed on instance”. | Untuk menghindari kesalahan ini, instal modul yang diperlukan dengan menggunakan data pengguna EC2 instance. Gunakan [EC2WindowsUserdata](https://github.com/aws-samples/aws-lambda-ad-cleanup-terraform-samples/blob/main/EC2WindowsUserdata)skrip yang ada di GitHub repositori pola ini. | 

## Sumber daya terkait
<a name="remove-amazon-ec2-entries-in-the-same-aws-account-from-aws-managed-microsoft-ad-resources"></a>

**AWS dokumentasi**
+ [Amazon EventBridge dan AWS Identity and Access Management](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-iam.html)
+ [Konfigurasikan izin instans yang diperlukan untuk Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html)
+ [Identitas dan manajemen akses untuk Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/iam_auth_access.html)
+ [Menggabungkan instans Amazon EC2 Windows secara manual ke Direktori AWS Managed Microsoft AD Aktif Anda](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)
+ [Bekerja dengan kebijakan IAM berbasis identitas di AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html)

**Sumber daya lainnya**
+ [AWS Penyedia](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (dokumentasi Terraform)
+ [Konfigurasi Backend (dokumentasi](https://developer.hashicorp.com/terraform/language/backend) Terraform)
+ [Instal Terraform (dokumentasi](https://learn.hashicorp.com/tutorials/terraform/install-cli) Terraform)
+ Modul [boto Python (repositori Indeks](https://pypi.org/project/boto/) Paket Python)
+ [Unduhan biner Terraform (dokumentasi](https://www.terraform.io/downloads) Terraform)

# Jalankan pengujian unit untuk pekerjaan ETL Python dalam AWS Glue menggunakan kerangka pytest
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan dan Vaidy Sankaran, Amazon Web Services*

## Ringkasan
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Anda dapat menjalankan pengujian unit untuk pekerjaan ekstrak, transformasi, dan muat Python (ETL) AWS Glue di [lingkungan pengembangan lokal](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), tetapi mereplikasi pengujian tersebut dalam DevOps pipeline bisa jadi sulit dan memakan waktu. Pengujian unit bisa sangat menantang ketika Anda memodernisasi proses ETL mainframe pada tumpukan teknologi. AWS Pola ini menunjukkan kepada Anda cara menyederhanakan pengujian unit, sambil menjaga fungsionalitas yang ada tetap utuh, menghindari gangguan pada fungsionalitas aplikasi utama saat Anda merilis fitur baru, dan memelihara perangkat lunak berkualitas tinggi. Anda dapat menggunakan langkah-langkah dan contoh kode dalam pola ini untuk menjalankan pengujian unit untuk pekerjaan ETL Python AWS Glue dengan menggunakan kerangka pytest di. AWS CodePipeline Anda juga dapat menggunakan pola ini untuk menguji dan menyebarkan beberapa AWS Glue pekerjaan.

## Prasyarat dan batasan
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ URI gambar Amazon Elastic Container Registry (Amazon ECR) Registry ECR) untuk perpustakaan AWS Glue Anda, diunduh dari Galeri Publik [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ Terminal Bash (pada sistem operasi apa pun) dengan profil untuk target Akun AWS dan Wilayah AWS
+ [Python 3.10](https://www.python.org/downloads/) atau yang lebih baru
+ [Pytest](https://github.com/pytest-dev/pytest)
+ Pustaka [Moto](https://github.com/getmoto/moto) Python untuk pengujian Layanan AWS

## Arsitektur
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

Diagram berikut menjelaskan cara menggabungkan pengujian unit untuk proses AWS Glue ETL yang didasarkan pada Python ke dalam pipa skala perusahaan yang khas AWS DevOps .

![\[Pengujian unit untuk proses AWS Glue ETL.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


Diagram menunjukkan alur kerja berikut:

1. Pada tahap sumber, AWS CodePipeline gunakan bucket Amazon Simple Storage Service (Amazon S3) berversi versi untuk menyimpan dan mengelola aset kode sumber. Aset ini termasuk contoh Python ETL job (`sample.py`), unit test file (`test_sample.py`), dan template. AWS CloudFormation Kemudian, CodePipeline transfer kode terbaru dari cabang utama ke AWS CodeBuild proyek untuk diproses lebih lanjut.

1. Pada tahap build dan publish, kode terbaru dari tahap sumber sebelumnya diuji unit dengan bantuan gambar ECR Amazon AWS Glue publik. Kemudian, laporan pengujian dipublikasikan untuk CodeBuild melaporkan kelompok. Gambar kontainer di repositori ECR Amazon publik untuk AWS Glue pustaka mencakup semua binari yang diperlukan untuk menjalankan dan tugas ETL [PySparkberbasis](https://spark.apache.org/docs/latest/api/python/) pengujian unit secara lokal. AWS Glue Repositori kontainer publik memiliki tiga tag gambar, satu untuk setiap versi yang didukung oleh. AWS Glue Untuk tujuan demonstrasi, pola ini menggunakan tag `glue_libs_4.0.0_image_01` gambar. Untuk menggunakan gambar kontainer ini sebagai gambar runtime CodeBuild, salin URI gambar yang sesuai dengan tag gambar yang ingin Anda gunakan, lalu perbarui `pipeline.yml` file di GitHub repositori untuk sumber daya. `TestBuild`

1. Pada tahap penerapan, CodeBuild proyek diluncurkan dan menerbitkan kode ke bucket Amazon S3 jika semua tes lulus.

1. Pengguna menyebarkan AWS Glue tugas dengan menggunakan CloudFormation template di `deploy` folder.

## Alat
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Layanan AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)adalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)adalah layanan ETL yang dikelola sepenuhnya. Ini membantu Anda mengkategorikan, membersihkan, memperkaya, dan memindahkan data dengan andal antara penyimpanan data dan aliran data.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja terdepan di industri.

**Alat lainnya**
+ [Python adalah bahasa](https://www.python.org/) pemrograman tujuan umum tingkat tinggi yang ditafsirkan.
+ [Moto](https://github.com/getmoto/moto) adalah perpustakaan Python untuk pengujian. Layanan AWS
+ [Pytest](https://github.com/pytest-dev/pytest) adalah kerangka kerja untuk menulis tes unit kecil yang skala untuk mendukung pengujian fungsional yang kompleks untuk aplikasi dan pustaka.
+ [Python ETL library](https://github.com/awslabs/aws-glue-libs) untuk AWS Glue adalah repositori untuk pustaka Python yang digunakan dalam pengembangan lokal pekerjaan batch untuk. PySpark AWS Glue

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [aws-glue-jobs-unit-testing](https://github.com/aws-samples/aws-glue-jobs-unit-testing). Repositori mencakup sumber daya berikut:
+ Contoh AWS Glue pekerjaan berbasis Python di folder `src`
+ Kasus uji unit terkait (dibuat menggunakan kerangka pytest) di folder `tests`
+  CloudFormation Template (ditulis dalam YAMAL) di folder `deploy`

## Praktik terbaik
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**Keamanan untuk CodePipeline sumber daya**

Ini adalah praktik terbaik untuk menggunakan enkripsi dan otentikasi untuk repositori sumber yang terhubung ke saluran pipa Anda. CodePipeline Untuk informasi selengkapnya, lihat [Praktik terbaik keamanan](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) dalam CodePipeline dokumentasi.

**Pemantauan dan pencatatan CodePipeline sumber daya**

Ini adalah praktik terbaik untuk menggunakan fitur AWS logging untuk menentukan tindakan apa yang diambil pengguna di akun Anda dan sumber daya apa yang mereka gunakan. File log menunjukkan hal berikut:
+ Waktu dan tanggal tindakan
+ Alamat IP sumber tindakan
+ Tindakan mana yang gagal karena izin yang tidak memadai

Fitur logging tersedia di AWS CloudTrail dan Amazon CloudWatch Events. Anda dapat menggunakan CloudTrail untuk mencatat panggilan AWS API dan peristiwa terkait yang dibuat oleh atau atas nama Anda Akun AWS. Untuk informasi selengkapnya, lihat [Logging panggilan CodePipeline API dengan AWS CloudTrail](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) CodePipeline dokumentasi.

Anda dapat menggunakan CloudWatch Acara untuk memantau AWS Cloud sumber daya dan aplikasi yang sedang berjalan AWS. Anda juga dapat membuat peringatan di CloudWatch Acara. Untuk informasi selengkapnya, lihat [Memantau CodePipeline peristiwa](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) dalam CodePipeline dokumentasi.

## Epik
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Menyebarkan kode sumber
<a name="deploy-the-source-code"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan arsip kode untuk penyebaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps insinyur | 
| Buat CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)Tumpukan membuat CodePipeline tampilan menggunakan Amazon S3 sebagai sumbernya. Pada langkah-langkah di atas, pipa adalah **aws-glue-unit-test-pipeline**. | AWS DevOps, DevOps insinyur | 

### Jalankan pengujian unit
<a name="run-the-unit-tests"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan pengujian unit di dalam pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps insinyur | 

### Bersihkan semua AWS sumber daya
<a name="clean-up-all-aws-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan sumber daya di lingkungan Anda. | Untuk menghindari biaya infrastruktur tambahan, pastikan Anda menghapus tumpukan setelah bereksperimen dengan contoh yang disediakan dalam pola ini.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps insinyur | 

## Pemecahan masalah
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Peran CodePipeline layanan tidak dapat mengakses bucket Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| CodePipeline mengembalikan kesalahan bahwa bucket Amazon S3 tidak berversi. | CodePipeline mengharuskan bucket Amazon S3 sumber diberi versi. Aktifkan pembuatan versi di bucket Amazon S3 Anda. Untuk petunjuk, lihat [Mengaktifkan pembuatan versi pada bucket.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html) | 

## Sumber daya terkait
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Mengembangkan dan menguji AWS Glue pekerjaan secara lokal](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation untuk AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Informasi tambahan
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

Selain itu, Anda dapat menerapkan AWS CloudFormation template dengan menggunakan AWS Command Line Interface (AWS CLI). Untuk informasi selengkapnya, lihat [Menerapkan templat dengan cepat dengan transformasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) dalam dokumentasi. CloudFormation 

# 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)

# Siapkan logging terpusat pada skala perusahaan dengan menggunakan Terraform
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform"></a>

*Aarti Rajput, Yashwant Patel, dan Nishtha Yadav, Amazon Web Services*

## Ringkasan
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-summary"></a>

Pencatatan terpusat sangat penting untuk infrastruktur cloud organisasi, karena memberikan visibilitas ke dalam operasi, keamanan, dan kepatuhannya. Saat organisasi Anda menskalakan AWS lingkungannya di beberapa akun, strategi manajemen log terstruktur menjadi dasar untuk menjalankan operasi keamanan, memenuhi persyaratan audit, dan mencapai keunggulan operasional.

Pola ini menyediakan kerangka kerja yang dapat diskalakan dan aman untuk memusatkan log dari beberapa Akun AWS dan layanan, untuk memungkinkan manajemen logging skala perusahaan di seluruh penerapan yang kompleks. AWS Solusinya otomatis dengan menggunakan Terraform, yang merupakan alat infrastruktur sebagai kode (IAc) HashiCorp yang memastikan penerapan yang konsisten dan berulang, serta meminimalkan konfigurasi manual. Dengan menggabungkan Amazon CloudWatch Logs, Amazon Data Firehose, dan Amazon Simple Storage Service (Amazon S3), Anda dapat menerapkan alur agregasi dan analisis log yang kuat yang memberikan:
+ Manajemen log terpusat di seluruh organisasi Anda di AWS Organizations
+ Pengumpulan log otomatis dengan kontrol keamanan bawaan
+ Pemrosesan log yang dapat diskalakan dan penyimpanan yang tahan lama
+ Pelaporan kepatuhan dan jejak audit yang disederhanakan
+ Wawasan dan pemantauan operasional waktu nyata

Solusi ini mengumpulkan log dari wadah, fungsi, dan instans database Amazon Elastic Kubernetes Service (Amazon EKS AWS Lambda ), dan instans database Amazon Relational Database Service (Amazon RDS) melalui Log. CloudWatch Secara otomatis meneruskan log ini ke akun logging khusus dengan menggunakan filter CloudWatch berlangganan. Firehose mengelola pipeline streaming log throughput tinggi ke Amazon S3 untuk penyimpanan jangka panjang. Amazon Simple Queue Service (Amazon Simple Service) dikonfigurasi untuk menerima pemberitahuan peristiwa Amazon S3 setelah pembuatan objek. Ini memungkinkan integrasi dengan layanan analitik, termasuk:
+  OpenSearch Layanan Amazon untuk penelusuran log, visualisasi, dan analitik waktu nyata
+ Amazon Athena untuk kueri berbasis SQL
+ Amazon EMR untuk pemrosesan skala besar
+ Lambda untuk transformasi kustom
+ Amazon Quick Sight untuk dasbor

Semua data dienkripsi dengan menggunakan AWS Key Management Service (AWS KMS), dan seluruh infrastruktur diterapkan dengan menggunakan Terraform untuk konfigurasi yang konsisten di seluruh lingkungan.

Pendekatan logging terpusat ini memungkinkan organisasi untuk meningkatkan postur keamanan mereka, mempertahankan persyaratan kepatuhan, dan mengoptimalkan efisiensi operasional di seluruh AWS infrastruktur mereka.

## Prasyarat dan batasan
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-prereqs"></a>

**Prasyarat**
+ Sebuah landing zone untuk organisasi Anda yang dibangun dengan menggunakan [AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html)
+ [Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html), digunakan dan dikonfigurasi dengan akun yang diperlukan
+ [Terraform](https://developer.hashicorp.com/terraform/downloads) untuk penyediaan infrastruktur
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) peran dan kebijakan untuk akses lintas akun

Untuk petunjuk pengaturan AWS Control Tower, AFT, dan akun Aplikasi, lihat [bagian Epik](#set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics).

**Akun yang diperlukan**

Organisasi Anda AWS Organizations harus menyertakan akun-akun ini:
+ **Akun aplikasi** - Satu atau beberapa akun sumber tempat Layanan AWS (Amazon EKS, Lambda, dan Amazon RDS) menjalankan dan menghasilkan log
+ **Akun Arsip Log** - Akun khusus untuk penyimpanan dan manajemen log terpusat

**Versi produk**
+ [AWS Control Tower versi 3.1](https://docs.aws.amazon.com/controltower/latest/userguide/2023-all.html#lz-3-1) atau yang lebih baru
+ [Terraform versi 0.15.0](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) atau yang lebih baru

## Arsitektur
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-architecture"></a>

Diagram berikut menggambarkan arsitektur logging AWS terpusat yang menyediakan solusi terukur untuk mengumpulkan, memproses, dan menyimpan log dari beberapa akun Aplikasi ke akun Arsip Log khusus. Arsitektur ini secara efisien menangani log dari Layanan AWS, termasuk Amazon RDS, Amazon EKS, dan Lambda, dan merutekkannya melalui proses yang disederhanakan ke bucket Regional S3 di akun Arsip Log.

![\[Arsitektur logging terpusat AWS untuk mengumpulkan log dari beberapa akun Aplikasi.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/9fc71a10-65d6-437b-9128-cc27bda11af4/images/2e916040-0f11-4712-a8dd-31c95194ce5d.png)


Alur kerja mencakup lima proses:

1. **Proses aliran log**
   + Proses alur log dimulai di akun Aplikasi, di mana Layanan AWS menghasilkan berbagai jenis log, seperti umum, kesalahan, audit, log kueri lambat dari Amazon RDS, log bidang kontrol dari Amazon EKS, dan eksekusi fungsi dan log kesalahan dari Lambda.
   + CloudWatch berfungsi sebagai titik pengumpulan awal. Ini mengumpulkan log ini di tingkat grup log dalam setiap akun aplikasi.
   + Di CloudWatch, [filter langganan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions.html) menentukan log mana yang harus diteruskan ke akun pusat. Filter ini memberi Anda kontrol granular atas penerusan log, sehingga Anda dapat menentukan pola log yang tepat atau aliran log lengkap untuk sentralisasi.

1. **Transfer log lintas akun**
   + Log pindah ke akun Arsip Log. CloudWatch filter berlangganan memfasilitasi transfer lintas akun dan mempertahankan konteks Regional.
   + Arsitektur menetapkan beberapa aliran paralel untuk menangani sumber log yang berbeda secara efisien, untuk memastikan kinerja dan skalabilitas yang optimal.

1. **Pemrosesan log di akun Arsip Log**
   + Di akun Arsip Log, Firehose memproses aliran log yang masuk.
   + Setiap Wilayah mengelola aliran pengiriman Firehose khusus yang dapat mengubah, mengonversi, atau memperkaya log sesuai kebutuhan.
   + Aliran Firehose ini mengirimkan log yang diproses ke bucket S3 di akun Arsip Log, yang terletak di Wilayah yang sama dengan akun Aplikasi sumber (Wilayah A dalam diagram) untuk mempertahankan persyaratan kedaulatan data.

1. **Pemberitahuan dan alur kerja tambahan**
   + Saat log mencapai bucket S3 tujuan, arsitektur mengimplementasikan sistem notifikasi dengan menggunakan Amazon SQS.
   + Antrian SQS Regional memungkinkan pemrosesan asinkron dan dapat memicu alur kerja tambahan, analitik, atau sistem peringatan berdasarkan log yang disimpan.

1. **AWS KMS untuk keamanan**

   Arsitektur menggabungkan AWS KMS untuk keamanan. AWS KMS menyediakan kunci enkripsi untuk bucket S3. Ini memastikan bahwa semua log yang disimpan mempertahankan enkripsi saat istirahat sambil menjaga enkripsi Regional untuk memenuhi persyaratan residensi data.

## Alat
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-tools"></a>

**Layanan AWS**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) adalah layanan pemantauan dan observabilitas yang mengumpulkan data pemantauan dan operasional dalam bentuk log, metrik, dan peristiwa. Ini memberikan tampilan terpadu AWS sumber daya, aplikasi, dan layanan yang berjalan di AWS dan server lokal.
+ [CloudWatch Filter langganan log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SubscriptionFilters.html) adalah ekspresi yang cocok dengan pola dalam peristiwa log masuk dan mengirimkan peristiwa log yang cocok ke AWS sumber daya yang ditentukan untuk diproses atau dianalisis lebih lanjut.
+ [AWS Control Tower Account Factory For Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) menyiapkan pipeline Terraform untuk membantu Anda menyediakan dan menyesuaikan akun. AWS Control Tower AFT menyediakan penyediaan akun berbasis Terraform sambil memungkinkan Anda untuk mengatur akun Anda. AWS Control Tower
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) memberikan data streaming real-time ke tujuan seperti Amazon S3, Amazon Redshift, dan Amazon Service. OpenSearch Ini secara otomatis menskalakan agar sesuai dengan throughput data Anda dan tidak memerlukan administrasi yang berkelanjutan.
+ [Amazon Elastic Kubernetes Service (Amazon EKS) adalah layanan orkestrasi kontainer terkelola yang memudahkan penerapan, pengelolaan, dan skala aplikasi kontainer dengan menggunakan Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html). Secara otomatis mengelola ketersediaan dan skalabilitas node bidang kontrol Kubernetes.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) membuat dan mengontrol kunci enkripsi untuk mengenkripsi data Anda. AWS KMS terintegrasi dengan yang lain Layanan AWS untuk membantu Anda melindungi data yang Anda simpan dengan layanan ini.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi tanpa server yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Ini secara otomatis menskalakan aplikasi Anda dengan menjalankan kode sebagai respons terhadap setiap pemicu, dan hanya mengenakan biaya untuk waktu komputasi yang Anda gunakan.
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)) adalah layanan database relasional terkelola yang memudahkan pengaturan, pengoperasian, dan skala database relasional di cloud. Ini memberikan kapasitas hemat biaya dan dapat diubah ukurannya sambil mengotomatiskan tugas administrasi yang memakan waktu.
+ [Amazon Simple Queue Service (Amazon SQS) adalah layanan](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) antrian pesan yang memungkinkan Anda memisahkan dan menskalakan layanan mikro, sistem terdistribusi, dan aplikasi tanpa server. Ini menghilangkan kompleksitas mengelola dan mengoperasikan middleware berorientasi pesan.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja. Ini dapat menyimpan dan mengambil sejumlah data dari mana saja di web.

**Alat-alat lainnya**
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Kode**

Kode untuk pola ini tersedia di repositori [logging GitHub terpusat](https://github.com/aws-samples/sample-centralised-logging-at-enterprise-scale-using-terraform).

## Praktik terbaik
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-best-practices"></a>
+ Gunakan [beberapa Akun AWS dalam satu organisasi di AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts.html). Praktik ini memungkinkan manajemen terpusat dan pencatatan standar di seluruh akun.
+ Konfigurasikan [bucket S3 dengan pembuatan versi, kebijakan siklus hidup, dan replikasi lintas wilayah](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html). Menerapkan enkripsi dan log akses untuk keamanan dan kepatuhan.
+ Menerapkan [standar logging umum dengan menggunakan format JSON](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html) dengan stempel waktu dan bidang standar. Gunakan struktur awalan dan korelasi yang konsisten IDs untuk memudahkan pelacakan dan analisis.
+ Aktifkan [kontrol keamanan dengan AWS KMS enkripsi](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html) dan akses hak istimewa paling sedikit. Pertahankan AWS CloudTrail pemantauan dan rotasi kunci reguler untuk keamanan yang ditingkatkan.
+ Siapkan [CloudWatch metrik dan peringatan untuk pelacakan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) pengiriman. Pantau biaya dan kinerja dengan notifikasi otomatis.
+ Konfigurasikan [kebijakan retensi Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) untuk memenuhi persyaratan kepatuhan dan aktifkan pencatatan akses server Amazon S3 untuk melacak semua permintaan yang dibuat ke bucket S3 Anda. Menjaga dokumentasi untuk kebijakan bucket S3 dan aturan siklus hidup. Melakukan tinjauan berkala terhadap log akses, izin bucket, dan konfigurasi penyimpanan untuk membantu memastikan kepatuhan dan praktik [terbaik keamanan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html).

## Epik
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-epics"></a>

### Mengatur AWS Control Tower, AFT, dan akun Aplikasi
<a name="set-up-ctowerlong-aft-and-application-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan AWS Control Tower lingkungan dengan AFT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrator AWS | 
| Aktifkan berbagi sumber daya untuk organisasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | Administrator AWS | 
| Verifikasi atau berikan akun Aplikasi. | Untuk menyediakan akun Aplikasi baru untuk kasus penggunaan Anda, buat melalui AFT. Untuk informasi selengkapnya, lihat [Menyediakan akun baru dengan AFT](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html) dalam AWS Control Tower dokumentasi. | Administrator AWS | 

### Mengatur file konfigurasi untuk akun Aplikasi
<a name="set-up-configuration-files-for-application-accounts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin isi `Application_account` folder ke dalam `aft-account-customizations` repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 
| Tinjau dan edit parameter input untuk menyiapkan akun Aplikasi. | Pada langkah ini, Anda menyiapkan file konfigurasi untuk membuat sumber daya di akun Aplikasi, termasuk grup CloudWatch log, filter CloudWatch langganan, peran dan kebijakan IAM, serta detail konfigurasi untuk fungsi Amazon RDS, Amazon EKS, dan Lambda.Di `aft-account-customizations` repositori Anda, di `Application_account` folder, konfigurasikan parameter input dalam `terraform.tfvars` file berdasarkan persyaratan organisasi Anda:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 

### Mengatur file konfigurasi untuk akun Arsip Log
<a name="set-up-configuration-files-for-the-log-archive-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin isi `Log_archive_account` folder ke dalam `aft-account-customizations` repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 
| Tinjau dan edit parameter input untuk menyiapkan akun Arsip Log. | Pada langkah ini, Anda menyiapkan file konfigurasi untuk membuat resource di akun Arsip Log, termasuk aliran pengiriman Firehose, bucket S3, antrian SQS, serta peran dan kebijakan IAM.Di `Log_archive_account` folder `aft-account-customizations` repositori Anda, konfigurasikan parameter input dalam `terraform.tfvars` file berdasarkan persyaratan organisasi Anda:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 

### Jalankan perintah Terraform untuk menyediakan sumber daya
<a name="run-terraform-commands-to-provision-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Opsi 1 - Menyebarkan file konfigurasi Terraform dari AFT. | Di AFT, pipeline AFT dipicu setelah Anda mendorong kode dengan perubahan konfigurasi ke GitHub `aft-account-customizations` repositori. AFT secara otomatis mendeteksi perubahan dan memulai proses kustomisasi akun.Setelah Anda membuat perubahan pada file Terraform (`terraform.tfvars`) Anda, komit dan dorong perubahan Anda ke repositori Anda`aft-account-customizations`:<pre>$ git add *<br />$ git commit -m "update message"<br />$ git push origin main</pre>Jika Anda menggunakan cabang yang berbeda (seperti`dev`), ganti `main` dengan nama cabang Anda. | DevOps insinyur | 
| Opsi 2 - Menyebarkan file konfigurasi Terraform secara manual. | Jika Anda tidak menggunakan AFT atau ingin menerapkan solusi secara manual, Anda dapat menggunakan perintah Terraform berikut dari folder dan`Application_account`: `Log_archive_account`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 

### Validasi sumber daya
<a name="validate-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi filter langganan. | Untuk memverifikasi bahwa langganan memfilter meneruskan log dengan benar dari grup log akun Aplikasi ke akun Arsip Log:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 
| Verifikasi aliran Firehose. | Untuk memverifikasi bahwa Firehose melakukan streaming di log aplikasi proses akun Arsip Log berhasil:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 
| Validasi bucket S3 terpusat. | Untuk memverifikasi bahwa bucket S3 terpusat menerima dan mengatur log dengan benar:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 
| Validasi antrian SQS. | Untuk memverifikasi bahwa antrian SQS menerima pemberitahuan untuk file log baru:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Opsi 1 - Nonaktifkan file konfigurasi Terraform dari AFT. | Saat Anda menghapus file konfigurasi Terraform dan mendorong perubahan, AFT secara otomatis memulai proses penghapusan sumber daya.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 
| Opsi 2 — Bersihkan sumber daya Terraform secara manual. | Jika Anda tidak menggunakan AFT atau Anda ingin membersihkan sumber daya secara manual, gunakan perintah Terraform berikut dari folder `Application_account` dan`Log_archive_account`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Tujuan CloudWatch Log tidak dibuat atau tidak aktif. | Validasi berikut ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Filter langganan gagal atau macet dalam status tertunda. | Periksa hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 
| Aliran pengiriman Firehose tidak menunjukkan catatan yang masuk. | Verifikasi hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-centralized-logging-at-enterprise-scale-by-using-terraform.html) | 

## Sumber daya terkait
<a name="set-up-centralized-logging-at-enterprise-scale-by-using-terraform-resources"></a>
+ [Pengaturan infrastruktur Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) (dokumentasi Terraform)
+ [Menyebarkan AWS Control Tower Account Factory untuk Terraform (AFT) (dokumentasi)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)AWS Control Tower 
+ [Tutorial IAM: Delegasikan akses di seluruh Akun AWS menggunakan peran IAM ()](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) IAMdocumentation

# Siapkan end-to-end enkripsi untuk aplikasi di Amazon EKS menggunakan cert-manager dan Let's Encrypt
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Revanasiddappa dan Vasanth Jeyaraj, Amazon Web Services*

## Ringkasan
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

Menerapkan end-to-end enkripsi dapat menjadi rumit dan Anda perlu mengelola sertifikat untuk setiap aset dalam arsitektur layanan mikro Anda. Meskipun Anda dapat menghentikan koneksi Transport Layer Security (TLS) di tepi jaringan Amazon Web Services (AWS) dengan Network Load Balancer atau Amazon API Gateway, beberapa organisasi memerlukan enkripsi. end-to-end

Pola ini menggunakan NGINX Ingress Controller untuk masuk. Ini karena ketika Anda membuat ingress Kubernetes, resource ingress menggunakan Network Load Balancer. Network Load Balancer tidak mengizinkan pengunggahan sertifikat klien. Oleh karena itu, Anda tidak dapat mencapai TLS timbal balik dengan masuknya Kubernetes.

Pola ini ditujukan untuk organisasi yang membutuhkan otentikasi timbal balik antara semua layanan mikro dalam aplikasi mereka. Mutual TLS mengurangi beban mempertahankan nama pengguna atau kata sandi dan juga dapat menggunakan kerangka keamanan turnkey. Pendekatan pola ini kompatibel jika organisasi Anda memiliki sejumlah besar perangkat yang terhubung atau harus mematuhi pedoman keamanan yang ketat.

Pola ini membantu meningkatkan postur keamanan organisasi Anda dengan menerapkan end-to-end enkripsi untuk aplikasi yang berjalan di Amazon Elastic Kubernetes Service (Amazon EKS). Pola ini menyediakan contoh aplikasi dan kode dalam GitHub [End-to-end enkripsi di repositori Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) untuk menunjukkan bagaimana layanan mikro berjalan dengan enkripsi end-to-end di Amazon EKS. Pendekatan pola menggunakan [cert-manager](https://cert-manager.io/docs/), sebuah add-on untuk Kubernetes, dengan [Let's Encrypt sebagai certificate](https://letsencrypt.org/) authority (CA). Let's Encrypt adalah solusi hemat biaya untuk mengelola sertifikat dan menyediakan sertifikat gratis yang berlaku selama 90 hari. Cert-manager mengotomatiskan penyediaan sesuai permintaan dan pemutaran sertifikat saat layanan mikro baru diterapkan di Amazon EKS. 

**Audiens yang dituju**

Pola ini direkomendasikan untuk pengguna yang memiliki pengalaman dengan Kubernetes, TLS, Amazon Route 53, dan Domain Name System (DNS).

## Prasyarat dan batasan
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ Sebuah klaster Amazon EKS yang sudah ada.
+ AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows.
+ Utilitas baris `kubectl` perintah, diinstal dan dikonfigurasi untuk mengakses cluster Amazon EKS. Untuk informasi selengkapnya tentang ini, lihat [Menginstal kubectl di dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS.
+ Nama DNS yang ada untuk menguji aplikasi. Untuk informasi selengkapnya tentang hal ini, lihat [Mendaftarkan nama domain menggunakan Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) dalam dokumentasi Amazon Route 53. 
+ Versi [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) terbaru, diinstal pada mesin lokal Anda. Untuk informasi selengkapnya tentang ini, lihat [Menggunakan Helm dengan Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) di dokumentasi Amazon EKS dan repositori GitHub [Helm](https://github.com/helm/helm). 
+  GitHub [End-to-end Enkripsi di repositori Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), dikloning ke mesin lokal Anda. 
+ Ganti nilai berikut di `trustpolicy.json` file `policy.json` dan dari GitHub [End-to-end enkripsi kloning di repositori Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme):
  + `<account number>`— Ganti dengan ID akun AWS untuk akun tempat Anda ingin menerapkan solusinya. 
  + `<zone id>`— Ganti dengan ID zona Route 53 nama domain. 
  + `<node_group_role>`— Ganti dengan nama peran AWS Identity and Access Management (IAM) yang terkait dengan node Amazon EKS.
  + `<namespace>`— Ganti dengan namespace Kubernetes di mana Anda menggunakan NGINX Ingress Controller dan aplikasi sampel.
  + `<application-domain-name>`— Ganti dengan nama domain DNS dari Route 53.

**Batasan**
+ Pola ini tidak menjelaskan cara memutar sertifikat dan hanya menunjukkan cara menggunakan sertifikat dengan layanan mikro di Amazon EKS. 

## Arsitektur
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

![\[Alur kerja untuk mengatur enkripsi untuk aplikasi di Amazon EKS menggunakan cert-manager dan Let's Encrypt.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


Diagram menunjukkan alur kerja berikut:

1. Klien mengirimkan permintaan untuk mengakses aplikasi ke nama DNS.

1. Catatan Route 53 adalah CNAME ke Network Load Balancer.

1. Network Load Balancer meneruskan permintaan ke NGINX Ingress Controller yang dikonfigurasi dengan pendengar TLS. Komunikasi antara NGINX Ingress Controller dan Network Load Balancer mengikuti protokol HTTPS.

1. NGINX Ingress Controller melakukan routing berbasis jalur berdasarkan permintaan klien ke layanan aplikasi.

1. Layanan aplikasi meneruskan permintaan ke pod aplikasi. Aplikasi ini dirancang untuk menggunakan sertifikat yang sama dengan memanggil rahasia.

1. Pod menjalankan aplikasi sampel menggunakan sertifikat cert-manager. Komunikasi antara NGINX Ingress Controller dan pod menggunakan HTTPS.


| 
| 
| Catatan: Cert-manager berjalan di namespace sendiri. Ini menggunakan peran klaster Kubernetes untuk menyediakan sertifikat sebagai rahasia di ruang nama tertentu. Anda dapat melampirkan namespace tersebut ke pod aplikasi dan NGINX Ingress Controller.  | 
| --- |

## Alat
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Layanan AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS) adalah layanan terkelola yang dapat Anda gunakan untuk menjalankan Kubernetes di AWS tanpa perlu menginstal, mengoperasikan, dan memelihara control plane atau node Kubernetes Anda sendiri.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) secara otomatis mendistribusikan lalu lintas masuk Anda ke beberapa target, kontainer, dan alamat IP.
+ [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.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.

**Alat-alat lainnya**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) adalah add-on untuk Kubernetes yang meminta sertifikat, mendistribusikannya ke kontainer Kubernetes, dan mengotomatiskan perpanjangan sertifikat.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) adalah solusi manajemen lalu lintas untuk aplikasi cloud-native di Kubernetes dan lingkungan kontainer.

## Epik
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Buat dan konfigurasikan zona yang dihosting publik dengan Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat zona yang dihosting publik di Route 53. | Masuk ke AWS Management Console, buka konsol Amazon Route 53, pilih **Zona yang dihosting**, lalu pilih **Buat zona yang dihosting**. Buat zona yang dihosting publik dan catat ID zona. Untuk informasi selengkapnya tentang hal ini, lihat [Membuat zona yang dihosting publik](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) di dokumentasi Amazon Route 53.ACME DNS01 menggunakan penyedia DNS untuk memposting tantangan bagi manajer sertifikat untuk mengeluarkan sertifikat. Tantangan ini meminta Anda untuk membuktikan bahwa Anda mengontrol DNS untuk nama domain Anda dengan menempatkan nilai tertentu dalam catatan TXT di bawah nama domain tersebut. Setelah Let's Encrypt memberikan token kepada klien ACME Anda, klien Anda membuat catatan TXT yang berasal dari token itu dan kunci akun Anda, dan itu menempatkan catatan itu di. `_acme-challenge.<YOURDOMAIN>` Kemudian Let's Encrypt menanyakan DNS untuk catatan itu. Jika menemukan kecocokan, Anda dapat melanjutkan untuk mengeluarkan sertifikat. | AWS DevOps | 

### Konfigurasikan peran IAM untuk memungkinkan pengelola sertifikat mengakses zona yang dihosting publik
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat kebijakan IAM untuk cert-manager.  | Kebijakan IAM diperlukan untuk memberikan izin kepada manajer sertifikat untuk memvalidasi bahwa Anda memiliki domain Route 53. `policy.json`Contoh kebijakan IAM disediakan di `1-IAMRole` direktori dalam GitHub [End-to-end enkripsi kloning di repositori Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).Masukkan perintah berikut di AWS CLI untuk membuat kebijakan IAM.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Buat peran IAM untuk cert-manager. | Setelah membuat kebijakan IAM, Anda harus membuat peran IAM. `trustpolicy.json`Contoh peran IAM disediakan di `1-IAMRole` direktori.Masukkan perintah berikut di AWS CLI untuk membuat peran IAM.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | AWS DevOps | 
| Lampirkan kebijakan pada peran tersebut. | Masukkan perintah berikut di AWS CLI untuk melampirkan kebijakan IAM ke peran IAM. Ganti `AWS_ACCOUNT_ID` dengan ID akun AWS Anda. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Siapkan NGINX Ingress Controller di Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan NGINX Ingress Controller. | Instal versi terbaru `nginx-ingress` menggunakan Helm. Anda dapat memodifikasi `nginx-ingress` konfigurasi sesuai dengan kebutuhan Anda sebelum menerapkannya. Pola ini menggunakan Network Load Balancer beranotasi dan menghadap internal dan yang tersedia di direktori. `5-Nginx-Ingress-Controller` Instal NGINX Ingress Controller dengan menjalankan perintah Helm berikut dari direktori. `5-Nginx-Ingress-Controller``helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml` | AWS DevOps | 
| Verifikasi bahwa NGINX Ingress Controller diinstal. | Masukkan `helm list` perintah. Output harus menunjukkan bahwa NGINX Ingress Controller diinstal. | AWS DevOps | 
| Buat catatan Route 53 A. | Catatan A menunjuk ke Network Load Balancer yang dibuat oleh NGINX Ingress Controller.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Siapkan NGINX di VirtualServer Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan NGINX VirtualServer. |  VirtualServer Sumber daya NGINX adalah konfigurasi load balancing yang merupakan alternatif dari sumber daya ingress. Konfigurasi untuk membuat VirtualServer sumber daya NGINX tersedia dalam `nginx_virtualserver.yaml` file di direktori. `6-Nginx-Virtual-Server` Masukkan perintah berikut `kubectl` untuk membuat sumber daya NGINX VirtualServer .`kubectl apply -f  nginx_virtualserver.yaml`Pastikan Anda memperbarui nama domain aplikasi, rahasia sertifikat, dan nama layanan aplikasi dalam `nginx_virtualserver.yaml` file. | AWS DevOps | 
| Verifikasi bahwa NGINX VirtualServer dibuat. | Masukkan perintah berikut `kubectl` untuk memverifikasi bahwa VirtualServer sumber daya NGINX berhasil dibuat.`kubectl get virtualserver`Verifikasi bahwa `Host` kolom tersebut cocok dengan nama domain aplikasi Anda. | AWS DevOps | 
| Menyebarkan server web NGINX dengan TLS diaktifkan. | Pola ini menggunakan server web NGINX dengan TLS diaktifkan sebagai aplikasi untuk menguji enkripsi. end-to-end File konfigurasi yang diperlukan untuk menyebarkan aplikasi pengujian tersedia di `demo-webserver` direktori. Masukkan perintah berikut `kubectl` untuk menyebarkan aplikasi uji.`kubectl apply -f nginx-tls-ap.yaml` | AWS DevOps | 
| Verifikasi bahwa sumber daya aplikasi pengujian dibuat. | Masukkan perintah berikut `kubectl` untuk memverifikasi bahwa sumber daya yang diperlukan dibuat untuk aplikasi pengujian:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Validasi aplikasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Sumber daya terkait
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Sumber daya AWS**
+ [Membuat rekaman dengan menggunakan konsol Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (dokumentasi Amazon Route 53)
+ [Menggunakan Network Load Balancer dengan pengontrol ingress NGINX di Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) (postingan blog AWS)

**Sumber daya lainnya**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (dokumentasi pengelola sertifikat)
+ [Mengkonfigurasi Penyedia Tantangan DNS01](https://cert-manager.io/docs/configuration/acme/dns01/) (dokumentasi manajer sertifikat)
+ [Mari mengenkripsi tantangan DNS](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (Let's Encrypt documentation)

# Sederhanakan penerapan aplikasi multi-tenant Amazon EKS dengan menggunakan Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate, dan Shrikant Patil, Amazon Web Services*

## Ringkasan
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Banyak perusahaan yang menawarkan produk dan layanan adalah industri yang diatur data yang diperlukan untuk mempertahankan hambatan data antara fungsi bisnis internal mereka. Pola ini menjelaskan bagaimana Anda dapat menggunakan fitur multi-tenancy di Amazon Elastic Kubernetes Service (Amazon EKS) untuk membangun platform data yang mencapai isolasi logis dan fisik antara penyewa atau pengguna yang berbagi satu kluster Amazon EKS. Pola memberikan isolasi melalui pendekatan berikut:
+ Isolasi namespace Kubernetes
+ Kontrol akses berbasis peran (RBAC)
+ Kebijakan jaringan
+ Kuota sumber daya
+ AWS Identity and Access Management (IAM) peran untuk akun layanan (IRSA)

Selain itu, solusi ini menggunakan Flux untuk menjaga konfigurasi penyewa tetap tidak berubah saat Anda menerapkan aplikasi. Anda dapat menerapkan aplikasi penyewa Anda dengan menentukan repositori penyewa yang berisi file Flux dalam konfigurasi Anda. `kustomization.yaml`

Pola ini mengimplementasikan yang berikut:
+  AWS CodeCommit Repositori, AWS CodeBuild proyek, dan AWS CodePipeline pipeline, yang dibuat dengan menerapkan skrip Terraform secara manual.
+ Jaringan dan komponen komputasi yang diperlukan untuk hosting penyewa. Ini dibuat melalui CodePipeline dan CodeBuild dengan menggunakan Terraform.
+ Ruang nama penyewa, kebijakan jaringan, dan kuota sumber daya, yang dikonfigurasi melalui bagan Helm.
+ Aplikasi milik penyewa yang berbeda, digunakan dengan menggunakan Flux.

Kami menyarankan Anda merencanakan dan membangun arsitektur Anda sendiri dengan hati-hati untuk multi-tenancy berdasarkan persyaratan unik dan pertimbangan keamanan Anda. Pola ini memberikan titik awal untuk implementasi Anda.

## Prasyarat dan batasan
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ AWS Command Line Interface [(AWS CLI) versi 2.11.4 atau yang lebih baru, [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versi 0.12 atau yang lebih baru diinstal pada mesin lokal Anda
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) versi 3.0.0 atau yang lebih baru
+ [Penyedia Kubernetes](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs) versi 2.10 atau yang lebih baru
+ [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) versi 2.8.0 atau yang lebih baru
+ [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) versi 1.14 atau yang lebih baru

**Batasan**
+ **Ketergantungan pada penerapan manual Terraform: Penyiapan** awal alur kerja, termasuk membuat CodeCommit repositori, CodeBuild proyek, dan CodePipeline saluran pipa, bergantung pada penerapan Terraform manual. Ini memperkenalkan batasan potensial dalam hal otomatisasi dan skalabilitas, karena memerlukan intervensi manual untuk perubahan infrastruktur.
+ **CodeCommit ketergantungan repositori:** Alur kerja bergantung pada CodeCommit repositori sebagai solusi manajemen kode sumber dan digabungkan dengan erat. Layanan AWS

## Arsitektur
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Arsitektur target**

Pola ini menyebarkan tiga modul untuk membangun infrastruktur pipeline, jaringan, dan komputasi untuk platform data, seperti yang diilustrasikan dalam diagram berikut.

*Arsitektur pipa:*

![\[Infrastruktur pipa untuk arsitektur multi-tenant Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Arsitektur jaringan:*

![\[Infrastruktur jaringan untuk arsitektur multi-tenant Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Arsitektur komputasi:*

![\[Infrastruktur komputasi untuk arsitektur multi-tenant Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Alat
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Layanan AWS**
+ [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 CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)adalah hub pusat yang menghubungkan virtual private cloud (VPCs) dan jaringan lokal.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

**Alat-alat lainnya**
+ Kebijakan Jaringan [Cilium mendukung kebijakan jaringan](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) Kubernetes L3 dan L4. Mereka dapat diperluas dengan kebijakan L7 untuk menyediakan keamanan tingkat API untuk HTTP, Kafka, dan gRPC, dan protokol serupa lainnya.
+ [Flux](https://fluxcd.io/) adalah alat pengiriman berkelanjutan (CD) berbasis Git yang mengotomatiskan penerapan aplikasi di Kubernetes.
+ [Helm](https://helm.sh/docs/) adalah pengelola paket open source untuk Kubernetes yang membantu Anda menginstal dan mengelola aplikasi di klaster Kubernetes Anda.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di repositori Solusi GitHub [Terraform Multi-Tenancy EKS](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

## Praktik terbaik
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Untuk pedoman dan praktik terbaik untuk menggunakan implementasi ini, lihat berikut ini:
+ [Praktik terbaik multi-tenancy Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Dokumentasi fluks](https://fluxcd.io/flux/get-started/)

## Epik
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Buat pipeline untuk tahap build, test, dan deploy Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori proyek. | Kloning repositori [Solusi Terraform Multi-Tenancy GitHub EKS](https://github.com/aws-samples/aws-eks-multitenancy-deployment) dengan menjalankan perintah berikut di jendela terminal:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Bootstrap bucket Terraform S3 dan Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Perbarui `locals.tf` file `run.sh` dan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Menyebarkan modul pipa. | Untuk membuat sumber daya pipeline, jalankan perintah Terraform berikut secara manual. Tidak ada orkestrasi untuk menjalankan perintah ini secara otomatis.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Buat infrastruktur jaringan
<a name="create-the-network-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mulai pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Setelah proses pertama ini, pipeline dimulai secara otomatis setiap kali Anda melakukan perubahan ke cabang utama CodeCommit repositori.Pipa meliputi [tahapan](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages) berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validasi sumber daya yang dibuat melalui modul jaringan. | Konfirmasikan bahwa AWS sumber daya berikut dibuat setelah pipeline berhasil diterapkan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Buat infrastruktur komputasi
<a name="create-the-compute-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui `locals.tf` untuk mengaktifkan akses CodeBuild proyek ke VPC. | Untuk menyebarkan add-on untuk kluster pribadi Amazon EKS, CodeBuild proyek harus dilampirkan ke VPC Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Perbarui `buildspec` file untuk membangun modul komputasi. | Di `templates` folder, di semua file `buildspec` YAMM, atur nilai `TF_MODULE_TO_BUILD` variabel dari `network` ke`compute`:<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Perbarui `values` file untuk bagan Helm manajemen penyewa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validasi sumber daya komputasi. | Setelah Anda memperbarui file di langkah sebelumnya, CodePipeline mulai secara otomatis. Konfirmasikan bahwa itu membuat AWS sumber daya berikut untuk infrastruktur komputasi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Periksa manajemen penyewa dan sumber daya lainnya
<a name="check-tenant-management-and-other-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi sumber daya manajemen penyewa di Kubernetes. | Jalankan perintah berikut untuk memeriksa apakah sumber daya manajemen penyewa berhasil dibuat dengan bantuan Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifikasi penerapan aplikasi penyewa. | Jalankan perintah berikut untuk memverifikasi bahwa aplikasi penyewa telah digunakan.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Pemecahan masalah
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Anda menemukan pesan galat yang mirip dengan berikut ini:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Ikuti langkah-langkah ini untuk memecahkan masalah:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Sumber daya terkait
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Cetak Biru Amazon EKS untuk Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Panduan Praktik Terbaik Amazon EKS, bagian Multi-penyewaan](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Situs Flux](https://fluxcd.io/)
+ [Situs Helm](https://helm.sh/)

## Informasi tambahan
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

Berikut adalah contoh struktur repositori untuk menerapkan aplikasi penyewa:

```
applications
sample_tenant_app
├── README.md
├── base
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── tenant-1
    │   ├── configmap.yaml
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── tenant-2
        ├── configmap.yaml
        └── kustomization.yaml
```

# Merampingkan pengembangan dan penerapan bot Amazon Lex dengan menggunakan alur kerja otomatis
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow"></a>

*Balaji Panneerselvam, Attila Dancso, Pavan Dusanapudi, Anand Jumnani, dan James O'Hara, Amazon Web Services*

## Ringkasan
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-summary"></a>

Mengembangkan dan menerapkan bot percakapan Amazon Lex dapat menjadi tantangan saat Anda mencoba mengelola beberapa fitur, pengembang, dan lingkungan. Alur kerja otomatis menggunakan prinsip infrastruktur sebagai kode (IAc) dapat membantu merampingkan proses. Pola ini dapat membantu meningkatkan produktivitas pengembang Amazon Lex dan memungkinkan manajemen siklus hidup bot yang efisien dengan cara berikut:
+ **Aktifkan pengembangan beberapa fitur secara bersamaan** - Dengan alur kerja otomatis, pengembang dapat mengerjakan berbagai fitur secara paralel di cabang terpisah. Perubahan kemudian dapat digabungkan dan digunakan tanpa memblokir pekerjaan lain.
+ **Gunakan UI konsol Amazon Lex** - Pengembang dapat menggunakan konsol Amazon Lex yang mudah digunakan untuk membuat dan menguji bot. Bot kemudian dijelaskan dalam kode infrastruktur untuk penerapan.
+ **Promosikan bot di seluruh lingkungan** - Alur kerja mengotomatiskan mempromosikan versi bot dari lingkungan yang lebih rendah seperti pengembangan dan pengujian hingga produksi. Pendekatan ini mengurangi risiko dan overhead promosi manual.
+ **Pertahankan kontrol versi** - Mengelola definisi bot di Git, bukan hanya melalui layanan Amazon Lex memberi Anda kontrol versi dan jejak audit. Perubahan dilacak ke pengembang individu, tidak seperti ketika hanya menggunakan Konsol Manajemen AWS atau APIs untuk memodifikasi bot yang disimpan di dalamnya. AWS

Dengan mengotomatiskan proses rilis bot Amazon Lex, tim dapat memberikan fitur lebih cepat dengan mengurangi risiko dan usaha. Bot tetap di bawah kontrol versi daripada diisolasi di konsol Amazon Lex. 

## Prasyarat dan batasan
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-prereqs"></a>

**Prasyarat**
+ Alur kerja melibatkan beberapa Akun AWS untuk lingkungan yang berbeda (pengembangan, produksi, dan DevOps), yang memerlukan manajemen akun dan konfigurasi akses lintas akun.
+ Python 3.9 tersedia di lingkungan penerapan atau pipeline Anda.
+ Git [diinstal](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) dan dikonfigurasi pada workstation lokal untuk kontrol sumber.
+ AWS Command Line Interface (AWS CLI) [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) dan dikonfigurasi untuk mengautentikasi dengan menggunakan baris perintah atau Python.

**Keterbatasan**
+ **Akses repositori** — Alur kerja mengasumsikan bahwa pipeline continuous integration and continuous delivery (CI/CD) memiliki izin yang diperlukan untuk melakukan perubahan pada repositori kode sumber. 
+ **Versi bot awal** — Perkakas mengharuskan versi awal bot digunakan dengan menggunakan AWS CloudFormation templat. Anda harus membuat iterasi pertama bot dan mengkomitmennya ke repo sebelum alur kerja otomatis dapat mengambil alih.
+ **Konflik gabungan** — Meskipun alur kerja bertujuan untuk memungkinkan pengembangan bersamaan, masih ada kemungkinan konflik gabungan saat mengintegrasikan perubahan dari cabang yang berbeda. Menyelesaikan konflik dalam konfigurasi bot mungkin memerlukan intervensi manual.

**Versi produk**
+ [Python 3.9](https://www.python.org/downloads/) atau lebih tinggi
+ [AWS CDK v2 2.124.0](https://docs.aws.amazon.com/cdk/api/versions.html) atau lebih tinggi
+ [AWS SDK untuk Python (Boto3)](https://docs.aws.amazon.com/pythonsdk/)1.28 atau di atas

## Arsitektur
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-architecture"></a>

Diagram berikut menampilkan arsitektur tingkat tinggi dan komponen kunci dari solusi.

![\[Alur kerja untuk mengotomatiskan pengembangan dan penyebaran bot Amazon Lex.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/3c7f9d16-9708-43c4-afa6-9d804d6b9dad/images/cdc73e82-a777-4e88-8bf8-a73c9bacb47f.png)


Komponen utama meliputi:
+ **Lex bot repo** — Sebuah repositori Git yang menyimpan definisi IAc untuk bot Amazon Lex.
+ **DevOps**— Akun AWS Didedikasikan untuk menampung CI/CD jaringan pipa dan sumber daya terkait untuk proses pengembangan dan penyebaran.
+ **Pipelines** — AWS CodePipeline Contoh yang mengotomatiskan berbagai tahap pengembangan bot dan siklus hidup penerapan, seperti membuat bot baru, mengekspor definisi bot, mengimpor definisi bot, dan menghapus bot.
+ Bot **tiket dan bot utama** — Sumber daya bot Amazon Lex, di mana bot tiket adalah bot khusus fitur yang dikembangkan oleh tim atau pengembang individu dan bot utama adalah bot dasar yang mengintegrasikan semua fitur.

Diagram arsitektur menggambarkan alur kerja berikut:

1. **Bot utama dasar** - Titik awal alur kerja adalah untuk mendasarkan bot utama di lingkungan pengembangan (Dev). Bot utama berfungsi sebagai fondasi untuk pengembangan masa depan dan penambahan fitur.

1. **Buat bot tiket** — Ketika fitur atau perubahan baru diperlukan, bot tiket dibuat. Bot tiket pada dasarnya adalah salinan atau cabang dari bot utama yang dapat dikerjakan pengembang tanpa memengaruhi versi utama.

1. **Bot tiket ekspor** - Setelah bekerja pada bot tiket selesai, itu diekspor dari layanan Amazon Lex. Kemudian, cabang yang berisi bot tiket didasarkan ulang dari cabang utama. Langkah ini memastikan bahwa setiap perubahan yang dilakukan pada bot utama saat bot tiket sedang dalam pengembangan dimasukkan, mengurangi potensi konflik.

1. **Impor bot tiket berbasis ulang dan validasi** - Bot tiket berbasis ulang diimpor kembali ke lingkungan pengembangan dan divalidasi untuk memastikannya berfungsi dengan benar dengan perubahan terbaru dari cabang utama. Jika validasi berhasil, permintaan tarik (PR) dibuat untuk menggabungkan perubahan bot tiket ke cabang utama.

1. **Hapus bot tiket** — Setelah perubahan berhasil digabungkan ke cabang utama, bot tiket tidak lagi diperlukan. Bot tiket dapat dihapus untuk menjaga lingkungan tetap bersih dan mudah dikelola.

1. **Terapkan bot utama ke lingkungan pengembangan dan uji** — Bot utama yang diperbarui, sekarang termasuk fitur atau perubahan baru, diterapkan ke lingkungan pengembangan. Di sini, ia menjalani pengujian menyeluruh untuk memastikan semua fungsi berfungsi seperti yang diharapkan.

1. **Menyebarkan bot utama ke lingkungan produksi** - Setelah pengujian di lingkungan pengembangan selesai dan berhasil, bot utama dikerahkan ke lingkungan produksi. Langkah ini adalah tahap akhir dari alur kerja, di mana fitur-fitur baru menjadi tersedia untuk pengguna akhir.

**Otomatisasi dan skala**

Alur kerja otomatis memungkinkan pengembang untuk mengerjakan berbagai fitur secara paralel, masing-masing di cabang terpisah. Ini memfasilitasi pengembangan bersamaan, memungkinkan tim untuk berkolaborasi secara efektif dan memberikan fitur lebih cepat. Dengan cabang yang terisolasi satu sama lain, perubahan dapat digabungkan dan digunakan tanpa memblokir atau mengganggu pekerjaan lain yang sedang berlangsung.

Alur kerja mengotomatiskan penerapan dan promosi versi bot di berbagai lingkungan, seperti pengembangan, pengujian, dan produksi.

Menyimpan definisi bot dalam sistem kontrol versi seperti Git menyediakan jejak audit yang komprehensif dan memungkinkan kolaborasi yang efisien. Perubahan dilacak ke pengembang individu, memastikan transparansi dan akuntabilitas di seluruh siklus pengembangan. Pendekatan ini juga memfasilitasi tinjauan kode, memungkinkan tim untuk mengidentifikasi dan mengatasi masalah sebelum menerapkan ke produksi.

Dengan menggunakan AWS CodePipeline dan lainnya Layanan AWS, alur kerja otomatis dapat diskalakan untuk mengakomodasi peningkatan beban kerja dan ukuran tim.

## Alat
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)adalah kerangka pengembangan perangkat lunak open-source untuk mendefinisikan AWS Cloud infrastruktur dalam kode dengan menggunakan bahasa pemrograman yang sudah dikenal dan menyediakannya. CloudFormation Implementasi sampel dalam pola ini menggunakan Python.
+ [AWS CDK Command Line Interface (AWS CDK CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) - AWS CDK Toolkit adalah alat utama untuk berinteraksi dengan aplikasi Anda. AWS CDK Ini mengeksekusi aplikasi Anda, menginterogasi model aplikasi yang Anda tentukan, dan menghasilkan serta menerapkan CloudFormation template yang dihasilkan oleh CDK.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS Pola ini digunakan CloudFormation untuk menyebarkan konfigurasi bot Amazon Lex dan sumber daya terkait menggunakan infrastruktur sebagai kode.
+ [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. Pola ini digunakan CodeBuild untuk membangun dan mengemas artefak penyebaran.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus. Pola ini digunakan CodePipeline untuk mengatur pipa pengiriman kontinu.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) adalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html) adalah Layanan AWS untuk membangun antarmuka percakapan (bot) untuk aplikasi menggunakan suara dan teks.
+ [AWS SDK untuk Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

**Alat lainnya**
+ [Git](https://git-scm.com/docs) adalah sistem kontrol versi terdistribusi open source.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [management-framework-sample-for-amazon-lex](https://github.com/aws-samples/management-framework-sample-for-amazon-lex). Kode repo berisi folder dan file berikut:
+ `prerequisite`folder - Berisi definisi CloudFormation tumpukan (menggunakan AWS CDK) untuk menyiapkan sumber daya dan lingkungan yang diperlukan.
+ `prerequisite/lexmgmtworkflow`folder — Direktori utama untuk proyek Alur Kerja Manajemen Lex, termasuk definisi tumpukan dan kode Python.
+ `prerequisite/tests`— Berisi unit test.
+ `src`folder — Direktori kode sumber, termasuk pembungkus dan utilitas manajemen bot Amazon Lex.
+ `src/dialogue_lambda`— Direktori kode sumber dari fungsi Lambda kait dialog yang mencegat dan memproses input pengguna selama percakapan dengan bot Amazon Lex.

## Praktik terbaik
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-best-practices"></a>
+ **Pemisahan kekhawatiran**
  + Mempertahankan pemisahan tanggung jawab yang jelas antara lingkungan DevOps, pengembangan, dan produksi.
  + Gunakan terpisah Akun AWS untuk setiap lingkungan untuk menegakkan batasan isolasi dan keamanan yang tepat.
  + Gunakan peran lintas akun dan prinsip akses paling tidak memiliki hak istimewa untuk memastikan akses terkontrol antar lingkungan.
+ **Infrastruktur sebagai kode**
  + Tinjau dan perbarui kode infrastruktur secara teratur agar selaras dengan praktik terbaik dan persyaratan yang terus berkembang.
  + Menetapkan strategi percabangan dan penggabungan yang jelas untuk repositori kode sumber
+ **Pengujian dan validasi**
  + Menerapkan pengujian otomatis pada berbagai tahap pipeline untuk menangkap masalah di awal siklus pengembangan.
  + Gunakan konsol Amazon Lex atau kerangka kerja pengujian otomatis untuk memvalidasi konfigurasi dan fungsionalitas bot sebelum mempromosikan ke lingkungan yang lebih tinggi.
  + Pertimbangkan untuk menerapkan gerbang persetujuan manual untuk penyebaran ke produksi atau lingkungan kritis.
+ **Pemantauan dan pencatatan**
  + Siapkan mekanisme pemantauan dan pencatatan untuk pipeline, penerapan, dan interaksi bot.
  + Pantau peristiwa pipeline, status penerapan, dan metrik kinerja bot untuk mengidentifikasi dan mengatasi masalah dengan segera.
  + Gunakan layanan AWS seperti Amazon CloudWatch AWS CloudTrail, dan AWS X-Ray untuk pencatatan dan pemantauan terpusat.
  + Secara teratur meninjau dan menganalisis kinerja, efisiensi, dan efektivitas alur kerja otomatis.
+ **Keamanan dan kepatuhan**
  + Terapkan praktik pengkodean yang aman dan ikuti praktik terbaik AWS keamanan untuk pengembangan dan penerapan bot Amazon Lex.
  + Tinjau dan perbarui peran, kebijakan, dan izin IAM secara berkala agar selaras dengan prinsip hak istimewa paling sedikit.
  + Pertimbangkan untuk mengintegrasikan pemindaian keamanan dan pemeriksaan kepatuhan ke dalam jaringan pipa.

## Epik
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-epics"></a>

### Mengatur IAc untuk manajemen bot Amazon Lex
<a name="set-up-iac-for-lex2-bot-management"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan lingkungan CDK lokal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | AWS DevOps | 
| Buat peran lintas akun di `devops` lingkungan. | `devops`Akun bertanggung jawab untuk hosting dan mengelola CI/CD jaringan pipa. Untuk mengaktifkan CI/CD pipeline berinteraksi dengan `dev` dan `prod` lingkungan, jalankan perintah berikut untuk membuat peran lintas akun di `devops` akun.<pre>cdk bootstrap --profile=devops<br /><br />cdk deploy LexMgmtDevopsRoleStack -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 
| Buat peran lintas akun di `dev` lingkungan. | Buat peran IAM di `dev` akun dengan izin yang diperlukan untuk memungkinkan `devops` akun mengambil peran ini. CI/CD Pipeline menggunakan peran ini untuk melakukan tindakan di `dev` akun, seperti menerapkan dan mengelola sumber daya bot Amazon Lex.Untuk membuat peran IAM, jalankan perintah berikut:<pre>cdk bootstrap --profile=dev<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=dev</pre> | AWS DevOps | 
| Buat peran lintas akun di `prod` lingkungan. | Buat peran IAM di `prod` akun dengan izin yang diperlukan untuk memungkinkan `devops` akun mengambil peran ini. CI/CD Pipeline menggunakan peran ini untuk melakukan tindakan di `prod` akun, seperti menerapkan dan mengelola sumber daya bot Amazon Lex.<pre>cdk bootstrap --profile=prod<br /><br />cdk deploy LexMgmtCrossaccountRoleStack -c devops-account-id=1111111111111 --profile=prod</pre> | AWS DevOps | 
| Buat jaringan pipa di `devops` lingkungan. | Untuk mengelola alur kerja pengembangan untuk bot Amazon Lex, jalankan perintah berikut untuk menyiapkan pipeline di lingkungan. `devops` <pre>cdk deploy LexMgmtWorkflowStack -c devops-account-id=1111111111111 -c dev-account-id=2222222222222 -c prod-account-id=333333333333 --profile=devops</pre> | AWS DevOps | 

### Tetapkan baseline untuk bot utama
<a name="establish-the-baseline-for-the-main-bot"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan versi awal bot utama. | Untuk menentukan versi awal bot utama, [picu](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-triggers) `BaselineBotPipeline` pipeline.Pipeline menyebarkan definisi bot dasar yang didefinisikan dalam CloudFormation template, mengekspor definisi bot utama sebagai file.json. dan menyimpan kode bot utama dalam sistem kontrol versi. | AWS DevOps | 

### Menerapkan alur kerja pengembangan fitur
<a name="implement-the-feature-development-workflow"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat bot tiket untuk mengembangkan dan menguji fitur. | `TicketBot`adalah instance bot baru yang diimpor dari definisi bot utama yang ada di cabang fitur. Pendekatan ini memastikan bahwa bot baru memiliki semua fungsionalitas dan konfigurasi saat ini dari bot utama.Untuk menentukan versi awal bot tiket, picu `CreateTicketBotPipeline` pipeline.Pipeline membuat cabang fitur baru di sistem kontrol versi dan membuat instance bot tiket baru berdasarkan bot utama. | Lex Bot Pengembang | 
| Kembangkan dan uji fitur bot tiket.  | Untuk mengembangkan dan menguji fitur, masuk ke Konsol Manajemen AWS dan buka konsol Amazon Lex di [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/). Untuk informasi selengkapnya, lihat [Menguji bot menggunakan konsol](https://docs.aws.amazon.com/lexv2/latest/dg/test-bot.html) di dokumentasi Amazon Lex.Dengan `TicketBot` instance, Anda sekarang dapat menambahkan, memodifikasi, atau memperluas fungsionalitas bot untuk mengimplementasikan fitur baru. Misalnya, Anda dapat membuat atau memodifikasi maksud, ucapan, slot, dan alur dialog. Untuk informasi selengkapnya, lihat [Menambahkan maksud](https://docs.aws.amazon.com/lexv2/latest/dg/add-intents.html) dalam dokumentasi Amazon Lex. | Lex Bot Pengembang | 
| Ekspor definisi bot tiket. | Definisi bot yang diekspor pada dasarnya adalah representasi dari konfigurasi dan fungsionalitas bot dalam format JSON.Untuk mengekspor definisi bot tiket, picu `ExportTicketBotPipeline` pipeline.Pipeline mengekspor definisi bot tiket sebagai file.json dan menyimpan kode bot tiket di cabang fitur di sistem kontrol versi. | Lex Bot Pengembang | 
| Rebase cabang fitur dari cabang utama terbaru. | Selama pengembangan fitur baru, cabang utama mungkin telah menerima perubahan lain dari pengembang atau tim yang berbeda. Untuk memasukkan perubahan ini ke dalam cabang fitur, lakukan `rebase` operasi Git. Operasi ini pada dasarnya memutar ulang komit dari cabang fitur di atas komit terbaru dari cabang utama, memastikan bahwa cabang fitur mencakup semua perubahan terbaru | Lex Bot Pengembang | 
| Impor dan validasi bot tiket berbasis ulang. | Setelah Anda rebase cabang fitur, Anda harus mengimpornya ke instance bot tiket. Impor ini memperbarui bot tiket yang ada dengan perubahan terbaru dari cabang berbasis ulang.Untuk mengimpor bot tiket berbasis ulang, picu `ImportTicketBotPipeline` pipeline.Pipeline mengimpor file definisi.json ticket bot di cabang fitur di sistem kontrol versi ke dalam instance. `TicketBot` | Lex Bot Pengembang | 
| Validasi definisi bot berbasis ulang. | Setelah Anda mengimpor definisi bot berbasis ulang, sangat penting untuk memvalidasi fungsinya. Anda ingin memastikan bahwa fitur baru berfungsi seperti yang diharapkan dan tidak bertentangan dengan fungsionalitas yang ada. Validasi ini biasanya melibatkan pengujian bot dengan berbagai skenario masukan, memeriksa tanggapan, dan memverifikasi bahwa bot berperilaku sebagaimana dimaksud. Anda dapat melakukan validasi dengan salah satu cara berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Lex Bot Pengembang | 
| Gabungkan cabang fitur ke cabang utama. | Setelah Anda mengembangkan dan menguji fitur baru dalam `TicketBot` instance terisolasi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.html) | Lex Bot Developer, Adminstrator Repositori | 
| Hapus cabang fitur dan bot tiket.  | Setelah cabang fitur berhasil digabungkan ke cabang utama, hapus cabang fitur dan bot tiket dari repo kode sumber. Untuk menghapus cabang fitur dan bot tiket, picu `DeleteTicketBotPipeline` pipeline.Pipeline menghapus sumber daya bot sementara yang dibuat selama proses pengembangan (misalnya, bot tiket). Tindakan ini membantu menjaga repo bersih dan mencegah kebingungan atau konflik dengan cabang fitur future.  | Lex Bot Pengembang | 

### Pertahankan bot utama
<a name="maintain-the-main-bot"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Impor definisi bot utama terbaru ke `dev` lingkungan. | Untuk mengimpor definisi bot utama terbaru di cabang utama ke `dev` lingkungan, picu `DeployBotDevPipeline` pipeline.Pipeline juga membuat tag git pada persetujuan. | AWS DevOps | 
| Impor definisi bot utama terbaru ke `prod` lingkungan. | Untuk mengimpor definisi bot terbaru di cabang utama ke `prod` lingkungan, berikan referensi tag dari tugas sebelumnya sebagai parameter dan picu `DeployBotProdPipeline` pipeline.Pipeline mengimpor definisi bot terbaru dari tag tertentu ke `prod` lingkungan. | AWS DevOps | 

## Pemecahan masalah
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Saat Anda menerapkan bot Amazon Lex ke berbagai Akun AWS, layanan perkakas harus memiliki izin yang diperlukan untuk mengakses sumber daya di akun tersebut. | Untuk memberikan akses lintas akun, gunakan peran dan kebijakan IAM. Buat peran IAM di akun target dan lampirkan kebijakan ke peran yang memberikan izin yang diperlukan. Kemudian, asumsikan peran ini dari akun tempat bot Amazon Lex digunakan.Untuk informasi selengkapnya, lihat [izin IAM yang diperlukan untuk mengimpor](https://docs.aws.amazon.com/lexv2/latest/dg/import.html#import-permissions) dan [izin IAM diperlukan untuk mengekspor bot di Lex V2 dalam dokumentasi Amazon Lex](https://docs.aws.amazon.com/lexv2/latest/dg/export.html#export-permissions). | 

## Sumber daya terkait
<a name="streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow-resources"></a>
+ [Mengimpor bot di Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/import.html)
+ [Mulai pipa di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)
+ [Bekerja dengan bot Amazon Lex V2](https://docs.aws.amazon.com/lexv2/latest/dg/building-bots.html)

# Koordinasikan ketergantungan sumber daya dan eksekusi tugas dengan menggunakan konstruksi AWS Fargate WaitCondition kait
<a name="use-the-aws-fargate-waitcondition-hook-construct"></a>

*Penggemar Stan, Amazon Web Services*

## Ringkasan
<a name="use-the-aws-fargate-waitcondition-hook-construct-summary"></a>

Pola ini menjelaskan paket WaitCondition hook (`waitcondition-hook-for-aws-fargate-task`) npm, yang merupakan solusi cloud-native yang dirancang untuk mengatur [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)tugas di kluster Amazon Elastic Container Service (Amazon ECS). 

 WaitCondition Hook adalah AWS Cloud Development Kit (AWS CDK) konstruksi yang secara khusus dirancang untuk integrasi dengan. AWS CloudFormation WaitCondition Hook menyediakan kemampuan kunci berikut:
+ Bertindak sebagai mekanisme kondisi tunggu, menjeda eksekusi CloudFormation tumpukan hingga tugas Fargate tertentu selesai, yang membantu penerapan dan penyediaan sumber daya yang teratur.
+ Mendukung TypeScript dan Python, membuatnya ideal untuk AWS CDK proyek.
+ Memungkinkan pengembang dan arsitek untuk mengatur penerapan dengan mengoordinasikan penyelesaian tugas dan manajemen sumber daya untuk aplikasi kontainer di. AWS
+ Memungkinkan menjalankan tugas Fargate dengan satu atau beberapa kontainer yang disematkan dalam CloudFormation siklus hidup. dan dapat menangani kegagalan tugas dan memutar kembali tumpukan setelah kegagalan tugas. CloudFormation 
+ Memberikan fleksibilitas untuk menambahkan dependensi antara sumber daya dan hasil eksekusi tugas Fargate, memungkinkan tugas khusus atau memanggil titik akhir lainnya. Misalnya, Anda dapat menjeda CloudFormation tumpukan dan menunggu migrasi database (dilakukan oleh tugas Fargate) dan menyediakan sumber daya lain yang mungkin bergantung pada keberhasilan migrasi database.

## Prasyarat dan batasan
<a name="use-the-aws-fargate-waitcondition-hook-construct-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Cloud Development Kit (AWS CDK) Command Line Interface (CLI) diinstal pada workstation lokal. Untuk informasi lebih lanjut, lihat [referensi AWS CDK CLI](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) dalam dokumentasi. AWS CDK 
+ [Node package manager (npm), diinstal pada workstation lokal dan dikonfigurasi untuk in.AWS CDK TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) Untuk informasi selengkapnya, lihat [Downloading and installing Node.js and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) dalam dokumentasi npm.
+ Benang dipasang di workstation lokal. Untuk informasi selengkapnya, lihat [Instalasi](https://yarnpkg.com/getting-started/install) di dokumentasi Yarn.

**Batasan**
+ Solusi ini diterapkan ke satu Akun AWS.
+ Kode pengembalian yang diharapkan dari wadah adalah `0` untuk sukses. Kode pengembalian lainnya menunjukkan kegagalan, dan CloudFormation tumpukan akan berputar kembali. 
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat [Titik akhir dan kuota layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

## Arsitektur
<a name="use-the-aws-fargate-waitcondition-hook-construct-architecture"></a>

Diagram berikut menunjukkan arsitektur konstruksi.

![\[Alur kerja AWS Step Functions dari konstruksi waitcondition-hook-for-aws -fargate-task.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/598020df-908c-4486-9844-c05af759c18a.png)


Diagram menunjukkan alur kerja dari`waitcondition-hook-for-aws-fargate-task`:

1. `WaitCondition`dan `WaitConditionHandler` disediakan untuk mendengarkan respons dari fungsi. AWS Lambda 

1. Tergantung pada hasil tugas, baik `CallbackFunction` atau `ErrorHandlerFunction` dipicu oleh penyelesaian tugas Fargate.

1. Fungsi Lambda mengirimkan sinyal SUCCED atau FAILURE ke. `WaitConditionHandler`

1. `WaitConditionHandler`terus menyediakan sumber daya jika hasil eksekusi tugas Fargate berhasil, atau memutar kembali tumpukan jika tugas gagal.

Diagram berikut menunjukkan contoh alur kerja untuk melakukan migrasi database.

![\[Alur kerja migrasi database Amazon RDS menggunakan konstruksi WaitCondition kait.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e58680e3-f89f-422f-b0e1-e85605ae8bf9/images/3b83fc2a-80bb-4ba9-9637-782060493cf0.png)


Contoh alur kerja menggunakan `waitcondition-hook-for-aws-fargate-task` konstruksi untuk melakukan migrasi database, sebagai berikut:

1. Instans Amazon Relational Database Service (Amazon RDS) disediakan.

1. `waitcondition-hook-for-aws-fargate-task`Konstruksi menjalankan tugas migrasi database dan menjeda tumpukan sebagai instance Amazon Elastic Compute Cloud (Amazon EC2).

1. Jika tugas migrasi selesai dengan sukses, ia akan mengirimkan sinyal Success ke CloudFormation. Jika tidak, ia mengirimkan sinyal Gagal ke CloudFormation dan memutar kembali tumpukan.

## Alat
<a name="use-the-aws-fargate-waitcondition-hook-construct-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)adalah kerangka kerja pengembangan perangkat lunak yang membantu Anda mendefinisikan infrastruktur cloud dalam kode dan menyediakannya CloudFormation.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)membantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) membantu Anda memantau metrik sumber AWS daya Anda dan aplikasi yang Anda jalankan AWS secara real time.
+ [Amazon Elastic Container Service (Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)) adalah layanan manajemen kontainer yang cepat dan dapat diskalakan yang membantu Anda menjalankan, menghentikan, dan mengelola kontainer di klaster.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)membantu Anda menjalankan container tanpa perlu mengelola server atau instans Amazon EC2. Ini digunakan bersama dengan Amazon ECS.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

**Alat-alat lainnya**
+ [npm](https://docs.npmjs.com/about-npm) adalah registri perangkat lunak yang berjalan di lingkungan Node.js dan digunakan untuk berbagi atau meminjam paket dan mengelola penyebaran paket pribadi.
+ [Yarn](https://yarnpkg.com/) adalah manajer paket open source yang dapat Anda gunakan untuk mengelola dependensi dalam JavaScript proyek. Yarn dapat membantu Anda menginstal, memperbarui, mengonfigurasi, dan menghapus dependensi paket.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [waitcondition-hook-for-aws-fargate-task](https://github.com/aws-samples/waitcondition-hook-for-aws-fargate-task).

## Praktik terbaik
<a name="use-the-aws-fargate-waitcondition-hook-construct-best-practices"></a>
+ Saat membuat AWS CDK aplikasi, ikuti [Praktik terbaik untuk mengembangkan dan menerapkan infrastruktur cloud dengan dokumentasi AWS CDK di](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) AWS CDK v2.
+ Untuk AWS Fargate tugas tersebut, ikuti [Praktik terbaik untuk gambar kontainer Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/application.html) di dokumentasi Amazon ECS.

## Epik
<a name="use-the-aws-fargate-waitcondition-hook-construct-epics"></a>

### Mengatur AWS CDK
<a name="set-up-the-cdk"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal AWS CDK. | Untuk menginstal AWS CDK pada mesin lokal Anda atau lingkungan lain, jalankan perintah berikut: <pre>npm install -g aws-cdk@latest</pre> | Arsitek cloud, Pengembang aplikasi | 
| Bootstrap AWS CDK. | [Bootstrapping](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) adalah proses mempersiapkan [lingkungan](https://docs.aws.amazon.com/cdk/v2/guide/environments.html) untuk penyebaran. Untuk bootstrap AWS CDK toolkit Anda untuk target Akun AWS dan Wilayah AWS, jalankan perintah berikut:<pre>cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1 </pre>Perintah ini menciptakan CloudFormation tumpukan bernama`CDKToolkit`.  | Arsitek awan | 

### Jalankan WaitCondition hook untuk konstruksi AWS Fargate tugas
<a name="run-the-waitcondition-hook-for-fargatelong-tasks-construct"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat proyek CDK. | Buat proyek CDK menggunakan bahasa yang Anda sukai. Pola ini menggunakan TypeScript. Untuk membuat proyek CDK menggunakan TypeScript, jalankan perintah berikut: `cdk init app —language typescript` | Arsitek awan | 
| Instal paket . | Jalankan `npm install` di jalur root proyek CDK Anda. Setelah perpustakaan CDK diinstal, jalankan perintah berikut untuk menginstal`waitcondition-hook-for-aws-fargate-task`: `yarn add waitcondition-hook-for-aws-fargate-task` | Arsitek awan | 
| Bangun aplikasi CDK dan komponen Amazon ECS Anda. | Bangun proyek CDK Anda. Diperlukan sumber daya definisi tugas Amazon ECS. Untuk informasi tentang membuat definisi tugas, lihat [definisi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) dalam dokumentasi Amazon ECS.Contoh berikut menggunakan konstruksi ini:<pre>import * as cdk from 'aws-cdk-lib';<br />import { Vpc } from 'aws-cdk-lib/aws-ec2';<br />import * as ecr from 'aws-cdk-lib/aws-ecr';<br />import * as ecs from 'aws-cdk-lib/aws-ecs';<br />import { Construct } from 'constructs';<br />import { FargateRunner } from 'waitcondition-hook-for-aws-fargate-task';<br />import { Queue } from 'aws-cdk-lib/aws-sqs';<br /><br />export class FargateRunnerStack extends cdk.Stack {<br />    constructor(scope: Construct, id: string, props?: cdk.StackProps) {<br />        super(scope, id, props);<br />        // Define the VPC<br />        const vpc = new Vpc(this, 'MyVpc')<br />        // Define the Fargate Task<br />        const taskDefinition = new ecs.FargateTaskDefinition(this, 'MyTask', {});<br />        // Import exiting ecr repo<br />        const repo = ecr.Repository.fromRepositoryName(this, 'MyRepo', 'RepoName');<br />        // Add a container to the task<br />        taskDefinition.addContainer('MyContainer', {<br />            image: ecs.ContainerImage.fromEcrRepository(repo),<br />        });<br />        // Create the Fargate runner<br />        const myFargateRunner = new FargateRunner(this, 'MyRunner', {<br />            fargateTaskDef: taskDefinition,<br />            timeout: `${60 * 5}`,<br />            vpc: vpc,<br />        });<br />        // Create the SQS queue<br />        const myQueue = new Queue(this, 'MyQueue', {});<br />        // Add dependency<br />        myQueue.node.addDependency(myFargateRunner);<br />    }<br />}</pre> | Arsitek awan | 
| Synth dan luncurkan aplikasi CDK. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)`waitcondition-hook-for-aws-fargate-task`Konstruk menjalankan tugas Fargate.  | Arsitek awan | 

### Bersihkan
<a name="clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pembersihan sumber daya  | Untuk membersihkan sumber daya yang disediakan dari langkah sebelumnya, jalankan perintah berikut:<pre>cdk destroy </pre> | Arsitek awan | 

## Pemecahan masalah
<a name="use-the-aws-fargate-waitcondition-hook-construct-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Kegagalan CloudFormation tumpukan umum | Untuk membantu memecahkan masalah kegagalan CloudFormation tumpukan umum, tambahkan `--no-rollback` tanda seperti yang ditunjukkan pada contoh berikut: <pre>cdk deploy --no-rollback</pre>Perintah ini akan menjeda CloudFormation tumpukan dari memutar kembali, yang memberi Anda sumber daya untuk memecahkan masalah. Untuk informasi selengkapnya, lihat [Memilih cara menangani kegagalan saat menyediakan sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html) dalam dokumentasi. CloudFormation  | 
| AWS Step Functions kegagalan | Mesin AWS Step Functions negara mungkin gagal mengeksekusi karena alasan yang berbeda. Dengan `—disable-rollback` dikonfigurasi, gunakan langkah-langkah berikut untuk memecahkan masalah:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Untuk informasi selengkapnya, lihat [Memecahkan masalah di Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html) dan [Melihat detail eksekusi di konsol Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-view-execution-details.html#exec-details-intf-step-details) dalam dokumentasi. AWS Step Functions  | 
| AWS Lambda kegagalan fungsi | Konstruksi ini menyediakan dua fungsi `CallbackFunction` Lambda: dan. `ErrorhandlerFunction` Mereka bisa gagal karena berbagai alasan seperti pengecualian yang tidak tertangani. Gunakan langkah-langkah berikut untuk memecahkan masalah: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/use-the-aws-fargate-waitcondition-hook-construct.html)Untuk informasi selengkapnya, lihat [Memecahkan masalah di Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-troubleshooting.html) dalam dokumentasi. AWS Lambda  | 

## Sumber daya terkait
<a name="use-the-aws-fargate-waitcondition-hook-construct-resources"></a>

**AWS dokumentasi**
+ [AWS CDK Membangun Referensi API](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html)
+ [Memulai dengan AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [Pelajari cara membuat dan menggunakan sumber daya Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started.html)
+ [Pelajari cara memulai dengan Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
+ [Apa itu AWS CDK?](https://docs.aws.amazon.com/cdk/v2/guide/home.html)

**Sumber daya lainnya**
+ [Waitcondition Hook untuk AWS Fargate tugas](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) (npm)
+ [waitcondition-hook-for-aws-fargate-task](https://pypi.org/project/waitcondition-hook-for-aws-fargate-task/) 1.0.6 (pypi.org)

# Gunakan repositori sumber Git pihak ketiga di AWS CodePipeline
<a name="use-third-party-git-source-repositories-in-aws-codepipeline"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Ringkasan
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-summary"></a>

Pola ini menjelaskan cara menggunakan AWS CodePipeline dengan repositori sumber Git pihak ketiga.

[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) adalah layanan pengiriman berkelanjutan yang mengotomatiskan tugas untuk membangun, menguji, dan menerapkan perangkat lunak Anda. Layanan saat ini mendukung repositori Git yang dikelola oleh CodeCommit, GitHub [AWS](https://aws.amazon.com/codecommit), dan Atlassian Bitbucket. Namun, beberapa perusahaan menggunakan repositori Git pihak ketiga yang terintegrasi dengan layanan single sign-on (SSO) dan Microsoft Active Directory untuk otentikasi. Anda dapat menggunakan repositori Git pihak ketiga ini sebagai sumber untuk CodePipeline dengan membuat tindakan kustom dan webhook.

Webhook adalah pemberitahuan HTTP yang mendeteksi peristiwa di alat lain, seperti GitHub repositori, dan menghubungkan peristiwa eksternal tersebut ke pipeline. Saat Anda membuat webhook di CodePipeline, layanan mengembalikan URL yang dapat Anda gunakan di webhook repositori Git Anda. **Jika Anda mendorong kode ke cabang tertentu dari repositori Git, webhook Git memulai CodePipeline webhook melalui URL ini, dan menetapkan tahap sumber pipeline ke In Progress.** Ketika pipeline dalam keadaan ini, pekerja pekerjaan melakukan polling CodePipeline untuk pekerjaan khusus, menjalankan pekerjaan, dan mengirimkan status keberhasilan atau kegagalan ke CodePipeline. Dalam hal ini, karena pipeline berada dalam tahap sumber, job worker mendapatkan konten repositori Git, membuat zip konten, dan mengunggahnya ke bucket Amazon Simple Storage Service (Amazon S3) tempat artefak untuk pipeline disimpan, menggunakan kunci objek yang disediakan oleh job yang disurvei. Anda juga dapat mengaitkan transisi untuk tindakan kustom dengan peristiwa di Amazon CloudWatch, dan memulai pekerja pekerjaan berdasarkan peristiwa tersebut. Penyiapan ini memungkinkan Anda untuk menggunakan repositori Git pihak ketiga yang tidak didukung oleh layanan sebagai sumber. CodePipeline

## Prasyarat dan batasan
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Sebuah repositori Git yang mendukung webhooks dan dapat terhubung ke URL CodePipeline webhook melalui internet 
+ AWS Command Line Interface (AWS CLI[)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) diinstal [dan](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) dikonfigurasi untuk bekerja dengan akun AWS

## Arsitektur
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-architecture"></a>

Polanya melibatkan langkah-langkah ini:

1. Pengguna melakukan kode ke repositori Git.

1. Webhook Git disebut.

1.  CodePipeline Webhook disebut.

1. Pipeline diatur ke **In Progress**, dan tahap sumber diatur ke status **In Progress**.

1. Tindakan tahap sumber memulai aturan CloudWatch Peristiwa, yang menunjukkan bahwa itu dimulai.

1.  CloudWatch Acara ini memulai fungsi Lambda.

1. Fungsi Lambda mendapatkan detail pekerjaan tindakan kustom.

1. Fungsi Lambda memulai CodeBuild AWS dan meneruskan semua informasi terkait pekerjaan.

1. CodeBuild mendapatkan kunci SSH publik atau kredensyal pengguna untuk akses HTTPS Git dari Secrets Manager.

1. CodeBuild mengkloning repositori Git untuk cabang tertentu.

1. CodeBuild zip arsip dan mengunggahnya ke bucket S3 yang berfungsi sebagai toko artefak. CodePipeline 

![\[Alur kerja yang menggunakan repo sumber Git pihak ketiga sebagai sumber AWS. CodePipeline\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/84284bec-b39d-466a-9fd9-994be2c953df/images/85555dab-7317-40f5-86a7-ccb8987c5bf3.png)


 

## Alat
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-tools"></a>
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/) — AWS CodePipeline adalah layanan [pengiriman berkelanjutan](https://aws.amazon.com/devops/continuous-delivery/) yang dikelola sepenuhnya yang membantu Anda mengotomatiskan saluran pipa rilis untuk pembaruan aplikasi dan infrastruktur yang cepat dan andal. CodePipeline mengotomatiskan fase build, test, dan deployment dari proses rilis Anda untuk setiap perubahan kode, berdasarkan model rilis yang Anda tentukan. Ini memungkinkan Anda untuk dengan cepat dan andal memberikan fitur dan pembaruan. Anda dapat mengintegrasikan AWS CodePipeline dengan layanan pihak ketiga seperti GitHub atau dengan plugin kustom Anda sendiri.
+ [AWS Lambda](https://aws.amazon.com/lambda/) — AWS Lambda memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. Dengan Lambda, Anda dapat menjalankan kode untuk hampir semua jenis aplikasi atau layanan backend tanpa administrasi yang diperlukan. Anda mengunggah kode Anda dan Lambda menangani semua yang diperlukan untuk menjalankan dan menskalakan kode Anda dengan ketersediaan tinggi. Anda dapat mengatur kode untuk memulai secara otomatis dari layanan AWS lain atau memanggilnya langsung dari web atau aplikasi seluler apa pun.
+ [AWS CodeBuild](https://aws.amazon.com/codebuild/) — AWS CodeBuild adalah layanan [integrasi berkelanjutan](https://aws.amazon.com/devops/continuous-integration/) yang dikelola sepenuhnya yang mengkompilasi kode sumber, menjalankan pengujian, dan menghasilkan paket perangkat lunak yang siap digunakan. Dengan CodeBuild, Anda tidak perlu menyediakan, mengelola, dan menskalakan server build Anda sendiri. CodeBuild menskalakan terus menerus dan memproses beberapa build secara bersamaan, sehingga build Anda tidak dibiarkan menunggu dalam antrian. Anda dapat memulai dengan cepat menggunakan lingkungan build yang dikemas sebelumnya, atau Anda dapat membuat lingkungan build khusus yang menggunakan alat build Anda sendiri.
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) — AWS Secrets Manager membantu Anda melindungi rahasia yang diperlukan untuk mengakses aplikasi, layanan, dan sumber daya TI Anda. Layanan ini memungkinkan Anda untuk memutar, mengelola, dan mengambil kredensyal database, kunci API, dan rahasia lainnya sepanjang siklus hidupnya. Pengguna dan aplikasi mengambil rahasia dengan memanggil Secrets Manager APIs, tanpa harus hardcode informasi sensitif dalam teks biasa. Secrets Manager menawarkan rotasi rahasia dengan integrasi bawaan untuk Amazon Relational Database Service (Amazon RDS), Amazon Redshift, dan Amazon DocumentDB. Layanan ini dapat diperluas untuk mendukung jenis rahasia lainnya, termasuk kunci API dan OAuth token. Selain itu, Secrets Manager memungkinkan Anda mengontrol akses ke rahasia dengan menggunakan izin berbutir halus, dan mengaudit rotasi rahasia secara terpusat untuk sumber daya di AWS Cloud, layanan pihak ketiga, dan lingkungan lokal.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) - Amazon CloudWatch adalah layanan pemantauan dan observasi yang dibangun untuk DevOps insinyur, pengembang, insinyur keandalan situs (SREs), dan manajer TI. CloudWatch memberi Anda data dan wawasan yang dapat ditindaklanjuti untuk memantau aplikasi Anda, menanggapi perubahan kinerja di seluruh sistem, mengoptimalkan pemanfaatan sumber daya, dan mendapatkan pandangan terpadu tentang kesehatan operasional. CloudWatch mengumpulkan data pemantauan dan operasional dalam bentuk log, metrik, dan peristiwa, memberi Anda tampilan terpadu tentang sumber daya, aplikasi, dan layanan AWS yang berjalan di AWS dan server lokal. Anda dapat menggunakannya CloudWatch untuk mendeteksi perilaku anomali di lingkungan Anda, menyetel alarm, memvisualisasikan log dan metrik secara berdampingan, mengambil tindakan otomatis, memecahkan masalah, dan menemukan wawasan agar aplikasi Anda berjalan lancar.
+ [Amazon S3](https://aws.amazon.com/s3/) - Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek yang memungkinkan Anda menyimpan dan melindungi sejumlah data untuk berbagai kasus penggunaan, seperti situs web, aplikasi seluler, pencadangan dan pemulihan, arsip, aplikasi perusahaan, perangkat IoT, dan analitik data besar. Amazon S3 menyediakan fitur easy-to-use manajemen untuk membantu Anda mengatur data dan mengonfigurasi kontrol akses yang disetel dengan baik untuk memenuhi persyaratan bisnis, organisasi, dan kepatuhan spesifik Anda.

## Epik
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-epics"></a>

### Buat tindakan kustom di CodePipeline
<a name="create-a-custom-action-in-codepipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat tindakan kustom menggunakan AWS CLI atau AWS. CloudFormation | Langkah ini melibatkan pembuatan tindakan sumber khusus yang dapat digunakan dalam tahap sumber pipeline di akun AWS Anda di wilayah tertentu. Anda harus menggunakan AWS CLI atau AWS CloudFormation (bukan konsol) untuk membuat tindakan sumber kustom. Untuk informasi selengkapnya tentang perintah dan langkah yang dijelaskan dalam epos ini dan epos lainnya, lihat bagian “Sumber daya terkait” di akhir pola ini. Di AWS CLI, gunakan perintah. create-custom-action-type Gunakan --configuration-properties untuk menyediakan semua parameter yang diperlukan agar pekerja pekerjaan dapat diproses saat melakukan polling CodePipeline untuk suatu pekerjaan. Pastikan untuk mencatat nilai yang diberikan ke opsi --provider dan --action-version, sehingga Anda dapat menggunakan nilai yang sama saat membuat pipeline dengan tahap sumber kustom ini. Anda juga dapat membuat tindakan sumber kustom di AWS CloudFormation dengan menggunakan jenis sumber daya AWS::CodePipeline::CustomActionType. | AWS Umum | 

### Mengatur otentikasi
<a name="set-up-authentication"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat key pair SSH. | Buat key pair Secure Shell (SSH). Untuk instruksi, lihat GitHub dokumentasi. | Sistem/insinyur DevOps  | 
| Buat rahasia di AWS Secrets Manager. | Salin konten kunci pribadi dari key pair SSH dan buat rahasia di AWS Secrets Manager. Rahasia ini digunakan untuk otentikasi saat mengakses repositori Git. | AWS Umum | 
| Tambahkan kunci publik ke repositori Git. | Tambahkan kunci publik dari key pair SSH ke pengaturan akun repositori Git, untuk otentikasi terhadap kunci pribadi. | Sistem/insinyur DevOps  | 

### Buat pipeline dan webhook
<a name="create-a-pipeline-and-webhook"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat pipeline yang menyertakan tindakan sumber kustom. | Buat pipeline di CodePipeline. Saat Anda mengonfigurasi tahap sumber, pilih tindakan sumber kustom yang Anda buat sebelumnya. Anda dapat melakukan ini di CodePipeline konsol AWS atau di AWS CLI. CodePipeline meminta Anda untuk properti konfigurasi yang Anda tetapkan pada tindakan kustom. Informasi ini diperlukan bagi pekerja kerja untuk memproses pekerjaan untuk tindakan kustom. Ikuti wizard dan buat tahap selanjutnya untuk pipeline. | AWS Umum | 
| Buat CodePipeline webhook. | Buat webhook untuk pipeline yang Anda buat dengan aksi sumber kustom. Anda harus menggunakan AWS CLI atau AWS CloudFormation (bukan konsol) untuk membuat webhook. Di AWS CLI, jalankan perintah put-webhook dan berikan nilai yang sesuai untuk opsi webhook. Catat URL webhook yang dikembalikan perintah. Jika Anda menggunakan AWS CloudFormation untuk membuat webhook, gunakan jenis AWS::CodePipeline::Webhook sumber daya. Pastikan untuk menampilkan URL webhook dari sumber daya yang dibuat, dan catat itu. | AWS Umum | 
| Buat fungsi dan proyek Lambda. CodeBuild  | Pada langkah ini, Anda menggunakan Lambda dan CodeBuild untuk membuat pekerja pekerjaan yang akan melakukan polling CodePipeline untuk permintaan pekerjaan untuk tindakan kustom, menjalankan pekerjaan, dan mengembalikan hasil status ke. CodePipeline Buat fungsi Lambda yang diprakarsai oleh aturan Amazon CloudWatch Events saat tahap tindakan sumber kustom dari pipeline bertransisi ke “Sedang Berlangsung.” Ketika fungsi Lambda dimulai, itu harus mendapatkan detail pekerjaan tindakan khusus dengan melakukan polling untuk pekerjaan. Anda dapat menggunakan PollForJobs API untuk mengembalikan informasi ini. Setelah informasi pekerjaan yang disurvei diperoleh, fungsi Lambda harus mengembalikan pengakuan, dan kemudian memproses informasi dengan data yang diperolehnya dari properti konfigurasi untuk tindakan kustom. Ketika pekerja siap untuk berbicara dengan repositori Git, Anda dapat memulai sebuah CodeBuild proyek, karena akan lebih mudah untuk menangani tugas Git dengan menggunakan klien SSH. | AWS Umum, pengembang kode | 

### Buat acara di CloudWatch
<a name="create-an-event-in-cloudwatch"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat aturan CloudWatch Acara. | Buat aturan CloudWatch Peristiwa yang memulai fungsi Lambda sebagai target setiap kali tahap tindakan kustom pipeline bertransisi ke “Sedang Berlangsung.” | AWS Umum | 

## Sumber daya terkait
<a name="use-third-party-git-source-repositories-in-aws-codepipeline-resources"></a>

**Membuat tindakan kustom di CodePipeline**
+ [Buat dan tambahkan tindakan kustom di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [AWS::CodePipeline::CustomActionType sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-customactiontype.html)

**Menyiapkan otentikasi**
+ [Membuat dan Mengelola Rahasia dengan AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/managing-secrets.html)

**Membuat pipeline dan webhook**
+ [Buat Pipeline di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html)
+ [referensi perintah put-webhook](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/put-webhook.html)
+ [AWS::CodePipeline::Webhook sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-webhook.html)
+ [PollForJobs Referensi API](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html)
+ [Buat dan Tambahkan Tindakan Kustom di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-create-custom-action.html)
+ [Buat proyek build di AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html)

**Membuat acara**
+ [Mendeteksi dan bereaksi terhadap perubahan status pipeline dengan Amazon CloudWatch Events](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html)

**Referensi tambahan**
+ [Bekerja dengan jaringan pipa di CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines.html)
+ [Panduan pengembang AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

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

# Lebih banyak pola
<a name="devops-more-patterns-pattern-list"></a>

**Topics**
+ [Akses aplikasi kontainer secara pribadi di Amazon EKS menggunakan AWS PrivateLink dan Network Load Balancer](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Kaitkan AWS CodeCommit repositori di satu dengan Akun AWS Amazon SageMaker AI Studio Classic di akun lain](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [Mengotomatiskan pembuatan akun dengan menggunakan Akselerator Zona Landing di AWS](automate-account-creation-lza.md)
+ [Otomatis menambahkan atau memperbarui entri registri Windows menggunakan AWS Systems Manager](automate-adding-or-updating-windows-registry-entries-using-aws-systems-manager.md)
+ [Mengotomatiskan pencadangan untuk Amazon RDS untuk instans DB Amazon RDS for PostgreSQL dengan menggunakan AWS Batch](automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch.md)
+ [Otomatiskan penerapan aplikasi bersarang menggunakan AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [Otomatiskan penerapan Node Termination Handler di Amazon EKS dengan menggunakan pipeline CI/CD](automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.md)
+ [Otomatiskan konfigurasi RabbitMQ di Amazon MQ](automate-rabbitmq-configuration-in-amazon-mq.md)
+ [Otomatiskan replikasi instans Amazon RDS di seluruh Akun AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Secara otomatis membangun dan menyebarkan aplikasi Java ke Amazon EKS menggunakan pipeline CI/CD](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [Secara otomatis menghasilkan model PynamoDB dan fungsi CRUD untuk Amazon DynamoDB dengan menggunakan aplikasi Python](automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.md)
+ [Secara otomatis memvalidasi dan menerapkan kebijakan dan peran IAM dengan menggunakan CodePipeline, IAM Access Analyzer, dan makro AWS CloudFormation](automatically-validate-and-deploy-iam-policies-and-roles-in-an-aws-account-by-using-codepipeline-iam-access-analyzer-and-aws-cloudformation-macros.md)
+ [Cadangkan server Sun SPARC di emulator Stromasys Charon-SSP di AWS Cloud](back-up-sun-sparc-servers-in-the-stromasys-charon-ssp-emulator-on-the-aws-cloud.md)
+ [Membangun pipeline data untuk menyerap, mengubah, dan menganalisis data Google Analytics menggunakan AWS DataOps Development Kit](build-a-data-pipeline-to-ingest-transform-and-analyze-google-analytics-data-using-the-aws-dataops-development-kit.md)
+ [Bangun PAC Server Perusahaan Fokus Mikro dengan Amazon EC2 Auto Scaling dan Systems Manager](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [Buat pipeline untuk gambar kontainer yang diperkeras menggunakan EC2 Image Builder dan Terraform](build-a-pipeline-for-hardened-container-images-using-ec2-image-builder-and-terraform.md)
+ [Membangun MLOps alur kerja dengan menggunakan Amazon SageMaker AI dan Azure DevOps](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [Memusatkan resolusi DNS dengan menggunakan Microsoft Active AWS Managed Microsoft AD Directory dan lokal](centralize-dns-resolution-by-using-aws-managed-microsoft-ad-and-on-premises-microsoft-active-directory.md)
+ [Bersihkan AWS Account Factory untuk sumber daya Terraform (AFT) dengan aman setelah kehilangan file status](clean-up-aft-resources-safely-after-state-file-loss.md)
+ [Konfigurasikan logging untuk aplikasi.NET di Amazon CloudWatch Logs dengan menggunakan NLog](configure-logging-for-net-applications-in-amazon-cloudwatch-logs-by-using-nlog.md)
+ [Salin gambar wadah Amazon ECR di seluruh Akun AWS dan Wilayah AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Buat image container Docker kustom untuk SageMaker dan gunakan untuk pelatihan model di AWS Step Functions](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [Buat pipeline di Wilayah AWS yang tidak mendukung AWS CodePipeline](create-a-pipeline-in-aws-regions-that-don-t-support-aws-codepipeline.md)
+ [Buat alarm untuk metrik kustom menggunakan deteksi anomali Amazon CloudWatch](create-alarms-for-custom-metrics-using-amazon-cloudwatch-anomaly-detection.md)
+ [Sesuaikan nama peran default dengan menggunakan AWS CDK aspek dan lubang keluar](customize-default-role-names-by-using-aws-cdk-aspects-and-escape-hatches.md)
+ [Menerapkan pipeline yang secara bersamaan mendeteksi masalah keamanan di beberapa kiriman kode](deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.md)
+ [Menerapkan dan mengelola data lake tanpa server di AWS Cloud dengan menggunakan infrastruktur sebagai kode](deploy-and-manage-a-serverless-data-lake-on-the-aws-cloud-by-using-infrastructure-as-code.md)
+ [Menerapkan aplikasi kontainer saat AWS IoT Greengrass V2 berjalan sebagai wadah Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)
+ [Menerapkan resource dan paket Kubernetes menggunakan Amazon EKS dan repositori bagan Helm di Amazon S3](deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3.md)
+ [Menerapkan aplikasi multi-stack menggunakan AWS CDK dengan TypeScript](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [Menyebarkan validasi keamanan pengkodean real-time dengan menggunakan server MCP dengan Kiro dan asisten pengkodean lainnya](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [Menerapkan instance cluster failover SQL Server di Amazon EC2 dan Amazon FSx dengan menggunakan Terraform](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Terapkan Otomatisasi Keamanan untuk AWS WAF solusi dengan menggunakan Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Kembangkan asisten berbasis obrolan AI generatif tingkat lanjut dengan menggunakan RAG dan prompt ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [Aktifkan Amazon GuardDuty secara kondisional dengan menggunakan templat AWS CloudFormation](enable-amazon-guardduty-conditionally-by-using-aws-cloudformation-templates.md)
+ [Siapkan penskalaan otomatis berbasis peristiwa di Amazon EKS dengan menggunakan Amazon EKS Pod Identity dan KEDA](event-driven-auto-scaling-with-eks-pod-identity-and-keda.md)
+ [Buat rekomendasi yang dipersonalisasi dan diberi peringkat ulang menggunakan Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Dapatkan notifikasi Amazon SNS saat status kunci kunci AWS KMS berubah](get-amazon-sns-notifications-when-the-key-state-of-an-aws-kms-key-changes.md)
+ [Mengatur set izin untuk beberapa akun dengan menggunakan Account Factory untuk Terraform](govern-permission-sets-aft.md)
+ [Identifikasi gambar kontainer duplikat secara otomatis saat bermigrasi ke repositori Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [Menerapkan versi API berbasis jalur dengan menggunakan domain kustom di Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Tingkatkan kinerja operasional dengan mengaktifkan Amazon DevOps Guru di beberapa Wilayah AWS, akun, dan OUs dengan AWS CDK](improve-operational-performance-by-enabling-amazon-devops-guru-across-multiple-aws-regions-accounts-and-ous-with-the-aws-cdk.md)
+ [Instal Agen SSM di node pekerja Amazon EKS dengan menggunakan Kubernetes DaemonSet](install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset.md)
+ [Integrasikan Stonebranch Universal Controller dengan AWS Mainframe Modernisasi](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [Modernisasi mainframe: aktif AWS dengan Rocket DevOps Software Enterprise Suite](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [Kelola set AWS IAM Identity Center izin sebagai kode dengan menggunakan AWS CodePipeline](manage-aws-iam-identity-center-permission-sets-as-code-by-using-aws-codepipeline.md)
+ [Kelola set AWS izin secara dinamis dengan menggunakan Terraform](manage-aws-permission-sets-dynamically-by-using-terraform.md)
+ [Mengelola aplikasi kontainer lokal dengan menyiapkan Amazon ECS Anywhere dengan AWS CDK](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [Mengelola AWS Organizations kebijakan sebagai kode dengan menggunakan AWS CodePipeline dan Amazon Bedrock](manage-organizations-policies-as-code.md)
+ [Migrasikan data DNS secara massal ke zona host pribadi Amazon Route 53](migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.md)
+ [Migrasi aplikasi yang dihosting IIS ke Amazon dengan menggunakan appcmd.exe EC2](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Pantau penggunaan Gambar Mesin Amazon bersama di beberapa Akun AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Mengatur pipeline ETL dengan validasi, transformasi, dan partisi menggunakan AWS Step Functions](orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.md)
+ [Mengotomatiskan blue/green penyebaran database global Amazon Aurora dengan menggunakan prinsip IAc](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [Pertahankan ruang IP yang dapat dirutekan dalam desain VPC multi-akun untuk subnet non-beban kerja](preserve-routable-ip-space-in-multi-account-vpc-designs-for-non-workload-subnets.md)
+ [Menyediakan produk Terraform AWS Service Catalog dengan menggunakan repositori kode](provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.md)
+ [Jalankan tugas AWS Systems Manager Automation secara sinkron dari AWS Step Functions](run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.md)
+ [Siapkan CI/CD pipeline untuk beban kerja hybrid di Amazon ECS Anywhere dengan menggunakan AWS CDK dan GitLab](set-up-a-ci-cd-pipeline-for-hybrid-workloads-on-amazon-ecs-anywhere-by-using-aws-cdk-and-gitlab.md)
+ [Siapkan CI/CD pipeline untuk migrasi database dengan menggunakan Terraform](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [Menyiapkan infrastruktur Multi-AZ untuk SQL Server Always On FCI dengan menggunakan Amazon FSx](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [Siapkan bot UiPath RPA secara otomatis di Amazon EC2 dengan menggunakan AWS CloudFormation](set-up-uipath-rpa-bots-automatically-on-amazon-ec2-by-using-aws-cloudformation.md)
+ [Sederhanakan otentikasi aplikasi dengan TLS timbal balik di Amazon ECS dengan menggunakan Application Load Balancer](simplify-application-authentication-with-mutual-tls-in-amazon-ecs.md)
+ [Orientasi penyewa dalam arsitektur SaaS untuk model silo menggunakan C\$1 dan AWS CDK](tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.md)
+ [Gunakan Terraform untuk mengaktifkan Amazon secara otomatis GuardDuty untuk organisasi](use-terraform-to-automatically-enable-amazon-guardduty-for-an-organization.md)
+ [Gunakan agen Amazon Bedrock untuk mengotomatiskan pembuatan kontrol entri akses di Amazon EKS melalui petunjuk berbasis teks](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [Validasi Account Factory untuk kode Terraform (AFT) secara lokal](validate-account-factory-for-terraform-aft-code-locally.md)
+ [Visualisasikan hasil AI/ML model menggunakan Flask dan AWS Elastic Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)