

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

# Hitung
<a name="compute-pattern-list"></a>

**Topics**
+ [Kontainer & layanan mikro](containersandmicroservices-pattern-list.md)
+ [Nirserver](serverless-pattern-list.md)
+ [Jaringan](networking-pattern-list.md)
+ [Pengiriman konten](contentdelivery-pattern-list.md)

# Kontainer & layanan mikro
<a name="containersandmicroservices-pattern-list"></a>

**Topics**
+ [Akses database Amazon Neptunus dari wadah Amazon EKS](access-amazon-neptune-database-from-amazon-eks-container.md)
+ [Akses aplikasi kontainer secara pribadi di Amazon ECS dengan menggunakan AWS PrivateLink dan Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.md)
+ [Akses aplikasi kontainer secara pribadi di Amazon ECS dengan menggunakan AWS Fargate, PrivateLink AWS, dan Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [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)
+ [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 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)
+ [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)
+ [Salin gambar wadah Amazon ECR di seluruh Akun AWS dan Wilayah AWS](copy-ecr-container-images-across-accounts-regions.md)
+ [Buat definisi tugas Amazon ECS dan pasang sistem file pada EC2 instans menggunakan Amazon EFS](create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.md)
+ [Menyebarkan fungsi Lambda dengan gambar kontainer](deploy-lambda-functions-with-container-images.md)
+ [Menerapkan layanan mikro Java di Amazon ECS menggunakan AWS Fargate](deploy-java-microservices-on-amazon-ecs-using-aws-fargate.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 cluster CockroachDB di Amazon EKS dengan menggunakan Terraform](deploy-cockroachdb-on-eks-using-terraform.md)
+ [Menerapkan contoh layanan mikro Java di Amazon EKS dan mengekspos layanan mikro menggunakan Application Load Balancer](deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.md)
+ [Menerapkan aplikasi berbasis GRPC di cluster Amazon EKS dan mengaksesnya dengan Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.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)
+ [Menyebarkan wadah dengan menggunakan Elastic Beanstalk](deploy-containers-by-using-elastic-beanstalk.md)
+ [Hasilkan alamat IP keluar statis menggunakan fungsi Lambda, Amazon VPC, dan arsitektur tanpa server](generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.md)
+ [Identifikasi gambar kontainer duplikat secara otomatis saat bermigrasi ke repositori Amazon ECR](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.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)
+ [Instal Agen dan CloudWatch agen SSM di node pekerja Amazon EKS menggunakan preBootstrapCommands](install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.md)
+ [Migrasikan Pengontrol Ingress NGINX saat mengaktifkan Mode Otomatis Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.md)
+ [Migrasikan beban kerja kontainer Anda dari Azure Red Hat OpenShift (ARO) ke (ROSA Layanan OpenShift Red Hat di AWS )](migrate-container-workloads-from-aro-to-rosa.md)
+ [Jalankan tugas Amazon ECS di Amazon WorkSpaces dengan Amazon ECS Anywhere](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.md)
+ [Jalankan wadah API Docker web ASP.NET Core pada instance Amazon Linux EC2](run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.md)
+ [Jalankan beban kerja stateful dengan penyimpanan data persisten dengan menggunakan Amazon EFS di Amazon EKS dengan AWS Fargate](run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.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)
+ [Merampingkan penerapan PostgreSQL di Amazon EKS dengan menggunakan PGO](streamline-postgresql-deployments-amazon-eks-pgo.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)
+ [Lebih banyak pola](containersandmicroservices-more-patterns-pattern-list.md)

# Akses database Amazon Neptunus dari wadah Amazon EKS
<a name="access-amazon-neptune-database-from-amazon-eks-container"></a>

*Ramakrishnan Palaninathan, Amazon Web Services*

## Ringkasan
<a name="access-amazon-neptune-database-from-amazon-eks-container-summary"></a>

Pola ini membuat koneksi antara Amazon Neptunus, yang merupakan database grafik yang dikelola sepenuhnya, dan Amazon Elastic Kubernetes Service (Amazon EKS), layanan orkestrasi kontainer, untuk mengakses database Neptunus. Cluster DB Neptunus terbatas dalam virtual private cloud (VPC) aktif. AWS Untuk alasan ini, mengakses Neptunus memerlukan konfigurasi VPC yang cermat untuk mengaktifkan konektivitas.

Tidak seperti Amazon Relational Database Service (Amazon RDS) untuk PostgreSQL, Neptune tidak bergantung pada kredensyal akses database yang khas. Sebaliknya, ia menggunakan peran AWS Identity and Access Management (IAM) untuk otentikasi. Oleh karena itu, menghubungkan ke Neptunus dari Amazon EKS melibatkan pengaturan peran IAM dengan izin yang diperlukan untuk mengakses Neptunus.

Selain itu, titik akhir Neptunus hanya dapat diakses dalam VPC tempat cluster berada. Ini berarti Anda harus mengonfigurasi pengaturan jaringan untuk memfasilitasi komunikasi antara Amazon EKS dan Neptunus. Bergantung pada kebutuhan spesifik dan preferensi jaringan Anda, ada [berbagai pendekatan untuk mengonfigurasi VPC untuk](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-vpc.html) memungkinkan konektivitas tanpa batas antara Neptunus dan Amazon EKS. Setiap metode menawarkan keuntungan dan pertimbangan yang berbeda, yang memberikan fleksibilitas dalam merancang arsitektur database Anda agar sesuai dengan kebutuhan aplikasi Anda.

## Prasyarat dan batasan
<a name="access-amazon-neptune-database-from-amazon-eks-container-prereqs"></a>

**Prasyarat**
+ [Instal **kubectl** versi terbaru (lihat instruksi).](https://kubernetes.io/docs/tasks/tools/#kubectl) Untuk memeriksa versi Anda, jalankan: 

  ```
  kubectl version --short
  ```
+ [Instal versi terbaru **eksctl** (lihat instruksi).](https://eksctl.io/installation/) Untuk memeriksa versi Anda, jalankan: 

  ```
  eksctl info
  ```
+ Instal versi terbaru dari AWS Command Line Interface (AWS CLI) versi 2 (lihat [instruksi](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)). Untuk memeriksa versi Anda, jalankan: 

  ```
  aws --version
  ```
+ [Buat cluster DB Neptunus (lihat instruksi).](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-cfn-create.html) Pastikan untuk membuat komunikasi antara VPC cluster dan Amazon EKS melalui [VPC peering](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html),, [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-getting-started.html)atau metode lain. Pastikan juga bahwa status cluster “tersedia” dan memiliki aturan masuk pada port 8182 untuk grup keamanan.
+ [Konfigurasikan penyedia OpenID Connect (OIDC) IAM di kluster Amazon EKS yang ada (lihat instruksi).](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)

**Versi produk**
+ [Amazon EKS 1.27](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)
+ [Mesin Amazon Neptunus versi 1.3.0.0 (2023-11-15)](https://docs.aws.amazon.com/neptune/latest/userguide/engine-releases-1.3.0.0.html)

## Arsitektur
<a name="access-amazon-neptune-database-from-amazon-eks-container-architecture"></a>

Diagram berikut menunjukkan hubungan antara pod Kubernetes di cluster Amazon EKS dan Neptunus untuk menyediakan akses ke database Neptunus.

![\[Menghubungkan pod di node Kubernetes dengan Amazon Neptunus.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/2fcf9e00-1664-462a-825e-b0fdd962f478/images/86da67e5-340e-4b29-acc6-2da416ce57eb.png)


**Otomatisasi dan skala**

Anda dapat menggunakan Amazon EKS [Horizontal Pod Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) untuk menskalakan solusi ini.

## Alat
<a name="access-amazon-neptune-database-from-amazon-eks-container-tools"></a>

**Layanan**
+ [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.
+ [Amazon Neptunus](https://docs.aws.amazon.com/neptune/latest/userguide/intro.html) adalah layanan database grafik yang membantu Anda membangun dan menjalankan aplikasi yang bekerja dengan kumpulan data yang sangat terhubung.

## Praktik terbaik
<a name="access-amazon-neptune-database-from-amazon-eks-container-best-practices"></a>

Untuk praktik terbaik, lihat [Identity and Access Management](https://aws.github.io/aws-eks-best-practices/security/docs/iam/) di *Panduan Praktik Terbaik Amazon EKS*.

## Epik
<a name="access-amazon-neptune-database-from-amazon-eks-container-epics"></a>

### Tetapkan variabel lingkungan
<a name="set-environment-variables"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi konteks cluster. | Sebelum berinteraksi dengan klaster Amazon EKS menggunakan Helm atau alat baris perintah lainnya, Anda harus menentukan variabel lingkungan yang merangkum detail klaster Anda. Variabel-variabel ini digunakan dalam perintah berikutnya untuk memastikan bahwa mereka menargetkan cluster dan sumber daya yang benar.Pertama, konfirmasikan bahwa Anda beroperasi dalam konteks cluster yang benar. Ini memastikan bahwa setiap perintah berikutnya dikirim ke cluster Kubernetes yang dimaksud. Untuk memverifikasi konteks saat ini, jalankan perintah berikut.<pre>kubectl config current-context</pre> | Administrator AWS, Administrator cloud | 
| Tentukan `CLUSTER_NAME` variabelnya. | Tentukan variabel `CLUSTER_NAME` lingkungan untuk klaster Amazon EKS Anda. Dalam perintah berikut, ganti nilai sampel `us-west-2` dengan yang benar Wilayah AWS untuk cluster Anda. Ganti nilai sampel `eks-workshop` dengan nama cluster yang ada.<pre>export CLUSTER_NAME=$(aws eks describe-cluster --region us-west-2 --name eks-workshop --query "cluster.name" --output text)</pre> | Administrator AWS, Administrator cloud | 
| Validasi keluaran. | Untuk memvalidasi bahwa variabel telah diatur dengan benar, jalankan perintah berikut.<pre>echo $CLUSTER_NAME</pre>Verifikasi bahwa output dari perintah ini cocok dengan input yang Anda tentukan pada langkah sebelumnya. | Administrator AWS, Administrator cloud | 

### Buat peran IAM dan kaitkan dengan Kubernetes
<a name="create-iam-role-and-associate-it-with-kubernetes"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat akun layanan. | Anda menggunakan [peran IAM untuk akun layanan untuk memetakan akun layanan](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) Kubernetes Anda ke peran IAM, untuk mengaktifkan manajemen izin berbutir halus untuk aplikasi Anda yang berjalan di Amazon EKS. Anda dapat menggunakan [eksctl](https://eksctl.io/) untuk membuat dan mengaitkan peran IAM dengan akun layanan Kubernetes tertentu dalam klaster Amazon EKS Anda. Kebijakan AWS terkelola `NeptuneFullAccess` memungkinkan akses tulis dan baca ke klaster Neptunus yang Anda tentukan.Anda harus memiliki [endpoint OIDC](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html?sc_channel=el&sc_campaign=appswave&sc_content=eks-integrate-secrets-manager&sc_geo=mult&sc_country=mult&sc_outcome=acq) yang terkait dengan cluster Anda sebelum menjalankan perintah ini.Buat akun layanan yang ingin Anda kaitkan dengan kebijakan AWS terkelola bernama`NeptuneFullAccess`.<pre>eksctl create iamserviceaccount --name eks-neptune-sa --namespace default --cluster $CLUSTER_NAME --attach-policy-arn arn:aws:iam::aws:policy/NeptuneFullAccess --approve --override-existing-serviceaccounts</pre>di `eks-neptune-sa ` mana nama akun layanan yang ingin Anda buat.Setelah selesai, perintah ini menampilkan respons berikut:<pre>2024-02-07 01:12:39 [ℹ] created serviceaccount "default/eks-neptune-sa"</pre> | Administrator AWS, Administrator cloud | 
| Verifikasi bahwa akun sudah diatur dengan benar. | Pastikan akun `eks-neptune-sa` layanan diatur dengan benar di namespace default di cluster Anda.<pre>kubectl get sa eks-neptune-sa -o yaml</pre>Outputnya akan terlihat seperti ini:<pre>apiVersion: v1<br />kind: ServiceAccount<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::123456789123:role/eksctl-eks-workshop-addon-iamserviceaccount-d-Role1-Q35yKgdQOlmM<br />  creationTimestamp: "2024-02-07T01:12:39Z"<br />  labels:<br />    app.kubernetes.io/managed-by: eksctl<br />  name: eks-neptune-sa<br />  namespace: default<br />  resourceVersion: "5174750"<br />  uid: cd6ba2f7-a0f5-40e1-a6f4-4081e0042316</pre> | Administrator AWS, Administrator cloud | 
| Periksa konektivitas. | Terapkan pod sampel yang disebut `pod-util` dan periksa konektivitas dengan Neptunus.<pre>apiVersion: v1<br />kind: Pod<br />metadata:<br />  name: pod-util<br />  namespace: default<br />spec:<br />  serviceAccountName: eks-neptune-sa<br />  containers:<br />  - name: pod-util<br />    image: public.ecr.aws/patrickc/troubleshoot-util<br />    command:<br />      - sleep<br />      - "3600"<br />    imagePullPolicy: IfNotPresent</pre><pre>kubectl apply -f pod-util.yaml</pre><pre>kubectl exec --stdin --tty pod-util -- /bin/bash<br />bash-5.1# curl -X POST -d '{"gremlin":"g.V().limit(1)"}' https://db-neptune-1.cluster-xxxxxxxxxxxx.us-west-2.neptune.amazonaws.com:8182/gremlin<br />{"requestId":"a4964f2d-12b1-4ed3-8a14-eff511431a0e","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[]},"meta":{"@type":"g:Map","@value":[]}}}<br />bash-5.1# exit<br />exit</pre> | Administrator AWS, Administrator cloud | 

### Validasi aktivitas koneksi
<a name="validate-connection-activity"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan otentikasi database IAM. | Secara default, otentikasi database IAM dinonaktifkan saat Anda membuat cluster DB Neptunus. Anda dapat mengaktifkan atau menonaktifkan otentikasi database IAM dengan menggunakan file. Konsol Manajemen AWSIkuti langkah-langkah dalam AWS dokumentasi untuk [mengaktifkan otentikasi database IAM di Neptunus](https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-enable.html). | Administrator AWS, Administrator cloud | 
| Verifikasi koneksi. | Pada langkah ini, Anda berinteraksi dengan `pod-util` wadah, yang sudah dalam status berjalan, untuk menginstal **awscurl** dan memverifikasi koneksi.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-amazon-neptune-database-from-amazon-eks-container.html) | Administrator AWS, Administrator cloud | 

## Pemecahan masalah
<a name="access-amazon-neptune-database-from-amazon-eks-container-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Tidak dapat mengakses database Neptunus. | Tinjau kebijakan IAM yang dilampirkan ke akun layanan. Pastikan bahwa itu memungkinkan tindakan yang diperlukan (misalnya,`neptune:Connec,neptune:DescribeDBInstances`) untuk operasi yang ingin Anda jalankan. | 

## Sumber daya terkait
<a name="access-amazon-neptune-database-from-amazon-eks-container-resources"></a>
+ [Berikan akses beban kerja Kubernetes untuk AWS menggunakan Akun Layanan Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html) (dokumentasi Amazon EKS)
+ [Peran IAM untuk akun layanan](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) (dokumentasi Amazon EKS)
+ [Membuat cluster DB Neptunus baru (dokumentasi Amazon Neptunus](https://docs.aws.amazon.com/neptune/latest/userguide/get-started-create-cluster.html))

# Akses aplikasi kontainer secara pribadi di Amazon ECS dengan menggunakan AWS PrivateLink dan Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Ringkasan
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Pola ini menjelaskan cara meng-host aplikasi kontainer Docker secara pribadi di Amazon Elastic Container Service (Amazon ECS) di belakang Network Load Balancer, dan mengakses aplikasi dengan menggunakan AWS. PrivateLink Anda kemudian dapat menggunakan jaringan pribadi untuk mengakses layanan dengan aman di Amazon Web Services (AWS) Cloud. Amazon Relational Database Service (Amazon RDS) menghosting database relasional untuk aplikasi yang berjalan di Amazon ECS dengan ketersediaan tinggi (HA). Amazon Elastic File System (Amazon EFS) digunakan jika aplikasi memerlukan penyimpanan persisten.

Layanan Amazon ECS yang menjalankan aplikasi Docker, dengan Network Load Balancer di ujung depan, dapat dikaitkan dengan titik akhir virtual private cloud (VPC) untuk akses melalui AWS. PrivateLink Layanan endpoint VPC ini kemudian dapat dibagikan dengan orang lain VPCs dengan menggunakan titik akhir VPC mereka.

Anda juga dapat menggunakan [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) alih-alih grup Amazon Auto EC2 Scaling. Untuk informasi selengkapnya, lihat [Mengakses aplikasi container secara pribadi di Amazon ECS dengan menggunakan AWS Fargate, PrivateLink AWS, dan Network Load Balancer](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html?did=pg_card).

## Prasyarat dan batasan
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [AWS Command Line Interface (AWS CLI) versi](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2, diinstal dan dikonfigurasi di Linux, macOS, atau Windows
+ [Docker](https://www.docker.com/), diinstal dan dikonfigurasi di Linux, macOS, atau Windows
+ Aplikasi yang berjalan di Docker

## Arsitektur
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Menggunakan AWS PrivateLink untuk mengakses aplikasi kontainer di Amazon ECS di belakang Network Load Balancer.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a316bf46-24db-4514-957d-abc60f8f6962/images/573951ed-74bb-4023-9d9c-43e77e4f8eda.png)


 

**Tumpukan teknologi**
+ Amazon CloudWatch
+ Amazon Elastic Compute Cloud (Amazon EC2)
+  EC2 Auto Scaling Amazon
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Lambda
+ AWS PrivateLink
+ AWS Secrets Manager
+ Penyeimbang Beban Aplikasi
+ Penyeimbang Beban Jaringan
+ VPC

*Otomatisasi dan skala*
+ Anda dapat menggunakan [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) untuk membuat pola ini dengan menggunakan [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Alat
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [Amazon EC2 — Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas komputasi yang dapat diskalakan di AWS Cloud.
+ [ EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) Amazon — Amazon EC2 Auto Scaling membantu Anda memastikan bahwa Anda memiliki jumlah instans EC2 Amazon yang benar yang tersedia untuk menangani pemuatan aplikasi Anda.
+ [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, cepat, yang memudahkan untuk menjalankan, menghentikan, dan mengelola kontainer di cluster.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) — Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri image container AWS terkelola yang aman, terukur, dan andal.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) menyediakan sistem file NFS elastis yang sederhana, dapat diskalakan, dan dikelola sepenuhnya untuk digunakan dengan layanan AWS Cloud dan sumber daya lokal.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — Lambda adalah layanan komputasi untuk menjalankan kode tanpa menyediakan atau mengelola server.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/) - Amazon Relational Database Service (Amazon RDS) adalah layanan web yang memudahkan pengaturan, pengoperasian, dan skala database relasional di AWS Cloud.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/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.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) — Secrets Manager membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan menyediakan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) — Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan sumber daya AWS ke jaringan virtual yang telah Anda tentukan.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — Elastic Load Balancing mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target, seperti instans EC2 Amazon, kontainer, dan alamat IP, di beberapa Availability Zone.
+ [Docker](https://www.docker.com/) — Docker membantu pengembang untuk mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.

## Epik
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Buat komponen jaringan
<a name="create-networking-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sebuah VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat penyeimbang beban
<a name="create-the-load-balancers"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat sistem file Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sistem file Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Pasang target untuk subnet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Verifikasi bahwa subnet dipasang sebagai target.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat Bucket S3
<a name="create-an-s3-bucket"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat ember S3.  | Buka konsol Amazon S3 dan buat bucket S3 untuk menyimpan aset statis aplikasi Anda, jika diperlukan. | Administrator awan | 

### Buat rahasia Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat kunci AWS KMS untuk mengenkripsi rahasia Secrets Manager. | Buka konsol AWS Key Management Service (AWS KMS) dan buat kunci KMS. | Administrator awan | 
|  Buat rahasia Secrets Manager untuk menyimpan kata sandi Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator Awan  | 

### Buat instans Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat grup subnet DB.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat instance Amazon RDS. | Buat dan konfigurasikan instans Amazon RDS dalam subnet pribadi. Pastikan **Multi-AZ** dihidupkan untuk HA. | Administrator awan | 
| Muat data ke instans Amazon RDS.  | Muat data relasional yang diperlukan oleh aplikasi Anda ke instans Amazon RDS Anda. Proses ini akan bervariasi tergantung pada kebutuhan aplikasi Anda, serta bagaimana skema database Anda didefinisikan dan dirancang. | Administrator awan, DBA | 

### Buat komponen Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat cluster ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat gambar Docker.  | Buat gambar Docker dengan mengikuti petunjuk di bagian *Sumber daya terkait*. | Administrator awan | 
| Buat repositori Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator cloud, DevOps insinyur | 
| Otentikasi klien Docker Anda untuk repositori Amazon ECR.  | Untuk mengautentikasi klien Docker Anda untuk repositori Amazon ECR, jalankan perintah `aws ecr get-login-password` "di AWS CLI. | Administrator awan | 
| Dorong gambar Docker ke repositori Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat definisi tugas Amazon ECS.  | Definisi tugas diperlukan untuk menjalankan kontainer Docker di Amazon ECS. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Untuk bantuan dalam mengatur definisi tugas, lihat “Membuat definisi tugas” di bagian *Sumber daya terkait*. Pastikan Anda memberikan gambar Docker yang Anda dorong ke Amazon ECR. | Administrator awan | 
| Buat layanan Amazon ECS.  | Buat layanan Amazon ECS dengan menggunakan cluster ECS yang Anda buat sebelumnya. Pastikan Anda memilih Amazon EC2 sebagai tipe peluncuran, dan pilih definisi tugas yang dibuat pada langkah sebelumnya, serta kelompok target Application Load Balancer. | Administrator awan | 

### Buat grup EC2 Auto Scaling Amazon
<a name="create-an-amazon-ec2-auto-scaling-group"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat konfigurasi peluncuran. | Buka EC2 konsol Amazon, dan buat konfigurasi peluncuran. Pastikan bahwa data pengguna memiliki kode untuk memungkinkan EC2 instance bergabung dengan cluster ECS yang diinginkan. Untuk contoh kode yang diperlukan, lihat bagian *Sumber daya terkait*. | Administrator awan | 
| Buat grup EC2 Auto Scaling Amazon.  | Kembali ke EC2 konsol Amazon dan di bawah **Auto Scaling**, pilih grup **Auto Scaling**. Siapkan grup EC2 Auto Scaling Amazon. Pastikan Anda memilih subnet pribadi dan meluncurkan konfigurasi yang Anda buat sebelumnya. | Administrator awan | 

### Siapkan AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan PrivateLink titik akhir AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html)Untuk informasi selengkapnya, lihat bagian *Sumber daya terkait*. | Administrator awan | 

### Buat VPC endpoint
<a name="create-a-vpc-endpoint"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat VPC endpoint | Buat titik akhir VPC untuk PrivateLink titik akhir AWS yang Anda buat sebelumnya. Endpoint VPC Fully Qualified Domain Name (FQDN) akan mengarah ke FQDN titik akhir AWS. PrivateLink Ini menciptakan sebuah elastic network interface ke layanan endpoint VPC yang dapat diakses oleh endpoint DNS. | Administrator awan | 

### Buat fungsi Lambda
<a name="create-the-lambda-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda. | Di konsol AWS Lambda, buat fungsi Lambda untuk memperbarui alamat IP Application Load Balancer sebagai target untuk Network Load Balancer. Untuk informasi selengkapnya tentang ini, lihat posting blog [Menggunakan AWS Lambda untuk mengaktifkan alamat IP statis untuk Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-aws-lambda-to-enable-static-ip-addresses-for-application-load-balancers/). | Pengembang aplikasi | 

## Sumber daya terkait
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Buat penyeimbang beban:**
+ [Menggunakan Network Load Balancer untuk Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Membuat Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Menggunakan Application Load Balancer untuk Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Buat Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Buat sistem file Amazon EFS:**
+ [Buat sistem file Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Buat target pemasangan di Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Buat ember S3:**
+ [Buat ember S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)

**Buat rahasia Secrets Manager:**
+ [Buat kunci di AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Buat rahasia di AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

**Buat instance Amazon RDS:**
+ [Buat instans Amazon RDS DB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Buat komponen Amazon ECS:**
+ [Buat cluster Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-ec2-cluster-console-v2.html)
+ [Buat gambar Docker](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Buat repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Otentikasi Docker dengan repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Dorong gambar ke repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Buat definisi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Buat layanan Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Buat grup EC2 Auto Scaling Amazon:**
+ [Buat konfigurasi peluncuran](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html)
+ [Membuat grup Auto Scaling menggunakan konfigurasi peluncuran](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg.html)
+ [Contoh wadah bootstrap dengan data EC2 pengguna Amazon](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html)

**Siapkan AWS PrivateLink:**
+ [Layanan titik akhir VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)

**Buat titik akhir VPC:**
+ [Titik akhir VPC Antarmuka (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)

**Buat fungsi Lambda:**
+ [Buat fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)

**Sumber daya lainnya:**
+ [Menggunakan alamat IP statis untuk Application Load Balancers](https://aws.amazon.com/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/)
+ [Mengakses layanan dengan aman melalui AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Akses aplikasi kontainer secara pribadi di Amazon ECS dengan menggunakan AWS Fargate, PrivateLink AWS, dan Network Load Balancer
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Ringkasan
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-summary"></a>

Pola ini menjelaskan cara meng-host aplikasi kontainer Docker secara pribadi di Amazon Web Services (AWS) Cloud dengan menggunakan Amazon Elastic Container Service (Amazon ECS) Container Service (Amazon ECS) dengan tipe peluncuran AWS Fargate, di belakang Network Load Balancer, dan mengakses aplikasi dengan menggunakan AWS. PrivateLink Amazon Relational Database Service (Amazon RDS) menghosting database relasional untuk aplikasi yang berjalan di Amazon ECS dengan ketersediaan tinggi (HA). Anda dapat menggunakan Amazon Elastic File System (Amazon EFS) jika aplikasi memerlukan penyimpanan persisten.

Pola ini menggunakan [tipe peluncuran Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/launch_types.html) untuk layanan Amazon ECS yang menjalankan aplikasi Docker, dengan Network Load Balancer di ujung depan. Ini kemudian dapat dikaitkan dengan titik akhir virtual private cloud (VPC) untuk akses melalui AWS. PrivateLink Layanan endpoint VPC ini kemudian dapat dibagikan dengan orang lain VPCs dengan menggunakan titik akhir VPC mereka.

Anda dapat menggunakan Fargate dengan Amazon ECS untuk menjalankan container tanpa harus mengelola server atau cluster instans Amazon Elastic Compute Cloud ( EC2Amazon). Anda juga dapat menggunakan grup Amazon EC2 Auto Scaling alih-alih Fargate. Untuk informasi selengkapnya, lihat [Mengakses aplikasi container secara pribadi di Amazon ECS dengan menggunakan AWS PrivateLink dan Network](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.html?did=pg_card&trk=pg_card) Load Balancer.

## Prasyarat dan batasan
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [AWS Command Line Interface (AWS CLI) versi](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 2, diinstal dan dikonfigurasi di Linux, macOS, atau Windows
+ [Docker](https://www.docker.com/), diinstal dan dikonfigurasi di Linux, macOS, atau Windows
+ Aplikasi yang berjalan di Docker

## Arsitektur
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Menggunakan PrivateLink untuk mengakses aplikasi kontainer di Amazon ECS dengan tipe peluncuran AWS Fargate.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/31cca5e2-8d8b-45ec-b872-a06b0dd97007/images/57cc9995-45f4-4039-a0bf-2d2b3d6a05de.png)


**Tumpukan teknologi**
+ Amazon CloudWatch
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Amazon EFS
+ Amazon RDS
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Fargate
+ AWS PrivateLink
+ AWS Secrets Manager
+ Penyeimbang Beban Aplikasi
+ Penyeimbang Beban Jaringan
+ VPC

**Otomatisasi dan skala**
+ Anda dapat menggunakan [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) untuk membuat pola ini dengan menggunakan [Infrastructure as Code](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html).

## Alat
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-tools"></a>

**Layanan AWS**
+ [Amazon Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri image container AWS 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 sangat skalabel, cepat, yang memudahkan untuk menjalankan, menghentikan, dan mengelola kontainer di cluster.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) menyediakan sistem file NFS elastis yang sederhana, dapat diskalakan, dan dikelola sepenuhnya untuk digunakan dengan layanan AWS Cloud dan sumber daya lokal.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)adalah teknologi yang dapat Anda gunakan dengan Amazon ECS untuk menjalankan container tanpa harus mengelola server atau cluster instance Amazon EC2 .
+ [Amazon Relational Database Service (Amazon RDS](https://docs.aws.amazon.com/rds/index.html)) adalah layanan web yang membuatnya lebih mudah untuk mengatur, mengoperasikan, dan menskalakan basis data relasional di. AWS Cloud
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah penyimpanan untuk internet. Ini dirancang untuk membuat komputasi skala web lebih mudah bagi pengembang.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/)membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.
+ [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.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target, seperti EC2 instance, kontainer, dan alamat IP, di beberapa Availability Zone.

**Alat-alat lainnya**
+ [Docker](https://www.docker.com/) membantu pengembang untuk dengan mudah mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.

## Epik
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Buat komponen jaringan
<a name="create-networking-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sebuah VPC. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat penyeimbang beban
<a name="create-the-load-balancers"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat Network Load Balancer.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Untuk bantuan tentang ini dan cerita lainnya, lihat bagian *Sumber daya terkait*. | Administrator awan | 
| Buat Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat sistem file Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sistem file Amazon EFS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Pasang target untuk subnet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Verifikasi bahwa subnet dipasang sebagai target.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat Bucket S3
<a name="create-an-s3-bucket"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat ember S3. | Buka konsol Amazon S3 dan [buat bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket) untuk menyimpan aset statis aplikasi Anda, jika diperlukan. | Administrator awan | 

### Buat rahasia Secrets Manager
<a name="create-a-secrets-manager-secret"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Buat kunci AWS KMS untuk mengenkripsi rahasia Secrets Manager. | Buka konsol AWS Key Management Service (AWS KMS) dan buat kunci KMS. | Administrator awan | 
|  Buat rahasia Secrets Manager untuk menyimpan kata sandi Amazon RDS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat instans Amazon RDS
<a name="create-an-amazon-rds-instance"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat grup subnet DB.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat instans Amazon RDS. | Buat dan konfigurasikan instans Amazon RDS dalam subnet pribadi. Pastikan **Multi-AZ** dihidupkan untuk ketersediaan tinggi (HA). | Administrator awan | 
| Muat data ke instans Amazon RDS.  | Muat data relasional yang diperlukan oleh aplikasi Anda ke instans Amazon RDS Anda. Proses ini akan bervariasi tergantung pada kebutuhan aplikasi Anda, serta bagaimana skema database Anda didefinisikan dan dirancang. | DBA | 

### Buat komponen Amazon ECS
<a name="create-the-amazon-ecs-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat cluster ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat gambar Docker. | Buat gambar Docker dengan mengikuti petunjuk dalam [AWS dokumentasi](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html). | Administrator awan | 
| Buat repositori Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator cloud, DevOps insinyur | 
| Dorong gambar Docker ke repositori Amazon ECR.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 
| Buat definisi tugas Amazon ECS.  | Definisi tugas diperlukan untuk menjalankan kontainer Docker di Amazon ECS. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html)Untuk bantuan dalam mengatur definisi tugas, lihat “Membuat definisi tugas” di bagian *Sumber daya terkait*. Pastikan Anda memberikan gambar Docker yang Anda dorong ke Amazon ECR. | Administrator awan | 
| Buat layanan ECS dan pilih Fargate sebagai tipe peluncuran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Siapkan AWS PrivateLink
<a name="set-up-aws-privatelink"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan PrivateLink titik akhir AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.html) | Administrator awan | 

### Buat VPC endpoint
<a name="create-a-vpc-endpoint"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat VPC endpoint | [Buat titik akhir VPC untuk PrivateLink titik akhir](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) AWS yang Anda buat sebelumnya. Endpoint VPC Fully Qualified Domain Name (FQDN) akan mengarah ke FQDN titik akhir AWS. PrivateLink Ini menciptakan sebuah elastic network interface ke layanan endpoint VPC yang dapat diakses oleh endpoint Domain Name Service. | Administrator awan | 

### Tetapkan target
<a name="set-the-target"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan Application Load Balancer sebagai target. | [Untuk menambahkan Application Load Balancer sebagai target Network Load Balancer, ikuti petunjuk dalam dokumentasi.AWS](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/application-load-balancer-target.html) | Pengembang aplikasi | 

## Sumber daya terkait
<a name="access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer-resources"></a>

**Buat penyeimbang beban:**
+ [Menggunakan Network Load Balancer untuk Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/nlb.html)
+ [Membuat Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)
+ [Menggunakan Application Load Balancer untuk Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/alb.html)
+ [Buat Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)

**Buat sistem file Amazon EFS:**
+ [Buat sistem file Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/creating-using-create-fs.html)
+ [Buat target pemasangan di Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)

**Buat rahasia Secrets Manager:**
+ [Buat kunci di AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)
+ [Buat rahasia di AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)

**Buat instance Amazon RDS:**
+ [Buat instans Amazon RDS DB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)

**Buat komponen Amazon ECS**
+ [Buat repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)
+ [Otentikasi Docker dengan repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)
+ [Dorong gambar ke repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)
+ [Buat definisi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Buat layanan Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-console-v2.html)

**Sumber daya lainnya:**
+ [Mengakses layanan dengan aman melalui AWS PrivateLink](https://d1.awsstatic.com/whitepapers/aws-privatelink.pdf)

# Akses aplikasi kontainer secara pribadi di Amazon EKS menggunakan AWS PrivateLink dan Network Load Balancer
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Ringkasan
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

Pola ini menjelaskan cara meng-host aplikasi kontainer Docker secara pribadi di Amazon Elastic Kubernetes Service (Amazon EKS) di belakang Network Load Balancer, dan mengakses aplikasi dengan menggunakan AWS. PrivateLink Anda kemudian dapat menggunakan jaringan pribadi untuk mengakses layanan dengan aman di Amazon Web Services (AWS) Cloud. 

Cluster Amazon EKS yang menjalankan aplikasi Docker, dengan Network Load Balancer di ujung depan, dapat dikaitkan dengan titik akhir virtual private cloud (VPC) untuk akses melalui AWS. PrivateLink Layanan endpoint VPC ini kemudian dapat dibagikan dengan orang lain VPCs dengan menggunakan titik akhir VPC mereka.

Pengaturan yang dijelaskan oleh pola ini adalah cara aman untuk berbagi akses aplikasi di antara VPCs dan akun AWS. Ini tidak memerlukan konektivitas khusus atau konfigurasi perutean, karena koneksi antara akun konsumen dan penyedia berada di tulang punggung AWS global dan tidak melintasi internet publik.

## Prasyarat dan batasan
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**Prasyarat**
+ [Docker](https://www.docker.com/), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ Aplikasi yang berjalan di Docker.
+ Akun AWS yang aktif.
+ [AWS Command Line Interface (AWS CLI) versi](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ Cluster Amazon EKS yang ada dengan subnet pribadi yang diberi tag dan dikonfigurasi untuk meng-host aplikasi. Untuk informasi selengkapnya, lihat [Penandaan subnet](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging) di dokumentasi Amazon EKS. 
+ Kubectl, diinstal dan dikonfigurasi untuk mengakses sumber daya di klaster Amazon EKS Anda. Untuk informasi selengkapnya, lihat [Menginstal kubectl di dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS. 

## Arsitektur
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[Gunakan PrivateLink dan Network Load Balancer untuk mengakses aplikasi dalam wadah Amazon EKS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**Tumpukan teknologi**
+ Amazon EKS
+ AWS PrivateLink
+ Penyeimbang Beban Jaringan

**Otomatisasi dan skala**
+ Manifes Kubernetes dapat dilacak dan dikelola pada repositori berbasis GIT, dan digunakan dengan menggunakan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) di AWS. CodePipeline 
+ Anda dapat menggunakan AWS CloudFormation untuk membuat pola ini dengan menggunakan infrastruktur sebagai kode (IAc).

## Alat
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) — Elastic Load Balancing mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud ( EC2Amazon), container, dan alamat IP, dalam satu atau beberapa Availability Zone.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) — Amazon Elastic Kubernetes Service (Amazon 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.
+ [Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) — Amazon Virtual Private Cloud (Amazon VPC) membantu Anda meluncurkan sumber daya AWS ke jaringan virtual yang telah Anda tentukan.
+ [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) — Kubectl adalah utilitas baris perintah untuk menjalankan perintah terhadap klaster Kubernetes.

## Epik
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Menerapkan penerapan Kubernetes dan file manifes layanan
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Buat file manifes penerapan Kubernetes. | Buat file manifes penyebaran dengan memodifikasi file contoh berikut sesuai dengan kebutuhan Anda.<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>Ini adalah file konfigurasi sampel NGINX yang digunakan dengan menggunakan image NGINX Docker. Untuk informasi selengkapnya, lihat [Cara menggunakan image resmi NGINX Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/) dalam dokumentasi Docker. | DevOps insinyur | 
| Menerapkan file manifes penerapan Kubernetes. | Jalankan perintah berikut untuk menerapkan file manifes penerapan ke cluster Amazon EKS Anda:`kubectl apply –f <your_deployment_file_name> ` | DevOps insinyur | 
|  Buat file manifes layanan Kubernetes.  | Buat file manifes layanan dengan memodifikasi file contoh berikut sesuai dengan kebutuhan Anda.<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>Pastikan Anda menyertakan yang berikut ini `annotations` untuk menentukan Network Load Balancer internal:<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps insinyur | 
| Menerapkan file manifes layanan Kubernetes. | Jalankan perintah berikut untuk menerapkan file manifes layanan ke cluster Amazon EKS Anda:`kubectl apply -f <your_service_file_name>` | DevOps insinyur | 

### Untuk membuat titik akhir
<a name="create-the-endpoints"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Rekam nama Network Load Balancer.  | Jalankan perintah berikut untuk mengambil nama Network Load Balancer:`kubectl get svc sample-service -o wide`Rekam nama Network Load Balancer, yang diperlukan untuk membuat titik PrivateLink akhir AWS. | DevOps insinyur | 
| Buat PrivateLink titik akhir AWS. | Masuk ke AWS Management Console, buka konsol Amazon VPC, lalu buat titik akhir PrivateLink AWS. Kaitkan titik akhir ini dengan Network Load Balancer, ini membuat aplikasi tersedia secara pribadi bagi pelanggan. Untuk informasi selengkapnya, lihat [layanan titik akhir VPC (AWS PrivateLink) di dokumentasi](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) Amazon VPC.Jika akun konsumen memerlukan akses ke aplikasi, [ID akun AWS akun](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) konsumen harus ditambahkan ke daftar prinsipal yang diizinkan untuk konfigurasi titik akhir PrivateLink AWS. Untuk informasi selengkapnya, lihat [Menambahkan dan menghapus izin untuk layanan endpoint Anda](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html) di dokumentasi Amazon VPC. | Administrator awan  | 
| Buat VPC endpoint | Di konsol Amazon VPC, pilih **Endpoint Services**, lalu pilih **Create** Endpoint Service. Buat titik akhir VPC untuk titik akhir AWS. PrivateLink Nama domain (FQDN) yang sepenuhnya memenuhi syarat dari titik akhir VPC menunjuk ke FQDN untuk titik akhir AWS. PrivateLink Ini menciptakan sebuah elastic network interface ke layanan endpoint VPC yang dapat diakses oleh endpoint DNS.  | Administrator awan | 

## Sumber daya terkait
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ [Menggunakan gambar resmi NGINX Docker](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/)
+ [Penyeimbangan beban jaringan di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html) 
+ [Membuat layanan titik akhir VPC (AWS) PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html) 
+ [Menambahkan dan menghapus izin untuk layanan endpoint Anda](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)

# Mengotomatiskan pencadangan untuk Amazon RDS untuk instans DB Amazon RDS for PostgreSQL dengan menggunakan AWS Batch
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch"></a>

*Kirankumar Chandrashekar, Amazon Web Services*

## Ringkasan
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-summary"></a>

Mencadangkan database PostgreSQL Anda adalah tugas penting dan biasanya dapat diselesaikan dengan utilitas [pg\$1dump, yang menggunakan perintah COPY secara default untuk membuat skema dan dump](https://www.postgresql.org/docs/current/app-pgdump.html) data dari database PostgreSQL. Namun, proses ini dapat menjadi berulang jika Anda memerlukan backup reguler untuk beberapa database PostgreSQL. Jika database PostgreSQL Anda di-host di cloud, Anda juga dapat memanfaatkan fitur pencadangan [otomatis](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html) yang disediakan oleh Amazon Relational Database Service (Amazon RDS) untuk PostgreSQL juga. Pola ini menjelaskan cara mengotomatiskan backup reguler untuk Amazon RDS untuk instans DB Amazon RDS for PostgreSQL menggunakan utilitas pg\$1dump.

Catatan: Instruksi mengasumsikan bahwa Anda menggunakan Amazon RDS. Namun, Anda juga dapat menggunakan pendekatan ini untuk database PostgreSQL yang di-host di luar Amazon RDS. Untuk mengambil cadangan, fungsi AWS Lambda harus dapat mengakses database Anda.

 CloudWatch Acara Amazon Events berbasis waktu memulai fungsi Lambda yang mencari [tag cadangan tertentu yang diterapkan ke metadata](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) instans PostgreSQL DB di Amazon RDS. Jika instans PostgreSQL DB memiliki tag **DBDump BKP:Automated = Active** dan tag cadangan lain yang diperlukan, fungsi Lambda mengirimkan tugas individual untuk setiap backup database ke AWS Batch. 

AWS Batch memproses pekerjaan ini dan mengunggah data cadangan ke bucket Amazon Simple Storage Service (Amazon S3). Pola ini menggunakan Dockerfile dan file entrypoint.sh untuk membuat image container Docker yang digunakan untuk membuat backup dalam pekerjaan AWS Batch. Setelah proses pencadangan selesai, AWS Batch mencatat detail pencadangan ke tabel inventaris di Amazon DynamoDB. Sebagai perlindungan tambahan, CloudWatch peristiwa Acara memulai notifikasi Amazon Simple Notification Service (Amazon SNS) jika pekerjaan gagal di AWS Batch. 

## Prasyarat dan batasan
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif.
+ Lingkungan komputasi terkelola atau tidak terkelola yang ada. Untuk informasi selengkapnya, lihat [Lingkungan komputasi terkelola dan tidak](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html) terkelola dalam dokumentasi AWS Batch. 
+ [AWS Command Line Interface (CLI) versi 2 image Docker](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html), diinstal dan dikonfigurasi.
+ Amazon RDS yang ada untuk instans DB Amazon RDS for PostgreSQL.  
+ Bucket S3 yang ada. 
+ [Docker](https://www.docker.com/), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ Keakraban dengan pengkodean di Lambda. 

## Arsitektur
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-architecture"></a>

![\[Arsitektur untuk mencadangkan Amazon RDS untuk instans DB Amazon RDS for PostgreSQL dengan menggunakan utilitas pg_dump.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/3283f739-980b-43d4-aca0-9d77a2ce3b85/images/352e2eab-1b7d-44ec-840a-a772a175e873.png)


 

**Tumpukan teknologi**
+  CloudWatch Acara Amazon
+ Amazon DynamoDB
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon RDS
+ Amazon SNS
+ Amazon S3
+ AWS Batch
+ AWS Key Management Service (AWS KMS)
+ AWS Lambda
+ AWS Secrets Manager
+ Docker

## Alat
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-tools"></a>
+ [ CloudWatch Acara Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — CloudWatch Acara menghadirkan aliran peristiwa sistem yang mendekati waktu nyata yang menjelaskan perubahan sumber daya AWS.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) - DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang memberikan kinerja yang cepat dan dapat diprediksi dengan skalabilitas yang mulus.
+ [Amazon ECR](https://docs.aws.amazon.com/ecr/index.html) — Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri image container AWS terkelola yang aman, terukur, dan andal.
+ [Amazon RDS](https://docs.aws.amazon.com/rds/index.html) - Amazon Relational Database Service (Amazon RDS) adalah layanan web yang memudahkan pengaturan, pengoperasian, dan skala database relasional di AWS Cloud.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) - Amazon Simple Notification Service (Amazon SNS) adalah layanan terkelola yang menyediakan pengiriman pesan dari penerbit ke pelanggan.
+ [Amazon S3](https://docs.aws.amazon.com/s3/index.html) - Amazon Simple Storage Service (Amazon S3) Simple Storage Service adalah penyimpanan untuk internet.
+ [AWS Batch](https://docs.aws.amazon.com/batch/index.html) — AWS Batch membantu Anda menjalankan beban kerja komputasi batch di AWS Cloud.
+ [AWS KMS](https://docs.aws.amazon.com/kms/index.html) — AWS Key Management Service (AWS KMS) adalah layanan terkelola yang memudahkan Anda membuat dan mengontrol kunci enkripsi yang digunakan untuk mengenkripsi data Anda.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/index.html) — Lambda adalah layanan komputasi yang membantu Anda menjalankan kode tanpa menyediakan atau mengelola server.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/index.html) — Secrets Manager membantu Anda mengganti kredensi hardcode dalam kode Anda, termasuk kata sandi, dengan panggilan API ke Secrets Manager untuk mengambil rahasia secara terprogram.
+ [Docker](https://www.docker.com/) — Docker membantu pengembang dengan mudah mengemas, mengirim, dan menjalankan aplikasi apa pun sebagai wadah yang ringan, portabel, dan mandiri.

[Instans PostgreSQL DB Anda di Amazon RDS harus memiliki tag yang diterapkan ke metadatanya.](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html) Fungsi Lambda mencari tag untuk mengidentifikasi instance DB yang harus dicadangkan, dan tag berikut biasanya digunakan.


| 
| 
| Tag | Deskripsi | 
| --- |--- |
| BKP:Otomatis = Aktif DBDump  | Mengidentifikasi instans Amazon RDS DB sebagai kandidat untuk backup. | 
| bkp: = AutomatedBackupSecret <secret\$1name > | Mengidentifikasi rahasia Secrets Manager yang berisi kredensyal login Amazon RDS. | 
| BKP: S3Bucket otomatis DBDump = <s3\$1bucket\$1name> | Mengidentifikasi bucket S3 untuk mengirim cadangan ke. | 
| DBDumpBKP: Frekuensi OtomatisDBDumpBKP: Waktu Otomatis | Identifikasi frekuensi dan waktu kapan database harus dicadangkan.  | 
| bkp:pgdumpcommand = <pgdump\$1command> | Mengidentifikasi database yang backup perlu diambil. | 

## Epik
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-epics"></a>

### Buat tabel inventaris di DynamoDB
<a name="create-an-inventory-table-in-dynamodb"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat tabel di DynamoDB. | Masuk ke AWS Management Console, buka konsol Amazon DynamoDB, dan buat tabel. Untuk bantuan tentang ini dan cerita lainnya, lihat bagian *Sumber daya terkait*. | Administrator awan, Administrator basis data | 
| Konfirmasikan bahwa tabel telah dibuat.  | Jalankan perintah `aws dynamodb describe-table --table-name <table-name> \| grep TableStatus`. Jika tabel ada, perintah akan mengembalikan `"TableStatus": "ACTIVE",` hasilnya. | Administrator awan, Administrator basis data | 

### Membuat topik SNS untuk peristiwa pekerjaan yang gagal di AWS Batch
<a name="create-an-sns-topic-for-failed-job-events-in-aws-batch"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Membuat sebuah topik SNS. | Buka konsol Amazon SNS, pilih **Topik, dan buat topik** SNS dengan namanya. `JobFailedAlert` Berlangganan alamat email aktif ke topik tersebut, dan periksa kotak masuk email Anda untuk mengonfirmasi email langganan SNS dari Pemberitahuan AWS. | Administrator awan | 
| Buat aturan peristiwa pekerjaan yang gagal untuk AWS Batch.  | Buka CloudWatch konsol Amazon, pilih **Acara**, lalu pilih **Buat aturan**. Pilih **Tampilkan opsi lanjutan**, dan pilih **Edit**. Untuk **Membangun pola yang memilih peristiwa untuk diproses oleh target Anda**, ganti teks yang ada dengan kode “Peristiwa pekerjaan gagal” dari bagian *Informasi tambahan*. Kode ini mendefinisikan aturan CloudWatch Peristiwa yang dimulai saat AWS Batch memiliki `Failed` peristiwa. | Administrator awan | 
| Tambahkan target aturan acara.  | Di **Target**, pilih **Tambahkan target**, dan pilih topik `JobFailedAlert` SNS. Konfigurasikan detail yang tersisa dan buat aturan Cloudwatch Events. | Administrator awan | 

### Buat image Docker dan dorong ke repositori Amazon ECR
<a name="build-a-docker-image-and-push-it-to-an-amazon-ecr-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Buka konsol Amazon ECR dan pilih Wilayah AWS tempat Anda ingin membuat repositori. Pilih **Repositori**, lalu pilih **Buat** repositori. Konfigurasikan repositori sesuai dengan kebutuhan Anda. | Administrator awan | 
| Tulis Dockerfile.  | Masuk ke Docker dan gunakan “Sample Dockerfile” dan “Contoh file entrypoint.sh” dari bagian *Informasi tambahan* untuk membuat Dockerfile. | DevOps insinyur | 
| Buat image Docker dan dorong ke repositori Amazon ECR. | Bangun Dockerfile menjadi image Docker dan dorong ke repositori Amazon ECR. Untuk bantuan dengan cerita ini, lihat bagian *Sumber daya terkait*. | DevOps insinyur | 

### Membuat komponen AWS Batch
<a name="create-the-aws-batch-components"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat definisi pekerjaan AWS Batch. | Buka konsol AWS Batch dan buat definisi pekerjaan yang menyertakan Uniform Resource Identifier (URI) repositori Amazon ECR sebagai properti. `Image` | Administrator awan | 
| Konfigurasikan antrian pekerjaan AWS Batch.  | Di konsol AWS Batch, pilih **antrian Job**, lalu pilih **Buat** antrean. Buat antrean pekerjaan yang akan menyimpan pekerjaan hingga AWS Batch menjalankannya pada sumber daya dalam lingkungan komputasi Anda. Penting: Pastikan Anda menulis logika AWS Batch untuk merekam detail pencadangan ke tabel inventaris DynamoDB. | Administrator awan | 

### Membuat dan menjadwalkan fungsi Lambda
<a name="create-and-schedule-a-lambda-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda untuk mencari tag. | Buat fungsi Lambda yang mencari tag pada instans PostgreSQL DB Anda dan mengidentifikasi kandidat cadangan. Pastikan fungsi Lambda Anda dapat mengidentifikasi `bkp:AutomatedDBDump = Active` tag dan semua tag lain yang diperlukan. Penting: Fungsi Lambda juga harus dapat menambahkan pekerjaan ke antrean pekerjaan AWS Batch. | DevOps insinyur | 
| Buat CloudWatch acara Acara berbasis waktu.  | Buka CloudWatch konsol Amazon dan buat CloudWatch acara Acara yang menggunakan ekspresi cron untuk menjalankan fungsi Lambda Anda pada jadwal reguler. Penting: Semua acara terjadwal menggunakan zona waktu UTC. | Administrator awan | 

### Uji otomatisasi cadangan
<a name="test-the-backup-automation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat kunci Amazon KMS. | Buka konsol Amazon KMS dan buat kunci KMS yang dapat digunakan untuk mengenkripsi kredensyal Amazon RDS yang disimpan di AWS Secrets Manager. | Administrator awan | 
| Buat rahasia AWS Secrets Manager. | Buka konsol AWS Secrets Manager dan simpan kredensyal database Amazon RDS for PostgreSQL Anda sebagai rahasia. | Administrator awan | 
| Tambahkan tag yang diperlukan ke instance PostgreSQL DB. | Buka konsol Amazon RDS dan tambahkan tag ke instans PostgreSQL DB yang ingin Anda cadangkan secara otomatis. Anda dapat menggunakan tag dari tabel di bagian *Alat*. Jika Anda memerlukan backup dari beberapa database PostgreSQL dalam instance Amazon RDS yang sama, maka gunakan sebagai nilai untuk tag. `-d test:-d test1` `bkp:pgdumpcommand` `test`dan `test1` merupakan nama database. Pastikan tidak ada spasi setelah usus besar (:). | Administrator awan | 
| Verifikasi otomatisasi cadangan.  | Untuk memverifikasi otomatisasi cadangan, Anda dapat menjalankan fungsi Lambda atau menunggu jadwal pencadangan dimulai. Setelah proses pencadangan selesai, periksa apakah tabel inventaris DynamoDB memiliki entri cadangan yang valid untuk instans PostgreSQL DB Anda. Jika cocok, maka proses otomatisasi cadangan berhasil. | Administrator awan | 

## Sumber daya terkait
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-resources"></a>

**Buat tabel inventaris di DynamoDB**
+ [Buat tabel Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)

 

**Membuat topik SNS untuk peristiwa pekerjaan yang gagal di AWS Batch**
+ [Buat topik Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html)
+ [Kirim peringatan SNS untuk peristiwa pekerjaan yang gagal di AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/batch_sns_tutorial.html)

 

**Buat image Docker dan dorong ke repositori Amazon ECR**
+ [Buat repositori Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)    
+ [Tulis Dockerfile, buat gambar Docker, dan dorong ke Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)

 

**Membuat komponen AWS Batch**
+ [Membuat definisi pekerjaan AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-1)    
+ [Konfigurasikan lingkungan komputasi dan antrean pekerjaan AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/Batch_GetStarted.html#first-run-step-2)   
+ [Buat antrean pekerjaan di AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/create-job-queue.html)

 

**Buat fungsi Lambda**
+ [Buat fungsi Lambda dan tulis kode](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)
+ [Gunakan Lambda dengan DynamoDB](https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html)

 

**Buat CloudWatch acara Acara**
+ [Buat CloudWatch acara Acara berbasis waktu](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Scheduled-Rule.html)   
+ [Gunakan ekspresi cron di Acara Cloudwatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html)

 

**Uji otomatisasi cadangan**
+ [Buat kunci Amazon KMS](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)    
+ [Buat rahasia Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)
+ [Tambahkan tag ke instans Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Tagging.html)

## Informasi tambahan
<a name="automate-backups-for-amazon-rds-for-postgresql-db-instances-by-using-aws-batch-additional"></a>

**Acara pekerjaan yang gagal:**

```
{
  "detail-type": [
    "Batch Job State Change"
  ],
  "source": [
    "aws.batch"
  ],
  "detail": {
    "status": [
      "FAILED"
    ]
  }
}
```

**Contoh Dockerfile:**

```
FROM alpine:latest
RUN apk --update add py-pip postgresql-client jq bash && \
pip install awscli && \
rm -rf /var/cache/apk/*
ADD entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
```

**Contoh file entrypoint.sh:**

```
 #!/bin/bash
set -e
DATETIME=`date +"%Y-%m-%d_%H_%M"`
FILENAME=RDS_PostGres_dump_${RDS_INSTANCE_NAME}
FILE=${FILENAME}_${DATETIME}

aws configure --profile new-profile set role_arn arn:aws:iam::${TargetAccountId}:role/${TargetAccountRoleName}
aws configure --profile new-profile set credential_source EcsContainer

echo "Central Account access provider IAM role is: "
aws sts get-caller-identity

echo "Target Customer Account access provider IAM role is: "
aws sts get-caller-identity --profile new-profile

securestring=$(aws secretsmanager get-secret-value --secret-id $SECRETID --output json --query 'SecretString' --region=$REGION --profile new-profile)

if [[ ${securestring} ]]; then
    echo "successfully accessed secrets manager and got the credentials"
    export PGPASSWORD=$(echo $securestring | jq --raw-output | jq -r '.DB_PASSWORD')
    PGSQL_USER=$(echo $securestring | jq --raw-output | jq -r '.DB_USERNAME')
    echo "Executing pg_dump for the PostGres endpoint ${PGSQL_HOST}"
    # pg_dump -h $PGSQL_HOST -U $PGSQL_USER -n dms_sample | gzip -9 -c  | aws s3 cp - --region=$REGION  --profile new-profile s3://$BUCKET/$FILE
    # in="-n public:-n private"
    IFS=':' list=($EXECUTE_COMMAND);
    for command in "${list[@]}";
      do
        echo $command;
        pg_dump -h $PGSQL_HOST -U $PGSQL_USER ${command} | gzip -9 -c  | aws s3 cp - --region=$REGION --profile new-profile s3://${BUCKET}/${FILE}-${command}".sql.gz"
        echo $?;
        if  [[ $? -ne 0 ]]; then
            echo "Error occurred in database backup process. Exiting now....."
            exit 1
        else
            echo "Postgresql dump was successfully taken for the RDS endpoint ${PGSQL_HOST} and is uploaded to the following S3 location s3://${BUCKET}/${FILE}-${command}.sql.gz"
            #write the details into the inventory table in central account
            echo "Writing to DynamoDB inventory table"
            aws dynamodb put-item --table-name ${RDS_POSTGRES_DUMP_INVENTORY_TABLE} --region=$REGION --item '{ "accountId": { "S": "'"${TargetAccountId}"'" }, "dumpFileUrl": {"S": "'"s3://${BUCKET}/${FILE}-${command}.sql.gz"'" }, "DumpAvailableTime": {"S": "'"`date +"%Y-%m-%d::%H::%M::%S"` UTC"'"}}'
            echo $?
            if  [[ $? -ne 0 ]]; then
                echo "Error occurred while putting item to DynamoDb Inventory Table. Exiting now....."
                exit 1
            else
                echo "Successfully written to DynamoDb Inventory Table ${RDS_POSTGRES_DUMP_INVENTORY_TABLE}"
            fi
        fi
      done;
else
    echo "Something went wrong {$?}"
    exit 1
fi

exec "$@"
```

# Otomatiskan penerapan Node Termination Handler di Amazon EKS dengan menggunakan pipeline CI/CD
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline"></a>

*Sandip Gangapadhyay, Sandeep Gawande, Viyoma Sachdeva, Pragtideep Singh, dan John Vargas, Amazon Web Services*

## Ringkasan
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-summary"></a>

**Pemberitahuan**: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan AWS yang sudah ada 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/)

Di Amazon Web Services (AWS) Cloud, Anda dapat menggunakan [AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler), sebuah project open-source, untuk menangani shutdown instans Amazon Elastic Compute Cloud (Amazon EC2) di Kubernetes dengan anggun. AWS Node Termination Handler membantu memastikan bahwa control plane Kubernetes merespons dengan tepat peristiwa yang dapat menyebabkan instans Anda menjadi tidak tersedia. EC2 Peristiwa tersebut meliputi:
+ [EC2 contoh pemeliharaan terjadwal](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
+ [Gangguan Instans EC2 Spot Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)
+ [Skala grup Auto Scaling di](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html#as-lifecycle-scale-in)
+ [Penyeimbangan ulang grup Auto Scaling di seluruh Availability](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage) Zone
+ EC2 penghentian instans melalui API atau AWS Management Console

Jika suatu peristiwa tidak ditangani, kode aplikasi Anda mungkin tidak berhenti dengan baik. Mungkin juga perlu waktu lebih lama untuk memulihkan ketersediaan penuh, atau mungkin secara tidak sengaja menjadwalkan pekerjaan ke node yang turun. NTH dapat beroperasi dalam dua mode yang berbeda: Instance Metadata Service (IMDS) atau Queue Processor. `aws-node-termination-handler` Untuk informasi lebih lanjut tentang dua mode, lihat [file Readme](https://github.com/aws/aws-node-termination-handler#readme).

Pola ini menggunakan AWS CodeCommit, dan mengotomatiskan penyebaran NTH dengan menggunakan Prosesor Antrian melalui pipeline continuous integration and continuous delivery (CI/CD).

**catatan**  
Jika Anda menggunakan [grup simpul terkelola EKS](https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html), Anda tidak memerlukan`aws-node-termination-handler`.

## Prasyarat dan batasan
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif.
+ Browser web yang didukung untuk digunakan dengan AWS Management Console. Lihat [daftar browser yang didukung](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/).
+ AWS Cloud Development Kit (AWS CDK) [diinstal](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).
+ `kubectl`[, alat baris perintah Kubernetes, diinstal.](https://kubernetes.io/docs/tasks/tools/)
+ `eksctl`[AWS Command Line Interface (AWS CLI), AWS Command Line Interface (AWS CLI) untuk Amazon Elastic Kubernetes Service (Amazon EKS), diinstal.](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)
+ Kluster EKS yang berjalan dengan versi 1.20 atau yang lebih baru.
+ Grup node yang dikelola sendiri yang melekat pada cluster EKS. Untuk membuat klaster Amazon EKS dengan grup node yang dikelola sendiri, jalankan perintah berikut.

  ```
  eksctl create cluster --managed=false --region <region> --name <cluster_name>
  ```

  Untuk informasi lebih lanjut tentang`eksctl`, lihat dokumentasi [eksctl](https://eksctl.io/usage/creating-and-managing-clusters/).
+ Penyedia AWS Identity and Access Management (IAM) OpenID Connect (OIDC) untuk klaster Anda. Untuk informasi selengkapnya, lihat [Membuat penyedia IAM OIDC untuk](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) klaster Anda.

**Batasan**
+ Anda harus menggunakan Wilayah AWS yang mendukung layanan Amazon EKS.

**Versi produk**
+ Kubernetes versi 1.20 atau yang lebih baru
+ `eksctl`versi 0.107.0 atau yang lebih baru
+ AWS CDK versi 2.27.0 atau yang lebih baru

## Arsitektur
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-architecture"></a>

**Tumpukan teknologi target**
+ Awan pribadi virtual (VPC)
+ Kluster EKS
+ Amazon Simple Queue Service (Amazon SQS)
+ IAM
+ Kubernetes

**Arsitektur target******

Diagram berikut menunjukkan tampilan tingkat tinggi dari end-to-end langkah-langkah ketika penghentian node dimulai.

![\[VPC dengan grup Auto Scaling, cluster EKS dengan Node Termination Handler, dan antrean SQS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/970dfb73-9526-4942-a974-e8eef6416596/images/9e0125ae-d55b-49dd-ae70-ccaedf03832a.png)


Alur kerja yang ditunjukkan dalam diagram terdiri dari langkah-langkah tingkat tinggi berikut:

1. Peristiwa penghentian EC2 instance penskalaan otomatis dikirim ke antrian SQS.

1. NTH Pod memonitor pesan baru dalam antrean SQS.

1. NTH Pod menerima pesan baru dan melakukan hal berikut:
   + Cordons node sehingga pod baru tidak berjalan pada node.
   + Menguras node, sehingga pod yang ada dievakuasi
   + Mengirim sinyal hook siklus hidup ke grup Auto Scaling sehingga node dapat dihentikan.

**Otomatisasi dan skala**
+ Kode dikelola dan diterapkan oleh AWS CDK, didukung oleh tumpukan CloudFormation bersarang AWS.
+ [Pesawat kontrol Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/disaster-recovery-resiliency.html) berjalan di beberapa Availability Zone untuk memastikan ketersediaan yang tinggi.
+ [Untuk [penskalaan otomatis](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html), Amazon EKS mendukung Kubernetes [Cluster](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler) Autoscaler dan Karpenter.](https://karpenter.sh/)

## Alat
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-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 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.
+ [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.
+ [ EC2 Auto Scaling Amazon](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) membantu Anda menjaga ketersediaan aplikasi dan memungkinkan Anda menambahkan atau menghapus EC2 instans Amazon secara otomatis sesuai dengan kondisi yang Anda tentukan.
+ [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.

**Alat lainnya**
+ [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/) adalah alat baris perintah Kubernetes untuk menjalankan perintah terhadap klaster Kubernetes. Anda dapat menggunakan kubectl untuk menyebarkan aplikasi, memeriksa dan mengelola sumber daya klaster, dan melihat log.

**Kode**

Kode untuk pola ini tersedia di [deploy-nth-to-eks](https://github.com/aws-samples/deploy-nth-to-eks)repo di GitHub .com. Kode repo berisi file dan folder berikut.
+ `nth folder`— Bagan Helm, file nilai, dan skrip untuk memindai dan menerapkan CloudFormation template AWS untuk Node Termination Handler.
+ `config/config.json`— File parameter konfigurasi untuk aplikasi. File ini berisi semua parameter yang diperlukan untuk CDK untuk digunakan.
+ `cdk`— Kode sumber AWS CDK.
+ `setup.sh`— Skrip yang digunakan untuk menyebarkan aplikasi AWS CDK untuk membuat CI/CD pipeline yang diperlukan dan sumber daya lain yang diperlukan.
+ `uninstall.sh`— Script yang digunakan untuk membersihkan sumber daya.

Untuk menggunakan kode contoh, ikuti instruksi di bagian *Epik*.

## Praktik terbaik
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-best-practices"></a>

Untuk praktik terbaik saat mengotomatiskan AWS Node Termination Handler, lihat berikut ini:
+ [Panduan Praktik Terbaik EKS](https://aws.github.io/aws-eks-best-practices/)
+ [Handler Terminasi Node - Konfigurasi](https://github.com/aws/aws-node-termination-handler/tree/main/config/helm/aws-node-termination-handler)

## Epik
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repo. | Untuk mengkloning repo dengan menggunakan SSH (Secure Shell), jalankan perintah berikut.<pre>git clone git@github.com:aws-samples/deploy-nth-to-eks.git</pre>Untuk mengkloning repo dengan menggunakan HTTPS, jalankan perintah berikut.<pre>git clone https://github.com/aws-samples/deploy-nth-to-eks.git</pre>Mengkloning repo membuat folder bernama. `deploy-nth-to-eks`Ubah ke direktori itu.<pre>cd deploy-nth-to-eks</pre> | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 
| Atur file kubeconfig. | Tetapkan kredensi AWS Anda di terminal dan konfirmasikan bahwa Anda memiliki hak untuk mengambil peran klaster. Anda dapat menggunakan kode contoh berikut.<pre>aws eks update-kubeconfig --name <Cluster_Name> --region <region>--role-arn <Role_ARN></pre> | AWS DevOps, DevOps insinyur, Pengembang aplikasi | 

### Menyebarkan pipa CI/CD
<a name="deploy-the-ci-cd-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan parameternya. | Dalam `config/config.json` file, atur parameter yang diperlukan berikut.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 
| Buat CI/CD pipeline untuk menyebarkan NTH. | Jalankan skrip setup.sh.<pre>./setup.sh</pre>Skrip akan menerapkan aplikasi AWS CDK yang akan membuat CodeCommit repo dengan kode contoh, pipeline, dan CodeBuild proyek berdasarkan parameter input pengguna dalam file. `config/config.json`Skrip ini akan meminta kata sandi saat menginstal paket npm dengan perintah sudo. | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 
| Tinjau CI/CD pipa. | Buka AWS Management Console, dan tinjau sumber daya berikut yang dibuat di tumpukan.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html)Setelah pipeline berjalan dengan sukses, rilis Helm `aws-node-termination-handler` diinstal di cluster EKS. Juga, sebuah Pod bernama `aws-node-termination-handler` sedang berjalan di `kube-system` namespace di cluster. | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 

### Uji penyebaran NTH
<a name="test-nth-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Simulasikan acara skala dalam grup Auto Scaling. | Untuk mensimulasikan event scale-in penskalaan otomatis, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline.html) |  | 
| Tinjau log. | Selama peristiwa scale-in, Pod NTH akan mengikat dan menguras node pekerja yang sesuai ( EC2 instance yang akan dihentikan sebagai bagian dari peristiwa scale-in). Untuk memeriksa log, gunakan kode di bagian *Informasi tambahan*. | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan semua sumber daya AWS. | Untuk membersihkan sumber daya yang dibuat oleh pola ini, jalankan perintah berikut.<pre>./uninstall.sh</pre>Ini akan membersihkan semua sumber daya yang dibuat dalam pola ini dengan menghapus CloudFormation tumpukan. | DevOps insinyur | 

## Pemecahan masalah
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Registri npm tidak disetel dengan benar. | Selama instalasi solusi ini, skrip menginstal npm install untuk mengunduh semua paket yang diperlukan. Jika, selama instalasi, Anda melihat pesan yang mengatakan “Tidak dapat menemukan modul,” registri npm mungkin tidak disetel dengan benar. Untuk melihat pengaturan registri saat ini, jalankan perintah berikut.<pre>npm config get registry</pre>Untuk mengatur registri dengan`https://registry.npmjs.org/`, jalankan perintah berikut.<pre>npm config set registry https://registry.npmjs.org</pre> | 
| Tunda pengiriman pesan SQS. | Sebagai bagian dari pemecahan masalah Anda, jika Anda ingin menunda pengiriman pesan SQS ke NTH Pod, Anda dapat menyesuaikan parameter penundaan pengiriman SQS. Untuk informasi selengkapnya, lihat antrian [penundaan Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html). | 

## Sumber daya terkait
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-resources"></a>
+ [Kode sumber AWS Node Termination Handler](https://github.com/aws/aws-node-termination-handler)
+ [EC2 lokakarya](https://ec2spotworkshops.com/using_ec2_spot_instances_with_eks/070_selfmanagednodegroupswithspot/deployhandler.html)
+ [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://aws.amazon.com/eks/)
+ [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)
+ [AWS CloudFormation](https://aws.amazon.com/cloudformation/)

## Informasi tambahan
<a name="automate-deployment-of-node-termination-handler-in-amazon-eks-by-using-a-ci-cd-pipeline-additional"></a>

1. Temukan nama NTH Pod.

```
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
kubectl get pods -n kube-system |grep aws-node-termination-handler
aws-node-termination-handler-65445555-kbqc7   1/1     Running   0          26m
```

2. Periksa log. Contoh log terlihat seperti berikut ini. Ini menunjukkan bahwa node telah dikepung dan dikeringkan sebelum mengirim sinyal penyelesaian kait siklus hidup grup Auto Scaling.

```
kubectl -n kube-system logs aws-node-termination-handler-65445555-kbqc7
022/07/17 20:20:43 INF Adding new event to the event store event={"AutoScalingGroupName":"eksctl-my-cluster-target-nodegroup-ng-10d99c89-NodeGroup-ZME36IGAP7O1","Description":"ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n","EndTime":"0001-01-01T00:00:00Z","EventID":"asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564","InProgress":false,"InstanceID":"i-0409f2a9d3085b80e","IsManaged":true,"Kind":"SQS_TERMINATE","NodeLabels":null,"NodeName":"ip-192-168-75-60.us-east-2.compute.internal","NodeProcessed":false,"Pods":null,"ProviderID":"aws:///us-east-2c/i-0409f2a9d3085b80e","StartTime":"2022-07-17T20:20:42.702Z","State":""}
2022/07/17 20:20:44 INF Requesting instance drain event-id=asg-lifecycle-term-33383831316538382d353564362d343332362d613931352d383430666165636334333564 instance-id=i-0409f2a9d3085b80e kind=SQS_TERMINATE node-name=ip-192-168-75-60.us-east-2.compute.internal provider-id=aws:///us-east-2c/i-0409f2a9d3085b80e
2022/07/17 20:20:44 INF Pods on node node_name=ip-192-168-75-60.us-east-2.compute.internal pod_names=["aws-node-qchsw","aws-node-termination-handler-65445555-kbqc7","kube-proxy-mz5x5"]
2022/07/17 20:20:44 INF Draining the node
2022/07/17 20:20:44 ??? WARNING: ignoring DaemonSet-managed Pods: kube-system/aws-node-qchsw, kube-system/kube-proxy-mz5x5
2022/07/17 20:20:44 INF Node successfully cordoned and drained node_name=ip-192-168-75-60.us-east-2.compute.internal reason="ASG Lifecycle Termination event received. Instance will be interrupted at 2022-07-17 20:20:42.702 +0000 UTC \n"
2022/07/17 20:20:44 INF Completed ASG Lifecycle Hook (NTH-K8S-TERM-HOOK) for instance i-0409f2a9d3085b80e
```

# Secara otomatis membangun dan menyebarkan aplikasi Java ke Amazon EKS menggunakan pipeline CI/CD
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN, Jomcy Pappachen, dan James Radtke, Amazon Web Services*

## Ringkasan
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

Pola ini menjelaskan cara membuat pipeline continuous integration and continuous delivery (CI/CD) yang secara otomatis membangun dan menyebarkan aplikasi Java dengan DevSecOps praktik yang direkomendasikan ke cluster Amazon Elastic Kubernetes Service (Amazon EKS) di file. AWS Cloud Pola ini menggunakan aplikasi salam yang dikembangkan dengan kerangka Spring Boot Java dan yang menggunakan Apache Maven.

Anda dapat menggunakan pendekatan pola ini untuk membangun kode untuk aplikasi Java, mengemas artefak aplikasi sebagai gambar Docker, memindai keamanan gambar, dan mengunggah gambar sebagai wadah beban kerja di Amazon EKS. Pendekatan pola ini berguna jika Anda ingin bermigrasi dari arsitektur monolitik yang digabungkan erat ke arsitektur layanan mikro. Pendekatan ini juga membantu Anda memantau dan mengelola seluruh siklus hidup aplikasi Java, yang memastikan tingkat otomatisasi yang lebih tinggi dan membantu menghindari kesalahan atau bug.

## Prasyarat dan batasan
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Command Line Interface (AWS CLI) versi 2, diinstal dan dikonfigurasi. Untuk informasi selengkapnya tentang ini, lihat [Menginstal atau memperbarui ke versi terbaru](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) dari AWS CLI dokumentasi. AWS CLI

  AWS CLI versi 2 harus dikonfigurasi dengan peran AWS Identity and Access Management (IAM) yang sama yang membuat kluster Amazon EKS, karena hanya peran itu yang diizinkan untuk menambahkan peran IAM lainnya ke. `aws-auth` `ConfigMap` Untuk informasi dan langkah-langkah untuk mengkonfigurasi AWS CLI, lihat [Mengkonfigurasi pengaturan](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) dalam AWS CLI dokumentasi.
+ Peran dan izin IAM dengan akses penuh ke. AWS CloudFormation Untuk informasi selengkapnya tentang ini, lihat [Mengontrol akses dengan IAM](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html) dalam CloudFormation dokumentasi.
+ Cluster Amazon EKS yang ada, dengan detail nama peran IAM dan Nama Sumber Daya Amazon (ARN) peran IAM untuk node pekerja di cluster EKS.
+ Kubernetes Cluster Autoscaler, diinstal dan dikonfigurasi di klaster Amazon EKS Anda. Untuk informasi selengkapnya, lihat [Komputasi klaster skala dengan Karpenter dan Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html) di dokumentasi Amazon EKS. 
+ Akses ke kode di GitHub repositori.

**penting**  
AWS Security Hub CSPM diaktifkan sebagai bagian dari CloudFormation template yang disertakan dalam kode untuk pola ini. Secara default, setelah Security Hub CSPM diaktifkan, ia dilengkapi dengan uji coba gratis 30 hari. Setelah persidangan, ada biaya yang terkait dengan ini Layanan AWS. Untuk informasi selengkapnya tentang harga, silakan lihat [harga AWS Security Hub CSPM](https://aws.amazon.com/security-hub/pricing/).

**Versi produk**
+ Helm versi 3.4.2 atau yang lebih baru
+ Apache Maven versi 3.6.3 atau yang lebih baru
+ BridgeCrew Checkov versi 2.2 atau yang lebih baru
+ Aqua Security Trivy versi 0.37 atau yang lebih baru

## Arsitektur
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**Tumpukan teknologi**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notification Service (Amazon SNS)

**Arsitektur target**

![\[Alur kerja untuk menyebarkan aplikasi Java ke Amazon EKS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


Diagram menunjukkan alur kerja berikut:

1. Pengembang memperbarui kode aplikasi Java di cabang dasar CodeCommit repositori, yang membuat permintaan tarik (PR).

1. Segera setelah PR dikirimkan, Amazon CodeGuru Reviewer secara otomatis meninjau kode, menganalisisnya berdasarkan praktik terbaik untuk Java, dan memberikan rekomendasi kepada pengembang.

1. Setelah PR digabungkan ke cabang dasar, EventBridge acara Amazon dibuat.

1.  EventBridge Acara memulai CodePipeline pipa, yang dimulai.

1. CodePipeline menjalankan tahap CodeSecurity Scan (keamanan berkelanjutan).

1. AWS CodeBuild memulai proses pemindaian keamanan di mana file Helm penerapan Dockerfile dan Kubernetes dipindai dengan menggunakan Checkov, dan kode sumber aplikasi dipindai berdasarkan perubahan kode tambahan. Pemindaian kode sumber aplikasi dilakukan oleh pembungkus [CodeGuru Reviewer Command Line Interface (CLI)](https://github.com/aws/aws-codeguru-cli).
**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. 

1. Jika tahap pemindaian keamanan berhasil, tahap Build (integrasi berkelanjutan) dimulai.

1. Pada tahap CodeBuild Build, membangun artefak, mengemas artefak ke image Docker, memindai gambar untuk kerentanan keamanan dengan menggunakan Aqua Security Trivy, dan menyimpan gambar di Amazon ECR.

1. Kerentanan yang terdeteksi dari langkah 8 diunggah ke Security Hub CSPM untuk analisis lebih lanjut oleh pengembang atau insinyur. Security Hub CSPM memberikan gambaran umum dan rekomendasi untuk memulihkan kerentanan.

1. Pemberitahuan email tentang fase berurutan dalam CodePipeline pipeline dikirim melalui Amazon SNS.

1. Setelah fase integrasi berkelanjutan selesai, CodePipeline memasuki tahap Deploy (pengiriman berkelanjutan).

1. Image Docker di-deploy ke Amazon EKS sebagai beban kerja kontainer (pod) dengan menggunakan bagan Helm.

1. Pod aplikasi dikonfigurasi dengan agen Amazon CodeGuru Profiler, yang mengirimkan data profil aplikasi (CPU, penggunaan heap, dan latensi) ke CodeGuru Profiler, yang membantu pengembang memahami perilaku aplikasi.

## Alat
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-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.
+  [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 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.
+ [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.
+ [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 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 real-time dari berbagai sumber, termasuk 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 Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)memberikan pandangan komprehensif tentang keadaan keamanan Anda AWS. Ini juga membantu Anda memeriksa AWS lingkungan Anda terhadap standar industri keamanan dan praktik terbaik.
+ [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.

**Layanan lainnya**
+ [Helm](https://helm.sh/docs/) adalah manajer paket open-source untuk Kubernetes.
+ [Apache Maven](https://maven.apache.org/) adalah alat manajemen dan pemahaman proyek perangkat lunak.
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) adalah alat analisis kode statis untuk memindai infrastruktur sebagai file kode (IAc) untuk kesalahan konfigurasi yang dapat menyebabkan masalah keamanan atau kepatuhan.
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) adalah pemindai komprehensif untuk kerentanan dalam gambar kontainer, sistem file, dan repositori Git, selain masalah konfigurasi.

**Kode**

Kode untuk pola ini tersedia di GitHub [aws-codepipeline-devsecops-amazoneks](https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks)repositori.

## Praktik terbaik
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ Pola ini mengikuti [praktik terbaik keamanan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) untuk menerapkan prinsip hak istimewa terkecil untuk entitas IAM di semua fase solusi. Jika Anda ingin memperluas solusi dengan alat tambahan Layanan AWS atau pihak ketiga, kami sarankan Anda meninjau bagian tentang [penerapan izin hak istimewa paling sedikit dalam dokumentasi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Jika Anda memiliki beberapa aplikasi Java, kami sarankan Anda membuat CI/CD pipeline terpisah untuk setiap aplikasi.
+ Jika Anda memiliki aplikasi monolit, kami sarankan Anda memecah aplikasi menjadi layanan mikro jika memungkinkan. Layanan mikro lebih fleksibel, memudahkan penerapan aplikasi sebagai wadah, dan memberikan visibilitas yang lebih baik ke dalam keseluruhan pembuatan dan penyebaran aplikasi.

## Epik
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning GitHub repositori. | Untuk mengkloning repositori, jalankan perintah berikut.<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | Pengembang aplikasi, DevOps insinyur | 
| Buat bucket S3 dan unggah kodenya. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, administrator Cloud, DevOps insinyur | 
| Buat CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps insinyur | 
| Validasi penyebaran CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps, DevOps insinyur | 
| Hapus bucket S3. | Kosongkan dan hapus bucket S3 yang Anda buat sebelumnya. Untuk informasi selengkapnya, lihat [Menghapus bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) di dokumentasi Amazon S3. | AWS DevOps, DevOps insinyur | 

### Konfigurasikan bagan Helm
<a name="configure-the-helm-charts"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan bagan Helm aplikasi Java Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps insinyur | 
| Validasi bagan Helm untuk kesalahan sintaks. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps insinyur | 

### Siapkan CI/CD pipeline Java
<a name="set-up-the-java-ci-cd-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CI/CD pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | AWS DevOps | 

### Aktifkan integrasi antara Security Hub CSPM dan Aqua Security
<a name="activate-integration-between-ash-and-aqua-security"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan integrasi Aqua Security. | Langkah ini diperlukan untuk mengunggah temuan kerentanan gambar Docker yang dilaporkan oleh Trivy ke Security Hub CSPM. Karena CloudFormation tidak mendukung integrasi CSPM Security Hub, proses ini harus dilakukan secara manual.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | Administrator AWS, DevOps insinyur | 

### Konfigurasi CodeBuild untuk menjalankan perintah Helm atau kubectl
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Izinkan CodeBuild untuk menjalankan perintah Helm atau kubectl di cluster Amazon EKS. |  CodeBuild Agar dapat diautentikasi untuk menggunakan Helm atau `kubectl` perintah dengan kluster Amazon EKS, Anda harus menambahkan peran IAM ke. `aws-auth` `ConfigMap` Dalam hal ini, tambahkan ARN dari peran IAM`EksCodeBuildkubeRoleARN`, yang merupakan peran IAM yang dibuat untuk CodeBuild layanan untuk mengakses kluster Amazon EKS dan menyebarkan beban kerja di dalamnya. Ini adalah kegiatan satu kali.Prosedur berikut harus diselesaikan sebelum tahap persetujuan penyebaran di CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)`aws_auth``ConfigMap`Ini dikonfigurasi, dan akses diberikan.  | DevOps | 

### Validasi pipa CI/CD
<a name="validate-the-ci-cd-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi bahwa CI/CD pipeline dimulai secara otomatis. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html)Untuk informasi selengkapnya tentang memulai pipeline dengan menggunakan CodePipeline, lihat [Memulai pipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)CodePipeline, [Memulai pipeline secara manual](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html), dan [Memulai pipeline sesuai jadwal](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html) dalam CodePipeline dokumentasi. | DevOps | 
| Menyetujui penyebaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.html) | DevOps | 
| Validasi pembuatan profil aplikasi. | Setelah penerapan selesai dan pod aplikasi dikerahkan di Amazon EKS, agen Amazon CodeGuru Profiler yang dikonfigurasi dalam aplikasi akan mencoba mengirim data profil aplikasi (CPU, ringkasan heap, latensi, dan bottleneck) ke Profiler. CodeGuru Untuk penerapan awal aplikasi, CodeGuru Profiler membutuhkan waktu sekitar 15 menit untuk memvisualisasikan data profil. | AWS DevOps | 

## Sumber daya terkait
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline dokumentasi](https://docs.aws.amazon.com/codepipeline/index.html)
+ [Memindai gambar dengan Trivy di AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (posting AWS blog)
+ [Meningkatkan aplikasi Java Anda menggunakan Amazon CodeGuru Profiler](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (posting AWS blog)
+ [AWS Sintaks Security Finding Format (ASFF)](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Pola EventBridge acara Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Peningkatan helm](https://helm.sh/docs/helm/helm_upgrade/)

## Informasi tambahan
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ CodeGuru Profiler tidak harus bingung dengan AWS X-Ray layanan dalam hal fungsionalitas. Kami menyarankan Anda menggunakan CodeGuru Profiler untuk mengidentifikasi baris kode paling mahal yang dapat menyebabkan kemacetan atau masalah keamanan, dan memperbaikinya sebelum menjadi risiko potensial. Layanan X-Ray adalah untuk pemantauan kinerja aplikasi.
+ Dalam pola ini, aturan acara dikaitkan dengan bus acara default. Jika diperlukan, Anda dapat memperluas pola untuk menggunakan bus acara khusus.
+ Pola ini menggunakan CodeGuru Reviewer sebagai alat pengujian keamanan aplikasi statis (SAST) untuk kode aplikasi. Anda juga dapat menggunakan pipeline ini untuk alat lain, seperti SonarQube atau Checkmarx. Anda dapat menambahkan petunjuk pengaturan pemindaian untuk salah satu alat ini `buildspec/buildspec_secscan.yaml` untuk mengganti instruksi CodeGuru pemindaian.
**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.

# Salin gambar wadah Amazon ECR di seluruh Akun AWS dan Wilayah AWS
<a name="copy-ecr-container-images-across-accounts-regions"></a>

*Faisal Shahdad, Amazon Web Services*

## Ringkasan
<a name="copy-ecr-container-images-across-accounts-regions-summary"></a>

Pola ini menunjukkan kepada Anda cara menggunakan pendekatan tanpa server untuk mereplikasi gambar yang ditandai dari repositori Amazon Elastic Container Registry (Amazon ECR) yang ada ke repositori lain dan. Akun AWS Wilayah AWS Solusinya digunakan AWS Step Functions untuk mengelola alur kerja replikasi dan AWS Lambda fungsi untuk menyalin gambar kontainer besar.

Amazon ECR menggunakan fitur replikasi [lintas wilayah](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crr-single) dan [lintas akun](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry-settings-examples.html#registry-settings-examples-crossaccount) asli yang mereplikasi gambar kontainer di seluruh Wilayah dan akun. Tetapi fitur-fitur ini mereplikasi gambar hanya dari saat replikasi dihidupkan. Tidak ada mekanisme untuk mereplikasi gambar yang ada di Wilayah dan akun yang berbeda. 

Pola ini membantu tim kecerdasan buatan (AI) mendistribusikan model pembelajaran mesin kontainerisasi (ML), kerangka kerja (misalnya, PyTorch, dan Hugging Face) TensorFlow, dan dependensi ke akun dan Wilayah lain. Ini dapat membantu Anda mengatasi batas layanan dan mengoptimalkan sumber daya komputasi GPU. Anda juga dapat secara selektif mereplikasi repositori Amazon ECR dari akun sumber dan Wilayah tertentu. Untuk informasi selengkapnya, lihat [Replikasi Lintas Wilayah di Amazon ECR](https://aws.amazon.com/blogs/containers/cross-region-replication-in-amazon-ecr-has-landed/) telah mendarat.

## Prasyarat dan batasan
<a name="copy-ecr-container-images-across-accounts-regions-prereqs"></a>

**Prasyarat**
+ Dua atau lebih aktif Akun AWS (satu akun sumber dan satu akun tujuan, minimal)
+ Izin yang sesuai AWS Identity and Access Management (IAM) di semua akun
+ Docker untuk membangun gambar wadah Lambda
+ AWS Command Line Interface (AWS CLI) dikonfigurasi untuk semua akun

**Batasan**
+ **Pengecualian gambar yang tidak ditandai -** Solusinya hanya menyalin gambar kontainer yang memiliki tag eksplisit. Ini melewatkan gambar yang tidak ditandai yang ada dengan intisari. `SHA256`
+ Batasan **batas waktu eksekusi Lambda — AWS Lambda dibatasi hingga batas waktu eksekusi maksimum 15 menit, yang mungkin tidak cukup untuk menyalin gambar atau repositori kontainer** besar.
+ **Manajemen gambar kontainer manual -** Kode `crane-app.py` Python memerlukan pembangunan kembali dan penempatan kembali gambar kontainer Lambda.
+ **Kapasitas pemrosesan paralel terbatas -** Pengaturan `MaxConcurrency` status membatasi berapa banyak repositori yang dapat Anda salin pada saat yang bersamaan. Namun, Anda dapat mengubah pengaturan ini di AWS CloudFormation template akun sumber. Perhatikan bahwa nilai konkurensi yang lebih tinggi dapat menyebabkan Anda melebihi batas tingkat layanan dan kuota eksekusi Lambda tingkat akun.

## Arsitektur
<a name="copy-ecr-container-images-across-accounts-regions-architecture"></a>

**Target tumpukan**

Pola ini memiliki empat komponen utama:
+ **Infrastruktur akun sumber —** CloudFormation template yang membuat komponen orkestrasi
+ **Infrastruktur akun tujuan -** CloudFormation templat yang membuat peran akses lintas akun
+ Fungsi **Lambda - Fungsi** berbasis Python yang menggunakan Crane untuk penyalinan gambar yang efisien
+ **Gambar kontainer -** Wadah Docker yang mengemas fungsi Lambda dengan alat yang diperlukan

**Arsitektur target**

![\[alt text not found\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/cc7d9823-3dc8-4090-a203-910b1ac4447c.png)


**Alur kerja Step Functions**

Mesin status Step Functions mengatur hal berikut, seperti yang ditunjukkan pada diagram berikut:
+ `PopulateRepositoryList`**—** Memindai repositori Amazon ECR dan mengisi Amazon DynamoDB
+ `GetRepositoryList`**-** Mengambil daftar repositori unik dari DynamoDB
+ `DeduplicateRepositories`**—** Memastikan bahwa tidak ada pemrosesan duplikat
+ `CopyRepositories`**—** Menangani penyalinan paralel repositori
+ `NotifySuccess`/`NotifyFailure`**—** Pemberitahuan Amazon Simple Notification Service (Amazon SNS) berdasarkan hasil eksekusi

![\[alt text not found\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/787185e7-664b-4ed8-b30f-1d9507f13377/images/1b740084-ba2b-4956-aa12-ebbf52be5e7d.png)


## Alat
<a name="copy-ecr-container-images-across-accounts-regions-tools"></a>

**Alat Amazon**
+ [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 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.
+ [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.
+ [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 fungsi Lambda dan lainnya untuk membangun aplikasi bisnis yang penting. Layanan AWS 

**Alat-alat lainnya**
+ [Crane](https://michaelsauter.github.io/crane/index.html) adalah alat orkestrasi Docker. Ini mirip dengan Docker Compose tetapi memiliki fitur tambahan.
+ [Docker](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi di tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.

**Repositori kode**
+ Kode untuk pola ini tersedia di GitHub [sample-ecr-copy repositori](https://github.com/aws-samples/sample-ecr-copy). Anda dapat menggunakan CloudFormation template dari repositori untuk membuat sumber daya yang mendasarinya.

## Praktik terbaik
<a name="copy-ecr-container-images-across-accounts-regions-best-practices"></a>

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="copy-ecr-container-images-across-accounts-regions-epics"></a>

### Persiapkan lingkungan Anda
<a name="prepare-your-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan AWS CLI profil. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur data, insinyur ML | 
| Kumpulkan informasi yang diperlukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur data, insinyur ML | 
| Kloning repositori. | Kloning repositori pola ke workstation lokal Anda:<pre>git clone https://github.com/aws-samples/sample-ecr-copy</pre> | DevOps insinyur, insinyur data, insinyur ML | 

### Menyebarkan infrastruktur untuk akun tujuan
<a name="deploy-infrastructure-for-the-destination-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi template. | Validasi CloudFormation template:<pre>aws cloudformation validate-template \<br />  --template-body file://"Destination Account cf_template.yml" \<br />  --profile destination-account</pre> | DevOps insinyur, insinyur ML, Insinyur data | 
| Menyebarkan infrastruktur tujuan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Verifikasi penyebaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 

### Bangun dan terapkan gambar kontainer Lambda
<a name="build-and-deploy-the-lam-container-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan kontainer build. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Bangun gambar kontainer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Buat repositori dan unggah gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Verifikasi gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 

### Menyebarkan infrastruktur akun sumber
<a name="deploy-the-source-account-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan parameter penerapan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, DevOps insinyur, insinyur ML | 
| Validasi template sumber. | Validasi CloudFormation template sumber:<pre>aws cloudformation validate-template \<br />  --template-body file://"Source Account Cf template.yml" \<br />  --profile source-account</pre> | Insinyur data, insinyur ML, DevOps insinyur | 
| Menyebarkan infrastruktur sumber. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 
| Verifikasi penerapan dan kumpulkan output. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Konfirmasikan langganan email Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | Insinyur data, insinyur ML, DevOps insinyur | 

### Jalankan dan pantau proses penyalinan
<a name="run-and-monitor-the-copy-process"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan dan pantau proses penyalinan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Jalankan fungsi langkah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Pantau kemajuan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur ML, Insinyur data | 
| Periksa hasilnya. | Tunggu proses selesai (diperbarui setiap 30 detik):<pre>while true; do<br />  STATUS=$(aws stepfunctions describe-execution \<br />    --execution-arn $EXECUTION_ARN \<br />    --profile source-account \<br />    --region $SOURCE_REGION \<br />    --query 'status' \<br />    --output text)<br />  <br />  echo "Current status: $STATUS"<br />  <br />  if [[ "$STATUS" == "SUCCEEDED" || "$STATUS" == "FAILED" || "$STATUS" == "TIMED_OUT" || "$STATUS" == "ABORTED" ]]; then<br />    break<br />  fi<br />  <br />  sleep 30<br />done<br /><br />echo "Final execution status: $STATUS"</pre> | DevOps insinyur, insinyur ML, Insinyur data | 
| Verifikasi gambar. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | DevOps insinyur, insinyur data, insinyur ML | 

## Pemecahan masalah
<a name="copy-ecr-container-images-across-accounts-regions-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Fungsi langkah gagal dijalankan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/copy-ecr-container-images-across-accounts-regions.html) | 

## Sumber daya terkait
<a name="copy-ecr-container-images-across-accounts-regions-resources"></a>
+ [Dokumentasi derek](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md)
+ [Apa itu Amazon Elastic Container Registry?](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Apa itu AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
+ [Apa itu Step Functions?](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)

## Informasi tambahan
<a name="copy-ecr-container-images-across-accounts-regions-additional"></a>

**Parameter konfigurasi**


| 
| 
| Parameter | Deskripsi | Contoh | 
| --- |--- |--- |
| `SourceAccountId` |  Akun AWS ID Sumber | `11111111111` | 
| `DestinationAccountId` |  Akun AWS ID Tujuan | `22222222222` | 
| `DestinationRegion` | Target Wilayah AWS | `us-east-2` | 
| `SourceRegion` | Sumber Wilayah AWS | `us-east-1` | 
| `NotificationEmail` | Email untuk notifikasi | `abc@xyz.com` | 
| `RepositoryList` | Repositori untuk disalin | `repo1,repo2,repo3` | 
| `LambdaImageUri` | URI gambar kontainer Lambda | `${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com/ecr-copy-lambda:latest` | 

# Buat definisi tugas Amazon ECS dan pasang sistem file pada EC2 instans menggunakan Amazon EFS
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs"></a>

*Durga Prasad Cheepuri, Amazon Web Services*

## Ringkasan
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-summary"></a>

Pola ini menyediakan contoh kode dan langkah-langkah untuk membuat definisi tugas Amazon Elastic Container Service (Amazon ECS) yang berjalan pada instans Amazon Elastic Compute Cloud ( EC2Amazon) di Amazon Web Services (AWS) Cloud, saat menggunakan Amazon Elastic File System (Amazon EFS) untuk memasang sistem file pada instance tersebut. EC2 Tugas Amazon ECS yang menggunakan Amazon EFS secara otomatis memasang sistem file yang Anda tentukan dalam definisi tugas dan membuat sistem file ini tersedia untuk penampung tugas di semua Availability Zone di Wilayah AWS.

Untuk memenuhi persyaratan penyimpanan persisten dan penyimpanan bersama, Anda dapat menggunakan Amazon ECS dan Amazon EFS bersama-sama. Misalnya, Anda dapat menggunakan Amazon EFS untuk menyimpan data pengguna dan data aplikasi persisten untuk aplikasi Anda dengan pasangan kontainer ECS aktif dan siaga yang berjalan di Availability Zone yang berbeda untuk ketersediaan tinggi. Anda juga dapat menggunakan Amazon EFS untuk menyimpan data bersama yang dapat diakses secara paralel oleh kontainer ECS dan beban kerja terdistribusi.

Untuk menggunakan Amazon EFS dengan Amazon ECS, Anda dapat menambahkan satu atau beberapa definisi volume ke definisi tugas. Definisi volume mencakup ID sistem file Amazon EFS, ID titik akses, dan konfigurasi untuk otorisasi AWS Identity and Access Management (IAM) atau enkripsi Transport Layer Security (TLS) dalam perjalanan. Anda dapat menggunakan definisi kontainer dalam definisi tugas untuk menentukan volume definisi tugas yang dipasang saat penampung berjalan. Saat tugas yang menggunakan sistem file Amazon EFS berjalan, Amazon ECS memastikan bahwa sistem file terpasang dan tersedia untuk wadah yang memerlukan akses ke sana.

## Prasyarat dan batasan
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Virtual Private Cloud (VPC) dengan titik akhir virtual private network (VPN) atau router
+ (Direkomendasikan) [Agen kontainer Amazon ECS 1.38.0 atau yang lebih baru](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-versions.html) untuk kompatibilitas dengan jalur akses Amazon EFS dan fitur otorisasi IAM (Untuk informasi selengkapnya, lihat postingan blog AWS Baru untuk [Amazon EFS — Otorisasi IAM](https://aws.amazon.com/blogs/aws/new-for-amazon-efs-iam-authorization-and-access-points/) dan Titik Akses.)

**Batasan**
+ Versi agen penampung Amazon ECS lebih awal dari 1.35.0 tidak mendukung sistem file Amazon EFS untuk tugas yang menggunakan jenis peluncuran. EC2 

## Arsitektur
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-architecture"></a>

Diagram berikut menunjukkan contoh aplikasi yang menggunakan Amazon ECS untuk membuat definisi tugas dan memasang sistem file Amazon EFS pada EC2 instance dalam wadah ECS.

![\[Amazon ECS architecture with task definition, ECS service, containers, and EFS file system integration.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/images/343e0f1d-44ee-4ec2-8392-aeddc0e48b83.png)


Diagram menunjukkan alur kerja berikut:

1. Buat sistem file Amazon EFS.

1. Buat definisi tugas dengan wadah.

1. Konfigurasikan instance kontainer untuk memasang sistem file Amazon EFS. Definisi tugas mereferensikan pemasangan volume, sehingga instance container dapat menggunakan sistem file Amazon EFS. Tugas ECS memiliki akses ke sistem file Amazon EFS yang sama, terlepas dari instance container mana tugas tersebut dibuat.

1. Buat layanan Amazon ECS dengan tiga contoh definisi tugas.

**Tumpukan teknologi**
+ Amazon EC2
+ Amazon ECS
+ Amazon EFS

## Alat
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-tools"></a>
+ [Amazon EC2 — Amazon](https://docs.aws.amazon.com/ec2/?id=docs_gateway) Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas komputasi yang dapat diskalakan di AWS Cloud. Anda dapat menggunakan Amazon EC2 untuk meluncurkan server virtual sebanyak atau sesedikit yang Anda butuhkan, dan Anda dapat meningkatkan skala atau meningkatkan skala.
+ [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 untuk menjalankan, menghentikan, dan mengelola kontainer di cluster. Anda dapat menjalankan tugas dan layanan Anda pada infrastruktur tanpa server yang dikelola oleh AWS Fargate. Atau, untuk kontrol lebih besar atas infrastruktur Anda, Anda dapat menjalankan tugas dan layanan Anda pada sekelompok EC2 instance yang Anda kelola.
+ [Amazon EFS](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) — Amazon Elastic File System (Amazon EFS) menyediakan sistem file NFS elastis yang sederhana, dapat diskalakan, dan dikelola sepenuhnya untuk digunakan dengan layanan AWS Cloud dan sumber daya lokal.
+ [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 untuk berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda. Dengan konfigurasi minimal, Anda dapat menjalankan perintah AWS CLI yang mengimplementasikan fungsionalitas yang setara dengan yang disediakan oleh AWS Management Console berbasis browser dari prompt perintah.

## Epik
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-epics"></a>

### Buat sistem file Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sistem file Amazon EFS menggunakan AWS Management Console. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

### Buat definisi tugas Amazon ECS dengan menggunakan sistem file Amazon EFS atau AWS CLI
<a name="create-an-amazon-ecs-task-definition-by-using-either-an-amazon-efs-file-system-or-the-aws-cli"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat definisi tugas menggunakan sistem file Amazon EFS. | Buat definisi tugas dengan menggunakan konsol [Amazon ECS baru atau konsol](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) [Amazon ECS klasik](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition-classic.html) dengan konfigurasi berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 
| Buat definisi tugas menggunakan AWS CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs.html) | AWS DevOps | 

## Sumber daya terkait
<a name="create-an-amazon-ecs-task-definition-and-mount-a-file-system-on-ec2-instances-using-amazon-efs-resources"></a>
+ [Definisi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)
+ [Volume Amazon EFS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/efs-volumes.html)

## Lampiran
<a name="attachments-090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/090a3f03-a4c6-47e3-b1ae-b0eb5c5b269c/attachments/attachment.zip)

# Menyebarkan fungsi Lambda dengan gambar kontainer
<a name="deploy-lambda-functions-with-container-images"></a>

*Ram Kandaswamy, Amazon Web Services*

## Ringkasan
<a name="deploy-lambda-functions-with-container-images-summary"></a>

AWS Lambda mendukung gambar kontainer sebagai model penerapan. Pola ini menunjukkan cara menerapkan fungsi Lambda melalui gambar kontainer. 

Lambda adalah layanan komputasi tanpa server dan berbasis peristiwa yang dapat Anda gunakan untuk menjalankan kode untuk hampir semua jenis aplikasi atau layanan backend tanpa menyediakan atau mengelola server. Dengan dukungan gambar kontainer untuk fungsi Lambda, Anda mendapatkan manfaat penyimpanan hingga 10 GB untuk artefak aplikasi Anda dan kemampuan untuk menggunakan alat pengembangan gambar kontainer yang sudah dikenal.

Contoh dalam pola ini menggunakan Python sebagai bahasa pemrograman yang mendasarinya, tetapi Anda dapat menggunakan bahasa lain, seperti Java, Node.js, atau Go. Untuk sumbernya, pertimbangkan sistem berbasis Git seperti GitHub,, atau Bitbucket GitLab, atau gunakan Amazon Simple Storage Service (Amazon S3).

## Prasyarat dan batasan
<a name="deploy-lambda-functions-with-container-images-prereqs"></a>

**Prasyarat**
+ Amazon Elastic Container Registry (Amazon ECR) diaktifkan
+ Kode aplikasi
+ Gambar Docker dengan klien antarmuka runtime dan versi terbaru Python
+ Pengetahuan tentang Git

**Batasan**
+ Ukuran gambar maksimum yang didukung adalah 10 GB.
+ Runtime maksimum untuk penerapan kontainer berbasis Lambda adalah 15 menit.

## Arsitektur
<a name="deploy-lambda-functions-with-container-images-architecture"></a>

**Arsitektur target**

![\[Proses empat langkah untuk membuat fungsi Lambda.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e421cc58-d33e-493d-b0bb-c3ffe39c2eb9/images/7f36d3d8-d161-497a-b036-26d886a16c69.png)


 

1. Anda membuat repositori Git dan mengkomit kode aplikasi ke repositori.

1.  AWS CodeBuild Proyek ini dipicu oleh perubahan komit.

1.  CodeBuild Proyek ini membuat gambar Docker dan menerbitkan gambar yang dibangun ke Amazon ECR.

1. Anda membuat fungsi Lambda menggunakan gambar di Amazon ECR.

**Otomatisasi dan skala**

Pola ini dapat diotomatisasi dengan menggunakan AWS CloudFormation AWS Cloud Development Kit (AWS CDK),, atau operasi API dari SDK. Lambda dapat secara otomatis menskalakan berdasarkan jumlah permintaan, dan Anda dapat menyetelnya dengan menggunakan parameter konkurensi. Untuk informasi selengkapnya, lihat dokumentasi [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html).

## Alat
<a name="deploy-lambda-functions-with-container-images-tools"></a>

**Layanan AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)AWS CloudFormationhelps Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS Pola ini menggunakan [AWS CloudFormation Application Composer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/app-composer-for-cloudformation.html), yang membantu Anda melihat dan mengedit CloudFormation template secara visual.
+ [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.
+ [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 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.

**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](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), dan [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) adalah beberapa sistem kontrol sumber berbasis Git yang umum digunakan untuk melacak perubahan kode sumber.

## Praktik terbaik
<a name="deploy-lambda-functions-with-container-images-best-practices"></a>
+ Jadikan fungsi Anda seefisien dan sekecil mungkin untuk menghindari memuat file yang tidak perlu.
+ Berusahalah untuk memiliki lapisan statis yang lebih tinggi di daftar file Docker Anda, dan tempatkan lapisan yang lebih sering berubah di bawah. Ini meningkatkan caching, yang meningkatkan kinerja.
+ Pemilik gambar bertanggung jawab untuk memperbarui dan menambal gambar. Tambahkan irama pembaruan itu ke proses operasional Anda. Lihat informasi yang lebih lengkap dalam [dokumentasi AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code).

## Epik
<a name="deploy-lambda-functions-with-container-images-epics"></a>

### Buat proyek di CodeBuild
<a name="create-a-project-in-codebuild"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Git. | Buat repositori Git yang akan berisi kode sumber aplikasi, Dockerfile, dan file. `buildspec.yaml`  | Developer | 
| Buat CodeBuild proyek. | Untuk menggunakan CodeBuild proyek untuk membuat gambar Lambda kustom, lakukan hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | Developer | 
| Edit Dockerfile. | Dockerfile harus ditempatkan di direktori tingkat atas tempat Anda mengembangkan aplikasi. Kode Python harus ada di folder. `src`Saat Anda membuat gambar, gunakan gambar [resmi yang didukung Lambda](https://gallery.ecr.aws/lambda?page=1). Jika tidak, kesalahan bootstrap akan terjadi, membuat proses pengepakan lebih sulit.Untuk detailnya, lihat bagian [Informasi tambahan](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Buat repositori di Amazon ECR. | Buat repositori kontainer di Amazon ECR. Dalam contoh perintah berikut, nama repositori yang dibuat adalah: `cf-demo`<pre>aws ecr create-repository --cf-demo </pre>Repositori akan direferensikan dalam file. `buildspec.yaml` | Administrator AWS, Pengembang | 
| Dorong gambar ke Amazon ECR. | Anda dapat menggunakannya CodeBuild untuk melakukan proses pembuatan gambar. CodeBuild memerlukan izin untuk berinteraksi dengan Amazon ECR dan bekerja dengan S3. Sebagai bagian dari proses, image Docker dibuat dan didorong ke registri Amazon ECR. Untuk detail tentang template dan kode, lihat bagian [Informasi tambahan](#deploy-lambda-functions-with-container-images-additional). | Developer | 
| Verifikasi bahwa gambar ada di repositori. | **Untuk memverifikasi bahwa gambar ada di repositori, di konsol Amazon ECR, pilih Repositori.** Gambar harus terdaftar, dengan tag dan dengan hasil laporan pemindaian kerentanan jika fitur itu diaktifkan di pengaturan Amazon ECR.  Untuk informasi selengkapnya, lihat [dokumentasi AWS](https://docs.aws.amazon.com/cli/latest/reference/ecr/put-registry-scanning-configuration.html). | Developer | 

### Buat fungsi Lambda untuk menjalankan gambar
<a name="create-the-lambda-function-to-run-the-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda. | Di konsol Lambda, pilih **Create function**, lalu pilih **Container** image. **Masukkan nama fungsi dan URI untuk gambar yang ada di repositori Amazon ECR, lalu pilih Create function.** Untuk informasi selengkapnya, lihat dokumentasi [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html). | Pengembang aplikasi | 
| Uji fungsi Lambda. | Untuk memanggil dan menguji fungsi, pilih **Uji**. Untuk informasi selengkapnya, lihat dokumentasi [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/testing-functions.html). | Pengembang aplikasi | 

## Pemecahan masalah
<a name="deploy-lambda-functions-with-container-images-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Membangun tidak berhasil. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-lambda-functions-with-container-images.html) | 

## Sumber daya terkait
<a name="deploy-lambda-functions-with-container-images-resources"></a>
+ [Gambar dasar untuk Lambda](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-images.html)
+ [Sampel Docker untuk CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html)
+ [Lulus kredensyal sementara](https://aws.amazon.com/premiumsupport/knowledge-center/codebuild-temporary-credentials-docker/)

## Informasi tambahan
<a name="deploy-lambda-functions-with-container-images-additional"></a>

**Edit Dockerfile**

Kode berikut menunjukkan perintah yang Anda edit di Dockerfile:

```
FROM public.ecr.aws/lambda/python:3.xx

# Copy function code
COPY app.py ${LAMBDA_TASK_ROOT} 
COPY requirements.txt  ${LAMBDA_TASK_ROOT} 

# install dependencies
RUN pip3 install --user -r requirements.txt

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.lambda_handler" ]
```

Dalam `FROM` perintah, gunakan nilai yang sesuai untuk versi Python yang didukung oleh Lambda (misalnya,). `3.12` Ini akan menjadi gambar dasar yang tersedia di repositori gambar Amazon ECR publik. 

`COPY app.py ${LAMBDA_TASK_ROOT}`Perintah menyalin kode ke direktori root tugas, yang akan digunakan fungsi Lambda. Perintah ini menggunakan variabel lingkungan sehingga kita tidak perlu khawatir tentang jalur yang sebenarnya. Fungsi yang akan dijalankan diteruskan sebagai argumen ke `CMD [ "app.lambda_handler" ]` perintah.

`COPY requirements.txt`Perintah menangkap dependensi yang diperlukan untuk kode. 

`RUN pip install --user -r requirements.txt`Perintah menginstal dependensi ke direktori pengguna lokal. 

Untuk membangun gambar Anda, jalankan perintah berikut.

```
docker build -t <image name> .
```

**Tambahkan gambar di Amazon ECR**

Dalam kode berikut, ganti `aws_account_id` dengan nomor akun, dan ganti `us-east-1` jika Anda menggunakan Wilayah yang berbeda. `buildspec`File menggunakan nomor CodeBuild build untuk mengidentifikasi versi gambar secara unik sebagai nilai tag. Anda dapat mengubah ini agar sesuai dengan kebutuhan Anda.

*Kode kustom buildspec*

```
phases:
  install:
    runtime-versions:
       python: 3.xx
  pre_build:
    commands:
      - python3 --version
      - pip3 install --upgrade pip
      - pip3 install --upgrade awscli
      - sudo docker info
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - ls
      - cd app
      - docker build -t cf-demo:$CODEBUILD_BUILD_NUMBER .
      - docker container ls
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com
      - docker tag cf-demo:$CODEBUILD_BUILD_NUMBER aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
      - docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/cf-demo:$CODEBUILD_BUILD_NUMBER
```

# Menerapkan layanan mikro Java di Amazon ECS menggunakan AWS Fargate
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate"></a>

*Vijay Thompson dan Sandeep Bondugula, Amazon Web Services*

## Ringkasan
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-summary"></a>

Pola ini memberikan panduan untuk menerapkan layanan mikro Java dalam peti kemas di Amazon Elastic Container Service (Amazon ECS) Container Service (Amazon ECS) dengan menggunakan AWS Fargate. Polanya tidak menggunakan Amazon Elastic Container Registry (Amazon ECR) Registry (Amazon ECR) untuk manajemen kontainer; sebagai gantinya, gambar Docker ditarik dari hub Docker. 

## Prasyarat dan batasan
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-prereqs"></a>

**Prasyarat**
+ Aplikasi microservices Java yang ada di hub Docker
+ Sebuah repositori Docker publik
+ Akun AWS yang aktif
+ Keakraban dengan layanan AWS, termasuk Amazon ECS dan Fargate
+ Kerangka kerja Docker, Java, dan Spring Boot
+ Amazon Relational Database Service (Amazon RDS) aktif dan berjalan (opsional)
+ Virtual private cloud (VPC) jika aplikasi memerlukan Amazon RDS (opsional)

## Arsitektur
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-architecture"></a>

**Tumpukan teknologi sumber**
+ Layanan mikro Java (misalnya, diimplementasikan di Spring Boot) dan digunakan di Docker

**Arsitektur sumber**

![\[Arsitektur sumber untuk layanan mikro Java yang digunakan di Docker\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/0a946ca8-fe37-4ede-85cb-a80a1c36105d.png)


**Tumpukan teknologi target**
+ Cluster Amazon ECS yang menampung setiap layanan mikro dengan menggunakan Fargate
+ Jaringan VPC untuk meng-host cluster Amazon ECS dan grup keamanan terkait 
+  cluster/task Definisi untuk setiap layanan mikro yang memutar kontainer dengan menggunakan Fargate

**Arsitektur target**

![\[Arsitektur target pada layanan mikro Java di Amazon ECS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/65185957-2b8b-43a6-964c-95ce0a45ba17/images/b21349ea-21fc-4688-b76a-1bde479858aa.png)


## Alat
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-tools"></a>

**Alat**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) menghilangkan kebutuhan untuk menginstal dan mengoperasikan perangkat lunak orkestrasi kontainer Anda sendiri, mengelola dan menskalakan sekelompok mesin virtual, atau menjadwalkan kontainer pada mesin virtual tersebut. 
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) membantu Anda menjalankan container tanpa perlu mengelola server atau instans Amazon Elastic Compute Cloud (Amazon). EC2 Ini digunakan bersama dengan Amazon Elastic Container Service (Amazon ECS).
+ [Docker](https://www.docker.com/) adalah platform perangkat lunak yang memungkinkan Anda membangun, menguji, dan menyebarkan aplikasi dengan cepat. Docker mengemas perangkat lunak ke dalam unit standar yang disebut *kontainer* yang memiliki semua yang dibutuhkan perangkat lunak untuk dijalankan, termasuk perpustakaan, alat sistem, kode, dan runtime. 

**Kode Docker**

Dockerfile berikut menentukan versi Java Development Kit (JDK) yang digunakan, di mana file arsip Java (JAR) ada, nomor port yang terbuka, dan titik masuk untuk aplikasi.

```
FROM openjdk:11
ADD target/Spring-docker.jar Spring-docker.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","Spring-docker.jar"]
```

## Epik
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-epics"></a>

### Buat definisi tugas baru
<a name="create-new-task-definitions"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat definisi tugas. | Menjalankan wadah Docker di Amazon ECS memerlukan definisi tugas. Buka konsol Amazon ECS di [https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/), pilih **Definisi tugas**, lalu buat definisi tugas baru. Untuk informasi selengkapnya, lihat [dokumentasi Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html). | Administrator sistem AWS, Pengembang aplikasi | 
| Pilih jenis peluncuran. | Pilih **Fargate** sebagai tipe peluncuran. | Administrator sistem AWS, Pengembang aplikasi | 
| Konfigurasikan tugas. | Tentukan nama tugas dan konfigurasikan aplikasi dengan jumlah memori tugas dan CPU yang sesuai. | Administrator sistem AWS, Pengembang aplikasi | 
| Tentukan wadahnya. | Tentukan nama wadah. Untuk gambar, masukkan nama situs Docker, nama repositori, dan nama tag image Docker (). `docker.io/sample-repo/sample-application:sample-tag-name` Tetapkan batas memori untuk aplikasi, dan atur pemetaan port (`8080, 80`) untuk port yang diizinkan. | Administrator sistem AWS, Pengembang aplikasi | 
| Buat tugas. | Saat konfigurasi tugas dan wadah sudah ada, buat tugas. Untuk petunjuk terperinci, lihat tautan di bagian *Sumber daya terkait*. | Administrator sistem AWS, Pengembang aplikasi | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat dan konfigurasikan cluster. | Pilih **Jaringan hanya** sebagai tipe cluster, konfigurasikan nama, lalu buat cluster atau gunakan cluster yang ada jika tersedia. Untuk informasi selengkapnya, lihat [dokumentasi Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html). | Administrator sistem AWS, Pengembang aplikasi | 

### Konfigurasikan Tugas
<a name="configure-task"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat tugas. | Di dalam cluster, pilih **Jalankan tugas baru**. | Administrator sistem AWS, Pengembang aplikasi | 
| Pilih jenis peluncuran. | Pilih **Fargate** sebagai tipe peluncuran. | Administrator sistem AWS, Pengembang aplikasi | 
| Pilih definisi tugas, revisi, dan versi platform. | Pilih tugas yang ingin Anda jalankan, revisi definisi tugas, dan versi platform. | Administrator sistem AWS, Pengembang aplikasi | 
| Pilih cluster. | Pilih cluster tempat Anda ingin menjalankan tugas. | Administrator sistem AWS, Pengembang aplikasi | 
| Tentukan jumlah tugas. | Konfigurasikan jumlah tugas yang harus dijalankan. Jika Anda meluncurkan dengan dua tugas atau lebih, penyeimbang beban diperlukan untuk mendistribusikan lalu lintas di antara tugas-tugas. | Administrator sistem AWS, Pengembang aplikasi | 
| Tentukan kelompok tugas. | (Opsional) Tentukan nama grup tugas untuk mengidentifikasi serangkaian tugas terkait sebagai kelompok tugas. | Administrator sistem AWS, Pengembang aplikasi | 
| Konfigurasikan VPC cluster, subnet, dan grup keamanan. | Konfigurasikan VPC cluster dan subnet tempat Anda ingin menyebarkan aplikasi. Buat atau perbarui grup keamanan (HTTP, HTTPS, dan port 8080) untuk menyediakan akses ke koneksi masuk dan keluar. | Administrator sistem AWS, Pengembang aplikasi | 
| Konfigurasikan pengaturan IP publik. | Aktifkan atau nonaktifkan IP publik, tergantung pada apakah Anda ingin menggunakan alamat IP publik untuk tugas Fargate. Opsi default yang direkomendasikan adalah **Diaktifkan**. | Administrator sistem AWS, Pengembang aplikasi | 
| Tinjau pengaturan dan buat tugas | Tinjau pengaturan Anda, lalu pilih **Jalankan Tugas**. | Administrator sistem AWS, Pengembang aplikasi | 

### Potong
<a name="cut-over"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin URL aplikasi. | Ketika status tugas telah diperbarui ke *Running*, pilih tugas. Di bagian Jaringan, salin IP publik. | Administrator sistem AWS, Pengembang aplikasi | 
| Uji aplikasi Anda. | Di browser Anda, masukkan IP publik untuk menguji aplikasi. | Administrator sistem AWS, Pengembang aplikasi | 

## Sumber daya terkait
<a name="deploy-java-microservices-on-amazon-ecs-using-aws-fargate-resources"></a>
+ [Dasar-Dasar Docker untuk Amazon ECS (](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)dokumentasi Amazon ECS)
+ [Amazon ECS di AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html) (dokumentasi Amazon ECS)
+ [Membuat Definisi Tugas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html) (dokumentasi Amazon ECS)
+ [Membuat Cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html) (dokumentasi Amazon ECS)
+ [Mengkonfigurasi Parameter Layanan Dasar](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/basic-service-params.html) (dokumentasi Amazon ECS)
+ [Mengkonfigurasi Jaringan (dokumentasi](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-configure-network.html) Amazon ECS)
+ [Menerapkan Java Microservices di Amazon ECS (posting blog](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/))

# Menerapkan resource dan paket Kubernetes menggunakan Amazon EKS dan repositori bagan Helm di Amazon S3
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Ringkasan
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Pola ini membantu Anda mengelola aplikasi Kubernetes secara efisien, terlepas dari kompleksitasnya. Pola ini mengintegrasikan Helm ke dalam pipeline continuous integration dan continuous delivery (CI/CD) yang ada untuk menyebarkan aplikasi ke dalam klaster Kubernetes. Helm adalah manajer paket Kubernetes yang membantu Anda mengelola aplikasi Kubernetes. Bagan helm membantu mendefinisikan, menginstal, dan meningkatkan aplikasi Kubernetes yang kompleks. Bagan dapat dibuat versi dan disimpan di repositori Helm, yang meningkatkan mean time to restore (MTTR) selama pemadaman. 

Pola ini menggunakan Amazon Elastic Kubernetes Service (Amazon EKS) untuk klaster Kubernetes. Ini menggunakan Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) sebagai repositori bagan Helm, sehingga bagan dapat dikelola dan diakses secara terpusat oleh pengembang di seluruh organisasi.

## Prasyarat dan batasan
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Prasyarat**
+ Akun Amazon Web Services (AWS) aktif dengan virtual private cloud (VPC)
+ Klaster Amazon EKS 
+ Node pekerja disiapkan dalam klaster Amazon EKS dan siap menerima beban kerja
+ Kubectl untuk mengonfigurasi file Amazon EKS kubeconfig untuk cluster target di mesin klien
+ Akses AWS Identity and Access Management (IAM) untuk membuat bucket S3
+ Akses IAM (terprogram atau peran) ke Amazon S3 dari mesin klien
+ Manajemen kode sumber dan CI/CD pipa

**Batasan**
+ Tidak ada dukungan saat ini untuk meningkatkan, menghapus, atau mengelola definisi sumber daya khusus ()CRDs.
+ Jika Anda menggunakan sumber daya yang mengacu pada CRD, CRD harus diinstal secara terpisah (di luar bagan).

**Versi produk**
+ Helm v3.6.3

## Arsitektur
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Tumpukan teknologi target**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ Manajemen kode sumber
+ Helm
+ Kubectl

**Arsitektur target**

![\[Client Helm dan Kubectl menerapkan repo bagan Helm di Amazon S3 untuk cluster Amazon EKS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Otomatisasi dan skala**
+ AWS CloudFormation dapat digunakan untuk mengotomatiskan pembuatan infrastruktur. Untuk informasi selengkapnya, lihat [Membuat resource Amazon EKS dengan AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) di dokumentasi Amazon EKS.
+ Helm akan dimasukkan ke dalam alat CI/CD otomatisasi Anda yang ada untuk mengotomatiskan pengemasan dan pembuatan versi bagan Helm (di luar cakupan pola ini).
+ GitVersion atau nomor build Jenkins dapat digunakan untuk mengotomatiskan pembuatan versi bagan.

## Alat
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Alat**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) — Amazon Elastic Kubernetes Service (Amazon EKS) adalah layanan terkelola untuk menjalankan Kubernetes di AWS tanpa perlu berdiri atau memelihara pesawat kontrol Kubernetes Anda sendiri. Kubernetes adalah sebuah sistem sumber terbuka untuk melakukan otomatisasi terhadap deployment, penskalaan, dan pengelolaan aplikasi terkontainer.
+ [Helm](https://helm.sh/docs/) - Helm adalah manajer paket untuk Kubernetes yang membantu Anda menginstal dan mengelola aplikasi di klaster Kubernetes Anda.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) - Amazon Simple Storage Service (Amazon S3) Simple Storage Service adalah penyimpanan untuk internet. Anda dapat menggunakan Amazon S3 untuk menyimpan dan mengambil data sebanyak apa pun kapan pun, dari mana pun di web.
+ [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) — Kubectl adalah utilitas baris perintah untuk menjalankan perintah terhadap klaster Kubernetes.

**Kode**

Kode contoh terlampir.

## Epik
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Konfigurasikan dan inisialisasi Helm
<a name="configure-and-initialize-helm"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal klien Helm. | Untuk mengunduh dan menginstal klien Helm di sistem lokal Anda, gunakan perintah berikut. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps insinyur | 
| Validasi instalasi Helm. | Untuk memvalidasi bahwa Helm dapat berkomunikasi dengan server API Kubernetes di dalam klaster Amazon EKS, jalankan. `helm version` | DevOps insinyur | 

### Membuat dan menginstal bagan Helm di kluster Amazon EKS
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat bagan Helm untuk NGINX. | Untuk membuat bagan helm bernama `my-nginx` pada mesin klien, jalankan`helm create my-nginx`. | DevOps insinyur | 
| Tinjau struktur bagan. | Untuk meninjau struktur bagan, jalankan perintah pohon`tree my-nginx/`. | DevOps insinyur | 
| Nonaktifkan pembuatan akun layanan di bagan. | Di`values.yaml`, di bawah `serviceAccount` bagian, atur `create` kunci ke`false`. Ini dimatikan karena tidak ada persyaratan untuk membuat akun layanan untuk pola ini. | DevOps insinyur | 
| Validasi (lint) bagan yang dimodifikasi untuk kesalahan sintaksis. | Untuk memvalidasi bagan untuk kesalahan sintaksis apa pun sebelum menginstalnya di cluster target, jalankan. `helm lint my-nginx/` | DevOps insinyur | 
| Instal bagan untuk menerapkan sumber daya Kubernetes. | Untuk menjalankan instalasi bagan Helm, gunakan perintah berikut. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>`debug`Bendera opsional menampilkan semua pesan debug selama penginstalan. `namespace`Bendera menentukan namespace di mana bagian sumber daya dari bagan ini akan dibuat. | DevOps insinyur | 
| Tinjau sumber daya di cluster Amazon EKS. | Untuk meninjau sumber daya yang dibuat sebagai bagian dari bagan Helm di `helm-space` namespace, gunakan perintah berikut. <pre>kubectl get all -n helm-space</pre> | DevOps insinyur | 

### Kembalikan ke versi aplikasi Kubernetes sebelumnya
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ubah dan tingkatkan rilis. | Untuk memodifikasi bagan, di`values.yaml`, ubah `replicaCount` nilainya menjadi`2`. Kemudian tingkatkan rilis yang sudah diinstal dengan menjalankan perintah berikut.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps insinyur | 
| Tinjau sejarah rilis Helm. | Untuk membuat daftar semua revisi untuk rilis tertentu yang telah diinstal menggunakan Helm, jalankan perintah berikut. <pre>helm history my-nginx-release</pre> | DevOps insinyur | 
| Tinjau detail untuk revisi tertentu. | Sebelum beralih atau memutar kembali ke versi kerja, dan untuk lapisan validasi tambahan sebelum menginstal revisi, lihat nilai mana yang diteruskan ke setiap revisi dengan menggunakan perintah berikut.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps insinyur | 
| Gulung kembali ke versi sebelumnya. | Untuk memutar kembali ke revisi sebelumnya, gunakan perintah berikut. <pre>helm rollback my-nginx-release 1 </pre>Contoh ini bergulir kembali ke nomor revisi 1. | DevOps insinyur | 

### Inisialisasi bucket S3 sebagai repositori Helm
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat bucket S3 untuk bagan Helm. | Buat bucket S3 yang unik. Di ember, buat folder bernama`charts`. Contoh dalam pola ini digunakan `s3://my-helm-charts/charts` sebagai repositori grafik target. | Administrator awan | 
| Instal plugin Helm untuk Amazon S3. | Untuk menginstal plugin helm-s3 di mesin klien Anda, gunakan perintah berikut. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Catatan: Dukungan Helm V3 tersedia dengan plugin versi 0.9.0 dan di atas. | DevOps insinyur | 
| Inisialisasi repositori Amazon S3 Helm.  | Untuk menginisialisasi folder target sebagai repositori Helm, gunakan perintah berikut. <pre>helm S3 init s3://my-helm-charts/charts </pre>Perintah membuat `index.yaml` file di target untuk melacak semua informasi bagan yang disimpan di lokasi itu. | DevOps insinyur | 
| Tambahkan repositori Amazon S3 ke Helm. | Untuk menambahkan repositori di mesin klien, gunakan perintah berikut.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Perintah ini menambahkan alias ke repositori target di mesin klien Helm. | DevOps insinyur | 
| Tinjau daftar repositori. | Untuk melihat daftar repositori di mesin klien Helm, jalankan. `helm repo list` | DevOps insinyur | 

### Package and store chart di repositori Amazon S3 Helm
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Package grafik. | Untuk mengemas `my-nginx` bagan yang Anda buat, jalankan`helm package ./my-nginx/`. Perintah mengemas semua isi folder `my-nginx` bagan ke dalam file arsip, yang diberi nama menggunakan nomor versi yang disebutkan dalam `Chart.yaml` file. | DevOps insinyur | 
| Simpan paket di repositori Amazon S3 Helm. | Untuk mengunggah paket ke repositori Helm di Amazon S3, jalankan perintah berikut, menggunakan nama file yang benar. `.tgz`<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps insinyur | 
| Cari bagan Helm. | Untuk mengonfirmasi bahwa bagan muncul baik secara lokal maupun di repositori Helm di Amazon S3, jalankan perintah berikut.<pre>helm search repo my-nginx</pre> | DevOps insinyur | 

### Ubah, versi, dan paket bagan
<a name="modify-version-and-package-a-chart"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memodifikasi dan mengemas bagan. | Dalam`values.yaml`, atur `replicaCount` nilainya ke`1`. Kemudian kemas bagan dengan menjalankan`helm package ./my-nginx/`, kali ini mengubah versi `Chart.yaml` menjadi`0.1.1`. Pembuatan versi idealnya diperbarui melalui otomatisasi menggunakan alat seperti GitVersion atau Jenkins membangun nomor dalam pipeline. CI/CD Mengotomatiskan nomor versi berada di luar cakupan pola ini. | DevOps insinyur | 
| Dorong versi baru ke repositori Helm di Amazon S3. | Untuk mendorong paket baru dengan versi 0.1.1 ke repositori `my-helm-charts` Helm di Amazon S3, jalankan perintah berikut.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps insinyur | 

### Cari dan instal bagan dari repositori Amazon S3 Helm
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Cari semua versi bagan my-nginx. | Untuk melihat semua versi bagan yang tersedia, jalankan perintah berikut dengan `--versions` bendera.<pre>helm search repo my-nginx --versions</pre>Tanpa tanda, Helm secara default menampilkan versi bagan terbaru yang diunggah. | DevOps insinyur | 
| Instal bagan dari repositori Amazon S3 Helm. | Hasil pencarian dari tugas sebelumnya menunjukkan beberapa versi `my-nginx` bagan. Untuk menginstal versi baru (0.1.1) dari repositori Amazon S3 Helm, gunakan perintah berikut.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps insinyur | 

## Sumber daya terkait
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [Dokumentasi HELM](https://helm.sh/docs/)
+ [plugin helm-s3 (Lisensi MIT)](https://github.com/hypnoglow/helm-s3.git)
+ [Biner klien HELM](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Dokumentasi Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Lampiran
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)

# Menerapkan cluster CockroachDB di Amazon EKS dengan menggunakan Terraform
<a name="deploy-cockroachdb-on-eks-using-terraform"></a>

*Sandip Gangapadhyay dan Kalyan Senthilnathan, Amazon Web Services*

## Ringkasan
<a name="deploy-cockroachdb-on-eks-using-terraform-summary"></a>

[Pola ini menyediakan modul HashiCorp Terraform untuk menerapkan cluster [CockroachDB multi-node di Amazon Elastic Kubernetes](https://www.cockroachlabs.com/docs/stable/) Service (Amazon EKS) dengan menggunakan operator CockroachDB.](https://www.cockroachlabs.com/docs/v25.4/cockroachdb-operator-overview) CockroachDB adalah database SQL terdistribusi yang menyediakan sharding horizontal otomatis, ketersediaan tinggi, dan kinerja yang konsisten di seluruh cluster yang didistribusikan secara geografis. Pola ini menggunakan Amazon EKS sebagai platform Kubernetes yang dikelola dan mengimplementasikan [cert-manager](https://cert-manager.io/docs/) untuk komunikasi node yang diamankan TLS. Ini juga menggunakan [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) untuk distribusi lalu lintas dan menciptakan CockroachDB [StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)dengan pod yang secara otomatis mereplikasi data untuk toleransi kesalahan dan kinerja.

**Audiens yang dituju**

Untuk menerapkan pola ini, kami sarankan Anda terbiasa dengan hal-hal berikut:
+ HashiCorp Konsep dan infrastruktur Terraform sebagai praktik kode (IAc)
+ Layanan AWS, khususnya Amazon EKS
+ Dasar-dasar Kubernetes, termasuk, operator StatefulSets, dan konfigurasi layanan
+ Database SQL terdistribusi
+ Konsep keamanan, seperti manajemen sertifikat TLS.
+ DevOps praktik, CI/CD alur kerja, dan otomatisasi infrastruktur

## Prasyarat dan batasan
<a name="deploy-cockroachdb-on-eks-using-terraform-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Izin untuk menyebarkan sumber daya di klaster Amazon EKS
+ Cluster Amazon EKS versi v1.23 atau yang lebih baru, dengan node berlabel `node=cockroachdb`
+ [Amazon Elastic Block Store Container Storage Interface (CSI) Driver](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) versi 1.19.0 atau yang lebih baru, diinstal di cluster Amazon EKS
+ [Terraform CLI versi 1.0.0 atau yang lebih baru, diinstal](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ [kubectl, diinstal](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ Git, [diinstal](https://git-scm.com/install/)
+ AWS Command Line Interface [(AWS CLI) versi 2.9.18 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)

**Batasan**
+ Operator CockroachDB Kubernetes tidak mendukung beberapa klaster Kubernetes untuk penerapan Multi-region. [Untuk batasan lebih lanjut, lihat [Orchestrate CockroachDB Across Multiple Kubernetes Clusters (dokumentasi CockroachDB) dan CockroachDB Kubernetes Operator](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html#eks) ().](https://github.com/cockroachdb/cockroach-operator) GitHub
+ Pemangkasan otomatis klaim volume persisten (PVCs) saat ini dinonaktifkan secara default. Ini berarti bahwa setelah menonaktifkan dan menghapus node, operator tidak akan menghapus volume persisten yang dipasang ke podnya. Untuk informasi lebih lanjut, lihat [Pemangkasan PVC otomatis dalam dokumentasi](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html#automatic-pvc-pruning) CockroachDB.

**Versi produk**
+ CockroachDB versi 22.2.2

## Arsitektur
<a name="deploy-cockroachdb-on-eks-using-terraform-architecture"></a>

**Arsitektur target**

Diagram berikut menunjukkan penyebaran CockroachDB yang sangat tersedia di tiga AWS Availability Zone dalam virtual private cloud (VPC). Pod CockroachDB dikelola melalui Amazon EKS. Arsitektur menggambarkan bagaimana pengguna mengakses database melalui Network Load Balancer, yang mendistribusikan lalu lintas ke pod CockroachDB. Pod berjalan di instans Amazon Elastic Compute Cloud (Amazon EC2) di setiap Availability Zone, yang memberikan ketahanan dan toleransi kesalahan.

![\[Penyebaran CockroachDB yang sangat tersedia di tiga AWS Availability Zone dalam VPC.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/images/4b163abf-6fdc-4310-840c-bda621ab25dd.png)


**Sumber daya dibuat**

Menerapkan modul Terraform yang digunakan dalam pola ini menciptakan sumber daya berikut:

1. **Network Load Balancer** - Sumber daya ini berfungsi sebagai titik masuk untuk permintaan klien dan mendistribusikan lalu lintas secara merata di seluruh instance CockroachDB.

1. **CockroachDB StatefulSet** — StatefulSet Mendefinisikan keadaan yang diinginkan dari penyebaran CockroachDB dalam cluster Amazon EKS. Ini mengelola penyebaran, penskalaan, dan pembaruan pod CockroachDB yang dipesan.

1. Pod **CockroachDB — Pod** ini adalah contoh dari CockroachDB yang berjalan sebagai kontainer di dalam pod Kubernetes. Pod ini menyimpan dan mengelola data di seluruh cluster terdistribusi.

1. **Database CockroachDB** — Ini adalah database terdistribusi yang dikelola oleh CockroachDB, mencakup beberapa pod. Ini mereplikasi data untuk ketersediaan tinggi, toleransi kesalahan, dan kinerja.

## Alat
<a name="deploy-cockroachdb-on-eks-using-terraform-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/what-is-eks.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.

**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.
+ [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 [cluster GitHub Deploy a CockroachDB di Amazon EKS menggunakan repositori Terraform](https://github.com/aws-samples/crdb-cluster-eks-terraform). Repositori kode berisi file dan folder berikut untuk Terraform:
+ `modules`folder - Folder ini berisi modul Terraform untuk CockroachDB
+ `main`folder - Folder ini berisi modul root yang memanggil modul anak CockroachDB untuk membuat cluster database CockroachDB.

## Praktik terbaik
<a name="deploy-cockroachdb-on-eks-using-terraform-best-practices"></a>
+ Jangan mengurangi hingga kurang dari tiga node. Ini dianggap sebagai anti-pola pada CockroachDB dan dapat menyebabkan kesalahan. Untuk informasi selengkapnya, lihat [Penskalaan Cluster dalam dokumentasi](https://www.cockroachlabs.com/docs/stable/scale-cockroachdb-kubernetes.html) CockroachDB.
+ Terapkan penskalaan otomatis Amazon EKS dengan menggunakan Karpernter atau Cluster Autoscaler. Hal ini memungkinkan cluster CockroachDB untuk skala horizontal dan node baru secara otomatis. Untuk informasi selengkapnya, lihat [Komputasi klaster skala dengan Karpenter dan Cluster Autoscaler](https://docs.aws.amazon.com/eks/latest/userguide/autoscaling.html) di dokumentasi Amazon EKS.
**catatan**  
Karena aturan penjadwalan `podAntiAffinity` Kubernetes, hanya satu pod CockroachDB yang dapat dijadwalkan dalam satu node Amazon EKS.
+ Untuk praktik terbaik keamanan Amazon EKS, lihat [Praktik Terbaik untuk Keamanan](https://docs.aws.amazon.com/eks/latest/best-practices/security.html) dalam dokumentasi Amazon EKS.
+ Untuk praktik terbaik kinerja SQL untuk CockroachDB, lihat Praktik [Terbaik Kinerja SQL](https://www.cockroachlabs.com/docs/stable/performance-best-practices-overview.html) dalam dokumentasi CockroachDB.
+ Untuk informasi selengkapnya tentang menyiapkan backend jarak jauh Amazon Simple Storage Service (Amazon S3) untuk file status Terraform, lihat [Amazon](https://developer.hashicorp.com/terraform/language/backend/s3) S3 di dokumentasi Terraform.

## Epik
<a name="deploy-cockroachdb-on-eks-using-terraform-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori kode. | Masukkan perintah berikut untuk mengkloning repositori:<pre>git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git</pre> | DevOps insinyur, Git | 
| Perbarui variabel Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps insinyur, Terraform | 

### Menyebarkan sumber daya
<a name="deploy-the-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan infrastruktur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps insinyur, Terraform | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi pembuatan sumber daya. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps insinyur | 
| (Opsional) Skala naik atau turun. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | DevOps insinyur, Terraform | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus infrastruktur. | Menskalakan node ke `0` akan mengurangi biaya komputasi. Namun, Anda masih akan dikenakan biaya untuk volume Amazon EBS persisten yang dibuat oleh modul ini. Untuk menghilangkan biaya penyimpanan, ikuti langkah-langkah berikut untuk menghapus semua volume:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | Terraform | 

## Pemecahan masalah
<a name="deploy-cockroachdb-on-eks-using-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Kesalahan memvalidasi kredensyal penyedia | Saat Anda menjalankan Terraform `apply` atau `destroy` perintah, Anda mungkin mengalami kesalahan berikut:`Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.`Kesalahan ini disebabkan oleh kedaluwarsa token keamanan untuk kredensil yang digunakan dalam konfigurasi mesin lokal Anda. Untuk petunjuk tentang cara 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 AWS CLI dokumentasi. | 
| Pod CockroachDB dalam status tertunda | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-cockroachdb-on-eks-using-terraform.html) | 

## Sumber daya terkait
<a name="deploy-cockroachdb-on-eks-using-terraform-resources"></a>
+ [Terapkan CockroachDB dalam Cluster Kubernetes Tunggal (dokumentasi](https://www.cockroachlabs.com/docs/dev/deploy-cockroachdb-with-kubernetes.html) CockroachDB)
+ [Mengatur CockroachDB di Beberapa Kluster Kubernetes (dokumentasi CockroachDB](https://www.cockroachlabs.com/docs/dev/orchestrate-cockroachdb-with-kubernetes-multi-cluster.html))
+ [AWS Penyedia](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (dokumentasi Terraform)

## Lampiran
<a name="attachments-e22d81ab-b85c-4709-8579-4c9cdb4afdb6"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/e22d81ab-b85c-4709-8579-4c9cdb4afdb6/attachments/attachment.zip)

# Menerapkan contoh layanan mikro Java di Amazon EKS dan mengekspos layanan mikro menggunakan Application Load Balancer
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer"></a>

*Vijay Thompson dan Akkamahadevi Hiremath, Amazon Web Services*

## Ringkasan
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-summary"></a>

Pola ini menjelaskan cara menerapkan contoh layanan mikro Java sebagai aplikasi kontainer di Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan `eksctl` utilitas baris perintah dan Amazon Elastic Container Registry (Amazon ECR). Anda dapat menggunakan Application Load Balancer untuk memuat keseimbangan lalu lintas aplikasi.

## Prasyarat dan batasan
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows
+ Daemon [Docker](https://docs.docker.com/config/daemon/) yang sedang berjalan
+ Utilitas baris `eksctl` perintah, diinstal dan dikonfigurasi di macOS, Linux, atau Windows (Untuk informasi selengkapnya, lihat [Memulai Amazon EKS — eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) dalam dokumentasi Amazon EKS.)
+ Utilitas baris `kubectl` perintah, diinstal dan dikonfigurasi di macOS, Linux, atau Windows (Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) dalam dokumentasi Amazon EKS.)

**Batasan**
+ Pola ini tidak mencakup pemasangan sertifikat SSL untuk Application Load Balancer.

## Arsitektur
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-architecture"></a>

**Tumpukan teknologi target**
+ Amazon ECR
+ Amazon EKS
+ Penyeimbang Beban Elastis

**Arsitektur target**

Diagram berikut menunjukkan arsitektur untuk containerizing Java microservice di Amazon EKS.

![\[Layanan mikro Java digunakan sebagai aplikasi kontainer di Amazon EKS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e1dd8ab0-9e1e-4d2b-b7af-89d3e583e57c/images/aaca4fd9-5aaa-4df5-aebd-02a2ed881c3b.png)


## Alat
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-tools"></a>
+ [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/getting-started.html) EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) secara otomatis mendistribusikan lalu lintas masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud ( EC2Amazon), container, dan alamat IP, dalam satu atau beberapa Availability Zone.
+ [eksctl](https://eksctl.io/) membantu Anda membuat cluster di Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) memungkinkan untuk menjalankan perintah terhadap cluster Kubernetes.
+ [Docker](https://www.docker.com/) membantu Anda membangun, menguji, dan mengirimkan aplikasi dalam paket yang disebut kontainer.

## Epik
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-epics"></a>

### Buat klaster Amazon EKS dengan menggunakan eksctl
<a name="create-an-amazon-eks-cluster-by-using-eksctl"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat klaster Amazon EKS.  | Untuk membuat klaster Amazon EKS yang menggunakan dua EC2 instance Amazon t2.small sebagai node, jalankan perintah berikut:<pre>eksctl create cluster --name <your-cluster-name> --version <version-number> --nodes=1 --node-type=t2.small</pre>Prosesnya bisa memakan waktu antara 15 hingga 20 menit. [Setelah cluster dibuat, konfigurasi Kubernetes yang sesuai ditambahkan ke file kubeconfig Anda.](https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html) Anda dapat menggunakan `kubeconfig` file dengan `kubectl`**** untuk menyebarkan aplikasi di langkah selanjutnya. | Pengembang, Admin Sistem | 
| Verifikasi cluster Amazon EKS. | Untuk memverifikasi bahwa cluster dibuat dan Anda dapat terhubung dengannya, jalankan `kubectl get nodes` perintah. | Pengembang, Admin Sistem | 

### Buat repositori Amazon ECR dan dorong gambar Docker.
<a name="create-an-amazon-ecr-repository-and-push-the-docker-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Ikuti petunjuk dari [Membuat repositori pribadi di dokumentasi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) Amazon ECR. | Pengembang, Admin Sistem | 
| Buat file XMLPOM. | Buat `pom.xml` file berdasarkan kode *file Contoh POM* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini. | Pengembang, Admin Sistem | 
| Buat file sumber. | Buat file sumber yang disebut `HelloWorld.java` di `src/main/java/eksExample` jalur berdasarkan contoh berikut:<pre>package eksExample;<br />import static spark.Spark.get;<br /><br />public class HelloWorld {<br />    public static void main(String[] args) {<br />        get("/", (req, res) -> {<br />            return "Hello World!";<br />        });<br />    }<br />}</pre>Pastikan untuk menggunakan struktur direktori berikut:<pre>├── Dockerfile<br />├── deployment.yaml<br />├── ingress.yaml<br />├── pom.xml<br />├── service.yaml<br />└── src<br />    └── main<br />        └── java<br />            └── eksExample<br />                └── HelloWorld.java</pre> |  | 
| Buat Dockerfile. | Buat `Dockerfile` berdasarkan kode *Contoh Dockerfile* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini. | Pengembang, Admin Sistem | 
| Bangun dan dorong gambar Docker. | Di direktori tempat Anda `Dockerfile` ingin membangun, menandai, dan mendorong gambar ke Amazon ECR, jalankan perintah berikut:<pre>aws ecr get-login-password --region <region>| docker login --username <username> --password-stdin <account_number>.dkr.ecr.<region>.amazonaws.com<br />docker buildx build --platform linux/amd64 -t hello-world-java:v1 .<br />docker tag hello-world-java:v1 <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1<br />docker push <account_number>.dkr.ecr.<region>.amazonaws.com/<repository_name>:v1</pre>Ubah Wilayah AWS, nomor akun, dan detail repositori di perintah sebelumnya. Pastikan untuk mencatat URL gambar untuk digunakan nanti.Sistem macOS dengan chip M1 memiliki masalah dalam membangun gambar yang kompatibel dengan Amazon EKS yang berjalan pada platform. AMD64 Untuk mengatasi masalah ini, gunakan [docker buildx untuk membuat image Docker](https://docs.docker.com/engine/reference/commandline/buildx/) yang berfungsi di Amazon EKS. |  | 

### Menyebarkan layanan mikro Java
<a name="deploy-the-java-microservices"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat file penyebaran.  | Buat file YAMM yang disebut `deployment.yaml` berdasarkan kode *file penyebaran Contoh* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini.Gunakan URL gambar yang Anda salin sebelumnya sebagai jalur file gambar untuk repositori Amazon ECR. | Pengembang, Admin Sistem | 
| Menerapkan layanan mikro Java di kluster Amazon EKS.  | Untuk membuat penerapan di cluster Amazon EKS Anda, jalankan `kubectl apply -f deployment.yaml` perintah. | Pengembang, Admin Sistem | 
| Verifikasi status pod. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Pengembang, Admin Sistem | 
| Buat sebuah layanan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Pengembang, Admin Sistem | 
| Instal add-on AWS Load Balancer Controller. | Ikuti petunjuk dari [Menginstal add-on AWS Load Balancer Controller dalam dokumentasi Amazon](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) EKS.Anda harus memiliki add-on yang diinstal untuk membuat Application Load Balancer atau Network Load Balancer untuk layanan Kubernetes. | Devloper, Sistem Admin | 
| Buat sumber daya ingress. | Buat file YAMM yang disebut `ingress.yaml` berdasarkan kode *file sumber daya masuk Contoh* di bagian [Informasi tambahan](#deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional) dari pola ini. | Pengembang, Admin Sistem | 
| Buat Application Load Balancer. | Untuk menyebarkan sumber daya ingress dan membuat Application Load Balancer, jalankan perintah. `kubectl apply -f ingress.yaml` | Pengembang, Admin Sistem | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji dan verifikasi aplikasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer.html) | Pengembang, Admin Sistem | 

## Sumber daya terkait
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-resources"></a>
+ [Membuat repositori pribadi (dokumentasi](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) Amazon ECR)
+ [Mendorong gambar Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) (dokumentasi Amazon ECR)
+ [Pengontrol Ingress](https://www.eksworkshop.com/beginner/130_exposing-service/ingress_controller_alb/) (Lokakarya Amazon EKS)
+ [Docker buildx (dokumen Docker](https://docs.docker.com/engine/reference/commandline/buildx/))

## Informasi tambahan
<a name="deploy-a-sample-java-microservice-on-amazon-eks-and-expose-the-microservice-using-an-application-load-balancer-additional"></a>

**Contoh file POM**

```
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>


  <groupId>helloWorld</groupId>
  <artifactId>helloWorld</artifactId>
  <version>1.0-SNAPSHOT</version>


  <dependencies>
    <dependency>
      <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version>
        <configuration><finalName>eksExample</finalName><archive><manifest>
              <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix>
            </manifest></archive>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>
        <configuration><source>1.8</source><target>1.8</target></configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <goals><goal>attached</goal></goals><phase>package</phase>
            <configuration>
              <finalName>eksExample</finalName>
              <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
              <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
```

**Contoh Dockerfile**

```
FROM bellsoft/liberica-openjdk-alpine-musl:17

RUN apk add maven
WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567
CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
```

**Contoh berkas penyebaran**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: microservice-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app.kubernetes.io/name: java-microservice
  template:
    metadata:
      labels:
        app.kubernetes.io/name: java-microservice
    spec:
      containers:
      - name: java-microservice-container
        image: .dkr.ecr.amazonaws.com/:
        ports:
        - containerPort: 4567
```

**Contoh file layanan**

```
apiVersion: v1
kind: Service
metadata:
  name: "service-java-microservice"
spec:
  ports:
    - port: 80
      targetPort: 4567
      protocol: TCP
  type: NodePort
  selector:
    app.kubernetes.io/name: java-microservice
```

**Contoh file sumber daya ingress**

```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "java-microservice-ingress"
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/load-balancer-name: apg2
    alb.ingress.kubernetes.io/target-type: ip
  labels:
    app: java-microservice
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "service-java-microservice"
                port:
                  number: 80
```

# Menerapkan aplikasi berbasis GRPC di cluster Amazon EKS dan mengaksesnya dengan Application Load Balancer
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer"></a>

*Kirankumar Chandrashekar dan Huy Nguyen, Amazon Web Services*

## Ringkasan
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-summary"></a>

Pola ini menjelaskan cara meng-host aplikasi berbasis GRPC di cluster Amazon Elastic Kubernetes Service (Amazon EKS) dan mengaksesnya dengan aman melalui Application Load Balancer.

[gRPC](https://grpc.io/) adalah kerangka kerja panggilan prosedur jarak jauh sumber terbuka (RPC) yang dapat berjalan di lingkungan apa pun. Anda dapat menggunakannya untuk integrasi layanan mikro dan komunikasi client-server. Untuk informasi selengkapnya tentang gRPC, lihat postingan blog AWS [dukungan Application Load Balancer untuk end-to-end HTTP/2](https://aws.amazon.com/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/) dan gRPC.

Pola ini menunjukkan cara meng-host aplikasi berbasis GRPC yang berjalan pada pod Kubernetes di Amazon EKS. Klien gRPC terhubung ke Application Load Balancer melalui protokol HTTP/2 dengan koneksi terenkripsi. SSL/TLS Application Load Balancer meneruskan lalu lintas ke aplikasi gRPC yang berjalan pada pod Amazon EKS. Jumlah pod gRPC dapat secara otomatis diskalakan berdasarkan traffic dengan menggunakan [Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html) Horizontal Pod Autoscaler. Kelompok target Application Load Balancer melakukan pemeriksaan kesehatan pada node Amazon EKS, mengevaluasi apakah targetnya sehat, dan meneruskan lalu lintas hanya ke node yang sehat.

## Prasyarat dan batasan
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif.
+ [Docker](https://www.docker.com/), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ [AWS Command Line Interface (AWS CLI) versi](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ `kubectl`, diinstal dan dikonfigurasi untuk mengakses sumber daya di kluster Amazon EKS Anda. Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui kubectl di dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS. 
+ [g RPCurl](https://github.com/fullstorydev/grpcurl), diinstal dan dikonfigurasi.
+ Cluster Amazon EKS baru atau yang sudah ada. Untuk informasi selengkapnya, lihat [Memulai Amazon EKS.](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)
+ Terminal komputer Anda dikonfigurasi untuk mengakses kluster Amazon EKS. Untuk informasi selengkapnya, lihat [Mengonfigurasi komputer untuk berkomunikasi dengan klaster Anda](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) di dokumentasi Amazon EKS.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), disediakan di klaster Amazon EKS.
+ Nama host DNS yang ada dengan SSL atau SSL/TLS sertifikat yang valid. Anda dapat memperoleh sertifikat untuk domain Anda dengan menggunakan AWS Certificate Manager (ACM) atau mengunggah sertifikat yang sudah ada ke ACM. Untuk informasi selengkapnya tentang kedua opsi ini, lihat [Meminta sertifikat publik dan Mengimpor sertifikat](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) [ke AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) dalam dokumentasi ACM.

## Arsitektur
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-architecture"></a>

Diagram berikut menunjukkan arsitektur yang diterapkan oleh pola ini.

![\[Arsitektur untuk aplikasi berbasis GRPC di Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/281936fa-bc43-4b4e-a343-ba1eab97df38.png)


 

Diagram berikut menunjukkan alur kerja di mana SSL/TLS lalu lintas diterima dari klien gRPC yang diturunkan ke Application Load Balancer. Lalu lintas diteruskan dalam plaintext ke server gRPC karena berasal dari virtual private cloud (VPC).

![\[Alur kerja untuk mengirim SSL/TLS lalu lintas ke server gRPC\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/abf727c1-ff8b-43a7-923f-bce825d1b459/images/09e0c3f6-0c39-40b7-908f-8c4c693a5f02.png)


## Alat
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-tools"></a>

**Layanan AWS**
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh instans, container, dan alamat IP Amazon Elastic Compute Cloud (Amazon EC2) di satu atau beberapa Availability Zone.
+ [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/getting-started.html) EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.  

**Alat**
+ [eksctl](https://eksctl.io/) adalah alat CLI sederhana untuk membuat cluster di Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) adalah utilitas baris perintah untuk menjalankan perintah terhadap klaster Kubernetes.
+ [AWS Load Balancer Controller](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html) membantu Anda mengelola AWS Elastic Load Balancer untuk klaster Kubernetes.
+ [g RPCurl](https://github.com/fullstorydev/grpcurl) adalah alat baris perintah yang membantu Anda berinteraksi dengan layanan gRPC.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [grpc-traffic-on-alb-to-eks](https://github.com/aws-samples/grpc-traffic-on-alb-to-eks.git).

## Epik
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-epics"></a>

### Buat dan dorong image Docker server gRPC ke Amazon ECR
<a name="build-and-push-the-grpc-serverrsquor-s-docker-image-to-amazon-ecr"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat repositori Amazon ECR. | Masuk ke AWS Management Console, buka [konsol Amazon ECR](https://console.aws.amazon.com/ecr/), lalu buat repositori Amazon ECR. Untuk informasi selengkapnya, lihat [Membuat repositori](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) di dokumentasi Amazon ECR. Pastikan Anda merekam URL repositori Amazon ECR.Anda juga dapat membuat repositori Amazon ECR dengan AWS CLI dengan menjalankan perintah berikut:<pre>aws ecr create-repository --repository-name helloworld-grpc</pre> | Administrator awan | 
| membuat gambar Docker.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 
| Dorong gambar Docker ke Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 

### Menerapkan manifes Kubernetes ke cluster Amazon EKS
<a name="deploy-the-kubernetes-manifests-to-the-amazon-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ubah nilai dalam file manifes Kubernetes. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 
| Menerapkan file manifes Kubernetes.  | Menerapkan `grpc-sample.yaml` file ke cluster Amazon EKS dengan menjalankan `kubectl` perintah berikut: <pre>kubectl apply -f ./kubernetes/grpc-sample.yaml</pre> | DevOps insinyur | 

### Buat catatan DNS untuk FQDN Application Load Balancer
<a name="create-the-dns-record-for-the-application-load-balancerapos-s-fqdn"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Catat FQDN untuk Application Load Balancer. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.html) | DevOps insinyur | 

### Pengujian solusi
<a name="test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji server gRPC.  | Gunakan g RPCurl untuk menguji titik akhir dengan menjalankan perintah berikut:<pre>grpcurl grpc.example.com:443 list <br />grpc.reflection.v1alpha.ServerReflection<br />helloworld.helloworld</pre>Ganti `grpc.example.com` dengan nama DNS Anda. | DevOps insinyur | 
| Uji server gRPC menggunakan klien gRPC.  | Dalam `helloworld_client_ssl.py` contoh klien gRPC, ganti nama host dari `grpc.example.com` dengan nama host yang digunakan untuk server gRPC.  Contoh kode berikut menunjukkan respons dari server gRPC untuk permintaan klien:<pre>python ./app/helloworld_client_ssl.py<br />message: "Hello to gRPC server from Client"<br /><br />message: "Thanks for talking to gRPC server!! Welcome to hello world. Received message is \"Hello to gRPC server from Client\""<br />received: true</pre>Ini menunjukkan bahwa klien dapat berbicara dengan server dan koneksi berhasil. | DevOps insinyur | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus catatan DNS. | Hapus catatan DNS yang menunjuk ke FQDN Application Load Balancer yang Anda buat sebelumnya.  | Administrator awan | 
| Lepaskan penyeimbang beban. | Di [konsol Amazon EC2](https://console.aws.amazon.com/ec2/), pilih **Load Balancers, lalu hapus load balancer** yang dibuat oleh controller Kubernetes untuk resource ingress Anda. | Administrator awan | 
| Hapus kluster Amazon EKS. | Hapus kluster Amazon EKS dengan menggunakan`eksctl`:<pre>eksctl delete cluster -f ./eks.yaml</pre> | AWS DevOps | 

## Sumber daya terkait
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-resources"></a>
+ [Penyeimbangan beban jaringan di Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)
+ [Grup sasaran untuk Application Load Balancers](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-protocol-version)

## Informasi tambahan
<a name="deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer-additional"></a>

**Sumber daya masuknya sampel:**

```
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/backend-protocol-version: "GRPC"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID>
  labels:
    app: grpcserver
    environment: dev
  name: grpcserver
  namespace: grpcserver
spec:
  ingressClassName: alb
  rules:
  - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM
    http:
      paths:
      - backend:
          service:
            name: grpcserver
            port:
              number: 9000
        path: /
        pathType: Prefix
```

**Sumber daya penyebaran sampel:**

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcserver
  namespace: grpcserver
spec:
  selector:
    matchLabels:
      app: grpcserver
  replicas: 1
  template:
    metadata:
      labels:
        app: grpcserver
    spec:
      containers:
      - name: grpc-demo
        image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0   #<------- Change to the URI that the Docker image is pushed to
        imagePullPolicy: Always
        ports:
        - name: grpc-api
          containerPort: 9000
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      restartPolicy: Always
```

**Keluaran sampel:**

```
NAME             CLASS           HOSTS                          Address                PORTS          AGE
 grpcserver      <none>      <DNS-HostName>                  <ELB-address>              80            27d
```

# Menerapkan aplikasi kontainer saat AWS IoT Greengrass V2 berjalan sebagai wadah Docker
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container"></a>

*Salih Bakir, Giuseppe Di Bella, dan Gustav Svalander, Amazon Web Services*

## Ringkasan
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-summary"></a>

AWS IoT Greengrass Version 2, saat diterapkan sebagai wadah Docker, secara native tidak mendukung menjalankan wadah aplikasi Docker. Pola ini menunjukkan kepada Anda cara membuat gambar kontainer khusus berdasarkan versi terbaru AWS IoT Greengrass V2 yang mengaktifkan fungsionalitas Docker-in-Docker (DiND). Dengan DiND, Anda dapat menjalankan aplikasi kontainer dalam lingkungan. AWS IoT Greengrass V2 

Anda dapat menerapkan pola ini sebagai solusi yang berdiri sendiri atau mengintegrasikannya dengan platform orkestrasi kontainer seperti Amazon ECS Anywhere. Di salah satu model penerapan, Anda mempertahankan AWS IoT Greengrass V2 fungsionalitas penuh termasuk kemampuan pemrosesan AWS IoT SiteWise Edge, sekaligus mengaktifkan penerapan berbasis container yang dapat diskalakan. 

## Prasyarat dan batasan
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ [Untuk AWS IoT Greengrass Version 2 prasyarat umum, lihat Prasyarat dalam dokumentasi.](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started-prerequisites.html) AWS IoT Greengrass Version 2 
+ Docker Engine, diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ Docker Compose (jika Anda menggunakan antarmuka baris perintah Docker Compose (CLI) untuk menjalankan image Docker).
+ Sebuah sistem operasi Linux.
+ Hypervisor dengan server host yang mendukung virtualisasi.
+ Persyaratan sistem:
  + 2 GB RAM (minimum)
  + 5 GB ruang disk yang tersedia (minimum)
  + Untuk AWS IoT SiteWise Edge, CPU quad-core x86\$164 dengan RAM 16 GB dan ruang disk yang tersedia 50 GB. Untuk informasi selengkapnya tentang pemrosesan AWS IoT SiteWise [data, lihat Persyaratan paket pemrosesan data](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway-ggv2.html#w2aac17c19c13b7) dalam AWS IoT SiteWise dokumentasi.

**Versi produk**
+ AWS IoT Greengrass Version 2 versi 2.5.3 atau yang lebih baru
+ Docker-in-Docker versi 1.0.0 atau yang lebih baru
+ Docker Compose versi 1.22 atau yang lebih baru
+ Docker Engine versi 20.10.12 atau yang lebih baru

**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-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-architecture"></a>

**Tumpukan teknologi target**
+ **Sumber data** — Perangkat IoT, sensor, atau peralatan industri yang menghasilkan data untuk diproses
+ **AWS IoT Greengrass V2**— Berjalan sebagai wadah Docker dengan D-in-D kemampuan, diterapkan pada infrastruktur tepi
+ Aplikasi **kontainer - Aplikasi** khusus yang berjalan di dalam AWS IoT Greengrass V2 lingkungan sebagai wadah Docker bersarang
+ **(Opsional) Amazon ECS** Anywhere — Orkestrasi kontainer yang mengelola penerapan kontainer AWS IoT Greengrass V2 
+ **Lainnya Layanan AWS** - AWS IoT Core, AWS IoT SiteWise, dan lainnya Layanan AWS untuk pemrosesan dan manajemen data

**Arsitektur target**

Diagram berikut menunjukkan contoh arsitektur penerapan target yang menggunakan Amazon ECS Anywhere, yang merupakan alat manajemen kontainer.

![\[Arsitektur penerapan menggunakan Amazon ECS Anywhere.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/2ecf5354-40e0-4fd9-9798-086719059784/images/5ed2652e-9604-4809-8962-b167e1991658.png)


Diagram menunjukkan alur kerja berikut:

**1: Penyimpanan gambar kontainer** - Amazon ECR menyimpan gambar AWS IoT Greengrass kontainer dan wadah aplikasi khusus apa pun yang diperlukan untuk pemrosesan tepi.

**2** dan **3: Penerapan kontainer** — Amazon ECS Anywhere menyebarkan AWS IoT Greengrass image container dari Amazon ECR ke lokasi edge, mengelola siklus hidup kontainer dan proses penerapan.

**4: Penerapan komponen** — AWS IoT Greengrass Inti yang digunakan secara otomatis menyebarkan komponen yang relevan berdasarkan konfigurasinya. Komponen termasuk AWS IoT SiteWise Edge dan komponen pemrosesan tepi lain yang diperlukan dalam lingkungan kontainer.

**5: Penyerapan data** — Setelah sepenuhnya dikonfigurasi, AWS IoT Greengrass mulailah menelan telemetri dan data sensor dari berbagai sumber data IoT di lokasi tepi.

**6: Pemrosesan data dan integrasi cloud** — AWS IoT Greengrass Inti kontainer memproses data secara lokal menggunakan komponen yang digunakan (termasuk AWS IoT SiteWise Edge untuk data industri). Kemudian, ia mengirimkan data yang diproses ke AWS Cloud layanan untuk analisis dan penyimpanan lebih lanjut.

## Alat
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-tools"></a>

**Layanan AWS**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch-type-external.html) Anywhere membantu Anda menerapkan, menggunakan, dan mengelola tugas dan layanan Amazon ECS di infrastruktur Anda sendiri.
+ [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 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 IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html) adalah waktu aktif edge Internet untuk Segala (IoT) sumber terbuka dan layanan cloud yang membantu Anda membangun, men-deploy, dan mengelola aplikasi IoT pada perangkat Anda.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)membantu Anda mengumpulkan, memodelkan, menganalisis, dan memvisualisasikan data dari peralatan industri dalam skala besar.

**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.
+ [Docker Compose](https://docs.docker.com/compose/) adalah alat untuk mendefinisikan dan menjalankan aplikasi multi-container.
+ [Docker Engine](https://docs.docker.com/engine/) adalah teknologi kontainerisasi open source untuk membangun dan mengkontainerisasi aplikasi.

**Repositori kode**

Kode untuk pola ini tersedia di Docker-in-Docker repositori GitHub [AWS IoT Greengrass v2](https://github.com/aws-samples/aws-iot-greengrass-docker-in-docker).

## Epik
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-epics"></a>

### Bangun AWS IoT Greengrass V2 Docker-in-Docker gambar
<a name="build-the-gg2-docker-in-docker-image"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning dan arahkan ke repositori. | Untuk mengkloning repositori, gunakan perintah berikut: `git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git`Untuk menavigasi ke `docker` direktori, gunakan perintah berikut:`cd aws-iot-greengrass-v2-docker-in-docker/docker` | DevOps insinyur, AWS DevOps | 
| membuat gambar Docker. | Untuk membuat image Docker dengan versi default (terbaru), jalankan perintah berikut:`docker build -t x86_64/aws-iot-greengrass:latest .`Atau, untuk membangun image Docker dengan versi tertentu, jalankan perintah berikut:`docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .`Untuk memverifikasi build, jalankan perintah berikut:`docker images \| grep aws-iot-greengrass`  | AWS DevOps, DevOps insinyur, Pengembang aplikasi | 
| (Opsional) Dorong ke Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Pengembang aplikasi, AWS DevOps, DevOps insinyur | 

### Konfigurasikan AWS kredensional
<a name="configure-aws-credentials"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pilih metode otentikasi. | Pilih salah satu opsi berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrator AWS | 
| Konfigurasikan metode otentikasi. | Untuk metode otentikasi yang Anda pilih, gunakan panduan konfigurasi berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrator AWS | 

### Jalankan dengan Docker Compose
<a name="run-with-docker-compose"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasi `docker-compose.yml`. | Perbarui `docker-compose.yml` file dengan variabel lingkungan sebagai berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps insinyur | 
| Mulai dan verifikasi wadah. | Untuk memulai di latar depan, jalankan perintah berikut:`docker-compose up --build`Atau, untuk memulai di latar belakang, jalankan perintah berikut:`docker-compose up --build -d`Untuk memverifikasi status, jalankan perintah berikut:`docker-compose ps`Untuk memantau log, jalankan perintah berikut:`docker-compose logs -f` | DevOps insinyur | 

### Jalankan dengan Docker CLI
<a name="run-with-docker-cli"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan kontainer dengan Docker CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps insinyur | 
| Verifikasi wadah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps insinyur | 

### Kelola aplikasi kontainer
<a name="manage-containerized-applications"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan aplikasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Pengembang aplikasi | 
| Akses dan uji Docker-in-Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps insinyur | 

### (Opsional) Integrasikan dengan Amazon ECS Anywhere
<a name="optional-integrate-with-ecs-anywhere"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan cluster Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrator AWS | 
| Menerapkan tugas Amazon ECS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | Administrator AWS | 

### Berhenti dan bersihkan
<a name="stop-and-cleanup"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hentikan wadah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penampung gagal memulai dengan kesalahan izin. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)`--privileged`memberikan hak istimewa yang diperluas ke wadah. | 
| Penyediaan gagal dengan kesalahan kredensi. | Untuk memverifikasi kredenal dikonfigurasi dengan benar, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Pastikan bahwa izin IAM mencakup`iot:CreateThing`,,, `iot:CreatePolicy` `iot:AttachPolicy``iam:CreateRole`, dan. `iam:AttachRolePolicy` | 
| Tidak dapat terhubung ke daemon Docker di dalam wadah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Kontainer kehabisan ruang disk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Pastikan ruang disk minimum: 5 GB untuk operasi dasar dan 50 GB untuk AWS IoT SiteWise Edge | 
| Membangun masalah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html) | 
| Masalah konektivitas jaringan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verifikasi bahwa firewall memungkinkan lalu lintas HTTPS (443) dan MQTT (8883) keluar. | 
| Komponen Greengrass gagal diterapkan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Periksa log khusus komponen di direktori. `/greengrass/v2/logs/` | 
| Kontainer keluar segera setelah memulai. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.html)Verifikasi semua variabel lingkungan yang diperlukan diatur dengan benar jika`PROVISION=true`. Pastikan `--init` bendera digunakan saat memulai wadah. | 

## Sumber daya terkait
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-resources"></a>

**AWS sumber daya**
+ [Layanan Kontainer Elastis Amazon](https://aws.amazon.com/ecs/)
+ [Konfigurasikan pemrosesan data tepi untuk AWS IoT SiteWise model dan aset](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/edge-processing.html)
+ [Apa itu AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)

**Sumber daya lainnya**
+ [Dokumentasi Docker](https://docs.docker.com/)

## Informasi tambahan
<a name="deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container-additional"></a>
+ Untuk pemrosesan data AWS IoT SiteWise Edge, Docker harus tersedia di AWS IoT Greengrass lingkungan.
+ Untuk menjalankan kontainer bersarang, Anda harus menjalankan AWS IoT Greengrass kontainer dengan kredensi tingkat administrator.

# Menyebarkan wadah dengan menggunakan Elastic Beanstalk
<a name="deploy-containers-by-using-elastic-beanstalk"></a>

*Thomas Scott dan Jean-Baptiste Guillois, Amazon Web Services*

## Ringkasan
<a name="deploy-containers-by-using-elastic-beanstalk-summary"></a>

Di Amazon Web Services (AWS) Cloud, AWS Elastic Beanstalk mendukung Docker sebagai platform yang tersedia, sehingga container dapat berjalan dengan lingkungan yang dibuat. Pola ini menunjukkan cara menggunakan kontainer menggunakan layanan Elastic Beanstalk. Penyebaran pola ini akan menggunakan lingkungan server web berdasarkan platform Docker.

Untuk menggunakan Elastic Beanstalk untuk menyebarkan dan menskalakan aplikasi dan layanan web, Anda mengunggah kode dan penyebaran ditangani secara otomatis. Penyediaan kapasitas, penyeimbangan beban, penskalaan otomatis, dan pemantauan kesehatan aplikasi juga disertakan. Saat Anda menggunakan Elastic Beanstalk, Anda dapat mengambil kendali penuh atas sumber daya AWS yang dibuatnya atas nama Anda. Tidak ada biaya tambahan untuk Elastic Beanstalk. Anda hanya membayar untuk sumber daya AWS yang digunakan untuk menyimpan dan menjalankan aplikasi Anda.

Pola ini mencakup instruksi untuk penerapan menggunakan [AWS Elastic Beanstalk Command Line Interface (EB CLI) dan AWS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html) Management Console.

**Kasus penggunaan**

Kasus penggunaan untuk Elastic Beanstalk meliputi yang berikut: 
+ Menerapkan lingkungan prototipe untuk mendemonstrasikan aplikasi frontend. (Pola ini menggunakan Dockerfile**** sebagai contoh.)
+ Menerapkan API untuk menangani permintaan API untuk domain tertentu.
+ Terapkan solusi orkestrasi menggunakan Docker-Compose (****tidak digunakan sebagai contoh praktis dalam pola `docker-compose.yml` ini).

## Prasyarat dan batasan
<a name="deploy-containers-by-using-elastic-beanstalk-prereqs"></a>

**Prasyarat**
+ Akun AWS
+ AWS EB CLI diinstal secara lokal
+ Docker diinstal pada mesin lokal

**Batasan**
+ Ada batas tarik Docker 100 tarikan per 6 jam per alamat IP pada paket gratis.

## Arsitektur
<a name="deploy-containers-by-using-elastic-beanstalk-architecture"></a>

**Tumpukan teknologi target**
+ Instans Amazon Elastic Compute Cloud (Amazon EC2)
+ Grup keamanan
+ Penyeimbang Beban Aplikasi
+ Grup Auto Scaling

**Arsitektur target**

![\[Arsitektur untuk menyebarkan wadah dengan Elastic Beanstalk.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/dfabcdc2-747f-40e2-a603-08ea31ba71d3/images/1d17ff09-1aea-4c72-adb5-eaf741601428.png)


**Otomatisasi dan skala**

AWS Elastic Beanstalk dapat secara otomatis menskalakan berdasarkan jumlah permintaan yang dibuat. Sumber daya AWS yang dibuat untuk lingkungan mencakup satu Application Load Balancer, grup Auto Scaling, dan satu atau beberapa instans Amazon. EC2  

Load balancer berada di depan EC2 instans Amazon, yang merupakan bagian dari grup Auto Scaling. EC2 Auto Scaling Amazon secara otomatis memulai EC2 instans Amazon tambahan untuk mengakomodasi peningkatan beban pada aplikasi Anda. Jika pemuatan pada aplikasi Anda berkurang, Amazon EC2 Auto Scaling menghentikan instance, tetapi setidaknya satu instance tetap berjalan.

**Pemicu penskalaan otomatis**

Grup Auto Scaling di lingkungan Elastic Beanstalk Anda menggunakan dua CloudWatch alarm Amazon untuk memulai operasi penskalaan. Pemicu default menskalakan ketika lalu lintas jaringan keluar rata-rata dari setiap instans lebih tinggi dari 6 MB atau lebih rendah dari 2 MB selama periode lima menit. Untuk menggunakan Amazon EC2 Auto Scaling secara efektif, konfigurasikan pemicu yang sesuai untuk aplikasi, jenis instans, dan persyaratan layanan Anda. Anda dapat menskalakan berdasar beberapa statistik termasuk latensi, I/O disk, utilisasi CPU, dan jumlah permintaan. Untuk informasi selengkapnya, lihat [Pemicu Auto Scaling.](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-autoscaling-triggers.html)

## Alat
<a name="deploy-containers-by-using-elastic-beanstalk-tools"></a>

**Layanan AWS**
+ [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.
+ [AWS EB Command Line Interface (EB CLI)](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) adalah klien baris perintah yang dapat Anda gunakan untuk membuat, mengonfigurasi, dan mengelola lingkungan Elastic Beanstalk.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh instans, container, dan alamat IP Amazon Elastic Compute Cloud (Amazon EC2) di satu atau beberapa Availability Zone.

**Layanan lainnya**
+ [Docker](https://www.docker.com/) mengemas perangkat lunak ke dalam unit standar yang disebut kontainer yang mencakup pustaka, alat sistem, kode, dan runtime.

**Kode**

Kode untuk pola ini tersedia di repositori [Aplikasi Sampel GitHub Cluster](https://github.com/aws-samples/cluster-sample-app).

## Epik
<a name="deploy-containers-by-using-elastic-beanstalk-epics"></a>

### Membangun dengan Dockerfile
<a name="build-with-a-dockerfile"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori jarak jauh. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Inisialisasi proyek Elastic Beanstalk Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Uji proyek secara lokal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 

### Terapkan menggunakan EB CLI
<a name="deploy-using-eb-cli"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan perintah penerapan | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Akses versi yang digunakan. | Setelah perintah penerapan selesai, akses proyek menggunakan `eb open` perintah. | Pengembang aplikasi, administrator AWS, AWS DevOps | 

### Terapkan menggunakan konsol
<a name="deploy-using-the-console"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan aplikasi dengan menggunakan browser. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-containers-by-using-elastic-beanstalk.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Akses versi yang digunakan. | Setelah penyebaran, akses aplikasi yang digunakan, dan pilih URL yang disediakan. | Pengembang aplikasi, administrator AWS, AWS DevOps | 

## Sumber daya terkait
<a name="deploy-containers-by-using-elastic-beanstalk-resources"></a>
+ [Lingkungan server web](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts-webserver.html)
+ [Instal EB CLI di macOS](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
+ [Instal CLI EB secara manual](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-advanced.html)

## Informasi tambahan
<a name="deploy-containers-by-using-elastic-beanstalk-additional"></a>

**Keuntungan menggunakan Elastic Beanstalk**
+ Penyediaan infrastruktur otomatis
+ Manajemen otomatis platform yang mendasarinya
+ Penambalan dan pembaruan otomatis untuk mendukung aplikasi
+ Penskalaan otomatis aplikasi
+ Kemampuan untuk menyesuaikan jumlah node
+ Kemampuan untuk mengakses komponen infrastruktur jika diperlukan
+ Kemudahan penyebaran di atas solusi penyebaran kontainer lainnya

# Hasilkan alamat IP keluar statis menggunakan fungsi Lambda, Amazon VPC, dan arsitektur tanpa server
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture"></a>

*Thomas Scott, Amazon Web Services*

## Ringkasan
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-summary"></a>

Pola ini menjelaskan cara membuat alamat IP keluar statis di Amazon Web Services (AWS) Cloud dengan menggunakan arsitektur tanpa server. Organisasi Anda dapat memperoleh manfaat dari pendekatan ini jika ingin mengirim file ke entitas bisnis terpisah dengan menggunakan Secure File Transfer Protocol (SFTP). Ini berarti bahwa entitas bisnis harus memiliki akses ke alamat IP yang memungkinkan file melalui firewall-nya. 

Pendekatan pola membantu Anda membuat fungsi AWS Lambda yang menggunakan [alamat IP Elastis sebagai alamat IP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) keluar. Dengan mengikuti langkah-langkah dalam pola ini, Anda dapat membuat fungsi Lambda dan virtual private cloud (VPC) yang merutekan lalu lintas keluar melalui gateway internet dengan alamat IP statis. Untuk menggunakan alamat IP statis, Anda melampirkan fungsi Lambda ke VPC dan subnetnya. 

## Prasyarat dan batasan
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif. 
+ Izin AWS Identity and Access Management (IAM) untuk membuat dan menerapkan fungsi Lambda, serta membuat VPC dan subnetnya. Untuk informasi selengkapnya tentang ini, lihat [Peran eksekusi dan izin pengguna dalam dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions) AWS Lambda.
+ Jika Anda berencana menggunakan infrastruktur sebagai kode (IAc) untuk menerapkan pendekatan pola ini, Anda memerlukan lingkungan pengembangan terintegrasi (IDE) seperti AWS Cloud9. Untuk informasi selengkapnya tentang ini, lihat [Apa itu AWS Cloud9?](https://docs.aws.amazon.com/cloud9/latest/user-guide/welcome.html) dalam dokumentasi AWS Cloud9.

## Arsitektur
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-architecture"></a>

Diagram berikut menunjukkan arsitektur tanpa server untuk pola ini.

![\[AWS Cloud VPC architecture with two availability zones, public and private subnets, NAT gateways, and a Lambda function.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/eb1d0b05-df33-45ae-b27e-36090055b300/images/c15cc6da-ce4e-4ea0-9feb-de1c845d3ce8.png)


Diagram menunjukkan alur kerja berikut:

1. Lalu lintas keluar `NAT gateway 1` masuk`Public subnet 1`.

1. Lalu lintas keluar `NAT gateway 2` masuk`Public subnet 2`.

1. Fungsi Lambda dapat berjalan di `Private subnet 1` atau. `Private subnet 2`

1. `Private subnet 1`dan `Private subnet 2` rute lalu lintas ke gateway NAT di subnet publik.

1. Gateway NAT mengirim lalu lintas keluar ke gateway internet dari subnet publik.

1. Data keluar ditransfer dari gateway internet ke server eksternal.



**Tumpukan teknologi**
+ Lambda
+ Amazon Virtual Private Cloud (Amazon VPC)

 

**Otomatisasi dan skala**

Anda dapat memastikan ketersediaan tinggi (HA) dengan menggunakan dua subnet publik dan dua subnet pribadi di Availability Zone yang berbeda. Bahkan jika satu Availability Zone menjadi tidak tersedia, solusi pola terus bekerja.

## Alat
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-tools"></a>
+ [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 VPC](https://docs.aws.amazon.com/vpc/) — Amazon Virtual Private Cloud (Amazon VPC) menyediakan bagian AWS Cloud yang terisolasi secara logis tempat Anda dapat meluncurkan sumber daya AWS di jaringan virtual yang telah Anda tentukan. Jaringan virtual ini sangat mirip dengan jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaatnya yaitu menggunakan infrastruktur AWS yang dapat diskalakan.

## Epik
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-epics"></a>

### Buat VPC baru
<a name="create-a-new-vpc"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat VPC baru. | Masuk ke AWS Management Console, buka konsol Amazon VPC, lalu buat VPC bernama `Lambda VPC` yang memiliki `10.0.0.0/25`**** rentang CIDR. IPv4 Untuk informasi selengkapnya tentang membuat VPC, lihat [Memulai Amazon VPC di dokumentasi Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc).  | Administrator AWS | 

### Buat dua subnet publik
<a name="create-two-public-subnets"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat subnet publik pertama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Buat subnet publik kedua. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 

### Buat dua subnet pribadi
<a name="create-two-private-subnets"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat subnet pribadi pertama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Buat subnet pribadi kedua. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 

### Buat dua alamat IP Elastis untuk gateway NAT Anda
<a name="create-two-elastic-ip-addresses-for-your-nat-gateways"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Buat alamat IP elastis pertama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Alamat IP Elastis ini digunakan untuk gateway NAT pertama Anda.  | Administrator AWS | 
| Buat alamat IP elastis kedua. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html)Alamat IP Elastis ini digunakan untuk gateway NAT kedua Anda. | Administrator AWS | 

### Membuat gateway internet baru
<a name="create-an-internet-gateway"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sebuah gateway internet. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Lampirkan gateway internet ke VPC. | Pilih gateway internet yang baru Anda buat, dan lalu pilih **Tindakan, Lampirkan ke VPC**. | Administrator AWS | 

### Buat dua gateway NAT
<a name="create-two-nat-gateways"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat gateway NAT pertama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Buat gateway NAT kedua. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 

### Buat tabel rute untuk subnet publik dan pribadi Anda
<a name="create-route-tables-for-your-public-and-private-subnets"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat tabel rute untuk subnet publik-satu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Buat tabel rute untuk subnet public-two. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Buat tabel rute untuk subnet private-one. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Buat tabel rute untuk subnet private-two. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 

### Buat fungsi Lambda, tambahkan ke VPC, dan uji solusinya
<a name="create-the-lambda-function-add-it-to-the-vpc-and-test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda baru. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Tambahkan fungsi Lambda ke VPC Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 
| Tulis kode untuk memanggil layanan eksternal. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture.html) | Administrator AWS | 

## Sumber daya terkait
<a name="generate-a-static-outbound-ip-address-using-a-lambda-function-amazon-vpc-and-a-serverless-architecture-resources"></a>
+ [Mengkonfigurasi fungsi Lambda untuk mengakses sumber daya di VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html)

# Identifikasi gambar kontainer duplikat secara otomatis saat bermigrasi ke repositori Amazon ECR
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav dan Rishi Singla, Amazon Web Services*

## Ringkasan
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

Pola ini memberikan solusi otomatis untuk mengidentifikasi apakah gambar yang disimpan di repositori kontainer yang berbeda adalah duplikat. Pemeriksaan ini berguna saat Anda berencana untuk memigrasikan gambar dari repositori kontainer lain ke Amazon Elastic Container Registry (Amazon ECR).

Untuk informasi dasar, pola juga menjelaskan komponen gambar kontainer, seperti image digest, manifes, dan tag. Saat merencanakan migrasi ke Amazon ECR, Anda dapat memutuskan untuk menyinkronkan gambar kontainer di seluruh pendaftar kontainer dengan membandingkan intisari gambar. Sebelum memigrasikan gambar kontainer, Anda perlu memeriksa apakah gambar-gambar ini sudah ada di repositori Amazon ECR untuk mencegah duplikasi. Namun, sulit untuk mendeteksi duplikasi dengan membandingkan intisari gambar, dan ini dapat menyebabkan masalah pada fase migrasi awal.  Pola ini membandingkan intisari dari dua gambar serupa yang disimpan dalam pendaftar kontainer yang berbeda dan menjelaskan mengapa intisari bervariasi, untuk membantu Anda membandingkan gambar secara akurat.

## Prasyarat dan batasan
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ Aktif Akun AWS
+ Akses ke registri [publik Amazon ECR](https://gallery.ecr.aws/)
+ Keakraban dengan yang berikut: Layanan AWS
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service](https://aws.amazon.com/s3/) (Amazon S3)
+  CodeCommit [Kredensi yang dikonfigurasi (lihat instruksi)](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html)

## Arsitektur
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**Komponen gambar kontainer**

Diagram berikut menggambarkan beberapa komponen dari gambar kontainer. Komponen-komponen ini dijelaskan setelah diagram.

![\[Manifes, konfigurasi, lapisan sistem file, dan intisari.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**Istilah dan definisi**

Istilah-istilah berikut didefinisikan dalam [Spesifikasi Gambar Open Container Initiative (OCI)](https://github.com/opencontainers/image-spec/blob/main/spec.md).
+ **Registry:** Layanan untuk penyimpanan dan manajemen gambar.
+ **Klien:** Alat yang berkomunikasi dengan pendaftar dan bekerja dengan gambar lokal.
+ **Push:** Proses untuk mengunggah gambar ke registri.
+ **Pull:** Proses untuk mengunduh gambar dari registri.
+ **Blob:** Bentuk biner konten yang disimpan oleh registri dan dapat diatasi dengan intisari.
+ **Indeks:** Sebuah konstruksi yang mengidentifikasi beberapa manifes gambar untuk platform komputer yang berbeda (seperti x86-64 atau ARM 64-bit) atau jenis media. Untuk informasi selengkapnya, lihat [Spesifikasi Indeks Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/image-index.md).
+ **Manifest:** Dokumen JSON yang mendefinisikan gambar atau artefak yang diunggah melalui titik akhir manifes. Manifes dapat mereferensikan gumpalan lain dalam repositori dengan menggunakan deskriptor. Untuk informasi selengkapnya, lihat [Spesifikasi Manifes Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/manifest.md).
+ **Filesystem layer:** Pustaka sistem dan dependensi lain untuk sebuah gambar.
+ **Konfigurasi:** Gumpalan yang berisi metadata artefak dan direferensikan dalam manifes. Untuk informasi selengkapnya, lihat [Spesifikasi Konfigurasi Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/config.md).
+ **Objek atau artefak:** Item konten konseptual yang disimpan sebagai gumpalan dan dikaitkan dengan manifes yang menyertainya dengan konfigurasi.
+ **Digest:** Pengidentifikasi unik yang dibuat dari hash kriptografi dari isi manifes. Image digest membantu mengidentifikasi gambar kontainer yang tidak dapat diubah secara unik. Saat Anda menarik gambar dengan menggunakan intisari, Anda akan mengunduh gambar yang sama setiap kali pada sistem operasi atau arsitektur apa pun. Untuk informasi lebih lanjut, lihat [Spesifikasi Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).
+ **Tag: Pengidentifikasi** manifes yang dapat dibaca manusia. Dibandingkan dengan intisari gambar, yang tidak dapat diubah, tag bersifat dinamis. Tag yang menunjuk ke gambar dapat berubah dan berpindah dari satu gambar ke gambar lainnya, meskipun intisari gambar yang mendasarinya tetap sama.

**Arsitektur target**

Diagram berikut menampilkan arsitektur tingkat tinggi dari solusi yang disediakan oleh pola ini untuk mengidentifikasi gambar kontainer duplikat dengan membandingkan gambar yang disimpan di Amazon ECR dan repositori pribadi.

![\[Secara otomatis mendeteksi duplikat dengan CodePipeline dan. CodeBuild\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## Alat
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-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.
+ [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 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 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.

**Kode**

Kode untuk pola ini tersedia di GitHub repositori [Solusi**** otomatis untuk mengidentifikasi gambar kontainer duplikat antar](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) repositori.

## Praktik terbaik
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ [CloudFormation praktik terbaik](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)
+ [AWS CodePipeline praktik terbaik](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html)

## Epik
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Tarik gambar kontainer dari repositori publik dan pribadi Amazon ECR
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tarik gambar dari repositori publik Amazon ECR. | Dari terminal, jalankan perintah berikut untuk menarik gambar `amazonlinux` dari repositori publik Amazon ECR.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>Ketika gambar telah ditarik ke mesin lokal Anda, Anda akan melihat pull digest berikut, yang mewakili indeks gambar.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | Pengembang aplikasi, AWS DevOps, administrator AWS | 
| Dorong gambar ke repositori pribadi Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS, AWS DevOps, Pengembang aplikasi | 
| Tarik gambar yang sama dari repositori pribadi Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Pengembang aplikasi, AWS DevOps, administrator AWS | 

### Bandingkan manifes gambar
<a name="compare-the-image-manifests"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Temukan manifes gambar yang disimpan di repositori publik Amazon ECR. | Dari terminal, jalankan perintah berikut untuk menarik manifes gambar `public.ecr.aws/amazonlinux/amazonlinux:2018.03` dari repositori publik Amazon ECR.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | Administrator AWS, AWS DevOps, Pengembang aplikasi | 
| Temukan manifes gambar yang disimpan di repositori pribadi Amazon ECR. | Dari terminal, jalankan perintah berikut untuk menarik manifes gambar `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest` dari repositori pribadi Amazon ECR.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, administrator sistem AWS, Pengembang aplikasi | 
| Bandingkan intisari yang ditarik oleh Docker dengan intisari manifes untuk gambar di repositori pribadi Amazon ECR. | Pertanyaan lain adalah mengapa intisari yang disediakan oleh perintah **docker** pull berbeda dari intisari manifes untuk gambar. `<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`Intisari yang digunakan untuk **docker** pull mewakili intisari manifes gambar, yang disimpan dalam registri. Intisari ini dianggap sebagai root dari rantai hash, karena manifes berisi hash konten yang akan diunduh dan diimpor ke Docker.ID gambar yang digunakan dalam Docker dapat ditemukan dalam manifes ini sebagai`config.digest`. Ini mewakili konfigurasi gambar yang digunakan Docker. Jadi Anda bisa mengatakan bahwa manifes adalah amplop, dan gambar adalah isi amplop. Intisari manifes selalu berbeda dari ID gambar. Namun, manifes tertentu harus selalu menghasilkan ID gambar yang sama. Karena manifes digest adalah rantai hash, kami tidak dapat menjamin bahwa itu akan selalu sama untuk ID gambar yang diberikan. Dalam kebanyakan kasus, ini menghasilkan intisari yang sama, meskipun Docker tidak dapat menjaminnya. Perbedaan yang mungkin terjadi dalam manifes digest berasal dari Docker yang tidak menyimpan gumpalan yang dikompresi dengan gzip secara lokal. Oleh karena itu, mengekspor lapisan mungkin menghasilkan intisari yang berbeda, meskipun konten yang tidak dikompresi tetap sama. ID gambar memverifikasi bahwa konten yang tidak dikompresi adalah sama; artinya, ID gambar sekarang menjadi pengenal yang dapat dialamatkan konten (). `chainID`Untuk mengonfirmasi informasi ini, Anda dapat membandingkan output dari perintah **docker inspect** di repositori publik dan pribadi Amazon ECR:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Hasilnya memverifikasi bahwa kedua gambar memiliki intisari ID gambar dan intisari lapisan yang sama.ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`Lapisan: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`Selain itu, intisari didasarkan pada byte objek yang dikelola secara lokal (file lokal adalah tar dari lapisan gambar kontainer) atau gumpalan yang didorong ke server registri. Namun, ketika Anda mendorong gumpalan ke registri, tar dikompresi dan intisari dihitung dalam file tar terkompresi. Oleh karena itu, perbedaan nilai **docker pull** digest muncul dari kompresi yang diterapkan di tingkat registri (Amazon ECR private atau public).Penjelasan ini khusus untuk menggunakan klien Docker. Anda tidak akan melihat perilaku ini dengan klien lain seperti **nerdctl** atau **Finch**, karena mereka tidak secara otomatis mengompres gambar selama operasi push dan pull. | AWS DevOps, administrator sistem AWS, Pengembang aplikasi | 

### Secara otomatis mengidentifikasi gambar duplikat antara repositori publik dan pribadi Amazon ECR
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Kloning repositori Github untuk pola ini ke dalam folder lokal:<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | Administrator AWS, AWS DevOps | 
| Siapkan CI/CD pipa. |  GitHub Repositori menyertakan `.yaml` file yang membuat CloudFormation tumpukan untuk menyiapkan pipeline. AWS CodePipeline[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Pipeline akan diatur dengan dua tahap (CodeCommit dan CodeBuild, seperti yang ditunjukkan pada diagram arsitektur) untuk mengidentifikasi gambar di repositori pribadi yang juga ada di repositori publik. Pipeline dikonfigurasi dengan sumber daya berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS, AWS DevOps | 
| Mengisi CodeCommit repositori. | Untuk mengisi CodeCommit repositori, lakukan langkah-langkah ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS, AWS DevOps | 
| Bersihkan. | Untuk menghindari timbulnya tagihan future, hapus sumber daya dengan mengikuti langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | Administrator AWS | 

## Pemecahan masalah
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Ketika Anda mencoba untuk mendorong, menarik, atau berinteraksi dengan CodeCommit repositori dari terminal atau baris perintah, Anda diminta untuk memberikan nama pengguna dan kata sandi, dan Anda harus menyediakan kredensi Git untuk pengguna IAM Anda. | Penyebab paling umum untuk kesalahan ini adalah sebagai berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)Tergantung pada sistem operasi dan lingkungan lokal Anda, Anda mungkin perlu menginstal pengelola kredensial, mengkonfigurasi pengelola kredensial yang disertakan dalam sistem operasi Anda, atau menyesuaikan lingkungan lokal Anda untuk menggunakan penyimpanan kredensial. Misalnya, jika komputer menjalankan macOS, maka Anda dapat menggunakan utilitas Keychain Access untuk menyimpan kredensial Anda. Jika komputer Anda menjalankan Windows, Anda dapat menggunakan Pengelola Kredensial Git yang diinstal dengan Git untuk Windows. Untuk informasi selengkapnya, lihat [Penyetelan untuk pengguna HTTPS yang menggunakan kredensial Git](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) dalam CodeCommit dokumentasi dan [Penyimpanan Kredenal](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage) dalam dokumentasi Git. | 
| Anda mengalami kesalahan HTTP 403 atau “tidak ada kredensial autentikasi dasar” saat Anda mendorong gambar ke repositori Amazon ECR. | **Anda mungkin menemukan pesan kesalahan ini dari perintah **docker push atau docker** **pull**, bahkan jika Anda telah berhasil mengautentikasi ke Docker dengan menggunakan perintah aws ecr. get-login-password** Penyebab yang diketahui adalah:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## Sumber daya terkait
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [Solusi otomatis untuk mengidentifikasi gambar kontainer duplikat antara repositori (repositori)](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/) GitHub 
+ [Galeri publik Amazon ECR](https://gallery.ecr.aws/)
+ [Gambar pribadi di Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html) (dokumentasi Amazon ECR)
+ [AWS::CodePipeline::Pipeline sumber daya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html) (CloudFormation dokumentasi)
+ [Spesifikasi Format Gambar OCI](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## Informasi tambahan
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Output inspeksi Docker untuk gambar di repositori publik Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Output inspeksi Docker untuk gambar di repositori pribadi Amazon ECR**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

# Instal Agen SSM di node pekerja Amazon EKS dengan menggunakan Kubernetes DaemonSet
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset"></a>

*Mahendra Revanasiddappa, Amazon Web Services*

## Ringkasan
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-summary"></a>

**Catatan, September 2021:** Amazon EKS terbaru yang dioptimalkan AMIs menginstal Agen SSM secara otomatis. Untuk informasi lebih lanjut, lihat [catatan rilis](https://github.com/awslabs/amazon-eks-ami/releases/tag/v20210621) untuk Juni 2021 AMIs.

Di Amazon Elastic Kubernetes Service (Amazon EKS), karena pedoman keamanan, node pekerja tidak memiliki pasangan kunci Secure Shell (SSH) yang melekat padanya. Pola ini menunjukkan bagaimana Anda dapat menggunakan tipe DaemonSet sumber daya Kubernetes untuk menginstal AWS Systems Manager Agent (SSM Agent) pada semua node pekerja, alih-alih menginstalnya secara manual atau mengganti Amazon Machine Image (AMI) untuk node. DaemonSet menggunakan pekerjaan cron pada node pekerja untuk menjadwalkan instalasi Agen SSM. Anda juga dapat menggunakan pola ini untuk menginstal paket lain pada node pekerja.

Saat Anda memecahkan masalah di klaster, menginstal Agen SSM sesuai permintaan memungkinkan Anda membuat sesi SSH dengan node pekerja, mengumpulkan log, atau melihat konfigurasi instans, tanpa pasangan kunci SSH.

## Prasyarat dan batasan
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-prereqs"></a>

**Prasyarat**
+ Cluster Amazon EKS yang ada dengan node pekerja Amazon Elastic Compute Cloud (Amazon EC2).
+ Instance kontainer harus memiliki izin yang diperlukan untuk berkomunikasi dengan layanan SSM. Peran terkelola AWS Identity and Access Management (IAM) **Amazon SSMManaged InstanceCore** menyediakan izin yang diperlukan agar Agen SSM berjalan pada instans. EC2 Untuk informasi selengkapnya, lihat [dokumentasi AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html).

**Batasan**
+ Pola ini tidak berlaku untuk AWS Fargate, karena DaemonSets tidak didukung pada platform Fargate.
+ Pola ini hanya berlaku untuk node pekerja berbasis Linux.
+  DaemonSet Pod berjalan dalam mode istimewa. Jika klaster Amazon EKS memiliki webhook yang memblokir pod dalam mode istimewa, Agen SSM tidak akan diinstal.

## Arsitektur
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-architecture"></a>

Diagram berikut menggambarkan arsitektur untuk pola ini.

![\[Menggunakan Kubernetes DaemonSet untuk menginstal Agen SSM di node pekerja Amazon EKS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/016d53f3-45c1-4913-b542-67124e1462b8/images/3a6dfd00-e54b-44d5-843a-4c26ce9826c9.png)


## Alat
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools"></a>

**Alat**
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) adalah utilitas baris perintah yang digunakan untuk berinteraksi dengan kluster Amazon EKS. Pola ini digunakan `kubectl` untuk menyebarkan a DaemonSet di kluster Amazon EKS, yang akan menginstal Agen SSM di semua node pekerja.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) memudahkan Anda menjalankan Kubernetes di AWS tanpa harus menginstal, mengoperasikan, dan memelihara bidang kontrol atau node Kubernetes Anda sendiri. Kubernetes adalah sebuah sistem sumber terbuka untuk melakukan otomatisasi terhadap deployment, penskalaan, dan pengelolaan aplikasi terkontainer.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) memungkinkan Anda mengelola EC2 instans, instans lokal, dan mesin virtual (VMs) melalui shell interaktif berbasis browser satu klik, atau melalui AWS Command Line Interface (AWS CLI).

**Kode**

Gunakan kode berikut untuk membuat file DaemonSet konfigurasi yang akan menginstal Agen SSM di cluster Amazon EKS. Ikuti instruksi di bagian [Epik](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics).

```
cat << EOF > ssm_daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    k8s-app: ssm-installer
  name: ssm-installer
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: ssm-installer
  template:
    metadata:
      labels:
        k8s-app: ssm-installer
    spec:
      containers:
      - name: sleeper
        image: busybox
        command: ['sh', '-c', 'echo I keep things running! && sleep 3600']
      initContainers:
      - image: amazonlinux
        imagePullPolicy: Always
        name: ssm
        command: ["/bin/bash"]
        args: ["-c","echo '* * * * * root yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm & rm -rf /etc/cron.d/ssmstart' > /etc/cron.d/ssmstart"]
        securityContext:
          allowPrivilegeEscalation: true
        volumeMounts:
        - mountPath: /etc/cron.d
          name: cronfile
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      volumes:
      - name: cronfile
        hostPath:
          path: /etc/cron.d
          type: Directory
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
EOF
```

## Epik
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-epics"></a>

### Mengatur kubectl
<a name="set-up-kubectl"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal dan konfigurasikan kubectl untuk mengakses kluster EKS. | Jika `kubectl` belum diinstal dan dikonfigurasi untuk mengakses kluster Amazon EKS, lihat [Menginstal kubectl di dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS. | DevOps | 

### Menyebarkan DaemonSet
<a name="deploy-the-daemonset"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat file DaemonSet konfigurasi. | Gunakan kode di bagian [Kode](#install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-tools) sebelumnya dalam pola ini untuk membuat file DaemonSet konfigurasi yang disebut`ssm_daemonset.yaml`, yang akan digunakan ke cluster Amazon EKS. Pod yang diluncurkan oleh DaemonSet memiliki wadah utama dan `init` wadah. Wadah utama memiliki `sleep` perintah. `init`Wadah menyertakan `command` bagian yang membuat file pekerjaan cron untuk menginstal Agen SSM di jalur. `/etc/cron.d/` Pekerjaan cron hanya berjalan sekali, dan file yang dibuatnya dihapus secara otomatis setelah pekerjaan selesai. Ketika wadah init telah selesai, wadah utama menunggu selama 60 menit sebelum keluar. Setelah 60 menit, pod baru diluncurkan. Pod ini menginstal Agen SSM, jika tidak ada, atau memperbarui Agen SSM ke versi terbaru.Jika diperlukan, Anda dapat memodifikasi `sleep` perintah untuk me-restart pod sekali sehari atau untuk menjalankan lebih sering.  | DevOps | 
| Terapkan DaemonSet di cluster Amazon EKS. | Untuk menyebarkan file DaemonSet konfigurasi yang Anda buat pada langkah sebelumnya di klaster Amazon EKS, gunakan perintah berikut:<pre>kubectl apply -f ssm_daemonset.yaml </pre>Perintah ini membuat sebuah DaemonSet untuk menjalankan pod pada node pekerja untuk menginstal Agen SSM. | DevOps | 

## Sumber daya terkait
<a name="install-ssm-agent-on-amazon-eks-worker-nodes-by-using-kubernetes-daemonset-resources"></a>
+ [Menginstal kubectl (dokumentasi](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS)
+ [Menyiapkan Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started.html) (dokumentasi AWS Systems Manager)

# Instal Agen dan CloudWatch agen SSM di node pekerja Amazon EKS menggunakan preBootstrapCommands
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands"></a>

*Kamahadevi Hiremath, Amazon Web Services*

## Ringkasan
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-summary"></a>

Pola ini menyediakan contoh kode dan langkah-langkah untuk menginstal AWS Systems Manager Agent (Agen SSM) dan CloudWatch agen Amazon di node pekerja Amazon Elastic Kubernetes Service (Amazon EKS) di Amazon Web Services (AWS) Cloud selama pembuatan klaster Amazon EKS. Anda dapat menginstal Agen dan CloudWatch agen SSM dengan menggunakan `preBootstrapCommands` properti dari [skema file `eksctl` konfigurasi](https://eksctl.io/usage/schema/) (dokumentasi Weaveworks). Kemudian, Anda dapat menggunakan Agen SSM untuk terhubung ke node worker Anda tanpa menggunakan key pair Amazon Elastic Compute Cloud EC2 (Amazon). Selain itu, Anda dapat menggunakan CloudWatch agen untuk memantau pemanfaatan memori dan disk pada node pekerja Amazon EKS Anda.

## Prasyarat dan batasan
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [Utilitas baris perintah eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), diinstal dan dikonfigurasi di macOS, Linux, atau Windows
+ [Utilitas baris perintah kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html), diinstal dan dikonfigurasi di macOS, Linux, atau Windows

**Batasan**
+ Sebaiknya hindari menambahkan skrip yang sudah berjalan lama ke `preBootstrapCommands`**** properti, karena ini menunda node bergabung dengan klaster Amazon EKS selama aktivitas penskalaan. Kami menyarankan Anda membuat [Amazon Machine Image (AMI) kustom](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html) sebagai gantinya.
+ Pola ini hanya berlaku untuk instans Amazon EC2 Linux.

## Arsitektur
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-architecture"></a>

**Tumpukan teknologi**
+ Amazon CloudWatch
+ Amazon Elastic Kubernetes Service (Amazon EKS)
+ AWS Systems Manager Parameter Store

**Arsitektur target**

Diagram berikut menunjukkan contoh pengguna yang menghubungkan ke node pekerja Amazon EKS menggunakan Agen SSM yang diinstal menggunakan. `preBootstrapCommands`

![\[User connecting to Amazon EKS worker nodes via Systems Manager, with SSM Agent and CloudWatch agent on each node.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b37a3cdb-204f-4014-8317-3600a793dac7/images/9a5760af-23bb-4616-97b0-b401a9d080cf.png)


Diagram menunjukkan alur kerja berikut:

1. Pengguna membuat kluster Amazon EKS dengan menggunakan file `eksctl` konfigurasi dengan `preBootstrapCommands` properti, yang menginstal Agen dan CloudWatch agen SSM.

1. Setiap instance baru yang bergabung dengan cluster nanti karena aktivitas penskalaan dibuat dengan Agen dan agen SSM yang sudah diinstal sebelumnya. CloudWatch 

1. Pengguna terhubung ke Amazon EC2 dengan menggunakan Agen SSM dan kemudian memonitor memori dan pemanfaatan disk dengan menggunakan agen. CloudWatch 

## Alat
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-tools"></a>
+ [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.
+ [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.
+ [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.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) membantu Anda mengelola EC2 instans, instans lokal, dan mesin virtual melalui shell berbasis browser interaktif, sekali klik, atau melalui AWS Command Line Interface (AWS CLI).
+ [eksctl](https://eksctl.io/usage/schema/) adalah utilitas baris perintah untuk membuat dan mengelola cluster Kubernetes di Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) adalah utilitas baris perintah untuk berkomunikasi dengan server API cluster.

## Epik
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-epics"></a>

### Buat kluster Amazon EKS
<a name="create-an-amazon-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Simpan file konfigurasi CloudWatch agen. | Simpan file konfigurasi CloudWatch agen di [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) di Wilayah AWS tempat Anda ingin membuat klaster Amazon EKS. Untuk melakukan ini, [buat parameter](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) di AWS Systems Manager Parameter Store dan catat nama parameter (misalnya,`AmazonCloudwatch-linux`).Untuk informasi selengkapnya, lihat kode *file konfigurasi CloudWatch agen Contoh* di bagian [Informasi tambahan](#install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional) dari pola ini. | DevOps insinyur | 
| Buat file konfigurasi eksctl dan cluster.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

### Verifikasi bahwa Agen dan CloudWatch agen SSM bekerja
<a name="verify-that-the-ssm-agent-and-cloudwatch-agent-work"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji Agen SSM. | Gunakan SSH untuk menyambung ke node cluster Amazon EKS Anda dengan menggunakan salah satu metode yang tercakup dalam [Memulai sesi](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console%20%20or%20https:%2F%2Fdocs.aws.amazon.com%2Fsystems-manager%2Flatest%2Fuserguide%2Fsession-manager-working-with-sessions-start.html%23sessions-start-cli) dari dokumentasi AWS Systems Manager. | AWS DevOps | 
| Uji CloudWatch agennya. | Gunakan CloudWatch konsol untuk memvalidasi CloudWatch agen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands.html) | AWS DevOps | 

## Sumber daya terkait
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-resources"></a>
+ [Menginstal dan menjalankan CloudWatch agen di server Anda](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html) ( CloudWatch dokumentasi Amazon)
+ [Membuat parameter Systems Manager (konsol)](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html) (dokumentasi AWS Systems Manager)
+ [Buat file konfigurasi CloudWatch agen](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html) ( CloudWatch dokumentasi Amazon)
+ [Memulai sesi (AWS CLI) (dokumentasi](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#sessions-start-cli) AWS Systems Manager)
+ [Memulai sesi ( EC2 konsol Amazon)](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-sessions-start.html#start-ec2-console) (dokumentasi AWS Systems Manager)

## Informasi tambahan
<a name="install-the-ssm-agent-and-cloudwatch-agent-on-amazon-eks-worker-nodes-using-prebootstrapcommands-additional"></a>

**Contoh file konfigurasi CloudWatch agen**

Dalam contoh berikut, CloudWatch agen dikonfigurasi untuk memantau pemanfaatan disk dan memori pada instance Amazon Linux:

```
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "cwagent"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
}
```

**Contoh file konfigurasi eksctl**

```
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: test
  region: us-east-2
  version: "1.24"
managedNodeGroups:
  - name: test
    minSize: 2
    maxSize: 4
    desiredCapacity: 2
    volumeSize: 20
    instanceType: t3.medium
    preBootstrapCommands:
    - sudo yum install amazon-ssm-agent -y
    - sudo systemctl enable amazon-ssm-agent
    - sudo systemctl start amazon-ssm-agent
    - sudo yum install amazon-cloudwatch-agent -y
    - sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:AmazonCloudwatch-linux
    iam:
      attachPolicyARNs:
        - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
        - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
        - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
```

**Detail kode tambahan**
+ Di baris terakhir `preBootstrapCommands` properti, `AmazonCloudwatch-linux` adalah nama parameter yang dibuat di AWS System Manager Parameter Store. Anda harus menyertakan `AmazonCloudwatch-linux` di Parameter Store di Wilayah AWS yang sama tempat Anda membuat klaster Amazon EKS. Anda juga dapat menentukan jalur file, tetapi sebaiknya gunakan Systems Manager untuk otomatisasi dan penggunaan kembali yang lebih mudah.
+ Jika Anda menggunakan `preBootstrapCommands` dalam file `eksctl` konfigurasi, Anda akan melihat dua templat peluncuran di AWS Management Console. Template peluncuran pertama mencakup perintah yang ditentukan dalam`preBootstrapCommands`. Template kedua mencakup perintah yang ditentukan dalam `preBootstrapCommands` dan data pengguna Amazon EKS default. Data ini diperlukan untuk mendapatkan node untuk bergabung dengan cluster. Grup Auto Scaling grup node menggunakan data pengguna ini untuk memutar instance baru.
+ Jika Anda menggunakan `iam` atribut dalam file `eksctl` konfigurasi, Anda harus mencantumkan kebijakan Amazon EKS default dengan kebijakan tambahan apa pun yang diperlukan dalam kebijakan AWS Identity and Access Management (IAM) terlampir. Dalam cuplikan kode dari *Buat file konfigurasi eksctl dan langkah cluster, `CloudWatchAgentServerPolicy` dan* kebijakan tambahan `AmazonSSMMangedInstanceCore` ditambahkan untuk memastikan bahwa CloudWatch agen dan Agen SSM berfungsi seperti yang diharapkan. Kebijakan`AmazonEKSWorkerNodePolicy`,`AmazonEKS_CNI_Policy`, adalah `AmazonEC2ContainerRegistryReadOnly` kebijakan wajib yang diperlukan agar klaster Amazon EKS berfungsi dengan benar.

# Migrasikan Pengontrol Ingress NGINX saat mengaktifkan Mode Otomatis Amazon EKS
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Olawale Olaleye dan Shamanth Devagari, Amazon Web Services*

## Ringkasan
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

[Mode Otomatis EKS](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) untuk Amazon Elastic Kubernetes Service (Amazon EKS) dapat mengurangi overhead operasional menjalankan beban kerja Anda di klaster Kubernetes. Mode ini memungkinkan AWS untuk juga mengatur dan mengelola infrastruktur atas nama Anda. Ketika Anda mengaktifkan Mode Otomatis EKS pada cluster yang ada, Anda harus hati-hati merencanakan migrasi konfigurasi [NGINX Ingress](https://docs.nginx.com/nginx-ingress-controller/overview/about/) Controller. Ini karena transfer langsung Network Load Balancers tidak dimungkinkan.

Anda dapat menggunakan strategi blue/green penerapan untuk memigrasikan instans NGINX Ingress Controller saat Anda mengaktifkan Mode Otomatis EKS EKS di klaster Amazon EKS yang ada.

## Prasyarat dan batasan
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ [Cluster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) yang menjalankan Kubernetes versi 1.29 atau yang lebih baru
+ Pengaya Amazon EKS yang menjalankan versi [minimum](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)
+ Versi terbaru dari [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update)
+ Instance [NGINX Ingress](https://kubernetes.github.io/ingress-nginx/deploy/#aws) Controller yang ada
+ (Opsional) [Zona yang dihosting](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) di Amazon Route 53 untuk perpindahan lalu lintas berbasis DNS

## Arsitektur
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

Penerapan *biru/hijau adalah strategi penyebaran* di mana Anda membuat dua lingkungan yang terpisah namun identik. Blue/green deployment menyediakan kemampuan rilis downtime dan rollback mendekati nol. Ide dasarnya adalah untuk menggeser lalu lintas antara dua lingkungan identik yang menjalankan versi berbeda dari aplikasi Anda.

Gambar berikut menunjukkan migrasi Network Load Balancers dari dua instance NGINX Ingress Controller yang berbeda saat mengaktifkan Mode Otomatis EKS. Anda menggunakan blue/green penyebaran untuk mengalihkan lalu lintas antara dua Network Load Balancers.

![\[Menggunakan strategi blue/green penerapan untuk memigrasikan instance NGINX Ingress Controller.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


Namespace asli adalah namespace *biru*. Di sinilah layanan dan instance NGINX Ingress Controller asli berjalan, sebelum Anda mengaktifkan Mode Otomatis EKS. Layanan dan instance asli terhubung ke Network Load Balancer yang memiliki nama DNS yang dikonfigurasi di Route 53. [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) menggunakan Network Load Balancer ini di target virtual private cloud (VPC).

Diagram menunjukkan alur kerja berikut untuk menyiapkan lingkungan untuk blue/green penerapan:

1. *Instal dan konfigurasikan instance NGINX Ingress Controller lain di namespace yang berbeda, namespace hijau.*

1. Di Route 53, konfigurasikan nama DNS untuk Network Load Balancer baru.

## Alat
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**Layanan AWS**
+ [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.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh instans, container, dan alamat IP Amazon Elastic Compute Cloud (Amazon EC2) di satu atau beberapa Availability Zone.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.
+ [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**
+ [Helm](https://helm.sh/) adalah pengelola paket open source untuk Kubernetes yang membantu Anda menginstal dan mengelola aplikasi di klaster Kubernetes Anda.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) adalah antarmuka baris perintah yang membantu Anda menjalankan perintah terhadap klaster Kubernetes.
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) menghubungkan aplikasi dan layanan Kubernetes dengan penanganan permintaan, auth, sumber daya kustom swalayan, dan debugging.

## Epik
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### Tinjau lingkungan yang ada
<a name="review-the-existing-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfirmasikan bahwa instans NGINX Ingress Controller asli beroperasi. | Masukkan perintah berikut untuk memverifikasi bahwa sumber daya di `ingress-nginx` namespace beroperasi. Jika Anda telah menerapkan NGINX Ingress Controller di namespace lain, perbarui nama namespace dalam perintah ini.<pre>kubectl get all -n ingress-nginx</pre>Pada output, konfirmasikan bahwa pod NGINX Ingress Controller dalam status berjalan. Berikut ini adalah contoh output:<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps insinyur | 

### Menerapkan HTTPd beban kerja sampel untuk menggunakan NGINX Ingress Controller
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sumber daya Kubernetes. | Masukkan perintah berikut untuk membuat contoh deployment, service, dan ingress Kubernetes:<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps insinyur | 
| Tinjau sumber daya yang digunakan. | Masukkan perintah berikut untuk melihat daftar sumber daya yang digunakan:<pre>kubectl get all,ingress</pre>Pada output, konfirmasikan bahwa HTTPd pod sampel berada dalam status berjalan. Berikut ini adalah contoh output:<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps insinyur | 
| Konfirmasikan bahwa layanan dapat dijangkau. | Masukkan perintah berikut untuk mengonfirmasi bahwa layanan dapat dijangkau melalui nama DNS Network Load Balancer:<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>Berikut ini adalah output yang diharapkan:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps insinyur | 
| (Opsional) Buat catatan DNS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps insinyur, AWS DevOps | 

### Aktifkan Mode Otomatis EKS pada cluster yang ada
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan Mode Otomatis EKS. | Ikuti petunjuk di [Aktifkan Mode Otomatis EKS pada klaster yang ada](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (dokumentasi Amazon EKS). | AWS DevOps | 

### Instal Pengontrol Ingress NGINX baru
<a name="install-a-new-nginx-ingress-controller"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan instance NGINX Ingress Controller baru. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps insinyur | 
| Menerapkan instance NGINX Instance Controller baru. | Masukkan perintah berikut untuk menerapkan file manifes yang dimodifikasi:<pre>kubectl apply -f deploy.yaml</pre> | DevOps insinyur | 
| Konfirmasikan penerapan yang berhasil. | Masukkan perintah berikut untuk memverifikasi bahwa sumber daya di `ingress-nginx-v2` namespace beroperasi:<pre>kubectl get all -n ingress-nginx-v2</pre>Pada output, konfirmasikan bahwa pod NGINX Ingress Controller berada dalam keadaan berjalan. Berikut ini adalah contoh output:<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps insinyur | 
| Buat ingress baru untuk beban HTTPd kerja sampel. | Masukkan perintah berikut untuk membuat ingress baru untuk beban HTTPd kerja sampel yang ada:<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps insinyur | 
| Konfirmasikan bahwa ingress baru berfungsi. | Masukkan perintah berikut untuk mengonfirmasi bahwa ingress baru berfungsi:<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>Berikut ini adalah output yang diharapkan:<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps insinyur | 

### Potong
<a name="cut-over"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Potong ke namespace baru. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps, DevOps insinyur | 
| Tinjau dua masuknya. | Masukkan perintah berikut untuk meninjau dua ingress yang dibuat untuk beban kerja sampel HTTPd :<pre>kubectl get ingress</pre>Berikut ini adalah contoh output:<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps insinyur | 

## Sumber daya terkait
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ [Aktifkan Mode Otomatis EKS pada klaster yang ada](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (dokumentasi Amazon EKS)
+ [Memecahkan masalah load balancer yang dibuat oleh service controller Kubernetes di Amazon EKS (Re:Post Knowledge](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) Center)AWS 
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/) (dokumentasi NGINX)

# Migrasikan beban kerja kontainer Anda dari Azure Red Hat OpenShift (ARO) ke (ROSA Layanan OpenShift Red Hat di AWS )
<a name="migrate-container-workloads-from-aro-to-rosa"></a>

*Naveen Ramasamy, Srikanth Rangavajhala, dan Gireesh Sreekantan, Amazon Web Services*

## Ringkasan
<a name="migrate-container-workloads-from-aro-to-rosa-summary"></a>

Pola ini memberikan step-by-step instruksi untuk memigrasikan beban kerja kontainer dari Azure Red Hat OpenShift (ARO) ke [Layanan OpenShift Red Hat di AWS (](https://aws.amazon.com/rosa/)ROSA). ROSA adalah layanan Kubernetes terkelola yang disediakan oleh Red Hat bekerja sama dengan. AWS Ini membantu Anda menerapkan, mengelola, dan menskalakan aplikasi kontainer Anda dengan menggunakan platform Kubernetes, dan manfaat dari keahlian Red Hat di Kubernetes dan infrastrukturnya. AWS Cloud 

Migrasi beban kerja kontainer dari ARO, dari cloud lain, atau dari tempat ke ROSA melibatkan transfer aplikasi, konfigurasi, dan data dari satu platform ke platform lainnya. Pola ini membantu memastikan transisi yang mulus sambil mengoptimalkan AWS Cloud layanan, keamanan, dan efisiensi biaya. Ini mencakup dua metode untuk memigrasikan beban kerja Anda ke cluster ROSA: CI/CD dan Migration Toolkit for Containers (MTC).

Pola ini mencakup kedua metode. Metode yang Anda pilih tergantung pada kompleksitas dan kepastian proses migrasi Anda. Jika Anda memiliki kontrol penuh atas status aplikasi Anda dan dapat menjamin penyiapan yang konsisten melalui pipeline, kami sarankan Anda menggunakan CI/CD metode ini. Namun, jika status aplikasi Anda melibatkan ketidakpastian, perubahan tak terduga, atau ekosistem yang kompleks, sebaiknya gunakan MTC sebagai jalur yang andal dan terkontrol untuk memigrasikan aplikasi dan datanya ke klaster baru. Untuk perbandingan rinci dari dua metode, lihat bagian [Informasi tambahan](#migrate-container-workloads-from-aro-to-rosa-additional).

Manfaat bermigrasi ke ROSA:
+ ROSA terintegrasi dengan mulus AWS sebagai layanan asli. Ini mudah diakses melalui Konsol Manajemen AWS dan ditagih melalui satu Akun AWS. Ini menawarkan kompatibilitas penuh dengan yang lain Layanan AWS dan memberikan dukungan kolaboratif dari keduanya AWS dan Red Hat.
+ ROSA mendukung penyebaran hybrid dan multi-cloud. Ini memungkinkan aplikasi berjalan secara konsisten di pusat data lokal dan beberapa lingkungan cloud.
+ ROSA mendapat manfaat dari fokus keamanan Red Hat, dan menyediakan fitur seperti kontrol akses berbasis peran (RBAC), pemindaian gambar, dan penilaian kerentanan untuk memastikan lingkungan wadah yang aman.
+ ROSA dirancang untuk menskalakan aplikasi dengan mudah dan menyediakan opsi ketersediaan tinggi. Ini memungkinkan aplikasi tumbuh sesuai kebutuhan sambil mempertahankan keandalan.
+ ROSA mengotomatiskan dan menyederhanakan penerapan klaster Kubernetes dibandingkan dengan pengaturan manual dan metode manajemen. Ini mempercepat proses pengembangan dan penyebaran.
+ ROSA mendapat manfaat dari AWS Cloud layanan, dan menyediakan integrasi tanpa batas dengan AWS penawaran seperti layanan basis data, solusi penyimpanan, dan layanan keamanan.

## Prasyarat dan batasan
<a name="migrate-container-workloads-from-aro-to-rosa-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Izin yang dikonfigurasi untuk ROSA Layanan AWS yang bergantung pada untuk memberikan fungsionalitas. Untuk informasi lebih lanjut, lihat [Prasyarat](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html) dalam dokumentasi ROSA.
+ ROSA diaktifkan pada konsol [ROSA](https://console.aws.amazon.com/rosa). Untuk instruksi, lihat [dokumentasi ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/set-up.html#enable-rosa).
+ Cluster ROSA diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Memulai ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started.html) di dokumentasi ROSA. Untuk memahami berbagai metode untuk menyiapkan cluster ROSA, lihat Panduan AWS Preskriptif panduan strategi implementasi [ROSA](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/).
+ Konektivitas jaringan dibuat dari jaringan lokal ke AWS melalui [AWS Direct Connect](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/aws-direct-connect.html)(lebih disukai) atau [AWS Virtual Private Network (Site-to-Site VPN)](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html).
+ Instans Amazon Elastic Compute Cloud (Amazon EC2) atau server virtual lain untuk menginstal alat seperti`aws client`, klien OpenShift CLI `oc` (), klien ROSA, dan biner Git.

Prasyarat tambahan untuk metode ini: CI/CD 
+ Akses ke server Jenkins lokal dengan izin untuk membuat pipeline baru, menambahkan tahapan, menambahkan OpenShift kluster, dan melakukan build.
+ Akses ke repositori Git tempat kode sumber aplikasi dipertahankan, dengan izin untuk membuat cabang Git baru dan melakukan commit ke cabang baru.

Prasyarat tambahan untuk metode MTC:
+ Bucket Amazon Simple Storage Service (Amazon S3), yang akan digunakan sebagai repositori replikasi.
+ Akses administratif ke cluster ARO sumber. Ini diperlukan untuk mengatur koneksi MTC.

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

## Arsitektur
<a name="migrate-container-workloads-from-aro-to-rosa-architecture"></a>

ROSA menyediakan tiga pola penyebaran jaringan: publik, pribadi, dan. [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) PrivateLinkmemungkinkan tim rekayasa keandalan situs Red Hat (SRE) untuk mengelola cluster dengan menggunakan subnet pribadi yang terhubung ke PrivateLink titik akhir cluster dalam VPC yang ada.

Memilih PrivateLink opsi menyediakan konfigurasi paling aman. Untuk alasan itu, kami merekomendasikannya untuk beban kerja yang sensitif atau persyaratan kepatuhan yang ketat. Untuk informasi tentang opsi penyebaran jaringan publik dan pribadi, lihat [ OpenShift dokumentasi Red Hat](https://docs.openshift.com/rosa/architecture/rosa-architecture-models.html#rosa-hcp-architecture_rosa-architecture-models).

**penting**  
Anda dapat membuat PrivateLink cluster hanya pada waktu instalasi. Anda tidak dapat mengubah cluster untuk digunakan PrivateLink setelah instalasi.

Diagram berikut mengilustrasikan PrivateLink arsitektur untuk klaster ROSA yang digunakan Direct Connect untuk terhubung ke lingkungan lokal dan ARO.

![\[Klaster ROSA yang menggunakan AWS Direct Connect dan AWS PrivateLink.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/eff9b017-6fc7-4874-b610-849a42071ef4.png)


**AWS izin untuk ROSA**

Untuk AWS izin ROSA, kami sarankan Anda menggunakan AWS Security Token Service (AWS STS) dengan token dinamis yang berumur pendek. Metode ini menggunakan peran dan kebijakan yang telah ditentukan dengan hak istimewa paling sedikit untuk memberikan izin minimal ROSA untuk beroperasi di, dan mendukung instalasi ROSA, bidang kontrol Akun AWS, dan fungsionalitas komputasi.

**Pemindahan pipa CI/CD**

CI/CD pipeline redeployment is the recommended method for users who have a mature CI/CDpipa. Ketika Anda memilih opsi ini, Anda dapat menggunakan [strategi DevOps penyebaran](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html) apa pun untuk secara bertahap mengalihkan beban aplikasi Anda ke penerapan di ROSA.

**catatan**  
Pola ini mengasumsikan kasus penggunaan umum di mana Anda memiliki pipeline Git, JFrog Artifactory, dan Jenkins lokal. Pendekatan ini mengharuskan Anda membuat konektivitas jaringan dari jaringan lokal ke AWS jaringan lokal Direct Connect, dan menyiapkan klaster ROSA sebelum mengikuti petunjuk di bagian [Epics](#migrate-container-workloads-from-aro-to-rosa-epics). Lihat bagian [Prasyarat](#migrate-container-workloads-from-aro-to-rosa-prereqs) untuk detailnya.

Diagram berikut menunjukkan alur kerja untuk metode ini.

![\[Migrasi kontainer dari ARO ke ROSA dengan menggunakan metode ini. CI/CD\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/f658590e-fbd9-4297-a02c-0b516694d436.png)


**Metode MTC**

Anda dapat menggunakan [Migration Toolkit for Containers (MTC)****](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) untuk memigrasikan beban kerja kontainer Anda di antara lingkungan Kubernetes yang berbeda, seperti dari ARO ke ROSA. MTC menyederhanakan proses migrasi dengan mengotomatiskan beberapa tugas utama dan menyediakan kerangka kerja yang komprehensif untuk mengelola siklus hidup migrasi.

Diagram berikut menunjukkan alur kerja untuk metode ini.

![\[Migrasi kontainer dari ARO ke ROSA dengan menggunakan metode MTC.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/527cedfb-ec21-42be-bf21-d4e4e4f9db51/images/979bbc7b-2e39-4dd1-b4f0-ea1032880a38.png)


## Alat
<a name="migrate-container-workloads-from-aro-to-rosa-tools"></a>

**Layanan AWS**
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)adalah layanan transfer dan penemuan data online yang membantu Anda memindahkan file atau data objek ke, dari, dan di antara layanan AWS penyimpanan.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)menghubungkan jaringan internal Anda ke Direct Connect lokasi melalui kabel serat optik Ethernet standar. Dengan koneksi ini, Anda dapat membuat antarmuka virtual langsung ke publik Layanan AWS sambil melewati penyedia layanan internet di jalur jaringan Anda.
+ [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.
+ [Layanan OpenShift Red Hat di AWS (ROSA)](https://docs.aws.amazon.com/rosa/latest/userguide/what-is-rosa.html) adalah layanan terkelola yang membantu OpenShift pengguna Red Hat untuk membangun, menskalakan, dan mengelola aplikasi kontainer. AWS
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html) membantu Anda meminta kredensyal hak istimewa terbatas sementara untuk pengguna.

**Alat-alat lainnya**
+ [Migration Toolkit for Containers (MTC)](https://docs.openshift.com/container-platform/4.13/migration_toolkit_for_containers/about-mtc.html) menyediakan konsol dan API untuk memigrasi aplikasi kontainer dari ARO ke ROSA.

## Praktik terbaik
<a name="migrate-container-workloads-from-aro-to-rosa-best-practices"></a>
+ Untuk [ketahanan](https://docs.aws.amazon.com/ROSA/latest/userguide/disaster-recovery-resiliency.html) dan jika Anda memiliki beban kerja kepatuhan keamanan, siapkan klaster ROSA multi-AZ yang menggunakan. PrivateLink Untuk informasi lebih lanjut, lihat [dokumentasi ROSA](https://docs.aws.amazon.com/rosa/latest/userguide/getting-started-classic-private-link.html).
**catatan**  
PrivateLink tidak dapat dikonfigurasi setelah instalasi.
+ Bucket S3 yang Anda gunakan untuk repositori replikasi tidak boleh bersifat publik. Gunakan kebijakan bucket S3 yang sesuai untuk membatasi akses.
+ Jika Anda memilih metode MTC, gunakan opsi migrasi **Tahap** untuk mengurangi jendela downtime selama cutover.
+ Tinjau kuota layanan Anda sebelum dan sesudah Anda menyediakan klaster ROSA. Jika perlu, mintalah peningkatan kuota sesuai dengan kebutuhan Anda. Untuk informasi lebih lanjut, lihat [dokumentasi Service Quotas](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html).
+ Tinjau [pedoman keamanan ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/security.html) dan terapkan praktik terbaik keamanan.
+ Kami menyarankan Anda menghapus administrator cluster default setelah instalasi. Untuk informasi selengkapnya, lihat [ OpenShift dokumentasi Red Hat](https://docs.openshift.com/container-platform/4.13/post_installation_configuration/cluster-tasks.html).
+ Gunakan penskalaan otomatis kumpulan mesin untuk mengurangi node pekerja yang tidak digunakan di klaster ROSA untuk mengoptimalkan biaya. Untuk informasi lebih lanjut, lihat [Lokakarya ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/5-nodes-storage/3-autoscale-machine-pool).
+ Gunakan layanan Red Hat Cost Management untuk OpenShift Container Platform untuk lebih memahami dan melacak biaya cloud dan kontainer. Untuk informasi lebih lanjut, lihat [Lokakarya ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/10-cost-management).
+ Memantau dan mengaudit layanan dan aplikasi infrastruktur klaster ROSA dengan menggunakan Layanan AWS. Untuk informasi lebih lanjut, lihat [Lokakarya ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/8-observability).

## Epik
<a name="migrate-container-workloads-from-aro-to-rosa-epics"></a>

### Opsi 1: Gunakan CI/CD pipa
<a name="option-1-use-a-ci-cd-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan cluster ROSA baru ke Jenkins. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrator AWS, administrator sistem AWS, AWS DevOps | 
| Tambahkan `oc` klien ke node Jenkins Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrator AWS, administrator sistem AWS, AWS DevOps | 
| Buat cabang Git baru. | Buat cabang baru di repositori Git Anda untuk. `rosa-dev` Cabang ini memisahkan perubahan parameter kode atau konfigurasi untuk ROSA dari pipeline yang ada. | AWS DevOps | 
| Tag gambar untuk ROSA. | Di tahap build Anda, gunakan tag yang berbeda untuk mengidentifikasi gambar yang dibuat dari pipeline ROSA. | Administrator AWS, administrator sistem AWS, AWS DevOps | 
| Buat pipa. | Buat pipeline Jenkins baru yang mirip dengan pipeline Anda yang ada. Untuk pipeline ini, gunakan cabang `rosa-dev` Git yang Anda buat sebelumnya, dan pastikan untuk menyertakan tahap checkout, pemindaian kode, dan build Git yang identik dengan pipeline Anda yang ada. | Administrator AWS, administrator sistem AWS, AWS DevOps | 
| Tambahkan tahap penerapan ROSA. | Di pipeline baru, tambahkan tahapan untuk diterapkan ke cluster ROSA dan referensi cluster ROSA yang Anda tambahkan ke konfigurasi global Jenkins. | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Mulai membangun baru. | Di Jenkins, pilih pipeline Anda dan pilih **Build now**, atau mulai build baru dengan melakukan perubahan ke `rosa-dev` cabang di Git. | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Verifikasi penyebaran. | Gunakan perintah **oc** atau [konsol ROSA](https://console.aws.amazon.com/rosa) untuk memverifikasi bahwa aplikasi telah digunakan pada cluster ROSA target Anda. | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Salin data ke cluster target. | Untuk beban kerja stateful, salin data dari cluster sumber ke cluster target dengan menggunakan AWS DataSync atau utilitas open source seperti **rsync**, atau Anda dapat menggunakan metode MTC. Lihat informasi yang lebih lengkap dalam [dokumentasi AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html). | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Uji aplikasi Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Potong. | Jika pengujian Anda berhasil, gunakan kebijakan Amazon Route 53 yang sesuai untuk memindahkan lalu lintas dari aplikasi yang dihosting ARO ke aplikasi yang dihosting Rosa-host. Saat Anda menyelesaikan langkah ini, beban kerja aplikasi Anda akan sepenuhnya beralih ke cluster ROSA. | Administrator AWS, administrator sistem AWS | 

### Opsi 2: Gunakan MTC
<a name="option-2-use-mtc"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal operator MTC. | Instal operator MTC pada cluster ARO dan ROSA:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Konfigurasikan lalu lintas jaringan ke repositori replikasi. | Jika Anda menggunakan server proxy, konfigurasikan untuk memungkinkan lalu lintas jaringan antara repositori replikasi dan cluster. Repositori replikasi adalah objek penyimpanan perantara yang digunakan MTC untuk memigrasikan data. Cluster sumber dan target harus memiliki akses jaringan ke repositori replikasi selama migrasi. | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Tambahkan cluster sumber ke MTC. | Di konsol web MTC, tambahkan cluster sumber ARO. | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Tambahkan Amazon S3 sebagai repositori replikasi Anda. | Di konsol web MTC, tambahkan bucket Amazon S3 ([lihat](#migrate-container-workloads-from-aro-to-rosa-prereqs) Prasyarat) sebagai repositori replikasi. | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Buat rencana migrasi. | Di konsol web MTC, buat rencana migrasi dan tentukan jenis transfer data sebagai **Salin**. Ini akan menginstruksikan MTC untuk menyalin data dari cluster sumber (ARO) ke bucket S3, dan dari bucket ke cluster target (ROSA). | Administrator AWS, AWS DevOps, administrator sistem AWS | 
| Jalankan rencana migrasi. | Jalankan paket migrasi dengan menggunakan opsi **Stage** atau **Cutover**:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-container-workloads-from-aro-to-rosa.html) | Administrator AWS, AWS DevOps, administrator sistem AWS | 

## Pemecahan masalah
<a name="migrate-container-workloads-from-aro-to-rosa-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Masalah konektivitas | Saat memigrasikan beban kerja kontainer dari ARO ke ROSA, Anda mungkin mengalami masalah konektivitas yang harus diselesaikan untuk memastikan migrasi berhasil. Untuk mengatasi masalah konektivitas ini (tercantum dalam tabel ini) selama migrasi, perencanaan yang cermat, koordinasi dengan jaringan dan tim keamanan Anda, dan pengujian menyeluruh sangat penting. Menerapkan strategi migrasi bertahap dan memverifikasi konektivitas di setiap langkah akan membantu meminimalkan potensi gangguan dan memastikan transisi yang mulus dari ARO ke ROSA. | 
| Perbedaan konfigurasi jaringan | ARO dan ROSA mungkin memiliki variasi dalam konfigurasi jaringan mereka, seperti pengaturan jaringan virtual (VNet), subnet, dan kebijakan jaringan. Untuk komunikasi yang tepat antar layanan, pastikan pengaturan jaringan sejajar antara kedua platform. | 
| Grup keamanan dan aturan firewall | ROSA dan ARO mungkin memiliki grup keamanan default dan pengaturan firewall yang berbeda. Pastikan untuk menyesuaikan dan memperbarui aturan ini untuk mengizinkan lalu lintas yang diperlukan untuk menjaga konektivitas antar kontainer dan layanan selama migrasi.  | 
| Alamat IP dan perubahan DNS | Saat Anda memigrasikan beban kerja, alamat IP dan nama DNS mungkin berubah. Konfigurasikan ulang aplikasi yang mengandalkan nama DNS statis IPs atau spesifik.  | 
| Akses layanan eksternal | Jika aplikasi Anda bergantung pada layanan eksternal seperti database atau APIs, Anda mungkin harus memperbarui pengaturan koneksi mereka untuk memastikan mereka dapat berkomunikasi dengan layanan baru dari ROSA. | 
| Konfigurasi Azure Private Link | Jika Anda menggunakan Azure Private Link atau layanan endpoint pribadi di ARO, Anda perlu menyiapkan fungsionalitas yang setara di ROSA untuk memastikan konektivitas pribadi antar sumber daya. | 
| Site-to-Site VPN atau Direct Connect pengaturan  | Jika ada Site-to-Site VPN atau Direct Connect koneksi antara jaringan lokal dan ARO, Anda perlu membuat koneksi serupa dengan ROSA untuk komunikasi tanpa gangguan dengan sumber daya lokal Anda. | 
| Pengaturan masuk dan penyeimbang beban | Konfigurasi untuk pengontrol masuk dan penyeimbang beban mungkin berbeda antara ARO dan ROSA. Konfigurasikan ulang pengaturan ini untuk mempertahankan akses eksternal ke layanan Anda. | 
| Sertifikat dan penanganan TLS | Jika aplikasi Anda menggunakan sertifikat SSL atau TLS, pastikan sertifikat tersebut valid dan dikonfigurasi dengan benar di ROSA. | 
| Akses registri kontainer | Jika kontainer Anda di-host di registri kontainer eksternal, siapkan autentikasi yang tepat dan izin akses untuk ROSA. | 
| Pencatatan dan pemantauan | Perbarui konfigurasi pemantauan dan pencatatan untuk mencerminkan infrastruktur baru di ROSA sehingga Anda dapat terus memantau kesehatan dan kinerja kontainer Anda secara efektif. | 

## Sumber daya terkait
<a name="migrate-container-workloads-from-aro-to-rosa-resources"></a>

**AWS****referensi**
+ [Apa itu Layanan OpenShift Red Hat di AWS?](https://docs.aws.amazon.com/ROSA/latest/userguide/what-is-rosa.html) (Dokumentasi ROSA)
+ [Memulai dengan ROSA](https://docs.aws.amazon.com/ROSA/latest/userguide/getting-started.html) (dokumentasi ROSA)
+ [Layanan OpenShift Red Hat di AWS strategi implementasi](https://docs.aws.amazon.com/prescriptive-guidance/latest/red-hat-openshift-on-aws-implementation/) (Panduan AWS Preskriptif)
+ [Layanan OpenShift Red Hat di AWS Sekarang GA](https://aws.amazon.com/blogs/aws/red-hat-openshift-service-on-aws-now-generally-availably/) (posting AWS blog)
+ [Lokakarya ROSA](https://catalog.workshops.aws/aws-openshift-workshop/en-US/0-introduction)
+ [ROSA FAQ](https://aws.amazon.com/rosa/faqs/)
+ [FAQ Lokakarya ROSA](https://www.rosaworkshop.io/rosa/14-faq/)
+ [Harga ROSA](https://aws.amazon.com/rosa/pricing/)

** OpenShift Dokumentasi Red Hat**
+ [Memasang cluster dengan cepat AWS](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-default.html)
+ [Memasang cluster AWS di jaringan terbatas](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws-installer-provisioned.html)
+ [Menginstal cluster AWS ke dalam VPC yang ada](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-vpc.html)
+ [Menginstal klaster pada infrastruktur yang disediakan pengguna dengan menggunakan templat AWS CloudFormation ](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-user-infra.html)
+ [Menginstal cluster AWS di jaringan terbatas dengan infrastruktur yang disediakan pengguna](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-restricted-networks-aws.html)
+ [Menginstal cluster AWS dengan kustomisasi](https://docs.openshift.com/container-platform/4.13/installing/installing_aws/installing-aws-customizations.html)
+ [Memulai dengan OpenShift CLI](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html)

## Informasi tambahan
<a name="migrate-container-workloads-from-aro-to-rosa-additional"></a>

**Memilih antara opsi pemindahan MTC dan CI/CD pipa**

Migrasi aplikasi dari satu OpenShift cluster ke cluster lainnya membutuhkan pertimbangan yang cermat. Idealnya, Anda menginginkan transisi yang mulus dengan menggunakan CI/CD pipeline untuk menerapkan ulang aplikasi dan menangani migrasi data volume persisten. Namun, dalam praktiknya, aplikasi yang berjalan di cluster rentan terhadap perubahan tak terduga dari waktu ke waktu. Perubahan ini dapat menyebabkan aplikasi secara bertahap menyimpang dari status penerapan aslinya. MTC menawarkan solusi untuk skenario di mana konten yang tepat dari namespace tidak pasti dan migrasi mulus dari semua komponen aplikasi ke cluster baru adalah penting.

Membuat pilihan yang tepat membutuhkan evaluasi skenario spesifik Anda dan menimbang manfaat dari setiap pendekatan. Dengan demikian, Anda dapat memastikan migrasi yang sukses dan mulus yang selaras dengan kebutuhan dan prioritas Anda. Berikut adalah panduan tambahan untuk memilih di antara dua opsi.

**Pemindahan pipa CI/CD**

Metode CI/CD pipeline adalah pendekatan yang disarankan jika aplikasi Anda dapat digunakan kembali dengan percaya diri menggunakan pipeline. Ini memastikan bahwa migrasi dikontrol, dapat diprediksi, dan selaras dengan praktik penerapan yang ada. Saat Anda memilih metode ini, Anda dapat menggunakan penerapan [biru/hijau atau strategi penerapan](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html) kenari untuk secara bertahap mengalihkan beban ke penerapan di ROSA. Untuk skenario ini, pola ini mengasumsikan bahwa Jenkins mengatur penerapan aplikasi dari lingkungan lokal.

Keuntungan:
+ Anda tidak memerlukan akses administratif ke cluster ARO sumber atau perlu menyebarkan operator apa pun di cluster sumber atau tujuan.
+ Pendekatan ini membantu Anda beralih lalu lintas secara bertahap dengan menggunakan DevOps strategi.

Kekurangan:
+ Dibutuhkan lebih banyak upaya untuk menguji fungsionalitas aplikasi Anda.
+ Jika aplikasi Anda berisi data persisten, diperlukan langkah-langkah tambahan untuk menyalin data dengan menggunakan AWS DataSync atau alat lainnya.

**Migrasi MTC**

Di dunia nyata, menjalankan aplikasi dapat mengalami perubahan tak terduga yang menyebabkan mereka menjauh dari penerapan awal. Pilih opsi MTC ketika Anda tidak yakin tentang status aplikasi Anda saat ini di cluster sumber. Misalnya, jika ekosistem aplikasi Anda mencakup berbagai komponen, konfigurasi, dan volume penyimpanan data, sebaiknya pilih MTC untuk memastikan migrasi lengkap yang mencakup aplikasi dan seluruh lingkungannya.

Keuntungan:
+ MTC menyediakan pencadangan lengkap dan pemulihan beban kerja.
+ Ini akan menyalin data persisten dari sumber ke target saat memigrasikan beban kerja.
+ Itu tidak memerlukan akses ke repositori kode sumber.

Kekurangan:
+ Anda memerlukan hak administratif untuk menginstal operator MTC pada cluster sumber dan tujuan.
+  DevOps Tim membutuhkan pelatihan untuk menggunakan alat MTC dan melakukan migrasi. 

# Jalankan tugas Amazon ECS di Amazon WorkSpaces dengan Amazon ECS Anywhere
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere"></a>

*Akash Kumar, Amazon Web Services*

## Ringkasan
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-summary"></a>

Amazon Elastic Container Service (Amazon ECS) Anywhere mendukung penerapan tugas Amazon ECS di lingkungan apa pun, termasuk infrastruktur terkelola Amazon Web Services (AWS) dan infrastruktur yang dikelola pelanggan. Anda dapat melakukan ini saat menggunakan pesawat kontrol terkelola AWS sepenuhnya yang berjalan di cloud dan selalu up to date. 

Perusahaan sering menggunakan Amazon WorkSpaces untuk mengembangkan aplikasi berbasis kontainer. Ini memerlukan Amazon Elastic Compute Cloud (Amazon EC2) atau AWS Fargate dengan cluster Amazon ECS untuk menguji dan menjalankan tugas ECS. Sekarang, dengan menggunakan Amazon ECS Anywhere, Anda dapat menambahkan WorkSpaces Amazon sebagai instans eksternal langsung ke cluster ECS, dan Anda dapat menjalankan tugas secara langsung. Ini mengurangi waktu pengembangan Anda, karena Anda dapat menguji container Anda dengan cluster ECS secara lokal di Amazon. WorkSpaces Anda juga dapat menghemat biaya penggunaan EC2 atau instance Fargate untuk menguji aplikasi kontainer Anda.

Pola ini menampilkan cara menerapkan tugas ECS di Amazon WorkSpaces dengan Amazon ECS Anywhere. Ini mengatur cluster ECS dan menggunakan AWS Directory Service Simple AD untuk meluncurkan file. WorkSpaces Kemudian contoh tugas ECS meluncurkan NGINX di. WorkSpaces

## Prasyarat dan batasan
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-prereqs"></a>
+ Akun AWS yang aktif
+ Antarmuka Baris Perintah AWS (AWS CLI)
+ Kredensi AWS [dikonfigurasi pada](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) mesin Anda

## Arsitektur
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-architecture"></a>

**Tumpukan teknologi target**
+ Awan pribadi virtual (VPC)
+ Kluster Amazon ECS
+ Amazon WorkSpaces
+ AWS Directory Service dengan Simple AD

**Arsitektur target**

![\[ECS Anywhere menyiapkan cluster ECS dan menggunakan Simple AD untuk diluncurkan. WorkSpaces\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/da8b2249-3423-485c-9fef-6f902025e969/images/fd354d14-f29b-4b9e-8f1a-c3cb7ed4d6bf.png)


 

Arsitektur mencakup layanan dan sumber daya berikut:
+ Cluster ECS dengan subnet publik dan pribadi dalam VPC khusus
+ Simple AD di VPC untuk menyediakan akses pengguna ke Amazon WorkSpaces
+ Amazon WorkSpaces disediakan di VPC menggunakan Simple AD
+ AWS Systems Manager diaktifkan untuk menambahkan Amazon WorkSpaces sebagai instans terkelola
+ Menggunakan Amazon ECS dan AWS Systems Manager Agent (SSM Agent), Amazon WorkSpaces ditambahkan ke Systems Manager dan cluster ECS
+ Contoh tugas ECS untuk dijalankan di WorkSpaces dalam cluster ECS

## Alat
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-tools"></a>
+ [AWS Directory Service Simple Active Directory (Simple AD)](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_simple_ad.html) adalah direktori terkelola mandiri yang didukung oleh Server Kompatibel Direktori Aktif Samba 4. Simple AD menyediakan subset fitur yang ditawarkan oleh AWS Managed Microsoft AD, termasuk kemampuan untuk mengelola pengguna dan terhubung dengan aman ke instans Amazon EC2 .
+ [Amazon Elastic Container Service (Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)) adalah layanan manajemen kontainer yang cepat dan terukur yang membantu Anda menjalankan, menghentikan, dan mengelola kontainer di klaster.
+ [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 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 manajemen aplikasi dan sumber daya, mempersingkat waktu untuk mendeteksi dan menyelesaikan masalah operasional, dan membantu Anda mengelola sumber daya AWS Anda dengan aman dalam skala besar.
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html) membantu Anda menyediakan desktop Microsoft Windows atau Amazon Linux virtual berbasis cloud untuk pengguna Anda, yang dikenal sebagai. *WorkSpaces* WorkSpaces menghilangkan kebutuhan untuk mendapatkan dan menyebarkan perangkat keras atau menginstal perangkat lunak yang kompleks.

## Epik
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat dan konfigurasikan cluster ECS. | Untuk membuat cluster ECS, ikuti petunjuk dalam [dokumentasi AWS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create_cluster.html), termasuk langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.html) | Arsitek awan | 

### Luncurkan Amazon WorkSpaces
<a name="launch-amazon-workspaces"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan Simple AD dan luncurkan Amazon WorkSpaces. | Untuk menyediakan direktori Simple AD untuk VPC yang baru dibuat dan meluncurkan Amazon WorkSpaces, ikuti petunjuk dalam dokumentasi [AWS](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html). | Arsitek awan | 

### Menyiapkan AWS Systems Manager untuk lingkungan hybrid
<a name="set-up-aws-systems-manager-for-a-hybrid-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh skrip terlampir. | Di mesin lokal Anda, unduh `ssm-activation.json` file `ssm-trust-policy.json` dan file yang ada di bagian *Lampiran.* | Arsitek awan | 
| Tambahkan peran IAM. | Tambahkan variabel lingkungan berdasarkan kebutuhan bisnis Anda.<pre>export AWS_DEFAULT_REGION=${AWS_REGION_ID}<br />export ROLE_NAME=${ECS_TASK_ROLE}<br />export CLUSTER_NAME=${ECS_CLUSTER_NAME}<br />export SERVICE_NAME=${ECS_CLUSTER_SERVICE_NAME}</pre>Jalankan perintah berikut.<pre>aws iam create-role --role-name $ROLE_NAME --assume-role-policy-document file://ssm-trust-policy.json</pre> | Arsitek awan | 
| Tambahkan SSMManaged InstanceCore kebijakan Amazon ke peran IAM. | Jalankan perintah berikut.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore</pre> | Arsitek awan | 
| Tambahkan kebijakan EC2 ContainerServicefor EC2 Peran Amazon ke peran IAM. | Jalankan perintah berikut.<pre>aws iam attach-role-policy --role-name $ROLE_NAME --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role</pre> | Arsitek awan | 
| Verifikasi peran IAM. | Untuk memverifikasi peran IAM, jalankan perintah berikut.<pre>aws iam list-attached-role-policies --role-name $ROLE_NAME</pre> | Arsitek awan | 
| Aktifkan Systems Manager. | Jalankan perintah berikut.<pre>aws ssm create-activation --iam-role $ROLE_NAME | tee ssm-activation.json</pre> | Arsitek awan | 

### Tambahkan WorkSpaces ke cluster ECS
<a name="add-workspaces-to-the-ecs-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Connect ke Anda WorkSpaces. | Untuk menyambung dan mengatur Ruang Kerja Anda, ikuti petunjuk dalam [dokumentasi AWS](https://docs.aws.amazon.com/workspaces/latest/userguide/workspaces-user-getting-started.html). | Pengembang aplikasi | 
| Unduh skrip penginstalan ecs-anywhere. | Pada prompt perintah, jalankan perintah berikut:<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh" && sudo chmod +x ecs-anywhere-install.sh</pre> | Pengembang aplikasi | 
| Periksa integritas skrip shell. | (Opsional) Jalankan perintah berikut.<pre>curl -o "ecs-anywhere-install.sh.sha256" "https://amazon-ecs-agent-packages-preview.s3.us-east-1.amazonaws.com/ecs-anywhere-install.sh.sha256" && sha256sum -c ecs-anywhere-install.sh.sha256<br /><br /><br /></pre> | Pengembang aplikasi | 
| Tambahkan repositori EPEL di Amazon Linux. | Untuk menambahkan repositori Paket Ekstra untuk Enterprise Linux (EPEL), jalankan perintah. `sudo amazon-linux-extras install epel -y` | Pengembang aplikasi | 
| Instal Amazon ECS Anywhere. | Untuk menjalankan skrip instal, gunakan perintah berikut.<pre>sudo ./ecs-anywhere-install.sh --cluster $CLUSTER_NAME --activation-id $ACTIVATION_ID --activation-code $ACTIVATION_CODE --region $AWS_REGION<br /><br /><br /></pre> |  | 
| Periksa informasi instance dari cluster ECS. | Untuk memeriksa informasi instans Systems Manager dan ECS cluster dan memvalidasi yang WorkSpaces ditambahkan pada cluster, jalankan perintah berikut dari mesin lokal Anda.<pre>aws ssm describe-instance-information" && "aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | Pengembang aplikasi | 

### Tambahkan tugas ECS untuk WorkSpaces
<a name="add-an-ecs-task-for-the-workspaces"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran IAM eksekusi tugas. | Unduh `task-execution-assume-role.json` dan `external-task-definition.json` dari bagian *Lampiran.* Pada mesin lokal Anda, jalankan perintah berikut.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json</pre> | Arsitek awan | 
| Tambahkan kebijakan ke peran eksekusi. | Jalankan perintah berikut.<pre>aws iam --region $AWS_DEFAULT_REGION attach-role-policy --role-name $ECS_TASK_EXECUTION_ROLE --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy</pre> | Arsitek awan | 
| Buat peran tugas. | Jalankan perintah berikut.<pre>aws iam --region $AWS_DEFAULT_REGION create-role --role-name $ECS_TASK_EXECUTION_ROLE --assume-role-policy-document file://task-execution-assume-role.json<br /><br /><br /></pre> | Arsitek awan | 
| Daftarkan definisi tugas ke cluster. | Pada mesin lokal Anda, jalankan perintah berikut.<pre>aws ecs register-task-definition --cli-input-json file://external-task-definition.json</pre> | Arsitek awan | 
| Jalankan tugas. | Pada mesin lokal Anda, jalankan perintah berikut.<pre>aws ecs run-task --cluster $CLUSTER_NAME --launch-type EXTERNAL --task-definition nginx</pre> | Arsitek awan | 
| Validasi status tugas yang sedang berjalan. | Untuk mengambil ID tugas, jalankan perintah berikut.<pre>export TEST_TASKID=$(aws ecs list-tasks --cluster $CLUSTER_NAME | jq -r '.taskArns[0]')</pre>Dengan ID tugas, jalankan perintah berikut.<pre>aws ecs describe-tasks --cluster $CLUSTER_NAME --tasks ${TEST_TASKID}</pre> | Arsitek awan | 
| Verifikasi tugas di WorkSpace. | Untuk memeriksa bahwa NGINX berjalan pada WorkSpace, jalankan perintah. ` curl http://localhost:8080` | Pengembang aplikasi | 

## Sumber daya terkait
<a name="run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere-resources"></a>
+ [Cluster ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Menyiapkan lingkungan hibrida](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)
+ [Amazon WorkSpaces](https://docs.aws.amazon.com/workspaces/latest/adminguide/amazon-workspaces.html)
+ [Sederhana AD](https://docs.aws.amazon.com/workspaces/latest/adminguide/launch-workspace-simple-ad.html)

## Lampiran
<a name="attachments-da8b2249-3423-485c-9fef-6f902025e969"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/da8b2249-3423-485c-9fef-6f902025e969/attachments/attachment.zip)

# Jalankan wadah API Docker web ASP.NET Core pada instance Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam dan Sreelaxmi Pai, Amazon Web Services*

## Ringkasan
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Pola ini diperuntukkan bagi orang-orang yang mulai mengkontainerisasi aplikasi mereka di Amazon Web Services (AWS) Cloud. Saat Anda mulai membuat container aplikasi di cloud, biasanya tidak ada platform orkestrasi kontainer yang disiapkan. Pola ini membantu Anda menyiapkan infrastruktur AWS dengan cepat untuk menguji aplikasi kontainer Anda tanpa memerlukan infrastruktur orkestrasi kontainer yang rumit.

Langkah pertama dalam perjalanan modernisasi adalah mengubah aplikasi. Jika ini adalah aplikasi .NET Framework lama, Anda harus terlebih dahulu mengubah runtime menjadi ASP.NET Core. Kemudian, lakukan hal berikut:
+ Buat gambar kontainer Docker
+ Jalankan wadah Docker menggunakan gambar yang dibangun
+ Validasi aplikasi sebelum menerapkannya pada platform orkestrasi kontainer apa pun, seperti Amazon Elastic Container Service (Amazon ECS) Service Elastic Container (Amazon ECS) atau Amazon Elastic Kubernetes Service (Amazon EKS). 

Pola ini mencakup aspek build, run, dan validasi pengembangan aplikasi modern pada instance Amazon Elastic Compute Cloud EC2 (Amazon) Linux.

## Prasyarat dan batasan
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Prasyarat**
+ [Akun Amazon Web Services (AWS)](https://aws.amazon.com/account/) yang aktif
+ Peran [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) dengan akses yang memadai untuk membuat sumber daya AWS untuk pola ini 
+ [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) atau yang lebih baru diunduh dan diinstal
+ Proyek .NET Framework dimodernisasi menjadi ASP.NET Core
+ Sebuah GitHub repositori

**Versi produk**
+ Komunitas Visual Studio 2022 atau yang lebih baru

## Arsitektur
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Arsitektur target**

Pola ini menggunakan [ CloudFormation template AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) untuk membuat arsitektur yang sangat tersedia yang ditunjukkan pada diagram berikut. Instans Amazon EC2 Linux diluncurkan di subnet pribadi. AWS Systems Manager Session Manager digunakan untuk mengakses instans Amazon EC2 Linux pribadi dan untuk menguji API yang berjalan di container Docker.

![\[Pengguna mengakses instance Amazon EC2 Linux dan menguji API yang berjalan di container Docker.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Akses ke instance Linux melalui Session Manager

## Alat
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**Layanan AWS**
+ [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) — AWS Command Line Interface (AWS CLI) adalah alat open source untuk berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda. Dengan konfigurasi minimal, Anda dapat menjalankan perintah AWS CLI yang menerapkan fungsionalitas yang setara dengan yang disediakan oleh AWS Management Console berbasis browser.
+ [AWS Management Console](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html) — AWS Management Console adalah aplikasi web yang terdiri dan mengacu pada kumpulan konsol layanan yang luas untuk mengelola sumber daya AWS. Saat pertama kali masuk, Anda akan melihat halaman beranda konsol. Halaman beranda menyediakan akses ke setiap konsol layanan dan menawarkan satu tempat untuk mengakses informasi yang Anda perlukan untuk melakukan tugas terkait AWS Anda.
+ [AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html) — Session Manager adalah kemampuan AWS Systems Manager yang dikelola sepenuhnya. Dengan Session Manager, Anda dapat mengelola instans Amazon Elastic Compute Cloud (Amazon EC2). Session Manager menyediakan manajemen node yang aman dan dapat diaudit tanpa perlu membuka port masuk, memelihara host bastion, atau mengelola kunci SSH.

**Alat lainnya**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/) — Visual Studio 2022 adalah lingkungan pengembangan terintegrasi (IDE).
+ [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.

**Kode**

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Epik
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Kembangkan API web ASP.NET Core
<a name="develop-the-asp-net-core-web-api"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat contoh ASP.NET Core web API menggunakan Visual Studio. | Untuk membuat contoh ASP.NET Core web API, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Pengembang aplikasi | 
| Buat Dockerfile. | Untuk membuat Dockerfile, lakukan salah satu hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Untuk mendorong perubahan ke GitHub repositori Anda, jalankan perintah berikut.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Pengembang aplikasi | 

### Siapkan instans Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyiapkan infrastruktur. | Luncurkan [ CloudFormation template AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) untuk membuat infrastruktur, yang mencakup hal-hal berikut: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Untuk mempelajari selengkapnya tentang mengakses EC2 instans Amazon pribadi menggunakan Session Manager tanpa memerlukan host bastion, lihat postingan blog [Menuju dunia tanpa benteng](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Masuk ke instans Amazon EC2 Linux. | Untuk terhubung ke instance Amazon EC2 Linux di subnet pribadi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Pengembang aplikasi | 
| Instal dan mulai Docker. | Untuk menginstal dan memulai Docker di instance Amazon EC2 Linux, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Instal Git dan kloning repositori. | Untuk menginstal Git pada instance Amazon EC2 Linux dan mengkloning repositori dari GitHub, lakukan hal berikut.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 
| Bangun dan jalankan wadah Docker. | Untuk membuat image Docker dan menjalankan container di dalam instance Amazon EC2 Linux, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Pengembang aplikasi, administrator AWS, AWS DevOps | 

### Uji API web
<a name="test-the-web-api"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji API web menggunakan perintah curl. | Untuk menguji API web, jalankan perintah berikut.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Verifikasi respons API.Anda bisa mendapatkan perintah curl untuk setiap titik akhir dari Swagger saat Anda menjalankannya secara lokal. | Pengembang aplikasi | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus semua sumber daya. | Hapus tumpukan untuk menghapus semua sumber daya. Ini memastikan bahwa Anda tidak dikenakan biaya untuk layanan apa pun yang tidak Anda gunakan. | Administrator AWS, AWS DevOps | 

## Sumber daya terkait
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Connect ke instans Linux Anda dari Windows menggunakan PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Buat API web dengan ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Menuju dunia tanpa benteng](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)

# Jalankan beban kerja stateful dengan penyimpanan data persisten dengan menggunakan Amazon EFS di Amazon EKS dengan AWS Fargate
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate"></a>

*Ricardo Morais, Rodrigo Bersa, dan Lucio Pereira, Amazon Web Services*

## Ringkasan
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-summary"></a>

Pola ini memberikan panduan untuk mengaktifkan Amazon Elastic File System (Amazon EFS) sebagai perangkat penyimpanan untuk container yang berjalan di Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan AWS Fargate untuk menyediakan sumber daya komputasi Anda.

Pengaturan yang dijelaskan dalam pola ini mengikuti praktik terbaik keamanan dan memberikan keamanan saat istirahat dan keamanan dalam perjalanan secara default. Untuk mengenkripsi sistem file Amazon EFS Anda, ia menggunakan kunci AWS Key Management Service (AWS KMS), tetapi Anda juga dapat menentukan alias kunci yang mengirimkan proses pembuatan kunci KMS.

Anda dapat mengikuti langkah-langkah dalam pola ini untuk membuat namespace dan profil Fargate untuk aplikasi proof-of-concept (PoC), menginstal driver Amazon EFS Container Storage Interface (CSI) yang digunakan untuk mengintegrasikan cluster Kubernetes dengan Amazon EFS, mengkonfigurasi kelas penyimpanan, dan menyebarkan aplikasi PoC. Langkah-langkah ini menghasilkan sistem file Amazon EFS yang dibagi di antara beberapa beban kerja Kubernetes, berjalan di atas Fargate. Pola ini disertai dengan skrip yang mengotomatiskan langkah-langkah ini.

Anda dapat menggunakan pola ini jika Anda menginginkan persistensi data dalam aplikasi kontainer Anda dan ingin menghindari kehilangan data selama operasi penskalaan. Contoh:
+ **DevOps alat** — Skenario umum adalah mengembangkan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CDalat.
+ **Server web** — Skenario umum adalah menggunakan Apache sebagai server web HTTP. Anda dapat menggunakan Amazon EFS sebagai sistem file bersama untuk menyimpan file statis yang dibagikan di antara berbagai instance server web. Dalam skenario contoh ini, modifikasi diterapkan langsung ke sistem file alih-alih file statis yang dimasukkan ke dalam gambar Docker.

## Prasyarat dan batasan
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Cluster Amazon EKS yang sudah ada dengan Kubernetes versi 1.17 atau yang lebih baru (diuji hingga versi 1.27)
+ Sistem file Amazon EFS yang sudah ada untuk mengikat Kubernetes StorageClass dan menyediakan sistem file secara dinamis
+ Izin administrasi klaster
+ Konteks dikonfigurasi untuk menunjuk ke cluster Amazon EKS yang diinginkan

**Batasan**
+ Ada beberapa batasan yang perlu dipertimbangkan saat Anda menggunakan Amazon EKS dengan Fargate. Misalnya, penggunaan beberapa konstruksi Kubernetes, seperti DaemonSets dan kontainer istimewa, tidak didukung. Untuk informasi selengkapnya, tentang batasan Fargate, lihat pertimbangan AWS [Fargate dalam dokumentasi Amazon](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html#fargate-considerations) EKS.
+ Kode yang disediakan dengan pola ini mendukung workstation yang menjalankan Linux atau macOS.

**Versi produk**
+ AWS Command Line Interface (AWS CLI) versi 2 atau yang lebih baru
+ Driver Amazon EFS CSI versi 1.0 atau yang lebih baru (diuji hingga versi 2.4.8)
+ eksctl versi 0.24.0 atau yang lebih baru (diuji hingga versi 0.158.0)
+ jq versi 1.6 atau yang lebih baru
+ kubectl versi 1.17 atau yang lebih baru (diuji hingga versi 1.27)
+ Kubernetes versi 1.17 atau yang lebih baru (diuji hingga versi 1.27)

## Arsitektur
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-architecture"></a>

![\[Diagram arsitektur menjalankan beban kerja stateful dengan penyimpanan data persisten dengan menggunakan Amazon EFS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/2487e285-269b-415b-a270-877f973e3aaf/images/ec8de63c-3307-4010-9e03-2bd7b9881fff.png)


Arsitektur target terdiri dari infrastruktur berikut:
+ Awan pribadi virtual (VPC)
+ Dua Zona Ketersediaan
+ Subnet publik dengan gateway NAT yang menyediakan akses internet
+ Subnet pribadi dengan cluster Amazon EKS dan target pemasangan Amazon EFS (juga dikenal sebagai *titik pemasangan*)
+ Amazon EFS di tingkat VPC

Berikut ini adalah infrastruktur lingkungan untuk cluster Amazon EKS:
+ Profil AWS Fargate yang mengakomodasi konstruksi Kubernetes di tingkat namespace
+ Namespace Kubernetes dengan:
  + Dua pod aplikasi didistribusikan di seluruh Availability Zone
  + Satu klaim volume persisten (PVC) terikat pada volume persisten (PV) di tingkat cluster
+ PV di seluruh cluster yang terikat pada PVC di namespace dan yang menunjuk ke target pemasangan Amazon EFS di subnet pribadi, di luar cluster

## Alat
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-tools"></a>

**Layanan AWS**
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang dapat Anda gunakan untuk berinteraksi dengan layanan AWS dari baris perintah.
+ [Amazon Elastic File System (Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) membantu Anda membuat dan mengonfigurasi sistem file bersama di AWS Cloud. Dalam pola ini, ia menyediakan sistem file yang sederhana, terukur, dikelola sepenuhnya, dan dibagikan untuk digunakan dengan Amazon EKS.
+ [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 mengoperasikan cluster Anda sendiri.
+ [AWS Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate.html) adalah mesin komputasi tanpa server untuk Amazon EKS. Ini membuat dan mengelola sumber daya komputasi untuk aplikasi Kubernetes Anda.
+ [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.

**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.
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) adalah utilitas baris perintah untuk membuat dan mengelola cluster Kubernetes di Amazon EKS.
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) adalah antarmuka baris perintah yang membantu Anda menjalankan perintah terhadap klaster Kubernetes.
+ [jq](https://stedolan.github.io/jq/download/) adalah alat baris perintah untuk mengurai JSON.

**Kode**

Kode untuk pola ini disediakan dalam [Konfigurasi GitHub Persistence dengan Amazon EFS di Amazon EKS menggunakan repo AWS Fargate](https://github.com/aws-samples/eks-efs-share-within-fargate). Skrip diatur oleh epik, di folder `epic01` melalui`epic06`, sesuai dengan urutan di bagian [Epik](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics) dalam pola ini.

## Praktik terbaik
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-best-practices"></a>

Arsitektur target mencakup layanan dan komponen berikut, dan mengikuti praktik terbaik [AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/) Framework:
+ Amazon EFS, yang menyediakan sistem file NFS elastis yang sederhana, dapat diskalakan, dan dikelola sepenuhnya. Ini digunakan sebagai sistem file bersama di antara semua replikasi aplikasi PoC yang berjalan di pod, yang didistribusikan dalam subnet pribadi dari kluster Amazon EKS yang dipilih.
+ Target pemasangan Amazon EFS untuk setiap subnet pribadi. Ini memberikan redundansi per Availability Zone dalam virtual private cloud (VPC) cluster.
+ Amazon EKS, yang menjalankan beban kerja Kubernetes. Anda harus menyediakan kluster Amazon EKS sebelum menggunakan pola ini, seperti yang dijelaskan di bagian [Prasyarat](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-prereqs).
+ AWS KMS, yang menyediakan enkripsi saat istirahat untuk konten yang disimpan dalam sistem file Amazon EFS.
+ Fargate, yang mengelola sumber daya komputasi untuk kontainer sehingga Anda dapat fokus pada persyaratan bisnis alih-alih beban infrastruktur. Profil Fargate dibuat untuk semua subnet pribadi. Ini menyediakan redundansi per Availability Zone dalam virtual private cloud (VPC) cluster.
+ Kubernetes Pods, untuk memvalidasi bahwa konten dapat dibagikan, dikonsumsi, dan ditulis oleh berbagai instance aplikasi.

## Epik
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-epics"></a>

### Menyediakan kluster Amazon EKS (opsional)
<a name="provision-an-amazon-eks-cluster-optional"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat klaster Amazon EKS. | Jika Anda sudah memiliki cluster yang digunakan, lewati ke epik berikutnya. Buat klaster Amazon EKS di akun AWS Anda yang ada. Di [GitHub direktori](https://github.com/aws-samples/eks-efs-share-within-fargate/tree/master/bootstrap), gunakan salah satu pola untuk menyebarkan cluster Amazon EKS dengan menggunakan Terraform atau eksctl. Untuk informasi selengkapnya, lihat [Membuat klaster Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html) di dokumentasi Amazon EKS. Dalam pola Terraform, ada juga contoh yang menunjukkan cara: menautkan profil Fargate ke cluster Amazon EKS Anda, membuat sistem file Amazon EFS, dan menerapkan driver Amazon EFS CSI di cluster Amazon EKS Anda. | Administrator AWS, administrator Terraform atau eksctl, administrator Kubernetes | 
| Variabel lingkungan ekspor. | Jalankan skrip env.sh. Ini memberikan informasi yang diperlukan pada langkah selanjutnya.<pre>source ./scripts/env.sh<br />Inform the AWS Account ID:<br /><13-digit-account-id><br />Inform your AWS Region:<br /><aws-Region-code><br />Inform your Amazon EKS Cluster Name:<br /><amazon-eks-cluster-name><br />Inform the Amazon EFS Creation Token:<br /><self-genereated-uuid></pre>Jika belum dicatat, Anda bisa mendapatkan semua informasi yang diminta di atas dengan perintah CLI berikut.<pre># ACCOUNT ID<br />aws sts get-caller-identity --query "Account" --output text</pre><pre># REGION CODE<br />aws configure get region</pre><pre># CLUSTER EKS NAME<br />aws eks list-clusters --query "clusters" --output text</pre><pre># GENERATE EFS TOKEN<br />uuidgen</pre> | Administrator sistem AWS | 

### Buat namespace Kubernetes dan profil Fargate yang ditautkan
<a name="create-a-kubernetes-namespace-and-a-linked-fargate-profile"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat namespace Kubernetes dan profil Fargate untuk beban kerja aplikasi. | Buat namespace untuk menerima beban kerja aplikasi yang berinteraksi dengan Amazon EFS. Jalankan `create-k8s-ns-and-linked-fargate-profile.sh` skrip. Anda dapat memilih untuk menggunakan nama namespace kustom atau namespace default yang disediakan. `poc-efs-eks-fargate`**Dengan nama namespace aplikasi khusus:**<pre>export $APP_NAMESPACE=<CUSTOM_NAME><br />./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />-c "$CLUSTER_NAME" -n "$APP_NAMESPACE"</pre>**Tanpa nama namespace aplikasi khusus:**<pre>./scripts/epic01/create-k8s-ns-and-linked-fargate-profile.sh \<br />    -c "$CLUSTER_NAME"</pre>di `$CLUSTER_NAME` mana nama cluster Amazon EKS Anda. `-n <NAMESPACE>`Parameternya opsional; jika tidak diinformasikan, nama namespace yang dihasilkan default akan diberikan. | Pengguna Kubernetes dengan izin yang diberikan | 

### Buat sistem file Amazon EFS
<a name="create-an-amazon-efs-file-system"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hasilkan token unik. | Amazon EFS memerlukan token pembuatan untuk memastikan operasi idempoten (memanggil operasi dengan token pembuatan yang sama tidak berpengaruh). Untuk memenuhi persyaratan ini, Anda harus menghasilkan token unik melalui teknik yang tersedia. Misalnya, Anda dapat membuat pengenal unik universal (UUID) untuk digunakan sebagai token pembuatan. | Administrator sistem AWS | 
| Buat sistem file Amazon EFS. | Buat sistem file untuk menerima file data yang dibaca dan ditulis oleh beban kerja aplikasi. Anda dapat membuat sistem file terenkripsi atau tidak terenkripsi. (Sebagai praktik terbaik, kode untuk pola ini menciptakan sistem terenkripsi untuk mengaktifkan enkripsi saat istirahat secara default.) Anda dapat menggunakan kunci AWS KMS simetris yang unik untuk mengenkripsi sistem file Anda. Jika kunci kustom tidak ditentukan, kunci yang dikelola AWS akan digunakan.Gunakan skrip create-efs.sh untuk membuat sistem file Amazon EFS terenkripsi atau tidak terenkripsi, setelah Anda membuat token unik untuk Amazon EFS.**Dengan enkripsi saat istirahat, tanpa kunci KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>di `$CLUSTER_NAME` mana nama cluster Amazon EKS Anda dan `$EFS_CREATION_TOKEN` merupakan token pembuatan unik untuk sistem file.**Dengan enkripsi saat istirahat, dengan kunci KMS:**<pre>./scripts/epic02/create-efs.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>di `$CLUSTER_NAME` mana nama kluster Amazon EKS Anda, `$EFS_CREATION_TOKEN` adalah token pembuatan unik untuk sistem file, dan `$KMS_KEY_ALIAS` merupakan alias untuk kunci KMS.**Tanpa enkripsi:**<pre>./scripts/epic02/create-efs.sh -d \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>di `$CLUSTER_NAME` mana nama cluster Amazon EKS Anda, `$EFS_CREATION_TOKEN` adalah token pembuatan unik untuk sistem file, dan `–d` menonaktifkan enkripsi saat istirahat. | Administrator sistem AWS | 
| Buat grup keamanan. | Buat grup keamanan untuk memungkinkan kluster Amazon EKS mengakses sistem file Amazon EFS. | Administrator sistem AWS | 
| Perbarui aturan masuk untuk grup keamanan. | Perbarui aturan masuk grup keamanan untuk mengizinkan lalu lintas masuk untuk pengaturan berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate.html) | Administrator sistem AWS | 
| Tambahkan target pemasangan untuk setiap subnet pribadi. | Untuk setiap subnet pribadi klaster Kubernetes, buat target mount untuk sistem file dan grup keamanan. | Administrator sistem AWS | 

### Instal komponen Amazon EFS ke dalam klaster Kubernetes
<a name="install-amazon-efs-components-into-the-kubernetes-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan driver Amazon EFS CSI. | Terapkan driver Amazon EFS CSI ke dalam cluster. Pengemudi menyediakan penyimpanan sesuai dengan klaim volume persisten yang dibuat oleh aplikasi. Jalankan `create-k8s-efs-csi-sc.sh` skrip untuk menyebarkan driver Amazon EFS CSI dan kelas penyimpanan ke dalam cluster.<pre>./scripts/epic03/create-k8s-efs-csi-sc.sh</pre>Skrip ini menggunakan `kubectl` utilitas, jadi pastikan konteksnya telah dikonfigurasi dan arahkan ke cluster Amazon EKS yang diinginkan. | Pengguna Kubernetes dengan izin yang diberikan | 
| Deploy kelas penyimpanan. | Menerapkan kelas penyimpanan ke dalam cluster untuk penyedia Amazon EFS (efs.csi.aws.com). | Pengguna Kubernetes dengan izin yang diberikan | 

### Instal aplikasi PoC ke dalam cluster Kubernetes
<a name="install-the-poc-application-into-the-kubernetes-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan volume persisten. | Terapkan volume persisten, dan tautkan ke kelas penyimpanan yang dibuat dan ke ID sistem file Amazon EFS. Aplikasi ini menggunakan volume persisten untuk membaca dan menulis konten. Anda dapat menentukan ukuran apa pun untuk volume persisten di bidang penyimpanan. Kubernetes membutuhkan bidang ini, tetapi karena Amazon EFS adalah sistem file elastis, ia tidak menerapkan kapasitas sistem file apa pun. Anda dapat menerapkan volume persisten dengan atau tanpa enkripsi. (Driver Amazon EFS CSI mengaktifkan enkripsi secara default, sebagai praktik terbaik.) Jalankan `deploy-poc-app.sh` skrip untuk menyebarkan volume persisten, klaim volume persisten, dan dua beban kerja.**Dengan enkripsi dalam perjalanan:**<pre>./scripts/epic04/deploy-poc-app.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>di mana `$EFS_CREATION_TOKEN` adalah token penciptaan unik untuk sistem file.**Tanpa enkripsi dalam perjalanan:**<pre>./scripts/epic04/deploy-poc-app.sh -d \<br />    -t "$EFS_CREATION_TOKEN"</pre>di `$EFS_CREATION_TOKEN` mana token pembuatan unik untuk sistem file, dan `–d` menonaktifkan enkripsi saat transit. | Pengguna Kubernetes dengan izin yang diberikan | 
| Terapkan klaim volume persisten yang diminta oleh aplikasi. | Terapkan klaim volume persisten yang diminta oleh aplikasi, dan tautkan ke kelas penyimpanan. Gunakan mode akses yang sama dengan volume persisten yang Anda buat sebelumnya. Anda dapat menentukan ukuran apa pun untuk klaim volume persisten di bidang penyimpanan. Kubernetes membutuhkan bidang ini, tetapi karena Amazon EFS adalah sistem file elastis, ia tidak menerapkan kapasitas sistem file apa pun. | Pengguna Kubernetes dengan izin yang diberikan | 
| Menyebarkan beban kerja 1. | Menerapkan pod yang mewakili beban kerja 1 dari aplikasi. Beban kerja ini menulis konten ke file`/data/out1.txt`. | Pengguna Kubernetes dengan izin yang diberikan | 
| Menyebarkan beban kerja 2. | Menerapkan pod yang mewakili beban kerja 2 dari aplikasi. Beban kerja ini menulis konten ke file`/data/out2.txt`. | Pengguna Kubernetes dengan izin yang diberikan | 

### Validasi persistensi, daya tahan, dan kemampuan berbagi sistem file
<a name="validate-file-system-persistence-durability-and-shareability"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Periksa status`PersistentVolume`. | Masukkan perintah berikut untuk memeriksa status file`PersistentVolume`.<pre>kubectl get pv</pre>Untuk keluaran contoh, lihat bagian [Informasi tambahan](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Pengguna Kubernetes dengan izin yang diberikan | 
| Periksa status`PersistentVolumeClaim`. | Masukkan perintah berikut untuk memeriksa status file`PersistentVolumeClaim`.<pre>kubectl -n poc-efs-eks-fargate get pvc</pre>Untuk keluaran contoh, lihat bagian [Informasi tambahan](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional). | Pengguna Kubernetes dengan izin yang diberikan | 
| Validasi bahwa beban kerja 1 dapat menulis ke sistem file. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 1 menulis ke. `/data/out1.txt`<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -f /data/out1.txt</pre>Hasilnya mirip dengan yang berikut:<pre>...<br />Thu Sep  3 15:25:07 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:12 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:25:17 UTC 2023 - PoC APP 1<br />...</pre> | Pengguna Kubernetes dengan izin yang diberikan | 
| Validasi bahwa beban kerja 2 dapat menulis ke sistem file. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 2 menulis ke. `/data/out2.txt`<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -f /data/out2.txt</pre>Hasilnya mirip dengan yang berikut:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Pengguna Kubernetes dengan izin yang diberikan | 
| Validasi bahwa beban kerja 1 dapat membaca file yang ditulis oleh beban kerja 2. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 1 dapat membaca `/data/out2.txt` file yang ditulis oleh beban kerja 2.<pre>kubectl exec -ti poc-app1 -n poc-efs-eks-fargate -- tail -n 3 /data/out2.txt</pre>Hasilnya mirip dengan yang berikut:<pre>...<br />Thu Sep  3 15:26:48 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:53 UTC 2023 - PoC APP 2<br />Thu Sep  3 15:26:58 UTC 2023 - PoC APP 2<br />...</pre> | Pengguna Kubernetes dengan izin yang diberikan | 
| Validasi bahwa beban kerja 2 dapat membaca file yang ditulis oleh beban kerja 1. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 2 dapat membaca `/data/out1.txt` file yang ditulis oleh beban kerja 1.<pre>kubectl -n $APP_NAMESPACE exec -ti poc-app2 -- tail -n 3 /data/out1.txt</pre>Hasilnya mirip dengan yang berikut:<pre>...<br />Thu Sep  3 15:29:22 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:27 UTC 2023 - PoC APP 1<br />Thu Sep  3 15:29:32 UTC 2023 - PoC APP 1<br />...</pre> | Pengguna Kubernetes dengan izin yang diberikan | 
| Validasi bahwa file disimpan setelah Anda menghapus komponen aplikasi. | Selanjutnya, Anda menggunakan skrip untuk menghapus komponen aplikasi (volume persisten, klaim volume persisten, dan pod), dan memvalidasi bahwa file `/data/out1.txt` dan `/data/out2.txt` disimpan dalam sistem file. Jalankan skrip `validate-efs-content.sh` menggunakan perintah berikut.<pre>./scripts/epic05/validate-efs-content.sh \<br />    -t "$EFS_CREATION_TOKEN"</pre>di mana `$EFS_CREATION_TOKEN` adalah token penciptaan unik untuk sistem file.Hasilnya mirip dengan yang berikut:<pre>pod/poc-app-validation created<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Waiting for pod get Running state...<br />Results from execution of 'find /data' on validation process pod:<br />/data<br />/data/out2.txt<br />/data/out1.txt</pre> | Pengguna Kubernetes dengan izin yang diberikan, Administrator sistem | 

### Memantau operasi
<a name="monitor-operations"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pantau log aplikasi. | Sebagai bagian dari operasi dua hari, kirimkan log aplikasi ke Amazon CloudWatch untuk pemantauan. | Administrator sistem AWS, pengguna Kubernetes dengan izin yang diberikan | 
| Pantau container Amazon EKS dan Kubernetes dengan Container Insights. | Sebagai bagian dari operasi dua hari, pantau sistem Amazon EKS dan Kubernetes dengan menggunakan Amazon Container Insights. CloudWatch Alat ini mengumpulkan, mengumpulkan, dan merangkum metrik dari aplikasi kontainer pada tingkat dan dimensi yang berbeda. Untuk informasi selengkapnya, lihat bagian [Sumber daya terkait](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrator sistem AWS, pengguna Kubernetes dengan izin yang diberikan | 
| Pantau Amazon EFS dengan CloudWatch. | Sebagai bagian dari operasi dua hari, pantau sistem file menggunakan Amazon CloudWatch, yang mengumpulkan dan memproses data mentah dari Amazon EFS menjadi metrik yang dapat dibaca, mendekati waktu nyata. Untuk informasi selengkapnya, lihat bagian [Sumber daya terkait](#run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources). | Administrator sistem AWS | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan semua sumber daya yang dibuat untuk pola tersebut. | Setelah Anda menyelesaikan pola ini, bersihkan semua sumber daya, untuk menghindari biaya AWS. Jalankan `clean-up-resources.sh` skrip untuk menghapus semua sumber daya setelah Anda selesai menggunakan aplikasi PoC. Lengkapi salah satu opsi berikut.**Dengan enkripsi saat istirahat, dengan kunci KMS:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN" \<br />    -k "$KMS_KEY_ALIAS"</pre>di `$CLUSTER_NAME` mana nama kluster Amazon EKS Anda, `$EFS_CREATION_TOKEN` adalah token pembuatan untuk sistem file, dan `$KMS_KEY_ALIAS` merupakan alias untuk kunci KMS.**Tanpa enkripsi saat istirahat:**<pre>./scripts/epic06/clean-up-resources.sh \<br />    -c "$CLUSTER_NAME" \<br />    -t "$EFS_CREATION_TOKEN"</pre>di `$CLUSTER_NAME` mana nama cluster Amazon EKS Anda dan `$EFS_CREATION_TOKEN` merupakan token pembuatan untuk sistem file. | Pengguna Kubernetes dengan izin yang diberikan, Administrator sistem | 

## Sumber daya terkait
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-resources"></a>

**Referensi**
+ [AWS Fargate untuk Amazon EKS sekarang mendukung Amazon EFS (pengumuman](https://aws.amazon.com/blogs/aws/new-aws-fargate-for-amazon-eks-now-supports-amazon-efs/))
+ [Cara menangkap log aplikasi saat menggunakan Amazon EKS di AWS Fargate](https://aws.amazon.com/blogs/containers/how-to-capture-application-logs-when-using-amazon-eks-on-aws-fargate/) (posting blog)
+ [Menggunakan Wawasan Kontainer](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) ( CloudWatch dokumentasi Amazon)
+ [Menyiapkan Wawasan Kontainer di Amazon EKS dan Kubernetes (dokumentasi](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/deploy-container-insights-EKS.html) Amazon) CloudWatch 
+ [Metrik Amazon EKS dan Kubernetes Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-EKS.html) (dokumentasi Amazon) CloudWatch 
+ [Memantau Amazon EFS dengan Amazon CloudWatch](https://docs.aws.amazon.com/efs/latest/ug/monitoring-cloudwatch.html) (dokumentasi Amazon EFS)

**GitHub tutorial dan contoh**
+ [Penyediaan statis](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/static_provisioning/README.md)
+ [Enkripsi dalam perjalanan](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/encryption_in_transit/README.md)
+ [Mengakses sistem file dari beberapa pod](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/multiple_pods/README.md)
+ [Mengkonsumsi Amazon EFS di StatefulSets](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/statefulset/README.md)
+ [Pemasangan subpath](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/volume_path/README.md)
+ [Menggunakan titik akses Amazon EFS](https://github.com/kubernetes-sigs/aws-efs-csi-driver/blob/master/examples/kubernetes/access_points/README.md)
+ [Cetak Biru Amazon EKS untuk Terraform](https://aws-ia.github.io/terraform-aws-eks-blueprints/)

**Alat yang dibutuhkan**
+ [Menginstal AWS CLI versi 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)
+ [Instalasi eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html)
+ [Instalasi kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)
+ [Instalasi jq](https://stedolan.github.io/jq/download/)

## Informasi tambahan
<a name="run-stateful-workloads-with-persistent-data-storage-by-using-amazon-efs-on-amazon-eks-with-aws-fargate-additional"></a>

Berikut ini adalah contoh output dari `kubectl get pv` perintah.

```
NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                             STORAGECLASS   REASON   AGE
poc-app-pv   1Mi        RWX            Retain           Bound    poc-efs-eks-fargate/poc-app-pvc   efs-sc                  3m56s
```

Berikut ini adalah contoh output dari `kubectl -n poc-efs-eks-fargate get pvc` perintah.

```
NAME          STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   AGE
poc-app-pvc   Bound    poc-app-pv   1Mi        RWX            efs-sc         4m34s
```

# Siapkan penskalaan otomatis berbasis peristiwa di Amazon EKS dengan menggunakan Amazon EKS Pod Identity dan KEDA
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda"></a>

*Dipen Desai, Abhay Diwan, Kamal Joshi, dan Mahendra Revanasiddappa, Amazon Web Services*

## Ringkasan
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-summary"></a>

Platform orkestrasi, seperti [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) EKS), telah menyederhanakan pengelolaan siklus hidup aplikasi berbasis container. Ini membantu organisasi fokus pada membangun, mengamankan, mengoperasikan, dan memelihara aplikasi berbasis kontainer. Karena penerapan berbasis peristiwa menjadi lebih umum, organisasi lebih sering menskalakan penerapan Kubernetes berdasarkan berbagai sumber peristiwa. Metode ini, dikombinasikan dengan auto scaling, dapat menghasilkan penghematan biaya yang signifikan dengan menyediakan sumber daya komputasi sesuai permintaan dan penskalaan efisien yang disesuaikan dengan logika aplikasi.

[KEDA adalah autoscaler](https://keda.sh/) berbasis peristiwa berbasis Kubernetes. KEDA membantu Anda menskalakan kontainer apa pun di Kubernetes berdasarkan jumlah peristiwa yang perlu diproses. Ini ringan dan terintegrasi dengan cluster Kubernetes apa pun. Ia juga bekerja dengan komponen Kubernetes standar, seperti [Horizontal Pod Autoscaling](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA). KEDA juga menawarkan [TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/#re-use-credentials-and-delegate-auth-with-triggerauthentication), yang merupakan fitur yang membantu Anda mendelegasikan otentikasi. Hal ini memungkinkan Anda untuk menjelaskan parameter otentikasi yang terpisah dari ScaledObject dan wadah penyebaran.

AWS menyediakan peran AWS Identity and Access Management (IAM) yang mendukung beragam opsi penerapan Kubernetes, termasuk Amazon EKS, Amazon EKS Anywhere, Layanan OpenShift Red Hat di AWS (ROSA), dan cluster Kubernetes yang dikelola sendiri di Amazon Elastic Compute Cloud (Amazon). EC2 Peran ini menggunakan konstruksi IAM, seperti penyedia identitas OpenID Connect (OIDC) dan kebijakan kepercayaan IAM, untuk beroperasi di berbagai lingkungan tanpa bergantung langsung pada layanan Amazon EKS atau. APIs Untuk informasi selengkapnya, lihat [peran IAM untuk akun layanan](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) di dokumentasi Amazon EKS.

[Amazon EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html) menyederhanakan proses akun layanan Kubernetes untuk mengambil peran IAM tanpa memerlukan penyedia OIDC. Ini memberikan kemampuan untuk mengelola kredensyal untuk aplikasi Anda. Alih-alih membuat dan mendistribusikan AWS kredensialmu ke container atau menggunakan peran EC2 instans Amazon, kamu mengaitkan peran IAM dengan akun layanan Kubernetes dan mengonfigurasi Pod kamu untuk menggunakan akun layanan. Ini membantu Anda menggunakan peran IAM di beberapa klaster dan menyederhanakan manajemen kebijakan dengan mengaktifkan penggunaan kembali kebijakan izin di seluruh peran IAM.

Dengan menerapkan KEDA dengan Amazon EKS Pod Identity, bisnis dapat mencapai penskalaan otomatis berbasis peristiwa yang efisien dan pengelolaan kredensi yang disederhanakan. Skala aplikasi berdasarkan permintaan, yang mengoptimalkan pemanfaatan sumber daya dan mengurangi biaya.

Pola ini membantu Anda mengintegrasikan Amazon EKS Pod Identity dengan KEDA. Ini menampilkan bagaimana Anda dapat menggunakan akun `keda-operator` layanan dan mendelegasikan otentikasi dengan. `TriggerAuthentication` Ini juga menjelaskan cara mengatur hubungan kepercayaan antara peran IAM untuk operator KEDA dan peran IAM untuk aplikasi. Hubungan kepercayaan ini memungkinkan KEDA untuk memantau pesan dalam antrian acara dan menyesuaikan penskalaan untuk objek Kubernetes tujuan.

## Prasyarat dan batasan
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-prereqs"></a>

**Prasyarat**
+ 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)
+ [Python versi 3.11.5 atau yang lebih baru, diinstal](https://www.python.org/downloads/)
+ AWS SDK untuk Python (Boto3) [versi 1.34.135 atau yang lebih baru, diinstal](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)
+ [Helm versi 3.12.3 atau yang lebih baru, diinstal](https://helm.sh/docs/intro/install/)
+ [kubectl versi 1.25.1 atau yang lebih baru, diinstal](https://kubernetes.io/docs/tasks/tools/)
+ [Docker Engine versi 26.1.1 atau yang lebih baru, diinstal](https://docs.docker.com/engine/install/)
+ [Cluster Amazon EKS versi 1.24 atau yang lebih baru, dibuat](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ [Prasyarat untuk membuat agen Amazon EKS Pod Identity, dipenuhi](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create)

**Batasan**
+ Diperlukan bahwa Anda membangun hubungan kepercayaan antara `keda-operator` peran dan `keda-identity` peran. Instruksi disediakan di bagian [Epik](#event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics) dari pola ini.

## Arsitektur
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-architecture"></a>

Dalam pola ini, Anda membuat AWS sumber daya berikut:
+ Repositori **Amazon Elastic Container Registry (Amazon ECR)** - Dalam pola ini, repo ini diberi nama. `keda-pod-identity-registry` Repo pribadi ini digunakan untuk menyimpan gambar Docker dari aplikasi sampel.
+ Antrian **Amazon Simple Queue Service (Amazon SQS)** - Dalam pola ini, antrian ini diberi nama. `event-messages-queue` Antrian bertindak sebagai buffer pesan yang mengumpulkan dan menyimpan pesan masuk. KEDA memantau metrik antrian, seperti jumlah pesan atau panjang antrian, dan secara otomatis menskalakan aplikasi berdasarkan metrik ini.
+ **Peran IAM untuk aplikasi** — Dalam pola ini, peran ini diberi nama`keda-identity`. `keda-operator`Peran mengasumsikan peran ini. Peran ini memungkinkan akses ke antrian Amazon SQS.
+ **Peran IAM untuk operator KEDA** - Dalam pola ini, peran ini diberi nama. `keda-operator` Operator KEDA menggunakan peran ini untuk melakukan panggilan AWS API yang diperlukan. Peran ini memiliki izin untuk mengambil `keda-identity` peran. Karena hubungan kepercayaan antara peran `keda-operator` dan `keda-identity` peran, `keda-operator` peran tersebut memiliki izin Amazon SQS.

Melalui sumber daya kustom `TriggerAuthentication` dan `ScaledObject` Kubernetes, operator menggunakan `keda-identity` peran tersebut untuk terhubung dengan antrean Amazon SQS. Berdasarkan ukuran antrian, KEDA secara otomatis menskalakan penerapan aplikasi. Ini menambahkan 1 pod untuk setiap 5 pesan yang belum dibaca dalam antrian. Dalam konfigurasi default, jika tidak ada pesan yang belum dibaca dalam antrean Amazon SQS, aplikasi akan menurunkan skala ke 0 pod. Operator KEDA memantau antrian pada interval yang Anda tentukan.

 

Gambar berikut menunjukkan cara Anda menggunakan Amazon EKS Pod Identity untuk menyediakan `keda-operator` peran dengan akses aman ke antrean Amazon SQS.

![\[Menggunakan KEDA dan Amazon EKS Pod Identity untuk secara otomatis menskalakan aplikasi berbasis Kubernetes.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/56f7506d-e8d3-43e5-bec6-42267fedd0ae/images/05bdbd09-9eb8-4c0b-8c0d-efe38aecb683.png)


Diagram menunjukkan alur kerja berikut:

1. Anda menginstal agen Amazon EKS Pod Identity di cluster Amazon EKS.

1. Anda menerapkan operator KEDA di namespace KEDA di cluster Amazon EKS.

1. Anda membuat peran `keda-operator` dan `keda-identity` IAM di target Akun AWS.

1. Anda membangun hubungan kepercayaan antara peran IAM.

1. Anda menyebarkan aplikasi di `security` namespace.

1. Operator KEDA melakukan polling pesan dalam antrian Amazon SQS.

1. KEDA memulai HPA, yang secara otomatis menskalakan aplikasi berdasarkan ukuran antrian.

## Alat
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-tools"></a>

**Layanan 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.
+ [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.
+ [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.

**Alat-alat lainnya**
+ [KEDA adalah autoscaler](https://keda.sh/) berbasis peristiwa berbasis Kubernetes.

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [Event-driven auto scaling menggunakan EKS Pod Identity dan](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) REPOSITORI KEDA.

## Praktik terbaik
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-best-practices"></a>

Sebaiknya Anda untuk mematuhi praktik terbaik berikut:
+ [Praktik terbaik Amazon EKS](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)
+ [Praktik terbaik keamanan di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)
+ [Praktik terbaik Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html)

## Epik
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-epics"></a>

### Buat AWS sumber daya
<a name="create-aws-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran IAM untuk operator KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrator AWS | 
| Buat peran IAM untuk aplikasi sampel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | Administrator AWS | 
| Membuat antrean Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS Umum | 
| Buat repositori Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS Umum | 

### Siapkan kluster Amazon EKS
<a name="set-up-the-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menerapkan agen Amazon EKS Pod Identity. | Untuk cluster Amazon EKS target, siapkan agen Amazon EKS Pod Identity. Ikuti petunjuk dalam [Mengatur Agen Identitas Pod Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html#pod-id-agent-add-on-create) di dokumentasi Amazon EKS. | AWS DevOps | 
| Menyebarkan KEDA. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 
| Tetapkan peran IAM ke akun layanan Kubernetes. | Ikuti petunjuk dalam [Menetapkan peran IAM ke akun layanan Kubernetes di](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html) dokumentasi Amazon EKS. Gunakan nilai berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | AWS DevOps | 
| Buat namespace. | Masukkan perintah berikut untuk membuat `security` namespace di cluster Amazon EKS target:<pre>kubectl create ns security</pre> | DevOps insinyur | 

### Men-deploy aplikasi sampel
<a name="deploy-the-sample-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning file aplikasi. | Masukkan perintah berikut untuk mengkloning [penskalaan auto Event-driven menggunakan EKS Pod Identity dan repositori](https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda/tree/main) KEDA dari: GitHub<pre>git clone https://github.com/aws-samples/event-driven-autoscaling-using-podidentity-and-keda.git</pre> | DevOps insinyur | 
| membuat gambar Docker. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 
| Dorong gambar Docker ke Amazon ECR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)**Anda dapat menemukan perintah push dengan menavigasi ke halaman repositori Amazon ECR dan kemudian memilih perintah View push.** | DevOps insinyur | 
| Deploy aplikasi sampel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 
| Tetapkan peran IAM ke akun layanan aplikasi. | Lakukan salah satu hal berikut untuk mengaitkan peran `keda-identity` IAM dengan akun layanan untuk aplikasi sampel:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 
| Menyebarkan `ScaledObject` dan`TriggerAuthentication`. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 

### Uji penskalaan otomatis
<a name="test-auto-scaling"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kirim pesan ke antrian Amazon SQS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 
| Pantau pod aplikasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | DevOps insinyur | 

## Pemecahan masalah
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Operator KEDA tidak dapat menskalakan aplikasi. | Masukkan perintah berikut untuk memeriksa log peran `keda-operator` IAM:<pre>kubectl logs -n keda -l app=keda-operator -c keda-operator</pre> Jika ada kode `HTTP 403` respons, maka aplikasi dan scaler KEDA tidak memiliki izin yang cukup untuk mengakses antrian Amazon SQS. Selesaikan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html)Jika ada `Assume-Role` kesalahan, maka peran [IAM node Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/create-node-role.html) tidak dapat mengambil peran IAM yang ditentukan. `TriggerAuthentication` Selesaikan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/event-driven-auto-scaling-with-eks-pod-identity-and-keda.html) | 

## Sumber daya terkait
<a name="event-driven-auto-scaling-with-eks-pod-identity-and-keda-resources"></a>
+ [Siapkan Agen Identitas Pod Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html) (dokumentasi Amazon EKS)
+ [Menyebarkan KEDA (dokumentasi](https://keda.sh/docs/2.14/deploy/) KEDA)
+ [ScaledObject spesifikasi](https://keda.sh/docs/2.16/reference/scaledobject-spec/) (dokumentasi KEDA)
+ [Otentikasi dengan TriggerAuthentication](https://keda.sh/docs/2.14/concepts/authentication/) (dokumentasi KEDA)

# Merampingkan penerapan PostgreSQL di Amazon EKS dengan menggunakan PGO
<a name="streamline-postgresql-deployments-amazon-eks-pgo"></a>

*Shalaka Dengale, Amazon Web Services*

## Ringkasan
<a name="streamline-postgresql-deployments-amazon-eks-pgo-summary"></a>

Pola ini mengintegrasikan Operator Postgres dari Crunchy Data (PGO) dengan Amazon Elastic Kubernetes Service (Amazon EKS) untuk merampingkan penerapan PostgreSQL di lingkungan cloud-native. PGO menyediakan otomatisasi dan skalabilitas untuk mengelola database PostgreSQL di Kubernetes. Saat Anda menggabungkan PGO dengan Amazon EKS, PGO akan membentuk platform yang kuat untuk menerapkan, mengelola, dan menskalakan database PostgreSQL secara efisien.

Integrasi ini memberikan manfaat utama berikut:
+ Penyebaran otomatis: Menyederhanakan penyebaran dan manajemen cluster PostgreSQL.
+ Definisi sumber daya kustom (CRDs):**** Menggunakan primitif Kubernetes untuk manajemen PostgreSQL.
+ Ketersediaan tinggi: Mendukung failover otomatis dan replikasi sinkron.
+ Pencadangan dan pemulihan otomatis:**** Merampingkan proses pencadangan dan pemulihan.
+ Penskalaan horisontal:**** Memungkinkan penskalaan dinamis cluster PostgreSQL.
+ Peningkatan versi: Memfasilitasi peningkatan bergulir dengan waktu henti minimal.
+ Keamanan: Menerapkan enkripsi, kontrol akses, dan mekanisme otentikasi.

## Prasyarat dan batasan
<a name="streamline-postgresql-deployments-amazon-eks-pgo-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ [AWS Command Line Interface (AWS CLI) versi](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 2, diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ [AWS CLI Config](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html), untuk menghubungkan AWS sumber daya dari baris perintah.
+ [eksctl](https://github.com/eksctl-io/eksctl#installation), diinstal dan dikonfigurasi di Linux, macOS, atau Windows.
+ `kubectl`, diinstal dan dikonfigurasi untuk mengakses sumber daya di kluster Amazon EKS Anda. Untuk informasi selengkapnya, lihat [Mengatur kubectl dan eksctl di dokumentasi Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html). 
+ Terminal komputer Anda dikonfigurasi untuk mengakses kluster Amazon EKS. Untuk informasi selengkapnya, lihat [Mengonfigurasi komputer untuk berkomunikasi dengan klaster Anda](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html#eks-configure-kubectl) di dokumentasi Amazon EKS.

**Versi produk**
+ [Kubernetes versi 1.21—1.24 atau yang lebih baru (lihat dokumentasi PGO).](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/)
+ PostgreSQL versi 10 atau yang lebih baru. Pola ini menggunakan PostgreSQL versi 16.

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

## Arsitektur
<a name="streamline-postgresql-deployments-amazon-eks-pgo-architecture"></a>

**Tumpukan teknologi target**
+ Amazon EKS
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Amazon Elastic Compute Cloud (Amazon EC2)

**Arsitektur target**

![\[Arsitektur untuk menggunakan PGO dengan tiga Availability Zones dan dua replika, PgBouncer, dan operator PGO.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/4c164012-7527-4ebe-b6a7-c129600328d6/images/26a5572b-405b-4634-b96a-91254c3ea2c1.png)


Pola ini membangun arsitektur yang berisi cluster Amazon EKS dengan tiga node. Setiap node berjalan pada satu set EC2 instance di backend. Pengaturan PostgreSQL ini mengikuti arsitektur replika utama, yang sangat efektif untuk kasus penggunaan read-heavy. Arsitektur mencakup komponen-komponen berikut:
+ **Container database primer (pg-primary)** menghosting instance PostgreSQL utama di mana semua operasi penulisan diarahkan.
+ **Container replika sekunder (pg-replica) menghosting** instance PostgreSQL yang mereplikasi data dari database utama dan menangani operasi baca.
+ **PgBouncer**adalah pooler koneksi ringan untuk database PostgreSQL yang disertakan dengan PGO. Itu berada di antara klien dan server PostgreSQL, dan bertindak sebagai perantara untuk koneksi database.
+ **PGO** mengotomatiskan penerapan dan pengelolaan klaster PostgreSQL di lingkungan Kubernetes ini.
+ **Patroni** adalah alat open-source yang mengelola dan mengotomatiskan konfigurasi ketersediaan tinggi untuk PostgreSQL. Ini termasuk dengan PGO. Saat Anda menggunakan Patroni dengan PGO di Kubernetes, Patroni memainkan peran penting dalam memastikan ketahanan dan toleransi kesalahan klaster PostgreSQL. Untuk informasi lebih lanjut, lihat dokumentasi [Patroni](https://patroni.readthedocs.io/en/latest/).

Alur kerja mencakup langkah-langkah ini:
+ **Menyebarkan operator PGO**. Anda menerapkan operator PGO di klaster Kubernetes Anda yang berjalan di Amazon EKS. Ini dapat dilakukan dengan menggunakan manifes Kubernetes atau bagan Helm. Pola ini menggunakan manifes Kubernetes.
+ **Tentukan instance PostgreSQL**. Saat operator berjalan, Anda membuat resource kustom (CRs) untuk menentukan status instans PostgreSQL yang diinginkan. Ini termasuk konfigurasi seperti penyimpanan, replikasi, dan pengaturan ketersediaan tinggi.
+ **Manajemen operator**. Anda berinteraksi dengan operator melalui objek API Kubernetes seperti CRs membuat, memperbarui, atau menghapus instance PostgreSQL.
+ **Pemantauan dan pemeliharaan**. Anda dapat memantau kesehatan dan kinerja instans PostgreSQL yang berjalan di Amazon EKS. Operator sering menyediakan metrik dan pencatatan untuk tujuan pemantauan. Anda dapat melakukan tugas pemeliharaan rutin seperti peningkatan dan penambalan seperlunya. Untuk informasi selengkapnya, lihat [Memantau performa klaster Anda dan melihat log](https://docs.aws.amazon.com/eks/latest/userguide/eks-observe.html) di dokumentasi Amazon EKS.
+ **Penskalaan dan pencadangan**: Anda dapat menggunakan fitur yang disediakan oleh operator untuk menskalakan instance PostgreSQL dan mengelola cadangan.

Pola ini tidak mencakup operasi pemantauan, pemeliharaan, dan pencadangan.

**Otomatisasi dan skala**
+ Anda dapat menggunakan CloudFormation untuk mengotomatiskan pembuatan infrastruktur. Untuk informasi selengkapnya, lihat [Membuat resource Amazon EKS dengan CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) dokumentasi Amazon EKS.
+ Anda dapat menggunakan GitVersion atau Jenkins membangun nomor untuk mengotomatiskan penyebaran instance database.

## Alat
<a name="streamline-postgresql-deployments-amazon-eks-pgo-tools"></a>

**Layanan AWS**
+ [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 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 Layanan AWS melalui perintah di shell baris perintah Anda.

**Alat-alat lainnya**
+ [eksctl](https://eksctl.io/) adalah alat baris perintah sederhana untuk membuat cluster di Amazon EKS.
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) adalah utilitas baris perintah untuk menjalankan perintah terhadap klaster Kubernetes.
+ [PGO](https://github.com/CrunchyData/postgres-operator) mengotomatiskan dan menskalakan pengelolaan database PostgreSQL di Kubernetes.

## Praktik terbaik
<a name="streamline-postgresql-deployments-amazon-eks-pgo-best-practices"></a>

Ikuti praktik terbaik ini untuk memastikan penerapan yang lancar dan efisien:
+ **Amankan kluster EKS Anda**. Terapkan praktik terbaik keamanan untuk kluster EKS Anda, seperti menggunakan peran AWS Identity and Access Management (IAM) untuk akun layanan (IRSA), kebijakan jaringan, dan grup keamanan VPC. Batasi akses ke server API cluster EKS, dan enkripsi komunikasi antara node dan server API dengan menggunakan TLS.
+ **Pastikan kompatibilitas versi** antara PGO dan Kubernetes berjalan di Amazon EKS. Beberapa fitur PGO mungkin memerlukan versi Kubernetes tertentu atau memperkenalkan batasan kompatibilitas. Untuk informasi selengkapnya, lihat [Komponen dan Kompatibilitas](https://access.crunchydata.com/documentation/postgres-operator/5.2.5/references/components/) dalam dokumentasi PGO.
+ **Rencanakan alokasi sumber daya** untuk penyebaran PGO Anda, termasuk CPU, memori, dan penyimpanan. Pertimbangkan persyaratan sumber daya dari PGO dan instance PostgreSQL yang dikelolanya. Pantau penggunaan sumber daya dan skala sumber daya sesuai kebutuhan.
+ **Desain untuk ketersediaan tinggi**. Rancang penerapan PGO Anda untuk ketersediaan tinggi guna meminimalkan waktu henti dan memastikan keandalan. Terapkan beberapa replika PGO di beberapa Availability Zone untuk toleransi kesalahan.
+ **Menerapkan prosedur pencadangan dan pemulihan** untuk database PostgreSQL Anda yang dikelola PGO. Gunakan fitur yang disediakan oleh PGO atau solusi cadangan pihak ketiga yang kompatibel dengan Kubernetes dan Amazon EKS.
+ **Siapkan pemantauan dan pencatatan** untuk penerapan PGO Anda untuk melacak kinerja, kesehatan, dan peristiwa. Gunakan alat seperti Prometheus untuk memantau metrik dan Grafana untuk visualisasi. Konfigurasikan logging untuk menangkap log PGO untuk pemecahan masalah dan audit.
+ **Konfigurasikan jaringan** dengan benar untuk memungkinkan komunikasi antara instans PGO, PostgreSQL, dan layanan lainnya di klaster Kubernetes Anda. Gunakan fitur jaringan VPC Amazon dan plugin jaringan Kubernetes seperti Calico atau Amazon [VPC](https://github.com/aws/amazon-vpc-cni-k8s) CNI untuk penegakan kebijakan jaringan dan isolasi lalu lintas.
+ **Pilih opsi penyimpanan yang sesuai** untuk database PostgreSQL Anda, dengan mempertimbangkan faktor-faktor seperti kinerja, daya tahan, dan skalabilitas. Gunakan volume Amazon Elastic Block Store (Amazon EBS) AWS atau layanan penyimpanan terkelola untuk penyimpanan persisten. Untuk informasi selengkapnya, lihat [Menyimpan volume Kubernetes dengan Amazon EBS di dokumentasi Amazon](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) EKS.
+ **Gunakan alat infrastruktur sebagai kode (IAc)** seperti CloudFormation untuk mengotomatiskan penerapan dan konfigurasi PGO di Amazon EKS. Tentukan komponen infrastruktur—termasuk kluster EKS, jaringan, dan sumber daya PGO—sebagai kode untuk konsistensi, pengulangan, dan kontrol versi.

## Epik
<a name="streamline-postgresql-deployments-amazon-eks-pgo-epics"></a>

### Membuat peran IAM
<a name="create-an-iam-role"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran IAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrator AWS | 

### Buat kluster Amazon EKS
<a name="create-an-eks-cluster"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat klaster Amazon EKS. | Jika Anda sudah menerapkan cluster, lewati langkah ini. Jika tidak, terapkan kluster Amazon EKS di saat ini Akun AWS dengan menggunakan`eksctl`, Terraform, atau. CloudFormation Pola ini digunakan `eksctl` untuk penyebaran cluster.Pola ini menggunakan Amazon EC2 sebagai grup simpul untuk Amazon EKS. Jika Anda ingin menggunakan AWS Fargate, lihat `managedNodeGroups` konfigurasi dalam dokumentasi [eksctl](https://eksctl.io/usage/schema/#managedNodeGroups).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrator AWS, administrator Terraform atau eksctl, administrator Kubernetes | 
| Validasi status cluster. | Jalankan perintah berikut untuk melihat status node saat ini di cluster:<pre>kubectl get nodes</pre>Jika Anda menemukan kesalahan, lihat [bagian pemecahan masalah](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html) dokumentasi Amazon EKS. | Administrator AWS, administrator Terraform atau eksctl, administrator Kubernetes | 

### Buat penyedia identitas OIDC
<a name="create-an-oidc-identity-provider"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan penyedia IAM OIDC. | Sebagai prasyarat untuk driver Amazon EBS Container Storage Interface (CSI), Anda harus memiliki penyedia IAM OpenID Connect (OIDC) yang sudah ada untuk klaster Anda.Aktifkan penyedia IAM OIDC dengan menggunakan perintah berikut:<pre>eksctl utils associate-iam-oidc-provider --region={region} --cluster={YourClusterNameHere} --approve</pre>Untuk informasi selengkapnya tentang langkah ini, lihat [dokumentasi Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html). | Administrator AWS | 
| Buat peran IAM untuk driver Amazon EBS CSI. | Gunakan `eksctl` perintah berikut untuk membuat peran IAM untuk driver CSI:<pre>eksctl create iamserviceaccount \<br />  --region {RegionName} \<br />  --name ebs-csi-controller-sa \<br />  --namespace kube-system \<br />  --cluster {YourClusterNameHere} \<br />  --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \<br />  --approve \<br />  --role-only \<br />  --role-name AmazonEKS_EBS_CSI_DriverRole</pre>Jika Anda menggunakan drive Amazon EBS terenkripsi, Anda harus mengonfigurasi kebijakan lebih lanjut. Untuk petunjuk, lihat dokumentasi [driver Amazon EBS SCI](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md#installation-1). | Administrator AWS | 
| Tambahkan driver Amazon EBS CSI. | Gunakan `eksctl` perintah berikut untuk menambahkan driver Amazon EBS CSI:<pre>eksctl create addon \<br />  --name aws-ebs-csi-driver \<br />  --cluster <YourClusterName> service-account-role-arn arn:aws:iam::$(aws sts get-caller-identity \<br />  --query Account \<br />  --output text):role/AmazonEKS_EBS_CSI_DriverRole \<br />  --force</pre> | Administrator AWS | 

### Instal PGO
<a name="install-pgo"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori PGO. | Kloning GitHub repositori untuk PGO:<pre>git clone https://github.com/CrunchyData/postgres-operator-examples.git </pre> | AWS DevOps | 
| Berikan detail peran untuk pembuatan akun layanan. | Untuk memberikan akses klaster Amazon EKS ke AWS sumber daya yang diperlukan, tentukan Nama Sumber Daya Amazon (ARN) peran OIDC yang Anda buat sebelumnya dalam file. `service_account.yaml` File ini terletak di [folder namespace repositori](https://github.com/CrunchyData/postgres-operator-examples/tree/main/kustomize/install/rbac/namespace). <pre>cd postgres-operator-examples</pre><pre>---<br />metadata:<br />  annotations:<br />    eks.amazonaws.com/role-arn: arn:aws:iam::<accountId>:role/<role_name> # Update the OIDC role ARN created earlier</pre> | Administrator AWS, administrator Kubernetes | 
| Buat namespace dan prasyarat PGO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrator Kunernetes | 
| Verifikasi pembuatan pod. | Verifikasi bahwa namespace dan konfigurasi default telah dibuat:<pre>kubectl get pods -n postgres-operator</pre> | Administrator AWS, administrator Kubernetes | 
| Verifikasi PVCs. | Gunakan perintah berikut untuk memverifikasi klaim volume persisten (PVCs):<pre>kubectl describe pvc -n postgres-operator</pre> | Administrator AWS, administrator Kubernetes | 

### Membuat dan menyebarkan operator
<a name="create-and-deploy-an-operator"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat operator. | Merevisi isi file yang terletak di `/kustomize/postgres/postgres.yaml` agar sesuai dengan yang berikut:<pre>spec:<br />  instances:<br />    - name: pg-1<br />      replicas: 3<br />  patroni:<br />    dynamicConfiguration:<br />      postgresql:<br />      pg_hba:<br />        - "host all all 0.0.0.0/0 trust" # this line enabled logical replication with programmatic access<br />        - "host all postgres 127.0.0.1/32 md5"<br />      synchronous_mode: true<br />  users:<br />  - name: replicator<br />    databases:<br />      - testdb<br />    options: "REPLICATION"</pre>Pembaruan ini melakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | Administrator AWS, DBA, administrator Kubernetes | 
| Menyebarkan operator. | Menerapkan operator PGO untuk mengaktifkan pengelolaan dan pengoperasian database PostgreSQL yang efisien di lingkungan Kubernetes:<pre>kubectl apply -k kustomize/postgres</pre> | Administrator AWS, DBA, administrator Kubernetes | 
| Verifikasi penyebaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html)Dari output perintah, perhatikan replika utama (`primary_pod_name`) dan baca replika (`read_pod_name`). Anda akan menggunakan ini di langkah selanjutnya. | Administrator AWS, DBA, administrator Kubernetes | 

### Verifikasi replikasi streaming
<a name="verify-streaming-replication"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tulis data ke replika utama. | Gunakan perintah berikut untuk terhubung ke replika utama PostgreSQL dan menulis data ke database:<pre>kubectl exec -it <primary_pod_name> bash -n postgres-operator</pre><pre>psql</pre><pre>CREATE TABLE customers (firstname text, customer_id serial, date_created timestamp);<br />\dt</pre> | Administrator AWS, administrator Kubernetes | 
| Konfirmasikan bahwa replika baca memiliki data yang sama. | Hubungkan ke replika baca PostgreSQL dan periksa apakah replikasi streaming berfungsi dengan benar:<pre>kubectl exec -it {read_pod_name} bash -n postgres-operator</pre><pre>psql</pre><pre>\dt</pre>Replika baca harus memiliki tabel yang Anda buat di replika utama pada langkah sebelumnya. | Administrator AWS, administrator Kubernetes | 

## Pemecahan masalah
<a name="streamline-postgresql-deployments-amazon-eks-pgo-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Pod tidak dimulai. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Replika secara signifikan berada di belakang database utama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Anda tidak memiliki visibilitas ke kinerja dan kesehatan cluster PostgreSQL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 
| Replikasi tidak bekerja. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/streamline-postgresql-deployments-amazon-eks-pgo.html) | 

## Sumber daya terkait
<a name="streamline-postgresql-deployments-amazon-eks-pgo-resources"></a>
+ [Amazon Elastic Kubernetes Service (Ikhtisar](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/amazon-elastic-kubernetes-service.html) *Opsi Deployment di whitepaper AWS*)
+  [CloudFormation](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/aws-cloudformation.html)(*Ikhtisar Opsi Penerapan di whitepaper AWS*)
+ [Memulai Amazon EKS — eksctl (Panduan Pengguna](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) *Amazon EKS*)
+ [Siapkan kubectl dan eksctl (Panduan Pengguna Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)*)*
+ [Buat peran untuk federasi OpenID Connect (Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html) Pengguna *IAM*)
+ [Mengkonfigurasi pengaturan untuk AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) (*Panduan AWS CLI Pengguna*)
+ [Dokumentasi Crunchy Postgres untuk Kubernetes](https://access.crunchydata.com/documentation/postgres-operator/latest)
+ [Crunch & Learn: Crunchy Postgres untuk](https://www.youtube-nocookie.com/embed/IIf9WZO3K50) Kubernetes 5.0 (video)

# Sederhanakan otentikasi aplikasi dengan TLS timbal balik di Amazon ECS dengan menggunakan Application Load Balancer
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs"></a>

*Olawale Olaleye dan Shamanth Devagari, Amazon Web Services*

## Ringkasan
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-summary"></a>

[Pola ini membantu Anda menyederhanakan otentikasi aplikasi dan menurunkan beban keamanan dengan TLS bersama di Amazon Elastic Container Service (Amazon ECS) Service Elastic Container ECS) dengan menggunakan Application Load Balancer (ALB).](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/mutual-authentication.html) Dengan ALB, Anda dapat mengautentikasi sertifikat klien X.509 dari. AWS Private Certificate Authority Kombinasi yang kuat ini membantu mencapai komunikasi yang aman antara layanan Anda, mengurangi kebutuhan akan mekanisme otentikasi yang kompleks dalam aplikasi Anda. Selain itu, pola menggunakan Amazon Elastic Container Registry (Amazon ECR) Registry (Amazon ECR) untuk menyimpan gambar kontainer.

Contoh dalam pola ini menggunakan gambar Docker dari galeri publik untuk membuat beban kerja sampel pada awalnya. Selanjutnya, gambar Docker baru dibuat untuk disimpan di Amazon ECR. Untuk sumbernya, pertimbangkan sistem berbasis Git seperti GitHub,, atau Bitbucket GitLab, atau gunakan Amazon Simple Storage Service Amazon S3 (Amazon S3). Untuk membuat gambar Docker, pertimbangkan AWS CodeBuild untuk menggunakan gambar berikutnya.

## Prasyarat dan batasan
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS dengan akses untuk menyebarkan AWS CloudFormation tumpukan. Pastikan Anda memiliki [izin pengguna atau peran AWS Identity and Access Management (IAM) untuk digunakan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html). CloudFormation
+ AWS Command Line Interface (AWS CLI) [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). [Konfigurasikan](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) AWS kredensyal Anda di mesin lokal Anda atau di lingkungan Anda dengan menggunakan AWS CLI atau dengan mengatur variabel lingkungan dalam file. `~/.aws/credentials`
+ [OpenSSL diinstal](https://www.openssl.org/).
+ Docker [diinstal](https://www.docker.com/get-started/).
+ Keakraban dengan yang Layanan AWS dijelaskan dalam [Alat](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools).
+ Pengetahuan tentang Docker dan NGINX.

**Batasan**
+ Mutual TLS untuk Application Load Balancer hanya mendukung sertifikat klien X.509v3. Sertifikat klien X.509v1 tidak didukung.
+  CloudFormation Template yang disediakan dalam repositori kode pola ini tidak termasuk penyediaan CodeBuild proyek sebagai bagian dari tumpukan.
+ 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**
+ Docker versi 27.3.1 atau yang lebih baru
+ AWS CLI versi 2.14.5 atau yang lebih baru

## Arsitektur
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-architecture"></a>

Diagram berikut menunjukkan komponen arsitektur untuk pola ini.

![\[Alur kerja untuk mengautentikasi dengan TLS timbal balik menggunakan Application Load Balancer.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a343fa4e-097f-416b-9c83-01a28eb57dc3/images/e1371297-b987-4487-9b13-8120933c921f.png)


 Diagram menunjukkan alur kerja berikut:

1. Buat repositori Git, dan komit kode aplikasi ke repositori.

1. Buat otoritas sertifikat pribadi (CA) di AWS Private CA.

1. Buat CodeBuild proyek. CodeBuildproject Ini dipicu oleh perubahan komit dan membuat gambar Docker dan menerbitkan gambar yang dibangun ke Amazon ECR.

1. Salin rantai sertifikat dan badan sertifikat dari CA, dan unggah bundel sertifikat ke Amazon S3.

1. Buat toko kepercayaan dengan bundel CA yang Anda unggah ke Amazon S3. Kaitkan toko kepercayaan dengan pendengar TLS bersama di Application Load Balancer (ALB).

1. Gunakan CA pribadi untuk menerbitkan sertifikat klien untuk beban kerja kontainer. Juga buat sertifikat TLS pribadi menggunakan AWS Private CA.

1. Impor sertifikat TLS pribadi ke AWS Certificate Manager (ACM), dan gunakan dengan ALB.

1. Beban kerja kontainer `ServiceTwo` menggunakan sertifikat klien yang dikeluarkan untuk mengautentikasi dengan ALB saat berkomunikasi dengan beban kerja kontainer di. `ServiceOne`

1. Beban kerja kontainer `ServiceOne` menggunakan sertifikat klien yang dikeluarkan untuk mengautentikasi dengan ALB saat berkomunikasi dengan beban kerja kontainer di. `ServiceTwo`

**Otomatisasi dan skala**

Pola ini dapat sepenuhnya otomatis dengan menggunakan CloudFormation, AWS Cloud Development Kit (AWS CDK) , atau operasi API dari SDK untuk menyediakan AWS sumber daya.

Anda dapat menggunakannya AWS CodePipeline untuk mengimplementasikan pipeline continuous integration dan continuous deployment (CI/CD) menggunakan CodeBuild untuk mengotomatiskan proses pembuatan image container dan menerapkan rilis baru ke layanan cluster Amazon ECS.

## Alat
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-tools"></a>

**Layanan AWS **
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) membantu Anda membuat, menyimpan, dan memperbarui sertifikat dan kunci SSL/TLS X.509 publik dan pribadi yang melindungi situs web dan aplikasi Anda. 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.
+ [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 sangat skalabel dan cepat untuk menjalankan, menghentikan, dan mengelola kontainer di cluster. Anda dapat menjalankan tugas dan layanan Anda pada infrastruktur tanpa server yang dikelola oleh. AWS Fargate Atau, untuk kontrol lebih lanjut atas infrastruktur, Anda dapat menjalankan tugas dan layanan Anda di klaster instans Amazon Elastic Compute Cloud (Amazon EC2) yang Anda kelola.
+ [Amazon ECS Exec](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html) memungkinkan Anda berinteraksi langsung dengan kontainer tanpa perlu terlebih dahulu berinteraksi dengan sistem operasi wadah host, membuka port masuk, atau mengelola kunci SSH. Anda dapat menggunakan ECS Exec untuk menjalankan perintah di, atau mendapatkan shell ke, wadah yang berjalan pada EC2 instance Amazon atau di. AWS Fargate
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh EC2 instans Amazon, kontainer, dan alamat IP, di satu atau beberapa Availability Zone. ELB memantau kesehatan target yang terdaftar, dan mengarahkan lalu lintas hanya ke target yang sehat. ELB menskalakan penyeimbang beban Anda saat lalu lintas masuk Anda berubah seiring waktu. Ini dapat secara otomatis menskalakan ke sebagian besar beban kerja.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)membantu Anda menjalankan container tanpa perlu mengelola server atau EC2 instans Amazon. Fargate kompatibel dengan Amazon ECS dan Amazon Elastic Kubernetes Service (Amazon EKS). Anda dapat menjalankan tugas dan layanan Amazon ECS Anda dengan jenis peluncuran Fargate atau penyedia kapasitas Fargate. Untuk melakukannya, paketkan aplikasi Anda dalam wadah, tentukan persyaratan CPU dan memori, tentukan kebijakan jaringan dan IAM, dan luncurkan aplikasi. Setiap tugas Fargate memiliki batas isolasi sendiri dan tidak berbagi kernel yang mendasarinya, sumber daya CPU, sumber daya memori, atau elastic network interface dengan tugas lain.
+ [AWS Private Certificate Authority](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)memungkinkan pembuatan hierarki otoritas sertifikat swasta (CA), termasuk root dan bawahan CAs, tanpa biaya investasi dan pemeliharaan pengoperasian CA lokal.

**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](https://docs.github.com/en/repositories/creating-and-managing-repositories/quickstart-for-repositories), [GitLab](https://docs.gitlab.com/ee/user/get_started/get_started_projects.html), dan [Bitbucket](https://support.atlassian.com/bitbucket-cloud/docs/tutorial-learn-bitbucket-with-git/) adalah beberapa sistem kontrol sumber berbasis Git yang umum digunakan untuk melacak perubahan kode sumber.
+ [NGINX Open Source](https://nginx.org/en/docs/?_ga=2.187509224.1322712425.1699399865-405102969.1699399865) adalah penyeimbang beban sumber terbuka, cache konten, dan server web. Pola ini menggunakannya sebagai server web.
+ [OpenSSL](https://www.openssl.org/) adalah perpustakaan open source yang menyediakan layanan yang digunakan oleh implementasi OpenSSL dari TLS dan CMS. 

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS).

## Praktik terbaik
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-best-practices"></a>
+ Gunakan Amazon ECS Exec untuk menjalankan perintah atau mendapatkan shell ke wadah yang berjalan di Fargate. Anda juga dapat menggunakan ECS Exec untuk membantu mengumpulkan informasi diagnostik untuk debugging.
+ Gunakan grup keamanan dan daftar kontrol akses jaringan (ACLs) untuk mengontrol lalu lintas masuk dan keluar antar layanan. Tugas Fargate menerima alamat IP dari subnet yang dikonfigurasi di cloud pribadi virtual (VPC) Anda.

## Epik
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-epics"></a>

### Buat repositori
<a name="create-the-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh kode sumbernya. | Untuk mengunduh kode sumber pola ini, fork atau kloning repositori GitHub [MTLS-with-Application-Load-Balancer-in-Amazon-ECS](https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS). | DevOps insinyur | 
| Buat repositori Git. | Untuk membuat repositori Git untuk memuat Dockerfile dan `buildspec.yaml` file, gunakan langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git` | DevOps insinyur | 

### Buat CA dan hasilkan sertifikat
<a name="create-ca-and-generate-certificates"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CA pribadi di AWS Private CA. | Untuk membuat otoritas sertifikat pribadi (CA), jalankan perintah berikut di terminal Anda. Ganti nilai dalam variabel contoh dengan nilai Anda sendiri. <pre>export AWS_DEFAULT_REGION="us-west-2"<br />export SERVICES_DOMAIN="www.example.com"<br /><br />export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \<br />    --certificate-authority-type ROOT \<br />    --certificate-authority-configuration \<br />    "KeyAlgorithm=RSA_2048,<br />    SigningAlgorithm=SHA256WITHRSA,<br />    Subject={<br />        Country=US,<br />        State=WA,<br />        Locality=Seattle,<br />        Organization=Build on AWS,<br />        OrganizationalUnit=mTLS Amazon ECS and ALB Example,<br />        CommonName=${SERVICES_DOMAIN}}" \<br />        --query CertificateAuthorityArn --output text`</pre>Untuk detail selengkapnya, lihat [Membuat CA pribadi AWS Private CA di](https://docs.aws.amazon.com/privateca/latest/userguide/create-CA.html) dalam AWS dokumentasi. | DevOps insinyur, AWS DevOps | 
| Buat dan instal sertifikat CA pribadi Anda. | Untuk membuat dan menginstal sertifikat untuk CA root pribadi Anda, jalankan perintah berikut di terminal Anda:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | AWS DevOps, DevOps insinyur | 
| Minta sertifikat terkelola. | Untuk meminta sertifikat pribadi AWS Certificate Manager untuk digunakan dengan ALB pribadi Anda, gunakan perintah berikut:<pre>export TLS_CERTIFICATE_ARN=`aws acm request-certificate \<br />    --domain-name "*.${DOMAIN_DOMAIN}" \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --query CertificateArn --output text`</pre> | DevOps insinyur, AWS DevOps | 
| Gunakan CA pribadi untuk mengeluarkan sertifikat klien. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)`openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem``openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem`Perintah ini mengembalikan CSR dan kunci pribadi untuk dua layanan. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)<pre>SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr1.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_ONE_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert1.cert<br /><br />SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --csr fileb://client_csr2.pem \<br />    --signing-algorithm "SHA256WITHRSA" \<br />    --validity Value=5,Type="YEARS" --query CertificateArn --output text` <br /><br />echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}"<br /><br />aws acm-pca get-certificate \<br />    --certificate-authority-arn ${ROOT_CA_ARN} \<br />    --certificate-arn ${SERVICE_TWO_CERT_ARN} \<br />     | jq -r '.Certificate' > client_cert2.cert</pre>Untuk informasi selengkapnya, lihat [Menerbitkan sertifikat entitas akhir pribadi](https://docs.aws.amazon.com/privateca/latest/userguide/PcaIssueCert.html) dalam dokumentasi. AWS  | DevOps insinyur, AWS DevOps | 

### Menyediakan layanan AWS
<a name="provision-aws-services"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ketentuan Layanan AWS dengan CloudFormation template. | Untuk menyediakan virtual private cloud (VPC), Amazon ECS cluster, layanan Amazon ECS, Application Load Balancer, dan Amazon Elastic Container Registry (Amazon ECR), gunakan template. CloudFormation  | DevOps insinyur | 
| Dapatkan variabel. | Verifikasi bahwa Anda memiliki kluster Amazon ECS dengan dua layanan yang berjalan. Untuk mengambil detail sumber daya dan menyimpannya sebagai variabel, gunakan perintah berikut:<pre><br />export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue')<br /><br />export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue')<br /><br />export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue')<br /><br />export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue')<br /><br />export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue')<br /><br />export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue')<br /><br />export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue')<br /><br />export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \<br />--output text \<br />--query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')</pre> | DevOps insinyur | 
| Buat CodeBuild proyek. | Untuk menggunakan CodeBuild proyek untuk membuat gambar Docker untuk layanan Amazon ECS Anda, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Untuk detail selengkapnya, lihat [Membuat proyek build AWS CodeBuild di](https://docs.aws.amazon.com/codebuild/latest/userguide/create-project.html) dalam AWS dokumentasi. | AWS DevOps, DevOps insinyur | 
| Bangun gambar Docker. | Anda dapat menggunakan CodeBuild untuk melakukan proses pembuatan gambar. CodeBuild memerlukan izin untuk berinteraksi dengan Amazon ECR dan bekerja dengan Amazon S3.Sebagai bagian dari proses, image Docker dibuat dan didorong ke registri Amazon ECR. Untuk detail tentang templat dan kode, lihat [Informasi tambahan](#simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional).(Opsional) Untuk membangun secara lokal untuk tujuan pengujian, gunakan perintah berikut:<pre># login to ECR<br />aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri<br /><br /># build image for service one<br />cd /service1<br />aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive<br />docker build -t $ECRRepositoryServiceOneUri .<br />docker push $ECRRepositoryServiceOneUri<br /><br /># build image for service two<br />cd ../service2<br />aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive<br />docker build -t $ECRRepositoryServiceTwoUri .<br />docker push $ECRRepositoryServiceTwoUri</pre> | DevOps insinyur | 

### Aktifkan TLS timbal balik
<a name="enable-mutual-tls"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unggah sertifikat CA ke Amazon S3. | Untuk mengunggah sertifikat CA ke bucket Amazon S3, gunakan perintah contoh berikut:`aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/ ` | AWS DevOps, DevOps insinyur | 
| Buat toko kepercayaan. | Untuk membuat toko kepercayaan, gunakan perintah contoh berikut:<pre>TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \<br />    --ca-certificates-bundle-s3-bucket $BucketName \<br />    --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`</pre> | AWS DevOps, DevOps insinyur | 
| Unggah sertifikat klien. | Untuk mengunggah sertifikat klien ke Amazon S3 untuk gambar Docker, gunakan perintah contoh berikut:<pre># for service one<br />aws s3 cp client_cert1.cert s3://$BucketName/serviceone/<br />aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/<br /><br /># for service two<br />aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/<br />aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/</pre> | AWS DevOps, DevOps insinyur | 
| Ubah pendengar. | Untuk mengaktifkan TLS timbal balik di ALB, modifikasi pendengar HTTPS dengan menggunakan perintah berikut:<pre>aws elbv2 modify-listener \<br />    --listener-arn $Service1ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8080 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /><br />aws elbv2 modify-listener \<br />    --listener-arn $Service2ListenerArn \<br />    --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \<br />    --ssl-policy ELBSecurityPolicy-2016-08 \<br />    --protocol HTTPS \<br />    --port 8090 \<br />    --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false<br /></pre>Untuk informasi selengkapnya, lihat [Mengonfigurasi TLS timbal balik pada Application Load](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/configuring-mtls-with-elb.html) Balancer dalam dokumentasi. AWS  | AWS DevOps, DevOps insinyur | 

### Perbarui layanan
<a name="update-the-services"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui definisi tugas Amazon ECS. | Untuk memperbarui definisi tugas Amazon ECS, ubah `image` parameter dalam revisi baru.Untuk mendapatkan nilai untuk masing-masing layanan, perbarui definisi tugas dengan Uri gambar Docker baru yang Anda buat di langkah sebelumnya: `echo $ECRRepositoryServiceOneUri` atau `echo $ECRRepositoryServiceTwoUri`<pre><br />    "containerDefinitions": [<br />        {<br />            "name": "nginx",<br />            "image": "public.ecr.aws/nginx/nginx:latest",   # <----- change to new Uri<br />            "cpu": 0,</pre>Untuk informasi selengkapnya, lihat [Memperbarui definisi tugas Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-task-definition-console-v2.html) menggunakan konsol dalam AWS dokumentasi.  | AWS DevOps, DevOps insinyur | 
| Perbarui layanan Amazon ECS. | Perbarui layanan dengan definisi tugas terbaru. Definisi tugas ini adalah cetak biru untuk gambar Docker yang baru dibangun, dan berisi sertifikat klien yang diperlukan untuk otentikasi TLS bersama.  Untuk memperbarui layanan, gunakan prosedur berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html)Ulangi langkah-langkah untuk layanan lainnya. | Administrator AWS, AWS DevOps, DevOps insinyur | 

### Akses aplikasi
<a name="access-the-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Salin URL aplikasi. | Gunakan konsol Amazon ECS untuk melihat tugas. Ketika status tugas telah diperbarui ke **Running**, pilih tugas. Di bagian **Tugas**, salin ID tugas. | Administrator AWS, AWS DevOps | 
| Uji aplikasi Anda. | Untuk menguji aplikasi Anda, gunakan ECS Exec untuk mengakses tugas.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-application-authentication-with-mutual-tls-in-amazon-ecs.html) | Administrator AWS, AWS DevOps | 

## Sumber daya terkait
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-resources"></a>

**Dokumentasi Amazon ECS**
+ [Membuat definisi tugas Amazon ECS menggunakan konsol](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-task-definition.html)
+ [Membuat Image Kontainer untuk Digunakan di Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html)
+ [Cluster Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html)
+ [Amazon ECS untuk AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-container-image.html#create-container-image-next-steps)
+ [Praktik terbaik jaringan Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/networking-best-practices.html)
+ [Parameter definisi layanan Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service_definition_parameters.html)

** AWS Sumber daya lainnya**
+ [Bagaimana cara menggunakan CA AWS pribadi untuk mengonfigurasi mTL pada Application Load Balancer?](https://repost.aws/knowledge-center/elb-alb-configure-private-ca-mtls) (AWS re:Post)

## Informasi tambahan
<a name="simplify-application-authentication-with-mutual-tls-in-amazon-ecs-additional"></a>

**Mengedit Dockerfile******

Kode berikut menunjukkan perintah yang Anda edit di Dockerfile untuk layanan 1:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html
ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Kode berikut menunjukkan perintah yang Anda edit di Dockerfile untuk layanan 2:

```
FROM public.ecr.aws/nginx/nginx:latest
WORKDIR /usr/share/nginx/html
RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html
ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/
RUN chmod -R 400 /usr/local/share/ca-certificates/
```

Jika Anda membuat image Docker dengan CodeBuild, `buildspec` file menggunakan nomor CodeBuild build untuk mengidentifikasi versi gambar secara unik sebagai nilai tag. Anda dapat mengubah `buildspec` file agar sesuai dengan kebutuhan Anda, seperti yang ditunjukkan dalam kode `buildspec ` kustom berikut: 

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
        # change the S3 path depending on the service
      - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive 
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $ECR_REPOSITORY_URI:latest .
      - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $ECR_REPOSITORY_URI:latest
      - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      # for ECS deployment reference
      - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json   

artifacts:
  files:
    - imagedefinitions.json
```

# Lebih banyak pola
<a name="containersandmicroservices-more-patterns-pattern-list"></a>

**Topics**
+ [Mengotomatiskan penghapusan AWS CloudFormation tumpukan dan sumber daya terkait](automate-deletion-cloudformation-stacks-associated-resources.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)
+ [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)
+ [Kontainerisasi beban kerja mainframe yang telah dimodernisasi oleh Blu Age](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.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)
+ [Terapkan sistem agen di Amazon Bedrock dengan framework CreWai dengan menggunakan Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Menerapkan lingkungan untuk aplikasi Blu Age kontainer dengan menggunakan Terraform](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Menerapkan logika preprocessing ke dalam model MLdalam satu titik akhir menggunakan pipeline inferensi di Amazon SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.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)
+ [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)
+ [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)
+ [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)
+ [Bermigrasi dari Oracle WebLogic ke Apache Tomcat (ToMee) di Amazon ECS](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [Siapkan ruang data minimum yang layak untuk berbagi data antar organisasi](minimum-viable-data-space-share-data-organizations.md)
+ [Memodernisasi aplikasi Formulir Web ASP.NET di AWS](modernize-asp-net-web-forms-applications-on-aws.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)
+ [Memantau aktivitas aplikasi dengan menggunakan Wawasan CloudWatch Log](monitor-application-activity-by-using-cloudwatch-logs-insights.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 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 alur kerja pembelajaran mesin dari pengembangan lokal hingga eksperimen yang dapat diskalakan dengan menggunakan SageMaker AI dan Hydra](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [Struktur proyek Python dalam arsitektur heksagonal menggunakan AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Uji AWS infrastruktur dengan menggunakan LocalStack dan Tes Terraform](test-aws-infra-localstack-terraform.md)
+ [Koordinasikan ketergantungan sumber daya dan eksekusi tugas dengan menggunakan konstruksi AWS Fargate WaitCondition kait](use-the-aws-fargate-waitcondition-hook-construct.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)

# Nirserver
<a name="serverless-pattern-list"></a>

**Topics**
+ [Buat aplikasi seluler React Native tanpa server dengan menggunakan AWS Amplify](build-a-serverless-react-native-mobile-app-by-using-aws-amplify.md)
+ [Mengelola penghuni di beberapa produk SaaS pada satu bidang kontrol](manage-tenants-across-multiple-saas-products-on-a-single-control-plane.md)
+ [Konsolidasikan pembuatan URL presigned Amazon S3 dan unduhan objek dengan menggunakan titik akhir yang terkait dengan alamat IP statis](consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.md)
+ [Membuat EventBridge koneksi Amazon lintas akun di suatu organisasi](create-cross-account-amazon-eventbridge-connection-organization.md)
+ [Mengirimkan data DynamoDB ke Amazon S3 menggunakan Kinesis Data Streams dan Firehose dengan AWS CDK](deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.md)
+ [Menerapkan versi API berbasis jalur dengan menggunakan domain kustom di Amazon API Gateway](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Impor pustaka psycopg2 AWS Lambda untuk berinteraksi dengan database PostgreSQL Anda](import-psycopg2-library-lambda.md)
+ [Integrasikan Amazon API Gateway dengan Amazon SQS untuk menangani REST asinkron APIs](integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.md)
+ [Memproses peristiwa secara asinkron dengan Amazon API Gateway dan AWS Lambda](process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.md)
+ [Memproses peristiwa secara asinkron dengan Amazon API Gateway dan Amazon DynamoDB Streams](processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.md)
+ [Memproses peristiwa secara asinkron dengan Amazon API Gateway, Amazon SQS, dan AWS Fargate](process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.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)
+ [Jalankan pembacaan paralel objek S3 dengan menggunakan Python dalam suatu fungsi AWS Lambda](run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.md)
+ [Kirim data telemetri dari AWS Lambda ke OpenSearch untuk analitik dan visualisasi waktu nyata](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [Siapkan router sel tanpa server untuk arsitektur berbasis sel](serverless-cell-router-architecture.md)
+ [Siapkan akses pribadi ke bucket Amazon S3 melalui titik akhir VPC](set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.md)
+ [Memecahkan masalah status AWS Step Functions dengan menggunakan Amazon Bedrock](troubleshooting-states-in-aws-step-functions.md)
+ [Lebih banyak pola](serverless-more-patterns-pattern-list.md)

# Buat aplikasi seluler React Native tanpa server dengan menggunakan AWS Amplify
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify"></a>

*Deekshitulu Pentakota, Amazon Web Services*

## Ringkasan
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-summary"></a>

Pola ini menunjukkan cara membuat backend tanpa server untuk aplikasi seluler React Native dengan menggunakan AWS Amplify dan layanan AWS berikut:
+ AWS AppSync
+ Amazon Cognito
+ Amazon DynamoDB

Setelah Anda mengonfigurasi dan menerapkan backend aplikasi dengan menggunakan Amplify, Amazon Cognito mengautentikasi pengguna aplikasi dan memberi wewenang kepada mereka untuk mengakses aplikasi. AWS AppSync kemudian berinteraksi dengan aplikasi frontend dan dengan tabel DynamoDB backend untuk membuat dan mengambil data.

**catatan**  
Pola ini menggunakan aplikasi "ToDoList" sederhana sebagai contoh, tetapi Anda dapat menggunakan prosedur serupa untuk membuat aplikasi seluler React Native apa pun.

## Prasyarat dan batasan
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ [Amplify Command Line Interface (Amplify CLI](https://docs.amplify.aws/cli/start/install/)), diinstal dan dikonfigurasi
+ XCode (versi apa pun)
+ Microsoft Visual Studio (versi apa pun, editor kode apa pun, editor teks apa pun)
+ Keakraban dengan Amplify
+ Keakraban dengan Amazon Cognito
+ Keakraban dengan AWS AppSync
+ Keakraban dengan DynamoDB
+ Keakraban dengan Node.js
+ Keakraban dengan npm
+ Keakraban dengan React dan React Native
+ Keakraban dengan JavaScript dan ECMAScript 6 () ES6
+ Keakraban dengan GraphQL

## Arsitektur
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-architecture"></a>

Diagram berikut menunjukkan contoh arsitektur untuk menjalankan backend aplikasi seluler React Native di AWS Cloud:

![\[Alur kerja untuk menjalankan aplikasi seluler React Native dengan layanan AWS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c95e0150-5762-4c90-946c-efa3a22913e4/images/5beff5f9-9d14-49dc-a046-b74e5bfbd13f.png)


Diagram menunjukkan arsitektur berikut:

1. Amazon Cognito mengautentikasi pengguna aplikasi dan mengizinkan mereka untuk mengakses aplikasi.

1. Untuk membuat dan mengambil data, AWS AppSync menggunakan GraphQL API untuk berinteraksi dengan aplikasi frontend dan tabel DynamoDB backend.

## Alat
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-tools"></a>

**Layanan AWS**
+ [AWS Amplify](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) adalah seperangkat alat dan fitur yang dibuat khusus yang membantu pengembang web dan seluler frontend dengan cepat membangun aplikasi full-stack di AWS.
+ [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) menyediakan antarmuka GraphQL yang dapat diskalakan yang membantu pengembang aplikasi menggabungkan data dari berbagai sumber, termasuk Amazon DynamoDB, AWS Lambda, dan HTTP. APIs
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) menyediakan otentikasi, otorisasi, dan manajemen pengguna untuk aplikasi web dan seluler.
+ [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.

**Kode**

Kode untuk aplikasi sampel yang digunakan dalam pola ini tersedia di ios-todo-app repositori GitHub [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Untuk menggunakan file sampel, ikuti instruksi di bagian **Epics** dari pola ini.

## Epik
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-epics"></a>

### Buat dan jalankan aplikasi React Native Anda
<a name="create-and-run-your-react-native-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan lingkungan pengembangan React Native.  | Untuk instruksi, lihat [Menyiapkan lingkungan pengembangan](https://reactnative.dev/docs/next/environment-setup) dalam dokumentasi React Native. | Pengembang aplikasi | 
| Buat dan jalankan aplikasi seluler ToDoList React Native di iOS Simulator. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Pengembang aplikasi | 

### Inisialisasi lingkungan backend baru untuk aplikasi
<a name="initialize-a-new-backend-environment-for-the-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat layanan backend yang diperlukan untuk mendukung aplikasi di Amplify.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Untuk penyiapan ToDoList aplikasi yang digunakan dalam pola ini, terapkan konfigurasi contoh berikut.**Contoh pengaturan konfigurasi aplikasi React Native Amplify**<pre>? Name: ToDoListAmplify<br /><br />? Environment: dev<br /><br />? Default editor: Visual Studio Code<br /><br />? App type: javascript<br /><br />? Javascript framework: react-native<br /><br />? Source Directory Path: src<br /><br />? Distribution Directory Path: /<br /><br />? Build Command: npm run-script build<br /><br />? Start Command: npm run-script start<br /><br />? Select the authentication method you want to use: AWS profile<br /><br />? Please choose the profile you want to use: default</pre>Untuk informasi selengkapnya, lihat [Membuat backend Amplify baru di](https://docs.amplify.aws/lib/project-setup/create-application/q/platform/js/#create-a-new-amplify-backend) dokumentasi Amplify Dev Center.`amplify init`Perintah menyediakan sumber daya berikut dengan menggunakan [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Pengembang aplikasi | 

### Tambahkan autentikasi Amazon Cognito ke aplikasi Amplify React Native
<a name="add-amazon-cognito-authentication-to-your-amplify-react-native-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat layanan otentikasi Amazon Cognito. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Untuk penyiapan ToDoList aplikasi yang digunakan dalam pola ini, terapkan konfigurasi contoh berikut.**Contoh pengaturan konfigurasi layanan otentikasi**<pre>? Do you want to use the default authentication and security configuration? \ <br />Default configuration<br /> <br />? How do you want users to be able to sign in? \ <br />Username <br /><br />? Do you want to configure advanced settings? \ <br />No, I am done</pre>`amplify add auth`Perintah membuat folder, file, dan file dependensi yang diperlukan dalam folder lokal (**amplify**) dalam direktori root proyek. Untuk pengaturan ToDoList aplikasi yang digunakan dalam pola ini, **aws-exports.js** dibuat untuk tujuan ini. | Pengembang aplikasi | 
| Menerapkan layanan Amazon Cognito ke AWS Cloud. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Untuk melihat layanan yang diterapkan di project Anda, buka konsol Amplify dengan menjalankan perintah berikut:`amplify console` | Pengembang aplikasi | 
| Instal library Amplify yang diperlukan untuk React Native dan CocoaPods dependensi untuk iOS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Pengembang aplikasi | 
| Impor dan konfigurasikan layanan Amplify. | Dalam file titik masuk aplikasi (misalnya, **App.js**), impor dan muat file konfigurasi layanan Amplify dengan memasukkan baris kode berikut:<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)</pre>Jika Anda menerima kesalahan setelah mengimpor layanan Amplify di file titik masuk aplikasi, hentikan aplikasi. Kemudian, buka XCode dan pilih **ToDoListAmplify.xcworkspace** dari folder iOS proyek dan jalankan aplikasi. | Pengembang aplikasi | 
| Perbarui file titik masuk aplikasi Anda untuk menggunakan komponen Higher-order (HOC) withAuthenticator. | `withAuthenticator`HOC menyediakan alur kerja login, pendaftaran, dan lupa kata sandi di aplikasi Anda hanya dengan menggunakan beberapa baris kode. Untuk informasi selengkapnya, lihat [Opsi 1: Menggunakan komponen UI pra-build](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js/#option-1-use-pre-built-ui-components) di Amplify Dev Center. Juga, [komponen tingkat tinggi dalam dokumentasi](https://reactjs.org/docs/higher-order-components.html) React.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)**denganContoh kode HOC Authenticator**<pre>import Amplify from 'aws-amplify'<br />import config from './src/aws-exports'<br />Amplify.configure(config)<br />import { withAuthenticator } from 'aws-amplify-react-native';<br /><br /><br />const App = () => {<br />  return null;<br />};<br /><br /><br />export default withAuthenticator(App);</pre>Di iOS Simulator, aplikasi menampilkan layar login yang disediakan oleh layanan Amazon Cognito. | Pengembang aplikasi | 
| Uji pengaturan layanan otentikasi. | Di iOS Simulator, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Anda juga dapat membuka [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/) dan memeriksa apakah pengguna baru telah dibuat di **Identity Pool** atau tidak. | Pengembang aplikasi | 

### Connect AWS AppSync API dan database DynamoDB ke aplikasi
<a name="connect-an-aws-appsync-api-and-dynamodb-database-to-the-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat database AWS AppSync API dan DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Untuk penyiapan ToDoList aplikasi yang digunakan dalam pola ini, terapkan konfigurasi contoh berikut.**Contoh pengaturan konfigurasi API dan database**<pre>? Please select from one of the below mentioned services: \ <br />GraphQL <br /><br />? Provide API name: todolistamplify<br /><br />? Choose the default authorization type for the API \ <br />Amazon Cognito User Pool<br /><br />Do you want to use the default authentication and security configuration<br /><br />? Default configuration How do you want users to be able to sign in? \ <br />Username<br /><br />Do you want to configure advanced settings? \ <br />No, I am done.<br /><br />? Do you want to configure advanced settings for the GraphQL API \ <br />No, I am done.<br /><br />? Do you have an annotated GraphQL schema? \ <br />No<br /><br />? Choose a schema template: \ <br />Single object with fields (e.g., "Todo" with ID, name, description)<br /><br />? Do you want to edit the schema now? \ <br />Yes</pre>**Contoh skema GraphQL**<pre> type Todo @model {<br />   id: ID!<br />   name: String!<br />   description: String<br />}</pre> | Pengembang aplikasi | 
| Menerapkan AWS AppSync API. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html)Untuk penyiapan ToDoList aplikasi yang digunakan dalam pola ini, terapkan konfigurasi contoh berikut.**Contoh pengaturan konfigurasi AWS AppSync API**Konfigurasi berikut membuat GraphQL API di AppSync AWS dan tabel Todo di **Dynamo** DB.<pre> ? Are you sure you want to continue? Yes<br />? Do you want to generate code for your newly created GraphQL API Yes<br />? Choose the code generation language target javascript<br />? Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js<br />? Do you want to generate/update all possible GraphQL operations - \ <br />queries, mutations and subscriptions Yes<br />? Enter maximum statement depth \<br />[increase from default if your schema is deeply nested] 2</pre> | Pengembang aplikasi | 
| Hubungkan frontend aplikasi ke AWS AppSync API. | Untuk menggunakan ToDoList aplikasi contoh yang disediakan dalam pola ini, salin kode dari file **App.js** di ios-todo-app GitHub repositori [aws-amplify-react-native-](https://github.com/aws-samples/aws-amplify-react-native-ios-todo-app). Kemudian, integrasikan kode contoh ke lingkungan lokal Anda.Kode contoh yang disediakan dalam file **App.js** repositori melakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/build-a-serverless-react-native-mobile-app-by-using-aws-amplify.html) | Pengembang aplikasi | 

## Sumber daya terkait
<a name="build-a-serverless-react-native-mobile-app-by-using-aws-amplify-resources"></a>
+ [AWS Amplify](https://aws.amazon.com/amplify/)
+ [Amazon Cognito](https://aws.amazon.com/cognito/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)
+ [Bereaksi](https://reactjs.org/) (Dokumentasi React) 

# Mengelola penghuni di beberapa produk SaaS pada satu bidang kontrol
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane"></a>

*Ramanna Avancha, Kishan Kavala, Anusha Mandava, dan Jenifer Pascal, Amazon Web Services*

## Ringkasan
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-summary"></a>

Pola ini menunjukkan cara mengelola siklus hidup penyewa di beberapa produk perangkat lunak sebagai layanan (SaaS) pada satu bidang kontrol di AWS Cloud. Arsitektur referensi yang disediakan dapat membantu organisasi mengurangi implementasi fitur bersama yang berlebihan di seluruh produk SaaS masing-masing dan memberikan efisiensi tata kelola dalam skala besar.

Perusahaan besar dapat memiliki beberapa produk SaaS di berbagai unit bisnis. Produk-produk ini sering perlu disediakan untuk digunakan oleh penyewa eksternal pada tingkat langganan yang berbeda. Tanpa solusi penyewa umum, administrator TI harus menghabiskan waktu mengelola fitur yang tidak terdiferensiasi di beberapa SaaS APIs, alih-alih berfokus pada pengembangan fitur produk inti.

Solusi penyewa umum yang disediakan dalam pola ini dapat membantu memusatkan pengelolaan banyak fitur produk SaaS bersama organisasi, termasuk yang berikut:
+ Keamanan
+ Penyediaan penyewa
+ Penyimpanan data penyewa
+ Komunikasi penyewa
+ Manajemen produk
+ Pencatatan dan pemantauan metrik

## Prasyarat dan batasan
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Pengetahuan tentang Amazon Cognito atau penyedia identitas pihak ketiga (iDP)
+ Pengetahuan tentang Amazon API Gateway
+ Pengetahuan tentang AWS Lambda
+ Pengetahuan tentang Amazon DynamoDB
+ Pengetahuan tentang AWS Identity and Access Management (IAM)
+ Pengetahuan tentang AWS Step Functions
+ Pengetahuan tentang AWS CloudTrail dan Amazon CloudWatch
+ Pengetahuan tentang pustaka dan kode Python
+ Pengetahuan tentang SaaS APIs, termasuk berbagai jenis pengguna (organisasi, penyewa, administrator, dan pengguna aplikasi), model berlangganan, dan model isolasi penyewa
+ Pengetahuan tentang persyaratan SaaS multi-produk organisasi Anda dan langganan multi-penyewa

**Batasan**
+ Integrasi antara solusi penyewa umum dan produk SaaS individu tidak tercakup dalam pola ini.
+ Pola ini menerapkan layanan Amazon Cognito hanya dalam satu Wilayah AWS.

## Arsitektur
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-architecture"></a>

**Tumpukan teknologi target**
+ Amazon API Gateway
+ Amazon Cognito
+ AWS CloudTrail
+ Amazon CloudWatch
+ Amazon DynamoDB
+ IAM
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)
+ Amazon Simple Notification Service (Amazon SNS)
+ Fungsi AWS Step

**Arsitektur target**

Diagram berikut menunjukkan contoh alur kerja untuk mengelola siklus hidup penyewa di beberapa produk SaaS pada satu bidang kontrol di AWS Cloud.

![\[Alur kerja untuk mengelola siklus hidup penyewa pada satu bidang kontrol.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/4306bc76-22a7-45ca-a107-43df6c6f7ac8/images/700faf4d-c28f-4814-96aa-2d895cdcb518.png)


 Diagram menunjukkan alur kerja berikut:

1. Pengguna AWS memulai penyediaan penyewa, penyediaan produk, atau tindakan terkait administrasi dengan melakukan panggilan ke titik akhir API Gateway.

1. Pengguna diautentikasi oleh token akses yang diambil dari kumpulan pengguna Amazon Cognito, atau IDP lain.

1. Tugas penyediaan atau administrasi individu dijalankan oleh fungsi Lambda yang terintegrasi dengan titik akhir API Gateway API.

1. Administrasi APIs untuk solusi penyewa umum (untuk penyewa, produk, dan pengguna) mengumpulkan semua parameter input, header, dan token yang diperlukan. Kemudian, administrasi APIs memanggil fungsi Lambda terkait.

1. Izin IAM untuk administrasi APIs dan fungsi Lambda divalidasi oleh layanan IAM.

1. Fungsi Lambda menyimpan dan mengambil data dari katalog (untuk penyewa, produk, dan pengguna) di DynamoDB dan Amazon S3.

1. Setelah izin divalidasi, alur kerja AWS Step Functions dipanggil untuk melakukan tugas tertentu. Contoh dalam diagram menunjukkan alur kerja penyediaan penyewa.

1. Tugas alur kerja AWS Step Functions individual dijalankan dalam alur kerja yang telah ditentukan (state machine).

1. Setiap data penting yang diperlukan untuk menjalankan fungsi Lambda yang terkait dengan setiap tugas alur kerja diambil dari DynamoDB atau Amazon S3. Sumber daya AWS lainnya mungkin perlu disediakan dengan menggunakan templat CloudFormation AWS.

1. Jika diperlukan, alur kerja mengirimkan permintaan untuk menyediakan sumber daya AWS tambahan untuk produk SaaS tertentu ke akun AWS produk tersebut.

1. Ketika permintaan berhasil atau gagal, alur kerja menerbitkan pembaruan status sebagai pesan ke topik Amazon SNS.

1. Amazon SNS berlangganan topik Amazon SNS alur kerja Step Functions.

1. Amazon SNS kemudian mengirimkan pembaruan status alur kerja kembali ke pengguna AWS.

1. Log dari setiap tindakan layanan AWS, termasuk jejak audit panggilan API, dikirim ke CloudWatch. Aturan dan alarm khusus dapat dikonfigurasi CloudWatch untuk setiap kasus penggunaan.

1. Log diarsipkan dalam bucket Amazon S3 untuk tujuan audit.

**Otomatisasi dan skala**

Pola ini menggunakan CloudFormation template untuk membantu mengotomatiskan penerapan solusi penyewa umum. Template juga dapat membantu Anda dengan cepat meningkatkan atau menurunkan sumber daya terkait.

Untuk informasi selengkapnya, lihat [Bekerja dengan CloudFormation templat AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) di *Panduan CloudFormation Pengguna AWS*.

## Alat
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-tools"></a>

**Layanan AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) membantu Anda membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, dan WebSocket APIs dalam skala apa pun.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) menyediakan otentikasi, otorisasi, dan manajemen pengguna untuk aplikasi web dan seluler.
+ [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.
+ [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.
+ [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 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.
+ [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.
+ [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.

## Praktik terbaik
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-best-practices"></a>

Solusi dalam pola ini menggunakan pesawat kontrol tunggal untuk mengelola orientasi beberapa penyewa dan untuk menyediakan akses ke beberapa produk SaaS. Bidang kontrol membantu pengguna administratif mengelola empat bidang khusus fitur lainnya:
+ Pesawat keamanan
+ Bidang alur kerja
+ Pesawat komunikasi
+ Pesawat penebangan dan pemantauan

## Epik
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-epics"></a>

### Konfigurasikan pesawat keamanan
<a name="configure-the-security-plane"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tetapkan persyaratan untuk platform SaaS multi-penyewa Anda. | Tetapkan persyaratan terperinci untuk hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Arsitek cloud, administrator sistem AWS | 
| Siapkan layanan Amazon Cognito. | Ikuti petunjuk di [Memulai Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-getting-started.html) di Panduan Pengembang *Amazon Cognito*. | Arsitek awan | 
| Konfigurasikan kebijakan IAM yang diperlukan. | Buat kebijakan IAM yang diperlukan untuk kasus penggunaan Anda. Kemudian, petakan kebijakan ke peran IAM di Amazon Cognito.Untuk informasi selengkapnya, lihat [Mengelola akses menggunakan kebijakan](https://docs.aws.amazon.com/cognito/latest/developerguide/security-iam.html#security_iam_access-manage) dan [kontrol akses berbasis peran di Panduan](https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html) Pengembang *Amazon Cognito*. | Administrator cloud, arsitek Cloud, keamanan AWS IAM | 
| Konfigurasikan izin API yang diperlukan.  | Siapkan izin akses API Gateway dengan menggunakan peran dan kebijakan IAM, serta otorisasi Lambda.Untuk petunjuknya, lihat bagian berikut dari *Panduan Pengembang Amazon API Gateway*:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Administrator cloud, arsitek Cloud | 

### Konfigurasikan bidang data
<a name="configure-the-data-plane"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat katalog data yang diperlukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Untuk informasi selengkapnya, lihat [Menyiapkan DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SettingUp.html) di Panduan Pengembang Amazon *DynamoDB*. | DBA | 

### Konfigurasikan bidang kontrol
<a name="configure-the-control-plane"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda dan API Gateway APIs untuk menjalankan tugas bidang kontrol yang diperlukan. | Buat fungsi Lambda terpisah dan API Gateway APIs untuk menambahkan, menghapus, dan mengelola hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Untuk informasi selengkapnya, lihat [Menggunakan AWS Lambda dengan Amazon API Gateway di Panduan Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html) *AWS Lambda*. | Pengembang aplikasi | 

### Konfigurasikan bidang alur kerja
<a name="configure-the-workflow-plane"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Identifikasi tugas yang harus dijalankan oleh alur kerja AWS Step Functions. | Identifikasi dan dokumentasikan persyaratan alur kerja AWS Step Functions terperinci untuk hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Pastikan bahwa pemangku kepentingan utama menyetujui persyaratan. | Pemilik aplikasi | 
| Buat alur kerja AWS Step Functions yang diperlukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html) | Pengembang aplikasi, Membangun prospek | 

### Konfigurasikan bidang komunikasi
<a name="configure-the-communication-plane"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat topik Amazon SNS. | Buat topik Amazon SNS untuk menerima pemberitahuan tentang hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Untuk informasi selengkapnya, lihat [Membuat topik SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) di Panduan Pengembang *Amazon SNS*. | Pemilik aplikasi, arsitek Cloud | 
| Berlangganan titik akhir untuk setiap topik Amazon SNS. | Untuk menerima pesan yang dipublikasikan ke topik Amazon SNS, Anda harus berlangganan titik akhir untuk setiap topik.Untuk informasi selengkapnya, lihat [Berlangganan topik Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) di Panduan Pengembang *Amazon SNS*. | Pengembang aplikasi, arsitek Cloud | 

### Konfigurasikan bidang logging dan monitoring
<a name="configure-the-logging-and-monitoring-plane"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan logging untuk setiap komponen solusi penyewa umum. | Aktifkan logging di tingkat komponen untuk setiap sumber daya dalam solusi penyewa umum yang Anda buat.Untuk petunjuk, lihat yang berikut ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/manage-tenants-across-multiple-saas-products-on-a-single-control-plane.html)Anda dapat mengkonsolidasikan log untuk setiap sumber daya ke akun logging terpusat dengan menggunakan kebijakan IAM. Untuk informasi selengkapnya, lihat [Pencatatan terpusat dan pagar keamanan beberapa akun](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/centralized-logging-and-multiple-account-security-guardrails.html). | Pengembang aplikasi, administrator sistem AWS, administrator Cloud | 

### Menyediakan dan menyebarkan solusi penyewa umum
<a name="provision-and-deploy-the-common-tenant-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat CloudFormation template. | Otomatiskan penerapan dan pemeliharaan solusi penyewa umum penuh dan semua komponennya dengan menggunakan templat. CloudFormation Untuk informasi selengkapnya, lihat [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html). | Pengembang aplikasi, DevOps insinyur, CloudFormation pengembang | 

## Sumber daya terkait
<a name="manage-tenants-across-multiple-saas-products-on-a-single-control-plane-resources"></a>
+ [Kontrol akses ke REST API menggunakan kumpulan pengguna Amazon Cognito sebagai otorisasi](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) (Panduan Pengembang *Amazon API Gateway*)
+ [Gunakan otorisasi API Gateway Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (Panduan Pengembang *Amazon API Gateway*)
+ [Kumpulan pengguna Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) (Panduan Pengembang *Amazon Cognito*)
+ [ CloudWatch Konsol lintas wilayah lintas akun](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Cross-Account-Cross-Region.html) (* CloudWatch Panduan Pengguna Amazon*)

# Konsolidasikan pembuatan URL presigned Amazon S3 dan unduhan objek dengan menggunakan titik akhir yang terkait dengan alamat IP statis
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses"></a>

*Song Jin, Eunhye Jo, dan Jun Soung Lee, Amazon Web Services*

## Ringkasan
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-summary"></a>

Pola ini menyederhanakan akses ke Amazon Simple Storage Service (Amazon S3) dengan membuat aman, custom presigned untuk unduhan objek. URLs Solusinya menyediakan titik akhir tunggal dengan domain unik dan alamat IP statis. Ini disesuaikan untuk pelanggan yang memerlukan konsolidasi titik akhir API dan Amazon S3 di bawah domain terpadu dengan alamat IP statis. Kasus penggunaan melibatkan pengguna yang mengikuti kebijakan firewall IP dan domain allowlist, membatasi akses API ke domain dan alamat IP tertentu. 

Arsitektur menggunakan kunci Layanan AWS, termasuk AWS Global Accelerator, Amazon API Gateway AWS Lambda, Application Load Balancer AWS PrivateLink, dan Amazon S3. Desain ini memusatkan API untuk menghasilkan presigned URLs dan endpoint Amazon S3 di bawah satu domain, ditautkan ke akselerator dengan dua alamat IP statis. Akibatnya, pengguna dapat dengan mudah meminta presigned URLs dan men-download objek Amazon S3 melalui endpoint domain terpadu dengan alamat IP statis. 

Arsitektur ini sangat bermanfaat bagi pelanggan dengan kebijakan atau persyaratan kepatuhan yang ketat, seperti yang ada di sektor publik, medis, dan keuangan.

## Prasyarat dan batasan
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Zona yang dihosting publik untuk nama domain kustom Anda
+ Domain yang diimpor AWS Certificate Manager (ACM) sesuai Wilayah AWS pilihan Anda

**Batasan**
+ Nama bucket Amazon S3 harus cocok dengan nama domain titik akhir. Persyaratan ini untuk memastikan bahwa titik akhir Amazon S3 dapat dilayani melalui titik akhir API tunggal.
+ Nama domain kustom yang digunakan dalam API Gateway harus sejajar dengan nama domain dari titik akhir API tunggal.
+ 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="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-architecture"></a>

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

![\[Komponen dan alur kerja untuk pembuatan URL dan pengunduhan objek yang telah ditetapkan sebelumnya.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e19ebcb5-2138-481e-952e-3cfee9ad9e97/images/effd197c-d4d7-4990-8b66-3eb1c64aab4c.png)


Diagram menggambarkan konsep dan alur kerja berikut:

1. Pengguna memulai permintaan untuk menghasilkan URL presigned dengan menggunakan endpoint kustom yang disajikan melalui AWS Global Accelerator, menggunakan nama domain kustom dan alamat IP terkait.

1. Fungsi Lambda menghasilkan URL yang telah ditetapkan sebelumnya, menunjuk ke titik akhir kustom. Ini merespons dengan pengalihan 301 yang berisi URL presigned yang dihasilkan. Melalui URL presigned yang dialihkan, pengguna mengunduh objek secara otomatis dengan menggunakan titik akhir kustom yang disajikan melalui Global Accelerator.

Komponen arsitektur keseluruhan untuk pembuatan URL presigned dan alur kerja pengunduhan objek adalah sebagai berikut:
+ Penyediaan alamat IP statis oleh Global Accelerator.
+ Pendaftaran alias akselerator sebagai catatan A ke zona host publik Amazon Route 53 dengan nama domain khusus.
+ Pembuatan bucket Amazon S3 dengan nama bucket yang cocok dengan nama domain kustom terdaftar.
+ Pembuatan titik akhir VPC untuk API Gateway dan layanan Amazon S3.
+ Konfigurasi Application Load Balancer yang menghadap ke internal untuk terhubung ke Global Accelerator.
+ Penetapan nama domain kustom untuk API Gateway dengan sertifikat ACM terlampir.
+ Penerapan API Gateway pribadi yang terintegrasi dengan fungsi Lambda.
+ Fungsi Lambda dilengkapi dengan peran AWS Identity and Access Management (IAM) yang dilampirkan (dengan [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)izin).

## Alat
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-tools"></a>

**Layanan AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) membantu Anda membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, dan WebSocket APIs dalam skala apa pun.
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) mendistribusikan lalu lintas aplikasi yang masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud (Amazon EC2), di beberapa Availability Zone.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) membantu Anda membuat, menyimpan, dan memperbarui sertifikat dan kunci SSL/TLS X.509 publik dan pribadi yang melindungi situs web dan aplikasi Anda. 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 Global Accelerator](https://docs.aws.amazon.com/global-accelerator/latest/dg/what-is-global-accelerator.html)adalah layanan global yang mendukung titik akhir dalam banyak Wilayah AWS. Anda dapat membuat akselerator yang mengarahkan lalu lintas ke titik akhir optimal melalui jaringan AWS global. Hal ini meningkatkan ketersediaan dan performa aplikasi internet Anda yang digunakan oleh khalayak global.
+ [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 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 Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.
+ [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 lainnya**
+ [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**

Anda dapat menerapkan pola ini dengan menggunakan AWS CDK atau Terraform berdasarkan preferensi Anda. Bagian [Epik](#consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics) berisi instruksi untuk kedua metode penerapan. Kode untuk pola ini tersedia di GitHub repositori berikut:
+ **AWS CDK**— [s3- -cdk presignedurl-staticips-endpoint-with](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-cdk)
+ **Terraform** — [s3](https://github.com/aws-samples/s3-presignedurl-staticips-endpoint-with-terraform) - -terraform presignedurl-staticips-endpoint-with

## Praktik terbaik
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-best-practices"></a>
+ Untuk meningkatkan keamanan di lingkungan produksi, sangat penting untuk menerapkan mekanisme otorisasi, seperti [Amazon](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) Cognito, untuk membatasi akses ke `PresignedUrl` API generasi.
+ 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="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-epics"></a>

### Siapkan lingkungan
<a name="prepare-the-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan nama domain. | Tentukan nama domain publik untuk titik akhir Amazon S3 terpadu. Nama domain juga digunakan sebagai nama bucket Amazon S3. | Administrator AWS, Administrator jaringan | 
| Membuat zona yang di-hosting publik. | [Buat zona yang dihosting publik](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) di Amazon Route 53. Nama domainnya harus sesuai dengan nama domain yang digunakan di API Gateway. | Administrator AWS, Administrator jaringan | 
| Siapkan sertifikat SSL. | Gunakan AWS Certificate Manager (ACM) untuk [meminta](https://docs.aws.amazon.com/acm/latest/userguide/acm-public-certificates.html) atau [mengimpor](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html) sertifikat SSL untuk domain aplikasi web Anda. | Administrator AWS, Administrator jaringan | 

### Terapkan pola dengan Terraform
<a name="deploy-the-pattern-with-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan lingkungan pengembangan Terraform. | Untuk mengatur lingkungan pengembangan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrator AWS, Administrator cloud | 
| Memodifikasi `.tfvars` dan **`provider.tf`**file. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html)**Perhatikan hal berikut:**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrator AWS, Administrator cloud | 
| Penyediaan sumber daya jaringan. | Untuk menyediakan sumber daya jaringan, jalankan perintah berikut:<pre>cd ./2.vpc_alb_ga<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre>Selama eksekusi `apply ` perintah, ketik **ya** saat diminta. | Administrator AWS, Administrator cloud | 
| Penyediaan API Gateway, Amazon S3, dan Lambda. | Untuk menyediakan sumber daya jaringan, gunakan perintah berikut:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --var-file=apg.tfvars<br />terraform apply --var-file=apg.tfvars</pre> | Administrator AWS, Administrator cloud | 

### Terapkan pola dengan AWS CDK
<a name="deploy-the-pattern-with-cdk"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mengatur lingkungan AWS CDK pengembangan. | Untuk mengatur lingkungan pengembangan, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrator AWS, Administrator cloud | 
| Konfigurasikan pengaturan domain dalam `config/index.ts` file. | Untuk mengedit opsi variabel konstan, gunakan perintah berikut:<pre>export const options = {<br />    certificateArn: '{arn of the acm which created before}',<br />    dnsAttr: {<br />        zoneName: '{public hosted zone name}',<br />        hostedZoneId: 'hosted zone Id',<br />    },<br />    domainNamePrefix: '{Prefix for the domain}',<br />    presignPath: 'presign',<br />    objectsPath: 'objects',<br />};</pre>Dalam perintah, ganti setiap placeholder dengan informasi Anda sendiri:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses.html) | Administrator AWS, Administrator cloud | 
| Menyebarkan tumpukan. | Untuk menyebarkan dua tumpukan, satu untuk virtual private cloud (VPC) dan satu lagi untuk aplikasi, gunakan perintah berikut:<pre>$ npm install <br />$ cdk synth <br />$ cdk deploy --all</pre> | Administrator AWS, Administrator cloud | 

### Uji polanya
<a name="test-the-pattern"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi alamat IP titik akhir. | Untuk memverifikasi bahwa domain untuk pola ini memiliki alamat IP statis, gunakan perintah berikut:<pre>nslookup ${s3-bucket-prefix}.${domain}</pre> | Administrator jaringan | 
| Unggah file pengujian yang nantinya dapat Anda unduh. | Unggah file pengujian ke `'/objects'` folder di bucket Amazon S3. | Administrator AWS, Administrator cloud | 
| Memanggil API untuk menghasilkan URL presigned. | Untuk menghasilkan URL yang telah ditetapkan sebelumnya, panggil URL dari browser atau klien API (misalnya, [Tukang Pos](https://www.postman.com/product/what-is-postman/)) menggunakan format berikut:<pre>https://${s3-bucket-prefix}.${domain}/presign/objects/${uploaded-filename}</pre>Ganti nilai placeholder di `${s3-bucket-prefix}` dan `${domain}` dengan nilai yang Anda tetapkan pada langkah sebelumnya. | Pemilik aplikasi | 
| Periksa hasilnya. | Hasil yang diharapkan adalah Anda harus menerima kode status pengalihan 301 (Dipindahkan Secara Permanen). Respons ini akan berisi URL yang telah ditetapkan sebelumnya, yang akan secara otomatis memulai pengunduhan file pengujian Anda. | Insinyur uji | 

### Bersihkan dengan Terraform
<a name="clean-up-with-terraform"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hancurkan sumber daya API Gateway, Amazon S3, dan Lambda. | Untuk menghapus sumber daya, gunakan perintah berikut:<pre>cd ./2.apigw_s3_lambda<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrator AWS, Administrator cloud | 
| Hancurkan sumber daya jaringan. | Untuk menghapus sumber daya jaringan, gunakan perintah berikut:<pre>cd ./1.vpc_alb_ga<br />terraform init<br />terraform plan --destroy --var-file=apg.tfvars<br />terraform destroy --var-file=apg.tfvars<br /></pre> | Administrator AWS, Administrator cloud | 

### Bersihkan dengan AWS CDK
<a name="clean-up-with-cdk"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hancurkan tumpukan. | Untuk menghancurkan tumpukan VPC dan aplikasi, gunakan perintah berikut:<pre>$ cdk destroy --all</pre> | Administrator AWS, Administrator cloud | 
| Kosongkan dan hapus ember Amazon S3. | [Kosongkan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/empty-bucket.html) dan [hapus](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html) objek bucket Amazon S3 dan log bucket Amazon S3 yang tidak dihapus secara default.Nama bucket Amazon S3 adalah `${s3-bucket-prefix}.${domain}` dan. `${s3-bucket-prefix}.${domain}-logs`Jika Anda lebih suka menggunakan [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) untuk menghapus bucket, gunakan perintah berikut:<pre>$ aws s3 rm s3://${s3-bucket-prefix}.${domain} --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain} --force<br />$ aws s3 rm s3://${s3-bucket-prefix}.${domain}-logs --recursive<br />$ aws s3 rb s3://${s3-bucket-prefix}.${domain}-logs --force</pre>Ganti `${s3-bucket-prefix}` dan `${domain}` dengan nilai yang Anda tetapkan pada langkah sebelumnya. , /p> | Administrator AWS, Administrator cloud | 

## Sumber daya terkait
<a name="consolidate-amazon-s3-presigned-url-generation-and-object-downloads-by-using-an-endpoint-associated-with-static-ip-addresses-resources"></a>

**AWS Blog**
+ [Mengakses Amazon API Gateway melalui alamat IP statis yang disediakan oleh AWS Global Accelerator](https://aws.amazon.com/blogs/networking-and-content-delivery/accessing-an-aws-api-gateway-via-static-ip-addresses-provided-by-aws-global-accelerator/) 
+ [Hasilkan URL presigned dalam modular AWS CDK untuk JavaScript](https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/) 
+ [Hosting Situs Web Statis HTTPS Internal dengan ALB, S3, dan PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) 

# Membuat EventBridge koneksi Amazon lintas akun di suatu organisasi
<a name="create-cross-account-amazon-eventbridge-connection-organization"></a>

*Sam Wilson dan Robert Stone, Amazon Web Services*

## Ringkasan
<a name="create-cross-account-amazon-eventbridge-connection-organization-summary"></a>

Sistem terdistribusi besar menggunakan Amazon EventBridge untuk mengkomunikasikan perubahan status antara berbagai akun Amazon Web Services (AWS) dalam suatu AWS Organizations organisasi. Namun, EventBridge umumnya hanya dapat menargetkan endpoint atau konsumen dalam hal yang sama Akun AWS. Pengecualian adalah bus acara di akun yang berbeda. Bus acara itu adalah target yang valid. Untuk mengkonsumsi acara dari bus acara di akun lain, acara harus didorong dari bus acara akun sumber ke bus acara akun tujuan. Untuk menghindari tantangan saat mengelola peristiwa kritis di seluruh aplikasi yang berbeda Akun AWS, gunakan pendekatan yang direkomendasikan yang disajikan dalam pola ini.

Pola ini menggambarkan bagaimana menerapkan arsitektur berbasis peristiwa dengan EventBridge yang melibatkan banyak Akun AWS dalam suatu organisasi. AWS Organizations Pola menggunakan AWS Cloud Development Kit (AWS CDK) Toolkit dan AWS CloudFormation.

EventBridge menawarkan bus acara tanpa server yang membantu Anda menerima, memfilter, mengubah, merutekan, dan mengirimkan acara. Komponen penting dari arsitektur berbasis peristiwa, EventBridge mendukung pemisahan antara produsen pesan dan konsumen pesan tersebut. Dalam satu akun, ini lurus ke depan. Struktur multi-akun memerlukan pertimbangan tambahan untuk acara di bus acara dalam satu akun untuk dikonsumsi di akun lain dalam organisasi yang sama.

Untuk informasi tentang pertimbangan khusus akun bagi produsen dan konsumen, lihat bagian Informasi [tambahan](#create-cross-account-amazon-eventbridge-connection-organization-additional).

## Prasyarat dan batasan
<a name="create-cross-account-amazon-eventbridge-connection-organization-prereqs"></a>

**Prasyarat**
+ Sebuah AWS Organizations organisasi dengan setidaknya dua yang terkait Akun AWS
+ Peran AWS Identity and Access Management (IAM) di keduanya Akun AWS yang memungkinkan Anda menyediakan infrastruktur di keduanya Akun AWS dengan menggunakan AWS CloudFormation
+ Git [diinstal secara lokal](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+ AWS Command Line Interface (AWS CLI) [dipasang secara lokal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ AWS CDK [diinstal secara lokal](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) dan [bootstrap](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-howto) di keduanya Akun AWS

**Versi produk**

Pola ini telah dibangun dan diuji dengan menggunakan alat dan versi berikut:
+ AWS CDK Toolkit 2.126.0
+ Node.js 18.19.0
+ npm 10.2.3
+ Python 3.12

Pola ini harus bekerja dengan versi AWS CDK v2 atau npm apa pun. Node.js versi 13.0.0 hingga 13.6.0 tidak kompatibel dengan. AWS CDK

## Arsitektur
<a name="create-cross-account-amazon-eventbridge-connection-organization-architecture"></a>

**Arsitektur target**

Diagram berikut menunjukkan alur kerja arsitektur untuk mendorong peristiwa dari satu akun dan menggunakannya di akun lain.

![\[Proses tiga langkah untuk menghubungkan akun produsen Sumber dan akun konsumen Tujuan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/34a5f3ae-511d-4636-999f-c73396770117/images/ccc4878a-6281-4a77-a483-4e6f299d7807.png)


Alur kerja berisi langkah-langkah berikut:

1.  AWS Lambda Fungsi Produser di akun Sumber menempatkan acara di bus EventBridge acara akun.

1.  EventBridge Aturan lintas akun merutekan acara ke bus EventBridge acara di akun Tujuan.

1. Bus EventBridge acara di akun Tujuan memiliki aturan Lambda target yang memanggil fungsi Lambda Konsumen.

Praktik terbaik adalah menggunakan [Dead Letter Queue (DLQ)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html) untuk menangani pemanggilan fungsi Lambda Konsumen yang gagal. Namun, DLQ dihilangkan dari solusi ini untuk kejelasan. Untuk mempelajari lebih lanjut tentang cara menerapkan DLQ dalam alur kerja Anda dan meningkatkan kemampuan alur kerja Anda untuk pulih dari kegagalan, lihat posting blog [Menerapkan pola penanganan AWS Lambda kesalahan](https://aws.amazon.com/blogs/compute/implementing-aws-lambda-error-handling-patterns/).

**Otomatisasi dan skala**

AWS CDK secara otomatis menyediakan arsitektur yang diperlukan. EventBridge dapat menskalakan hingga ribuan catatan per detik tergantung pada Wilayah AWS. Untuk informasi selengkapnya, lihat [dokumentasi EventBridge kuota Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html).

## Alat
<a name="create-cross-account-amazon-eventbridge-connection-organization-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. Pola ini menggunakan [AWS CDK Toolkit, kit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) pengembangan cloud baris perintah yang membantu Anda berinteraksi dengan AWS CDK aplikasi.
+ [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 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 lainnya**
+ [Node.js](https://nodejs.org/en/docs/) adalah lingkungan JavaScript runtime berbasis peristiwa yang dirancang untuk membangun aplikasi jaringan yang dapat diskalakan.
+ [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.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [cross-account-eventbridge-in-organization](https://github.com/aws-samples/aws-cdk-examples/tree/main/python/cross-account-eventbridge-in-organization).

## Praktik terbaik
<a name="create-cross-account-amazon-eventbridge-connection-organization-best-practices"></a>

Untuk praktik terbaik saat bekerja sama EventBridge, lihat sumber daya berikut:
+ [Praktik terbaik untuk pola EventBridge acara Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-patterns-best-practices.html)
+ [Praktik terbaik saat mendefinisikan aturan di Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules-best-practices.html)

## Epik
<a name="create-cross-account-amazon-eventbridge-connection-organization-epics"></a>

### Siapkan lingkungan AWS CDK penyebaran lokal Anda
<a name="prepare-your-local-cdk-deployment-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan kredenal lokal untuk akun Sumber dan akun Tujuan. | Tinjau [Menyiapkan konfigurasi dan kredensil baru](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html#getting-started-quickstart-new), dan gunakan metode otentikasi dan kredensi yang paling masuk akal bagi lingkungan Anda.Pastikan untuk mengonfigurasi AWS CLI untuk kedua akun Sumber dan otentikasi akun Tujuan.Petunjuk ini mengasumsikan bahwa Anda telah mengonfigurasi dua profil AWS secara lokal: `sourceAccount` dan`destinationAccount`. | Pengembang aplikasi | 
| Bootstrap keduanya Akun AWS. | Untuk mem-bootstrap akun, jalankan perintah berikut:<pre>cdk bootstrap --profile sourceAccount<br />cdk bootstrap --profile destinationAccount</pre> | Pengembang aplikasi | 
| Kloning kode pola. | Untuk mengkloning repositori, jalankan perintah berikut:<pre>git clone git@github.com:aws-samples/aws-cdk-examples.git</pre>Kemudian, ubah direktori ke folder proyek yang baru dikloning:<pre>cd aws-cdk-examples/python/cross-account-eventbridge-in-organization</pre> | Pengembang aplikasi | 

### Terapkan ProducerStack ke akun Sumber
<a name="deploy-producerstack-to-the-source-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ubah `cdk.json` dengan detail akun AWS Organizations dan akun Anda. | Di folder root proyek, buat perubahan berikut ke`cdk.json`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Pengembang aplikasi | 
| Menyebarkan ProducerStack sumber daya. | Jalankan perintah berikut dari direktori root proyek:<pre>cdk deploy ProducerStack --profile sourceAccount</pre>Saat diminta, terima peran IAM baru dan izin terkait keamanan lainnya yang dibuat melalui. AWS CloudFormation | Pengembang aplikasi | 
| Verifikasi bahwa ProducerStack sumber daya digunakan. | Untuk memverifikasi sumber daya, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Pengembang aplikasi | 

### Menyebarkan ConsumerStack ke akun Tujuan
<a name="deploy-consumerstack-to-the-destination-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan ConsumerStack sumber daya. | Jalankan perintah berikut dari direktori root proyek:<pre>cdk deploy ConsumerStack --profile destinationAccount</pre>Saat diminta, terima peran IAM baru dan izin terkait keamanan lainnya yang dibuat melalui. CloudFormation | Pengembang aplikasi | 
| Verifikasi bahwa ConsumerStack sumber daya digunakan | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Pengembang aplikasi | 

### Menghasilkan dan mengkonsumsi acara
<a name="produce-and-consume-events"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memanggil fungsi Lambda Produser. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Pengembang aplikasi | 
| Verifikasi bahwa acara telah diterima. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | Pengembang aplikasi | 

### Pembersihan
<a name="cleanup"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hancurkan ConsumerStack sumber daya. | Jika Anda menggunakan pola ini sebagai pengujian, bersihkan sumber daya yang digunakan untuk menghindari biaya tambahan.Jalankan perintah berikut dari direktori root proyek:<pre>cdk destroy ConsumerStack --profile destinationAccount</pre>Anda akan diminta untuk mengonfirmasi penghapusan tumpukan. | Pengembang aplikasi | 
| Hancurkan ProducerStack sumber daya. | Jalankan perintah berikut dari direktori root proyek:<pre>cdk destroy ProducerStack --profile sourceAccount</pre>Anda akan diminta untuk mengonfirmasi penghapusan tumpukan. | Pengembang aplikasi | 

## Pemecahan masalah
<a name="create-cross-account-amazon-eventbridge-connection-organization-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Tidak ada acara yang diterima di akun Tujuan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-cross-account-amazon-eventbridge-connection-organization.html) | 
| Memanggil fungsi Lambda dari konsol mengembalikan kesalahan berikut: `User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke` | Hubungi Akun AWS administrator Anda untuk menerima izin `lambda:Invoke` tindakan yang sesuai pada fungsi `ProducerStack-ProducerLambdaXXXX` Lambda. | 

## Sumber daya terkait
<a name="create-cross-account-amazon-eventbridge-connection-organization-resources"></a>

**Referensi**
+ [AWS Organizations Panduan Pengguna](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)
+ [Pola EventBridge acara Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ [Aturan di Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)

**Tutorial dan video**
+ [Tutorial: Membuat dan mengkonfigurasi organisasi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)
+ [AWS re: invent 2023 - Pola berbasis peristiwa tingkat lanjut dengan Amazon (01-R) EventBridge COM3](https://www.youtube.com/watch?v=6X4lSPkn4ps)

## Informasi tambahan
<a name="create-cross-account-amazon-eventbridge-connection-organization-additional"></a>

**Aturan produsen**

Di akun Sumber, bus EventBridge acara dibuat untuk menerima pesan dari produsen (seperti yang ditunjukkan di bagian *Arsitektur*). Aturan dengan izin IAM yang menyertainya dibuat di bus acara ini. Aturan menargetkan bus EventBridge acara di akun Tujuan berdasarkan `cdk.json` struktur berikut:

```
"rules": [
  {
    "id": "CrossAccount",
    "sources": ["Producer"],
    "detail_types": ["TestType"],
    "targets": [
      {
        "id": "ConsumerEventBus",
        "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount"
      }
    ]
  }
]
```

Untuk setiap bus acara konsumsi, pola acara dan bus acara target harus disertakan.

*Pola Acara*

[Pola acara](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) memfilter peristiwa mana yang akan diterapkan aturan ini. Untuk tujuan contoh ini, sumber acara dan catatan `detail_types` mengidentifikasi peristiwa mana yang akan dikirimkan dari bus acara akun Sumber ke bus acara akun Tujuan.

*Target bus acara*

Aturan ini menargetkan bus acara yang ada di akun lain. Lengkap `arn` (Nama Sumber Daya Amazon) diperlukan untuk mengidentifikasi bus peristiwa target secara unik, dan itu `id` adalah [ID logis](https://docs.aws.amazon.com/cdk/v2/guide/identifiers.html#identifiers_logical_ids) yang digunakan oleh. AWS CloudFormation Bus acara target tidak perlu benar-benar ada pada saat pembuatan aturan target.

**Pertimbangan khusus akun tujuan**

Di akun Tujuan, bus EventBridge acara dibuat untuk menerima pesan dari bus acara akun Sumber. Untuk mengizinkan acara dipublikasikan dari akun Sumber, Anda harus membuat kebijakan berbasis [sumber daya](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html):

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [{
    "Sid": "AllowOrgToPutEvents",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "events:PutEvents",
    "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount",
    "Condition": {
      "StringEquals": {
        "aws:PrincipalOrgID": "o-XXXXXXXXX"
      }
    }
  }]
}
```

Sangat penting untuk memberikan `events:PutEvents` izin, yang memungkinkan akun lain di organisasi yang sama untuk mempublikasikan acara ke bus acara ini. Menyetel `aws:PrincipalOrgId` sebagai ID organisasi memberikan izin yang diperlukan.

**Pola acara**

Anda dapat memodifikasi pola acara yang disertakan untuk memenuhi kasus penggunaan Anda:

```
rule = events.Rule(
    self,
    self.id + 'Rule' + rule_definition['id'],
    event_bus=event_bus,
    event_pattern=events.EventPattern(
        source=rule_definition['sources'],
        detail_type=rule_definition['detail_types'],
    )
)
```

Untuk mengurangi pemrosesan yang tidak perlu, pola acara harus menentukan bahwa hanya peristiwa yang akan diproses oleh akun Tujuan yang ditransmisikan ke bus acara akun Tujuan.

*Kebijakan berbasis sumber daya*

Contoh ini menggunakan ID organisasi untuk mengontrol akun mana yang diizinkan untuk menempatkan peristiwa di bus acara akun Tujuan. Pertimbangkan untuk menggunakan kebijakan yang lebih ketat, seperti menentukan akun Sumber.

*EventBridge kuota*

Ingatlah [kuota](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-quota.html) berikut:
+ 300 aturan per bus acara adalah kuota default. Ini dapat diperluas jika perlu, tetapi harus sesuai dengan sebagian besar kasus penggunaan.
+ Lima target per aturan adalah maksimum yang diizinkan. Kami merekomendasikan bahwa arsitek aplikasi harus menggunakan aturan yang berbeda untuk setiap akun Destination untuk mendukung kontrol halus atas pola acara.

# Mengirimkan data DynamoDB ke Amazon S3 menggunakan Kinesis Data Streams dan Firehose dengan AWS CDK
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk"></a>

*Shashank Shrivastava dan Daniel Matuki da Cunha, Amazon Web Services*

## Ringkasan
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-summary"></a>

Pola ini menyediakan contoh kode dan aplikasi untuk mengirimkan catatan dari Amazon DynamoDB ke Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) dengan menggunakan Amazon Kinesis Data Streams dan Amazon Data Firehose. Pendekatan pola menggunakan [konstruksi AWS Cloud Development Kit (AWS CDK) L3](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dan menyertakan contoh cara melakukan transformasi data AWS Lambda sebelum data dikirim ke bucket S3 target di Amazon Web Services ()AWS Cloud.

Kinesis Data Streams merekam modifikasi tingkat item dalam tabel DynamoDB dan mereplikasi mereka ke aliran data Kinesis yang diperlukan. Aplikasi Anda dapat mengakses Kinesis data stream dan melihat perubahan tingkat item dalam hampir waktu nyata. Kinesis Data Streams juga menyediakan akses ke layanan Amazon Kinesis lainnya, seperti Firehose dan Amazon Managed Service untuk Apache Flink. Ini berarti Anda dapat membangun aplikasi yang menyediakan dasbor waktu nyata, menghasilkan peringatan, menerapkan harga dan iklan dinamis, dan melakukan analisis data yang canggih.

Anda dapat menggunakan pola ini untuk kasus penggunaan integrasi data Anda. Misalnya, kendaraan transportasi atau peralatan industri dapat mengirim volume data yang tinggi ke tabel DynamoDB. Data ini kemudian dapat diubah dan disimpan di danau data yang dihosting di Amazon S3. Anda kemudian dapat menanyakan dan memproses data dan memprediksi potensi cacat dengan menggunakan layanan tanpa server seperti Amazon Athena, Amazon Redshift Spectrum, Amazon Rekognition, dan. AWS Glue

## Prasyarat dan batasan
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-prereqs"></a>

*Prasyarat*
+ Aktif Akun AWS.
+ AWS Command Line Interface (AWS CLI), diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [AWS CLI Memulai dengan](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) AWS CLI dokumentasi.
+ Node.js (18.x \$1) dan npm, diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [Mengunduh dan menginstal Node.js dan npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) di `npm` dokumentasi.
+ aws-cdk (2.x \$1), diinstal dan dikonfigurasi. Untuk informasi selengkapnya, lihat [AWS CDK Memulai dengan](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) AWS CDK dokumentasi.
+ Repositori GitHub [aws-dynamodb-kinesisfirehose-s3-ingestion, dikloning](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/) dan dikonfigurasi pada mesin lokal Anda.
+ Data sampel yang ada untuk tabel DynamoDB. Data harus menggunakan format berikut: `{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}`

## Arsitektur
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-architecture"></a>

Diagram berikut menunjukkan contoh alur kerja untuk mengirimkan catatan dari DynamoDB ke Amazon S3 dengan menggunakan Kinesis Data Streams dan Firehose.

![\[Contoh alur kerja untuk mengirimkan record dari DynamoDB ke Amazon S3 menggunakan Kinesis Data Streams dan Firehose.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e2a9c412-312e-4900-9774-19a281c578e4/images/6e6df998-e6c2-4eaf-b263-ace752194689.png)


Diagram menunjukkan alur kerja berikut:

1. Data dicerna menggunakan Amazon API Gateway sebagai proxy untuk DynamoDB. Anda juga dapat menggunakan sumber lain untuk menyerap data ke DynamoDB. 

1. Perubahan tingkat item dihasilkan dalam waktu nyaris real time di Kinesis Data Streams untuk pengiriman ke Amazon S3.

1. Kinesis Data Streams mengirimkan catatan ke Firehose untuk transformasi dan pengiriman. 

1. Fungsi Lambda mengonversi catatan dari format rekaman DynamoDB ke format JSON, yang hanya berisi nama dan nilai atribut item rekaman.

## Alat
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-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 AWS CDK aplikasi Anda.
+ [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 Layanan AWS melalui perintah di shell baris perintah Anda.
+ [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

*Repositori kode*

Kode untuk pola ini tersedia di repositori GitHub [aws-dynamodb-kinesisfirehose-s3-konsumsi](https://github.com/aws-samples/aws-dynamodb-kinesisfirehose-s3-ingestion/).

## Epik
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-epics"></a>

### Siapkan dan konfigurasikan kode sampel
<a name="set-up-and-configure-the-sample-code"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal dependensi. | Di mesin lokal Anda, instal dependensi dari `package.json` file di `sample-application` direktori `pattern/aws-dynamodb-kinesisstreams-s3` dan dengan menjalankan perintah berikut:<pre>cd <project_root>/pattern/aws-dynamodb-kinesisstreams-s3 </pre><pre>npm install && npm run build</pre><pre>cd <project_root>/sample-application/</pre><pre>npm install && npm run build</pre>  | Pengembang aplikasi, AWS Umum | 
| Hasilkan CloudFormation template. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Pengembang aplikasi, AWS Umum, AWS DevOps | 

### Menyebarkan sumber daya
<a name="deploy-the-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Periksa dan gunakan sumber daya. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk.html) | Pengembang aplikasi, AWS Umum, AWS DevOps | 

### Menyerap data ke dalam tabel DynamoDB untuk menguji solusinya
<a name="ingest-data-into-the-dynamodb-table-to-test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyerap data sampel Anda ke dalam tabel DynamoDB. | Kirim permintaan ke tabel DynamoDB Anda dengan menjalankan perintah berikut di: AWS CLI`aws dynamodb put-item --table-name <your_table_name> --item '{"<table_partition_key>": {"S": "<partition_key_ID>"},"MessageData":{"S": "<data>"}}'`contoh:`aws dynamodb put-item --table-name SourceData_table --item '{"SourceDataId": {"S": "123"},"MessageData":{"S": "Hello World"}}'`Secara default, `put-item` tidak mengembalikan nilai apa pun sebagai output jika operasi berhasil. Jika operasi gagal, ia mengembalikan kesalahan. Data disimpan di DynamoDB dan kemudian dikirim ke Kinesis Data Streams dan Firehose. Anda menggunakan pendekatan yang berbeda untuk menambahkan data ke dalam tabel DynamoDB. Untuk informasi selengkapnya, lihat [Memuat data ke dalam tabel](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.LoadData.html) dalam dokumentasi DynamoDB. | Pengembang aplikasi | 
| Verifikasi bahwa objek baru dibuat di bucket S3. | Masuk ke Konsol Manajemen AWS dan pantau bucket S3 untuk memverifikasi bahwa objek baru dibuat dengan data yang Anda kirim. Untuk informasi selengkapnya, lihat [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)di dokumentasi Amazon S3. | Pengembang aplikasi, AWS Umum | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pembersihan sumber daya  | Jalankan `cdk destroy` perintah untuk menghapus semua sumber daya yang digunakan oleh pola ini. | Pengembang aplikasi, AWS Umum | 

## Sumber daya terkait
<a name="deliver-dynamodb-records-to-amazon-s3-using-kinesis-data-streams-and-amazon-data-firehose-with-aws-cdk-resources"></a>
+ [s3- static-site-stack .ts (repositori](https://github.com/awslabs/aws-solutions-constructs/blob/main/source/use_cases/aws-s3-static-website/lib/s3-static-site-stack.ts#L25)) GitHub 
+ [aws-apigateway-dynamodb modul](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-apigateway-dynamodb) (GitHub repositori)
+ [aws-kinesisstreams-kinesisfirehose-s3 modul](https://github.com/awslabs/aws-solutions-constructs/tree/main/source/patterns/%40aws-solutions-constructs/aws-kinesisstreams-kinesisfirehose-s3) (GitHub repositori)
+ [Ubah pengambilan data untuk DynamoDB Streams (dokumentasi DynamoDB)](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Menggunakan Kinesis Data Streams untuk menangkap perubahan pada DynamoDB (dokumentasi DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html))

# Menerapkan versi API berbasis jalur dengan menggunakan domain kustom di Amazon API Gateway
<a name="implement-path-based-api-versioning-by-using-custom-domains"></a>

*Corey Schnedl, Marcelo Barbosa, Mario Lopez Martinez, Anbazhagan Ponnuswamy, Gaurav Samudra, dan Abhilash Vinod, Amazon Web Services*

## Ringkasan
<a name="implement-path-based-api-versioning-by-using-custom-domains-summary"></a>

Pola ini menunjukkan bagaimana Anda dapat menggunakan fitur [pemetaan API](https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-mappings.html) [domain kustom](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html) untuk mengimplementasikan solusi versi API berbasis jalur untuk Amazon API Gateway.

Amazon API Gateway adalah layanan terkelola penuh yang dapat Anda gunakan untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan APIs pada skala apa pun. Dengan menggunakan fitur domain kustom layanan, Anda dapat membuat nama domain kustom yang lebih sederhana dengan lebih intuitif URLs yang dapat Anda berikan kepada pengguna API Anda. Anda dapat menggunakan pemetaan API untuk menghubungkan tahapan API ke nama domain kustom. Setelah membuat nama domain dan mengonfigurasi catatan DNS, Anda menggunakan pemetaan API untuk mengirim lalu lintas ke nama domain khusus Anda. APIs 

Setelah API tersedia untuk umum, konsumen menggunakannya. Seiring berkembangnya API publik, kontrak layanannya juga berkembang untuk mencerminkan fitur dan kemampuan baru. Namun, tidak bijaksana untuk mengubah atau menghapus fitur yang ada. Setiap perubahan yang melanggar dapat memengaruhi aplikasi konsumen dan merusaknya saat runtime. Pembuatan versi API penting untuk menghindari kerusakan kompatibilitas mundur dan melanggar kontrak.

Anda memerlukan strategi yang jelas untuk pembuatan versi API untuk membantu konsumen mengadopsinya. Pembuatan versi APIs dengan menggunakan berbasis jalur URLs adalah pendekatan yang paling mudah dan umum digunakan. Dalam jenis pembuatan versi ini, versi secara eksplisit didefinisikan sebagai bagian dari API. URIs Contoh berikut URLs menunjukkan bagaimana konsumen dapat menggunakan URI untuk menentukan versi API untuk permintaan mereka:

`https://api.example.com/api/v1/orders `

`https://api.example.com/api/v2/orders `

`https://api.example.com/api/vX/orders`

Pola ini menggunakan AWS Cloud Development Kit (AWS CDK) untuk membangun, menerapkan, dan menguji contoh implementasi solusi versi berbasis jalur yang dapat diskalakan untuk API Anda. AWS CDK adalah kerangka pengembangan perangkat lunak open source untuk memodelkan dan menyediakan sumber daya aplikasi cloud Anda menggunakan bahasa pemrograman yang sudah dikenal.

## Prasyarat dan batasan
<a name="implement-path-based-api-versioning-by-using-custom-domains-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Kepemilikan domain diperlukan untuk menggunakan contoh repositori pola ini dan menggunakan fungsionalitas domain khusus Amazon API Gateway. Anda dapat menggunakan Amazon Route 53 untuk membuat dan mengelola domain untuk organisasi Anda. Untuk informasi tentang cara mendaftar atau mentransfer domain dengan Route 53, lihat [Mendaftarkan domain baru](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register-update.html) di dokumentasi Route 53.
+ Sebelum menyiapkan nama domain khusus untuk API, Anda harus memiliki sertifikat [SSL/TLS](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-specify-certificate-for-custom-domain-name.html) yang siap. AWS Certificate Manager
+ Anda harus membuat atau memperbarui catatan sumber daya penyedia DNS Anda untuk dipetakan ke titik akhir API Anda. Tanpa pemetaan seperti itu, permintaan API yang terikat untuk nama domain khusus tidak dapat mencapai API Gateway.

**Keterbatasan**
+ Sebuah nama domain kustom harus unik dalam Wilayah AWS semua Akun AWS.
+ Untuk mengonfigurasi pemetaan API dengan beberapa level, Anda harus menggunakan nama domain kustom Regional dan menggunakan kebijakan keamanan TLS 1.2.
+ Dalam pemetaan API, nama domain khusus dan dipetakan APIs harus sama. Akun AWS
+ Pemetaan API harus hanya berisi huruf, angka, dan karakter berikut: `$-_.+!*'()/`
+ Panjang maksimum jalur dalam pemetaan API adalah 300 karakter.
+ Anda dapat memiliki 200 pemetaan API dengan beberapa level untuk setiap nama domain.
+ Anda hanya dapat memetakan HTTP APIs ke nama domain kustom Regional dengan kebijakan keamanan TLS 1.2.
+ Anda tidak dapat memetakan WebSocket APIs ke nama domain kustom yang sama dengan HTTP API atau REST API.
+ 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**
+ Implementasi sampel ini digunakan [AWS CDK dalam TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html) versi 2.149.0.

## Arsitektur
<a name="implement-path-based-api-versioning-by-using-custom-domains-architecture"></a>

Diagram berikut menunjukkan alur kerja arsitektur.

![\[Alur kerja menggunakan pemetaan API dan domain khusus untuk mengimplementasikan solusi pembuatan versi API berbasis jalur.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e1b32d2b-410f-4ace-967e-f0b8aaf0304c/images/fa9f04f1-efa6-4fb1-a541-ae3da4076b00.png)


Diagram ini menggambarkan hal sebagai berikut:

1. Pengguna API mengirimkan permintaan ke Amazon API Gateway dengan nama domain khusus.

1. API Gateway secara dinamis merutekan permintaan pengguna ke instance dan tahap API Gateway yang sesuai, berdasarkan jalur yang ditunjukkan dalam URL permintaan. Tabel berikut menunjukkan contoh bagaimana jalur berbasis URL yang berbeda dapat dirutekan ke tahapan tertentu untuk berbagai instance API Gateway.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/implement-path-based-api-versioning-by-using-custom-domains.html)

1. Instance API Gateway tujuan memproses permintaan dan mengembalikan hasilnya kepada pengguna.

**Otomatisasi dan skala**

Kami menyarankan Anda menggunakan AWS CloudFormation tumpukan terpisah untuk setiap versi API Anda. Dengan pendekatan ini, Anda dapat memiliki isolasi lengkap antara backend APIs yang dapat dirutekan oleh fitur pemetaan API domain kustom. Keuntungan dari pendekatan ini adalah bahwa versi berbeda dari API Anda dapat digunakan atau dihapus secara independen tanpa menimbulkan risiko memodifikasi API lain. Pendekatan ini meningkatkan ketahanan melalui isolasi tumpukan. CloudFormation Selain itu, ini memberi Anda opsi back-end yang berbeda untuk API Anda seperti AWS Lambda, AWS Fargate, titik akhir HTTP, dan tindakan. Layanan AWS

Anda dapat menggunakan strategi percabangan Git, seperti [Gitflow](https://docs.aws.amazon.com/prescriptive-guidance/latest/choosing-git-branch-approach/gitflow-branching-strategy.html), dalam kombinasi dengan CloudFormation tumpukan terisolasi untuk mengelola kode sumber yang diterapkan ke versi API yang berbeda. Dengan menggunakan opsi ini, Anda dapat mempertahankan versi API yang berbeda tanpa perlu menduplikasi kode sumber untuk versi baru. Dengan Gitflow, Anda dapat menambahkan tag ke komit dalam repositori git Anda saat rilis dilakukan. Akibatnya, Anda memiliki snapshot lengkap dari kode sumber yang terkait dengan rilis tertentu. Karena pembaruan perlu dilakukan, Anda dapat memeriksa kode dari rilis tertentu, membuat pembaruan, dan kemudian menyebarkan kode sumber yang diperbarui ke CloudFormation tumpukan yang sejajar dengan versi utama yang sesuai. Pendekatan ini mengurangi risiko melanggar versi API lain karena setiap versi API memiliki kode sumber yang terisolasi dan digunakan untuk CloudFormation tumpukan terpisah.

## Alat
<a name="implement-path-based-api-versioning-by-using-custom-domains-tools"></a>

**Layanan AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) membantu Anda membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, dan WebSocket APIs dalam skala apa pun.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) membantu Anda membuat, menyimpan, dan memperbarui sertifikat dan kunci SSL/TLS X.509 publik dan pribadi yang melindungi situs web dan aplikasi Anda. 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 infrastruktur cloud Anda dalam kode dan menyediakannya. CloudFormation Implementasi sampel pola ini menggunakan [AWS CDK in TypeScript](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-typescript.html). Bekerja dengan AWS CDK in TypeScript menggunakan alat yang sudah dikenal, termasuk Microsoft TypeScript compiler (`tsc`), [Node.js](https://nodejs.org/), dan node package manager (`npm`). Jika mau, Anda dapat menggunakan [Yarn](https://yarnpkg.com/) meskipun contoh dalam pola ini digunakan`npm`. [Modul yang terdiri dari [AWS Construct Library](https://docs.aws.amazon.com/cdk/v2/guide/libraries.html#libraries-construct) didistribusikan melalui `npm ` repositori, npmjs.org.](https://docs.npmjs.com/)
+ [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 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 Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.
+ [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html)adalah firewall aplikasi web yang membantu Anda memantau permintaan HTTP dan HTTPS yang diteruskan ke sumber daya aplikasi web Anda yang dilindungi.

**Alat-alat lainnya**
+ [Bruno](https://www.usebruno.com/) adalah klien pengujian API open source yang ramah git-friendly.
+ [cdk-nag](https://github.com/cdklabs/cdk-nag) adalah utilitas open source yang memeriksa AWS CDK aplikasi untuk praktik terbaik dengan menggunakan paket aturan.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [path-based-versioning-with-api-gateway](https://github.com/aws-samples/path-based-versioning-with-api-gateway).

## Praktik terbaik
<a name="implement-path-based-api-versioning-by-using-custom-domains-best-practices"></a>
+ Gunakan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang kuat untuk mengotomatiskan pengujian dan penyebaran CloudFormation tumpukan Anda yang dibangun dengan. AWS CDK Untuk informasi lebih lanjut terkait dengan rekomendasi ini, lihat Panduan [AWS DevOps Well-Architected](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html).
+ AWS WAF adalah firewall terkelola yang mudah diintegrasikan dengan layanan seperti Amazon API Gateway. Meskipun AWS WAF bukan merupakan komponen yang diperlukan agar pola pembuatan versi ini berfungsi, kami merekomendasikan sebagai praktik terbaik keamanan untuk disertakan AWS WAF dengan API Gateway.
+ Dorong konsumen API untuk memutakhirkan secara berkala ke versi terbaru API Anda sehingga versi API yang lebih lama dapat dihentikan dan dihapus secara efisien.
+ Sebelum menggunakan pendekatan ini dalam pengaturan produksi, terapkan firewall dan strategi otorisasi untuk API Anda.
+ Terapkan akses ke pengelolaan sumber AWS daya Anda Akun AWS dengan menggunakan model akses [hak istimewa paling sedikit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege).
+ Untuk menerapkan praktik terbaik dan rekomendasi keamanan untuk aplikasi yang dibangun dengan AWS CDK, kami sarankan Anda menggunakan utilitas [cdk-nag](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/check-aws-cdk-applications-or-cloudformation-templates-for-best-practices-by-using-cdk-nag-rule-packs.html). 

## Epik
<a name="implement-path-based-api-versioning-by-using-custom-domains-epics"></a>

### Persiapkan lingkungan lokal Anda
<a name="prepare-your-local-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori aplikasi sampel, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/path-based-versioning-with-api-gateway</pre> | Pengembang aplikasi | 
| Arahkan ke repositori kloning. | Untuk menavigasi ke lokasi folder repositori kloning, jalankan perintah berikut: <pre>cd api-gateway-custom-domain-versioning</pre> | Pengembang aplikasi | 
| Instal dependensi yang diperlukan. | Untuk menginstal dependensi yang diperlukan, jalankan perintah berikut:<pre>npm install </pre> | Pengembang aplikasi | 

### Terapkan tumpukan CloudFormation perutean
<a name="deploy-the-cfnshort-routing-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memulai penyebaran tumpukan routing. | Untuk memulai penyebaran tumpukan CloudFormation routing`CustomDomainRouterStack`, jalankan perintah berikut, ganti `example.com` dengan nama domain yang Anda miliki:<pre>npx cdk deploy CustomDomainRouterStack --parameters PrerequisiteDomainName=example.com</pre>Penyebaran tumpukan tidak akan berhasil sampai tugas validasi DNS domain berikut berhasil dilakukan. | Pengembang aplikasi | 

### Memverifikasi kepemilikan domain
<a name="verify-domain-ownership"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi kepemilikan domain Anda. | Sertifikat akan tetap dalam status **validasi Tertunda** sampai Anda membuktikan kepemilikan domain terkait. Untuk membuktikan kepemilikan, tambahkan catatan CNAME ke zona yang dihosting yang terkait dengan domain. Untuk informasi selengkapnya, lihat [validasi DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) dalam dokumentasi. AWS Certificate Manager Menambahkan catatan yang sesuai memungkinkan `CustomDomainRouterStack` penerapan berhasil. | Pengembang aplikasi, administrator sistem AWS, Administrator jaringan | 
| Buat catatan alias untuk menunjuk ke domain kustom API Gateway Anda. | Setelah sertifikat diterbitkan dan divalidasi dengan sukses, [buat catatan DNS yang](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-regional-api-custom-domain-create.html#apigateway-regional-api-custom-domain-dns-record) mengarah ke URL domain kustom Amazon API Gateway Anda. URL domain kustom dihasilkan secara unik oleh penyediaan domain kustom dan ditentukan sebagai parameter output. CloudFormation Berikut ini adalah [contoh catatan](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-values-basic.html): **Kebijakan perutean: Perutean** sederhana**Nama rekam**: `demo.api-gateway-custom-domain-versioning.example.com`**Alias**: Ya**Jenis rekaman**: Catatan DNS tipe “A” yang menunjuk ke sumber daya AWS **Nilai**: `d-xxxxxxxxxx.execute-api.xx-xxxx-x.amazonaws.com`**TTL (detik)**: 300 | Pengembang aplikasi, administrator sistem AWS, Administrator jaringan | 

### Menerapkan CloudFormation tumpukan dan menjalankan API
<a name="deploy-cfnshort-stacks-and-invoke-the-api"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan `ApiStackV1` tumpukan. | Untuk menyebarkan `ApiStackV1` tumpukan, gunakan perintah berikut:<pre>npm run deploy-v1</pre>Kode CDK berikut menambahkan pemetaan API:<pre>var apiMapping = new CfnApiMapping(this, "ApiMapping", {<br />      apiId: this.lambdaRestApi.restApiId,<br />      domainName: props.customDomainName.domainName,<br />      stage: "api",<br />      apiMappingKey: "api/v1",<br />    });</pre> | Pengembang aplikasi | 
| Menyebarkan `ApiStackV2` tumpukan. | Untuk menyebarkan `ApiStackV2` tumpukan, gunakan perintah berikut:<pre>npm run deploy-v2</pre> | Pengembang aplikasi | 
| Memanggil API. | [Untuk menjalankan API dan menguji titik akhir API menggunakan Bruno, lihat petunjuk di Informasi tambahan.](#implement-path-based-api-versioning-by-using-custom-domains-additional) | Pengembang aplikasi | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Pembersihan sumber daya  | Untuk menghancurkan sumber daya yang terkait dengan aplikasi sampel ini, gunakan perintah berikut:<pre>npx cdk destroy --all</pre>Pastikan Anda membersihkan semua catatan DNS Route 53 yang ditambahkan secara manual untuk proses verifikasi kepemilikan domain. | Pengembang aplikasi | 

## Pemecahan masalah
<a name="implement-path-based-api-versioning-by-using-custom-domains-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penerapan `CustomDomainRouterStack` waktu habis karena sertifikat tidak dapat divalidasi. | Pastikan Anda menambahkan catatan CNAME validasi DNS yang tepat seperti yang dijelaskan dalam tugas sebelumnya. Sertifikat baru Anda mungkin terus menampilkan status **validasi Tertunda** hingga 30 menit setelah menambahkan catatan validasi DNS. Untuk informasi selengkapnya, lihat [validasi DNS](https://docs.aws.amazon.com/acm/latest/userguide/dns-validation.html) dalam dokumentasi. AWS Certificate Manager  | 

## Sumber daya terkait
<a name="implement-path-based-api-versioning-by-using-custom-domains-resources"></a>
+ [Menerapkan versi API Gateway berbasis header dengan CloudFront Amazon](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/) - Posting Blog Komputasi AWS ini menawarkan strategi pembuatan versi berbasis header sebagai alternatif strategi pembuatan versi berbasis jalur yang diuraikan dalam pola ini.
+ [AWS CDK Workshop](https://cdkworkshop.com/20-typescript.html) — Lokakarya pengantar ini berfokus pada membangun dan menerapkan aplikasi AWS dengan menggunakan. AWS Cloud Development Kit (AWS CDK) Workshop ini mendukung Go, Python, dan. TypeScript 

## Informasi tambahan
<a name="implement-path-based-api-versioning-by-using-custom-domains-additional"></a>

**Menguji API Anda dengan Bruno**

Kami menyarankan Anda menggunakan [Bruno](https://www.usebruno.com/), alat pengujian API open source, untuk memverifikasi bahwa routing berbasis jalur berfungsi dengan baik untuk aplikasi sampel. Pola ini menyediakan koleksi sampel untuk memfasilitasi pengujian API sampel Anda.

Untuk memanggil dan menguji API Anda, gunakan langkah-langkah berikut:

1. [Instal Bruno.](https://www.usebruno.com/downloads)

1. Buka Bruno.

1. Dalam [repositori kode](https://github.com/aws-samples/path-based-versioning-with-api-gateway) pola ini, pilih **Bruno/Sample-API** - dan buka koleksi. Gateway-Custom-Domain-Versioning 

1. Untuk melihat dropdown **Environments** di kanan atas antarmuka pengguna (UI), pilih permintaan apa pun dalam koleksi.

1. **Di dropdown **Environments**, pilih Configure.**

1. Ganti `REPLACE_ME_WITH_YOUR_DOMAIN` nilainya dengan domain kustom Anda.

1. Pilih **Simpan**, lalu tutup bagian **Konfigurasi**.

1. Untuk **Sandbox Environment**,**** verifikasi bahwa opsi **Aktif** dipilih.

1. Panggil API Anda dengan menggunakan tombol **->** untuk permintaan yang dipilih.

1. Perhatikan bagaimana validasi (meneruskan nilai non-angka) ditangani di V1 dibandingkan dengan V2.

[Untuk melihat tangkapan layar contoh pemanggilan API dan perbandingan validasi V1 dan V2, lihat **Menguji API sampel Anda dalam `README.md` file di repositori** kode pola ini.](https://github.com/aws-samples/path-based-versioning-with-api-gateway)

# Impor pustaka psycopg2 AWS Lambda untuk berinteraksi dengan database PostgreSQL Anda
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Ringkasan
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg adalah adaptor database](https://www.psycopg.org/docs/) PostgressQL untuk Python. Pengembang menggunakan `psycopg2` perpustakaan untuk menulis aplikasi Python yang berinteraksi dengan database PostgreSQL.

Di Amazon Web Services (AWS), pengembang juga menggunakan [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)untuk menjalankan kode untuk aplikasi atau layanan backend. Lambda adalah layanan komputasi tanpa server yang digerakkan oleh peristiwa yang menjalankan kode tanpa perlu menyediakan atau mengelola server.

[Secara default, saat Anda membuat fungsi baru yang menggunakan runtime [Python yang didukung oleh Lambda, lingkungan runtime Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) dibuat dari gambar dasar untuk Lambda yang disediakan oleh.](https://github.com/aws/aws-lambda-base-images) AWS Pustaka, seperti `pandas` atau`psycopg2`, tidak termasuk dalam gambar dasar. Untuk menggunakan perpustakaan, Anda perlu menggabungkannya dalam paket khusus dan melampirkannya ke Lambda.

Ada beberapa cara untuk menggabungkan dan melampirkan perpustakaan, termasuk yang berikut:
+ Terapkan fungsi Lambda Anda dari arsip [file.zip.](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)
+ Terapkan fungsi Lambda Anda dari gambar kontainer khusus.
+ Buat [layer Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions), dan lampirkan ke fungsi Lambda Anda.

Pola ini menunjukkan dua opsi pertama.

Dengan paket penyebaran.zip, menambahkan `pandas` pustaka ke fungsi Lambda Anda relatif mudah. Buat folder di mesin Linux Anda, tambahkan skrip Lambda bersama dengan `pandas` perpustakaan dan dependensi perpustakaan ke folder, zip folder, dan sediakan sebagai sumber untuk fungsi Lambda Anda.

Meskipun menggunakan paket penyebaran.zip adalah praktik umum, pendekatan itu tidak berfungsi untuk perpustakaan. `psycopg2` Pola ini pertama-tama menunjukkan kesalahan yang Anda dapatkan jika Anda menggunakan paket penyebaran .zip untuk menambahkan `psycopg2` pustaka ke fungsi Lambda Anda. Pola kemudian menunjukkan cara menerapkan Lambda dari Dockerfile dan mengedit gambar Lambda untuk membuat perpustakaan berfungsi. `psycopg2`

Untuk informasi tentang tiga sumber daya yang diterapkan pola, lihat bagian [Informasi tambahan](#import-psycopg2-library-lambda-additional).

## Prasyarat dan batasan
<a name="import-psycopg2-library-lambda-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS dengan izin yang cukup untuk menyebarkan AWS sumber daya yang digunakan oleh pola ini
+ AWS Cloud Development Kit (AWS CDK) diinstal secara global dengan menjalankan `npm install -g aws-cdk`
+ Klien Git
+ Python
+ Docker

**Keterbatasan**
+ 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**
+ [Versi runtime Python yang didukung oleh Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Psycopg2 versi 2.9.3
+ Pandas versi 1.5.2

## Arsitektur
<a name="import-psycopg2-library-lambda-architecture"></a>

**Ikhtisar solusi**

Untuk mengilustrasikan tantangan yang mungkin Anda hadapi saat menggunakan `psycopg2` pustaka di Lambda, pola tersebut menerapkan dua fungsi Lambda:
+ Satu fungsi Lambda dengan runtime Python dibuat dari file.zip. `pandas`[Pustaka `psycopg2` dan diinstal dalam paket penyebaran.zip ini dengan menggunakan pip.](https://pypi.org/project/pip/)
+ Satu fungsi Lambda dengan runtime Python dibuat dari Dockerfile. Dockerfile menginstal `psycopg2` dan `pandas` pustaka ke dalam gambar kontainer Lambda.

Fungsi Lambda pertama menginstal `pandas` perpustakaan dan dependensinya dalam file.zip, dan Lambda dapat menggunakan pustaka itu.

Fungsi Lambda kedua menunjukkan bahwa dengan membangun gambar kontainer untuk fungsi Lambda Anda, Anda dapat menjalankan dan `pandas` perpustakaan di Lambda. `psycopg2`

## Alat
<a name="import-psycopg2-library-lambda-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 menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.
+ [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.

**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.
+ [panda](https://pandas.pydata.org/) adalah alat open source berbasis Python untuk analisis dan manipulasi data.
+ [Psycopg](https://www.psycopg.org/docs/) adalah adaptor database PostgreSQL untuk bahasa Python yang dirancang untuk aplikasi multithreaded. Pola ini menggunakan Psycopg 2.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di [impor-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - repositori pada. in-lambda-to-interact with-postgres-database GitHub

## Praktik terbaik
<a name="import-psycopg2-library-lambda-best-practices"></a>

Pola ini memberi Anda contoh kerja penggunaan AWS CDK untuk membuat fungsi Lambda dari Dockerfile. Jika Anda menggunakan kembali kode ini dalam aplikasi Anda, pastikan bahwa sumber daya yang digunakan memenuhi semua persyaratan keamanan. Gunakan alat seperti [Checkov](https://www.checkov.io/), yang memindai konfigurasi infrastruktur cloud untuk menemukan kesalahan konfigurasi sebelum infrastruktur diterapkan.

## Epik
<a name="import-psycopg2-library-lambda-epics"></a>

### Kloning repositori dan konfigurasikan penerapan
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning GitHub repositori pada mesin lokal Anda, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS Umum | 
| Konfigurasikan penerapan Anda. | Edit `app.py` file dengan informasi tentang Anda Akun AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS Umum | 

### Bootstrap akun AWS Anda dan terapkan aplikasi
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bootstrap Anda Akun AWS. | Jika Anda belum [mem-bootstrap lingkungan AWS Anda](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), jalankan perintah berikut dengan AWS kredensyal akun Anda: AWS <pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS Umum | 
| Menyebarkan kode. | Untuk menyebarkan AWS CDK aplikasi, jalankan perintah berikut:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS Umum | 

### Uji fungsi Lambda dari AWS Management Console
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji fungsi Lambda yang dibuat dari file.zip. | Untuk menguji fungsi Lambda yang dibuat dari file.zip, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Karena Lambda tidak menemukan pustaka PostgreSQL yang diperlukan dalam gambar default, Lambda tidak dapat menggunakan pustaka. `psycopg2` | AWS Umum | 
| Uji fungsi Lambda yang dibuat dari Dockerfile. | Untuk menggunakan `psycopg2` pustaka dalam fungsi Lambda Anda, Anda harus mengedit Lambda Amazon Machine Image (AMI).Untuk menguji fungsi Lambda yang dibuat dari Dockerfile, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Kode berikut menunjukkan Dockerfile yang dibuat AWS CDK template:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>Dockerfile mengambil gambar AWS Lambda yang disediakan untuk runtime Python dan menginstal [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/), yang berisi pustaka yang diperlukan untuk mengkompilasi aplikasi yang berinteraksi langsung dengan server manajemen PostgreSQL. Dockerfile juga menginstal `pandas` dan `psycopg2` perpustakaan, yang ditunjukkan dalam file. `requirements.txt` | AWS Umum | 

## Sumber daya terkait
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK dokumentasi](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Informasi tambahan
<a name="import-psycopg2-library-lambda-additional"></a>

Dalam pola ini, AWS CDK template menyediakan AWS tumpukan dengan tiga sumber daya:
+ Peran [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) untuk fungsi Lambda.
+ Fungsi Lambda dengan runtime Python. Fungsi ini digunakan dari paket `Constructs/lambda/lambda_deploy.zip` penyebaran.
+ Fungsi Lambda dengan runtime Python. Fungsi ini digunakan dari Dockerfile di bawah folder `Constructs`

Skrip untuk kedua fungsi Lambda memeriksa apakah `psycopg2` pustaka `pandas` dan pustaka berhasil diimpor:

```
import pandas
print("pandas successfully imported")

import psycopg2
print("psycopg2 successfully imported")

def handler(event, context):
    """Function that checks whether psycopg2  and pandas are successfully imported or not"""
    return {"Status": "psycopg2 and pandas successfully imported"}
```

Paket `lambda_deploy.zip` penerapan dibangun dengan skrip `Constructs/lambda/build.sh` bash. Skrip ini membuat folder, menyalin skrip Lambda, menginstal `pandas` dan `psycopg2` pustaka, dan menghasilkan file.zip. Untuk membuat file.zip sendiri, jalankan skrip bash ini dan gunakan kembali tumpukan. AWS CDK 

Dockerfile dimulai dengan image dasar yang AWS disediakan untuk Lambda dengan runtime Python. Dockerfile menginstal `pandas` dan `psycopg2` pustaka di atas gambar default.

# Integrasikan Amazon API Gateway dengan Amazon SQS untuk menangani REST asinkron APIs
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis"></a>

*Natalia Colantonio Favero dan Gustavo Martim, Amazon Web Services*

## Ringkasan
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-summary"></a>

Saat Anda menerapkan REST APIs, terkadang Anda perlu mengekspos antrian pesan yang dapat dipublikasikan oleh aplikasi klien. Misalnya, Anda mungkin memiliki masalah dengan latensi pihak ketiga APIs dan penundaan respons, atau Anda mungkin ingin menghindari waktu respons kueri database atau menghindari penskalaan server ketika ada sejumlah besar konkuren. APIs Dalam skenario ini, aplikasi klien yang mempublikasikan ke antrian hanya perlu mengetahui bahwa API menerima data—bukan apa yang terjadi setelah data diterima.

Pola ini membuat endpoint REST API dengan menggunakan [Amazon API Gateway](https://aws.amazon.com/api-gateway/) untuk mengirim pesan ke [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/). Ini menciptakan easy-to-implement integrasi antara dua layanan yang menghindari akses langsung ke antrian SQS.

## Prasyarat dan batasan
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-prereqs"></a>
+ [AWS Akun aktif](https://portal.aws.amazon.com/billing/signup/iam)

## Arsitektur
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-architecture"></a>

![\[Arsitektur untuk mengintegrasikan API Gateway dengan Amazon SQS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/70984dee-e49f-4446-9d52-49ce826c3909/images/737ba0b2-da8f-4478-8c54-0a4835fd69f9.png)


Diagram menggambarkan langkah-langkah ini:

1. Minta titik akhir POST REST API dengan menggunakan alat seperti Postman, API lain, atau teknologi lainnya.

1. API Gateway memposting pesan, yang diterima di badan permintaan, pada antrian.

1. Amazon SQS menerima pesan dan mengirimkan jawaban ke API Gateway dengan kode sukses atau gagal.

## Alat
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-tools"></a>
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) membantu Anda membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, dan WebSocket APIs dalam skala apa pun.
+ [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 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.   

## Epik
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-epics"></a>

### Buat antrian SQS
<a name="create-an-sqs-queue"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat antrian. | Untuk membuat antrean SQS yang menerima pesan dari REST API:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 

### Menyediakan akses ke Amazon SQS
<a name="provide-access-to-sqs"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat peran IAM. | Peran IAM ini memberikan sumber daya API Gateway akses penuh ke Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi, administrator AWS | 

### Buat REST API
<a name="create-a-rest-api"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat REST API. | Ini adalah REST API tempat permintaan HTTP dikirim.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 
| Hubungkan API Gateway ke Amazon SQS. | Langkah ini memungkinkan pesan mengalir dari dalam badan permintaan HTTP ke Amazon SQS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 

### Uji REST API
<a name="test-the-rest-api"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji REST API. | Jalankan tes untuk memeriksa konfigurasi yang hilang:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 
| Ubah integrasi API untuk meneruskan permintaan dengan benar ke Amazon SQS. | Selesaikan konfigurasi untuk memperbaiki kesalahan integrasi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 
| Uji dan validasi pesan di Amazon SQS. | Jalankan tes untuk mengonfirmasi bahwa tes berhasil diselesaikan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 
| Uji API Gateway dengan karakter khusus. | Jalankan pengujian yang menyertakan karakter khusus (seperti &) yang tidak dapat diterima dalam pesan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Ini karena karakter khusus tidak didukung secara default di badan pesan. Pada langkah berikutnya, Anda akan mengonfigurasi API Gateway untuk mendukung karakter khusus. Untuk informasi selengkapnya tentang konversi jenis konten, lihat [dokumentasi API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html). | Pengembang aplikasi | 
| Ubah konfigurasi API untuk mendukung karakter khusus. | Sesuaikan konfigurasi untuk menerima karakter khusus dalam pesan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html)Pesan baru harus menyertakan karakter khusus. | Pengembang aplikasi | 

### Menerapkan REST API
<a name="deploy-the-rest-api"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menerapkan API. |  Untuk menerapkan REST API:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 
| Uji dengan alat eksternal. | Jalankan pengujian dengan alat eksternal untuk mengonfirmasi bahwa pesan berhasil diterima:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis.html) | Pengembang aplikasi | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus API. | Di [konsol API Gateway](https://console.aws.amazon.com/apigateway/), pilih API yang Anda buat, lalu pilih **Hapus**. | Pengembang aplikasi | 
| Hapus peran IAM. | **Di [konsol IAM](https://console.aws.amazon.com/iam/), di panel **Peran**, pilih **AWSGatewayRoleForSQS**, lalu pilih Hapus.** | Pengembang aplikasi | 
| Hapus antrian SQS. | **Di [konsol Amazon SQS](https://console.aws.amazon.com/sqs/), di panel Antrian, pilih **antrian** SQS yang Anda buat, lalu pilih Hapus.** | Pengembang aplikasi | 

## Sumber daya terkait
<a name="integrate-amazon-api-gateway-with-amazon-sqs-to-handle-asynchronous-rest-apis-resources"></a>
+ [SQS- SendMessage](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-aws-services-reference.html#SQS-SendMessage) (dokumentasi API Gateway)
+ [Konversi jenis konten di API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html) (dokumentasi API Gateway)
+ [variabel \$1 util (dokumentasi](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#util-template-reference) API Gateway)
+ [Bagaimana cara mengintegrasikan API Gateway REST API dengan Amazon SQS dan mengatasi kesalahan umum?](https://repost.aws/knowledge-center/api-gateway-rest-api-sqs-errors) (AWS Re: artikel posting)

# Memproses peristiwa secara asinkron dengan Amazon API Gateway dan AWS Lambda
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, dan Michael Wallner, Amazon Web Services*

## Ringkasan
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) adalah layanan terkelola penuh yang dapat digunakan pengembang untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan APIs pada skala apa pun. Ini menangani tugas-tugas yang terlibat dalam menerima dan memproses hingga ratusan ribu panggilan API bersamaan.

Kuota layanan penting API Gateway adalah batas waktu integrasi. Batas waktu adalah waktu maksimum di mana layanan backend harus mengembalikan respons sebelum REST API mengembalikan kesalahan. Batas keras 29 detik umumnya dapat diterima untuk beban kerja sinkron. Namun, batas itu merupakan tantangan bagi pengembang yang ingin menggunakan API Gateway dengan beban kerja asinkron.

Pola ini menunjukkan contoh arsitektur untuk memproses peristiwa secara asinkron menggunakan API Gateway dan. AWS Lambda Arsitektur mendukung menjalankan tugas pemrosesan dengan durasi hingga 15 menit, dan menggunakan REST API dasar sebagai antarmuka.

[Projen](https://pypi.org/project/projen/) [digunakan untuk mengatur lingkungan pengembangan lokal dan untuk menyebarkan arsitektur contoh ke target Akun AWS, dalam kombinasi dengan [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/), dan Node.js.](https://nodejs.org/en/download/) Projen secara otomatis menyiapkan lingkungan virtual [Python](https://www.python.org/downloads/) [dengan](https://pre-commit.com/) pra-komit dan alat yang digunakan untuk jaminan kualitas kode, pemindaian keamanan, dan pengujian unit. Untuk informasi selengkapnya, lihat bagian [Alat](#process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-tools).

## Prasyarat dan batasan
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Alat-alat berikut diinstal pada workstation Anda:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit versi 2.85.0](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
  + [Docker versi 20.10.21](https://docs.docker.com/get-docker/)
  + [Node.js](https://nodejs.org/en/download/) versi 18.13.0
  + [Projen versi 0.71.111](https://pypi.org/project/projen/)
  + [Python versi 3.9.16](https://www.python.org/downloads/)

**Keterbatasan**
+ Runtime maksimum suatu pekerjaan dibatasi oleh runtime maksimum untuk fungsi Lambda (15 menit).
+ Jumlah maksimum permintaan pekerjaan bersamaan dibatasi oleh konkurensi yang dicadangkan dari fungsi Lambda.

## Arsitektur
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-architecture"></a>

Diagram berikut menunjukkan interaksi API pekerjaan dengan fungsi Lambda pemrosesan peristiwa dan penanganan kesalahan, dengan peristiwa yang disimpan dalam arsip peristiwa Amazon. EventBridge 

![\[AWS Cloud architecture showing user interaction with jobs API, Lambda functions, and EventBridge.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e027130c-44c1-41ab-bbe9-f196a49bd9ac/images/3c437b65-48e3-477d-aeea-6ff938cc3285.png)


Alur kerja tipikal mencakup langkah-langkah berikut:

1. Anda mengautentikasi terhadap AWS Identity and Access Management (IAM) dan mendapatkan kredensi keamanan.

1. Anda mengirim `POST` permintaan HTTP ke titik akhir API `/jobs` lowongan, yang menentukan parameter pekerjaan di badan permintaan.

1. API jobs, yang merupakan API API Gateway REST API, mengembalikan respons HTTP yang berisi pengenal pekerjaan kepada Anda.

1. API pekerjaan memanggil fungsi Lambda pemrosesan peristiwa secara asinkron.

1. Fungsi pemrosesan peristiwa memproses peristiwa, dan kemudian menempatkan hasil pekerjaan di tabel Amazon DynamoDB pekerjaan

1. Anda mengirim `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` pekerjaan, dengan pengenal pekerjaan dari langkah 3 sebagai. `{jobId}`

1. API pekerjaan menanyakan tabel `jobs` DynamoDB untuk mengambil hasil pekerjaan.

1. API pekerjaan mengembalikan respons HTTP yang berisi hasil pekerjaan.

1. Jika pemrosesan peristiwa gagal, fungsi pemrosesan peristiwa mengirimkan acara ke fungsi penanganan kesalahan.

1. Fungsi penanganan kesalahan menempatkan parameter pekerjaan dalam tabel `jobs` DynamoDB.

1. Anda dapat mengambil parameter pekerjaan dengan mengirimkan `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` lowongan.

1. Jika penanganan kesalahan gagal, fungsi penanganan kesalahan akan mengirimkan acara ke arsip EventBridge peristiwa.

   Anda dapat memutar ulang acara yang diarsipkan dengan menggunakan. EventBridge

## Alat
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-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 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 dengan layanan AWS melalui perintah di shell baris perintah Anda.
+ [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.
+ [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 Lambda, 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.

**Alat-alat lainnya**
+ [autopep8](https://github.com/hhatto/autopep8) secara otomatis memformat kode Python berdasarkan panduan gaya Proposal Peningkatan Python (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) memindai kode Python untuk menemukan masalah keamanan umum.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) adalah pemeriksa dan generator komit Git. `CHANGELOG`
+ [cfn-lint adalah linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) adalah alat analisis kode statis yang memeriksa infrastruktur sebagai kode (IAc) untuk kesalahan konfigurasi keamanan dan kepatuhan.
+ [jq](https://stedolan.github.io/jq/download/) adalah alat baris perintah untuk mengurai JSON.
+ [Postman](https://www.postman.com/) adalah platform API.
+ [pre-commit](https://pre-commit.com/) adalah manajer Git Hooks.
+ [Projen](https://github.com/projen/projen) adalah generator proyek.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) adalah kerangka kerja Python untuk menulis tes kecil yang dapat dibaca.

**Repositori kode**

Contoh kode arsitektur ini dapat ditemukan di GitHub [Asynchronous Event Processing dengan API Gateway dan repositori Lambda](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk).

## Praktik terbaik
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-best-practices"></a>
+ Contoh arsitektur ini tidak termasuk pemantauan infrastruktur yang diterapkan. Jika kasus penggunaan Anda memerlukan pemantauan, evaluasi penambahan [Konstruksi Pemantauan CDK atau solusi](https://constructs.dev/packages/cdk-monitoring-constructs) pemantauan lainnya.
+ Contoh arsitektur ini menggunakan [izin IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) untuk mengontrol akses ke API pekerjaan. Siapa pun yang berwenang untuk berasumsi `JobsAPIInvokeRole` akan dapat memanggil API pekerjaan. Dengan demikian, mekanisme kontrol akses adalah biner. Jika kasus penggunaan Anda memerlukan model otorisasi yang lebih kompleks, evaluasi menggunakan [mekanisme kontrol akses](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) yang berbeda.
+ Saat pengguna mengirim `POST` permintaan HTTP ke titik akhir API `/jobs` jobs, data input divalidasi pada dua tingkatan yang berbeda:
  + Amazon API Gateway bertanggung jawab atas [validasi permintaan](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) pertama.
  + Fungsi pemrosesan acara melakukan permintaan kedua.

    Tidak ada validasi yang dilakukan saat pengguna melakukan `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` lowongan. Jika kasus penggunaan Anda memerlukan validasi input tambahan dan peningkatan tingkat keamanan, evaluasi [menggunakan AWS WAF untuk melindungi](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html) API Anda.

## Epik
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori secara lokal, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-lambda-cdk.git</pre> | DevOps insinyur | 
| Siapkan proyek. | [Ubah direktori ke root repositori dan atur lingkungan virtual Python dan semua alat dengan menggunakan Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-lambda-cdk<br />npx projen</pre> | DevOps insinyur | 
| Instal kait pra-komit. | Untuk memasang kait pra-komit, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | DevOps insinyur | 

### Menyebarkan contoh arsitektur
<a name="deploy-the-example-architecture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bootstrap AWS CDK. | Untuk bootstrap AWS CDK di Anda Akun AWS, jalankan perintah berikut:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Menyebarkan contoh arsitektur. | Untuk menerapkan arsitektur contoh di Anda Akun AWS, jalankan perintah berikut:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Uji arsitekturnya
<a name="test-the-architecture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal prasyarat tes. | [Instal di workstation Anda [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/), dan jq.](https://jqlang.github.io/jq/)Menggunakan [Postman](https://www.postman.com/downloads/) untuk menguji arsitektur contoh ini disarankan tetapi tidak wajib. Jika Anda memilih alat pengujian API alternatif, pastikan alat tersebut mendukung [otentikasi AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html), dan lihat titik akhir API terbuka yang dapat diperiksa dengan [mengekspor](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) REST API. | DevOps insinyur | 
| Asumsikan`JobsAPIInvokeRole`. | [Asumsikan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` yang dicetak sebagai output dari perintah deploy:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Konfigurasikan Tukang Pos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | AWS DevOps | 
| Uji contoh arsitektur. | Untuk menguji arsitektur contoh, [kirim permintaan](https://learning.postman.com/docs/sending-requests/requests/#next-steps) ke API pekerjaan. Untuk informasi lebih lanjut, lihat [dokumentasi Tukang Pos](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps insinyur | 

## Pemecahan masalah
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penghancuran dan pemindahan arsitektur contoh berikutnya gagal karena [grup CloudWatch log Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` sudah ada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda.html) | 

## Sumber daya terkait
<a name="process-events-asynchronously-with-amazon-api-gateway-and-aws-lambda-resources"></a>
+ [Template pemetaan API Gateway dan referensi variabel pencatatan akses](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Siapkan pemanggilan asinkron dari fungsi Lambda backend](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html)

# Memproses peristiwa secara asinkron dengan Amazon API Gateway dan Amazon DynamoDB Streams
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini, dan Michael Wallner, Amazon Web Services*

## Ringkasan
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) adalah layanan terkelola penuh yang dapat digunakan pengembang untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan APIs pada skala apa pun. Ini menangani tugas yang terlibat dalam menerima dan memproses hingga ratusan ribu panggilan API bersamaan.

Kuota layanan penting API Gateway adalah batas waktu integrasi. Batas waktu adalah waktu maksimum di mana layanan backend harus mengembalikan respons sebelum REST API mengembalikan kesalahan. Batas keras 29 detik umumnya dapat diterima untuk beban kerja sinkron. Namun, batas itu merupakan tantangan bagi pengembang yang ingin menggunakan API Gateway dengan beban kerja asinkron.

Pola ini menunjukkan contoh arsitektur untuk memproses peristiwa secara asinkron menggunakan API Gateway, Amazon DynamoDB Streams, dan. AWS Lambda Arsitektur mendukung menjalankan tugas pemrosesan paralel dengan parameter input yang sama, dan menggunakan REST API dasar sebagai antarmuka. Dalam contoh ini, menggunakan Lambda sebagai backend membatasi durasi pekerjaan hingga 15 menit. Anda dapat menghindari batas ini dengan menggunakan layanan alternatif untuk memproses peristiwa yang masuk (misalnya, AWS Fargate).

[Projen](https://pypi.org/project/projen/) [digunakan untuk mengatur lingkungan pengembangan lokal dan untuk menyebarkan arsitektur contoh ke target Akun AWS, dalam kombinasi dengan [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html), [Docker](https://docs.docker.com/get-docker/) dan Node.js.](https://nodejs.org/en/download/) Projen secara otomatis menyiapkan lingkungan virtual [Python](https://www.python.org/downloads/) [dengan](https://pre-commit.com/) pra-komit dan alat yang digunakan untuk jaminan kualitas kode, pemindaian keamanan, dan pengujian unit. Untuk informasi selengkapnya, lihat bagian [Alat](#processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-tools).

## Prasyarat dan batasan
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Alat-alat berikut diinstal pada workstation Anda:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versi 2.85.0 atau yang lebih baru
  + [Docker](https://docs.docker.com/get-docker/) versi 20.10.21 atau yang lebih baru
  + [Node.js](https://nodejs.org/en/download/) versi 18 atau yang lebih baru
  + [Projen](https://pypi.org/project/projen/) versi 0.71.111 atau yang lebih baru
  + [Python](https://www.python.org/downloads/) versi 3.9.16 atau yang lebih baru

**Keterbatasan**
+ Jumlah maksimum pembaca yang disarankan untuk DynamoDB Streams adalah dua untuk menghindari pelambatan.
+ Runtime maksimum suatu pekerjaan dibatasi oleh runtime maksimum untuk fungsi Lambda (15 menit).
+ Jumlah maksimum permintaan pekerjaan bersamaan dibatasi oleh konkurensi yang dicadangkan dari fungsi Lambda.

## Arsitektur
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-architecture"></a>

**Arsitektur **

Diagram berikut menunjukkan interaksi API pekerjaan dengan DynamoDB Streams dan fungsi Lambda pemrosesan peristiwa dan penanganan kesalahan, dengan peristiwa yang disimpan dalam arsip peristiwa Amazon. EventBridge 

![\[Diagram arsitektur dan proses, dengan langkah-langkah yang tercantum setelah diagram.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/68a46501-16e5-48e4-99c6-fc67a8b4133a/images/29fe6982-ad81-4099-9c65-08b17c96e78f.png)


Alur kerja tipikal mencakup langkah-langkah berikut:

1. Anda mengautentikasi terhadap AWS Identity and Access Management (IAM) dan mendapatkan kredensi keamanan.

1. Anda mengirim `POST` permintaan HTTP ke titik akhir API `/jobs` lowongan, yang menentukan parameter pekerjaan di badan permintaan.

1. API pekerjaan mengembalikan respons HTTP yang berisi pengenal pekerjaan kepada Anda.

1. API pekerjaan menempatkan parameter pekerjaan di tabel `jobs_table` Amazon DynamoDB.

1. Tabel `jobs_table` DynamoDB aliran DynamoDB memanggil fungsi Lambda pemrosesan peristiwa.

1. Fungsi Lambda pemrosesan peristiwa memproses peristiwa dan kemudian menempatkan hasil pekerjaan di tabel DynamoDB. `jobs_table` Untuk membantu memastikan hasil yang konsisten, fungsi pemrosesan peristiwa menerapkan mekanisme penguncian yang [optimis](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html).

1. Anda mengirim `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` pekerjaan, dengan pengenal pekerjaan dari langkah 3 sebagai. `{jobId}`

1. API pekerjaan menanyakan tabel `jobs_table` DynamoDB untuk mengambil hasil pekerjaan.

1. API pekerjaan mengembalikan respons HTTP yang berisi hasil pekerjaan.

1. Jika pemrosesan peristiwa gagal, pemetaan sumber fungsi pemrosesan peristiwa akan mengirimkan peristiwa ke topik Simple Notification Service Amazon (Amazon SNS) yang menangani kesalahan.

1. Topik SNS penanganan kesalahan secara asinkron mendorong acara ke fungsi penanganan kesalahan.

1. Fungsi penanganan kesalahan menempatkan parameter pekerjaan dalam tabel `jobs_table` DynamoDB.

   Anda dapat mengambil parameter pekerjaan dengan mengirimkan `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` lowongan.

1. Jika penanganan kesalahan gagal, fungsi penanganan kesalahan akan mengirimkan acara ke arsip Amazon EventBridge .

   Anda dapat memutar ulang acara yang diarsipkan dengan menggunakan. EventBridge

## Alat
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-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 menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.
+ [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.
+ [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 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.

**Alat lainnya**
+ [autopep8](https://github.com/hhatto/autopep8) secara otomatis memformat kode Python berdasarkan panduan gaya Proposal Peningkatan Python (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) memindai kode Python untuk menemukan masalah keamanan umum.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) adalah pemeriksa dan generator komit Git. `CHANGELOG`
+ [cfn-lint adalah linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) adalah alat analisis kode statis yang memeriksa infrastruktur sebagai kode (IAc) untuk kesalahan konfigurasi keamanan dan kepatuhan.
+ [jq](https://stedolan.github.io/jq/download/) adalah alat baris perintah untuk mengurai JSON.
+ [Postman](https://www.postman.com/) adalah platform API.
+ [pre-commit](https://pre-commit.com/) adalah manajer Git Hooks.
+ [Projen](https://github.com/projen/projen) adalah generator proyek.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) adalah kerangka kerja Python untuk menulis tes kecil yang dapat dibaca.

**Repositori kode**

Contoh kode arsitektur ini dapat ditemukan di GitHub [Asynchronous Processing with API Gateway dan DynamoDB](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk) Streams repositori.

## Praktik terbaik
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-best-practices"></a>
+ Contoh arsitektur ini tidak termasuk pemantauan infrastruktur yang diterapkan. Jika kasus penggunaan Anda memerlukan pemantauan, evaluasi penambahan [Konstruksi Pemantauan CDK atau solusi](https://constructs.dev/packages/cdk-monitoring-constructs) pemantauan lainnya.
+ Contoh arsitektur ini menggunakan [izin IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) untuk mengontrol akses ke API pekerjaan. Siapa pun yang berwenang untuk berasumsi `JobsAPIInvokeRole` akan dapat memanggil API pekerjaan. Dengan demikian, mekanisme kontrol akses adalah biner. Jika kasus penggunaan Anda memerlukan model otorisasi yang lebih kompleks, evaluasi menggunakan [mekanisme kontrol akses](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) yang berbeda.
+ Saat pengguna mengirim `POST` permintaan HTTP ke titik akhir API `/jobs` jobs, data input divalidasi pada dua tingkatan yang berbeda:
  + API Gateway bertanggung jawab atas [validasi permintaan](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) pertama.
  + Fungsi pemrosesan acara melakukan permintaan kedua.

    Tidak ada validasi yang dilakukan saat pengguna melakukan `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` lowongan. Jika kasus penggunaan Anda memerlukan validasi input tambahan dan tingkat keamanan yang lebih tinggi, evaluasi [penggunaan AWS WAF untuk melindungi API Anda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Untuk menghindari pembatasan, dokumentasi [DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Processing) mencegah pengguna membaca dengan lebih dari dua konsumen dari pecahan aliran yang sama. Untuk meningkatkan jumlah konsumen, sebaiknya gunakan [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html).
+ [Penguncian optimis](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html) telah digunakan dalam contoh ini untuk memastikan pembaruan item yang konsisten dalam tabel `jobs_table` DynamoDB. Bergantung pada persyaratan kasus penggunaan, Anda mungkin perlu menerapkan mekanisme penguncian yang lebih andal, seperti penguncian pesimis.

## Epik
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori secara lokal, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-dynamodb-streams-cdk.git</pre> | DevOps insinyur | 
| Siapkan proyek. | [Ubah direktori ke root repositori, dan atur lingkungan virtual Python dan semua alat dengan menggunakan Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-dynamodb-streams-cdk<br />npx projen</pre> | DevOps insinyur | 
| Pasang kait pra-komit. | Untuk memasang kait pra-komit, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | DevOps insinyur | 

### Menyebarkan contoh arsitektur
<a name="deploy-the-example-architecture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bootstrap AWS CDK. | Untuk bootstrap [AWS CDK](https://aws.amazon.com/cdk/)di Anda Akun AWS, jalankan perintah berikut:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Menyebarkan contoh arsitektur. | Untuk menerapkan arsitektur contoh di Anda Akun AWS, jalankan perintah berikut:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Uji arsitekturnya
<a name="test-the-architecture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal prasyarat tes. | [Instal di workstation Anda [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/), dan jq.](https://jqlang.github.io/jq/)Menggunakan [Postman](https://www.postman.com/downloads/) untuk menguji arsitektur contoh ini disarankan tetapi tidak wajib. Jika Anda memilih alat pengujian API alternatif, pastikan alat tersebut mendukung [autentikasi AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html), dan lihat titik akhir API terbuka yang dapat diperiksa dengan [mengekspor](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) REST API. | DevOps insinyur | 
| Asumsikan`JobsAPIInvokeRole`. | [Asumsikan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` yang dicetak sebagai output dari `deploy` perintah:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Konfigurasikan Tukang Pos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | AWS DevOps | 
| Uji contoh arsitektur. | Untuk menguji arsitektur contoh, kirim permintaan ke API pekerjaan. Untuk informasi lebih lanjut, lihat [dokumentasi Tukang Pos](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps insinyur | 

## Pemecahan masalah
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penghancuran dan pemindahan arsitektur contoh berikutnya gagal karena [grup CloudWatch log Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` sudah ada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams.html) | 

## Sumber daya terkait
<a name="processing-events-asynchronously-with-amazon-api-gateway-and-amazon-dynamodb-streams-resources"></a>
+ [Template pemetaan API Gateway dan referensi variabel pencatatan akses](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Ubah pengambilan data untuk DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)
+ [Penguncian optimis dengan nomor versi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html)
+ [Menggunakan Kinesis Data Streams untuk menangkap perubahan ke DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/kds.html)

# Memproses peristiwa secara asinkron dengan Amazon API Gateway, Amazon SQS, dan AWS Fargate
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate"></a>

*Andrea Meroni, Mariem Kthiri, Nadim Majed, Alessandro Trisolini, dan Michael Wallner, Amazon Web Services*

## Ringkasan
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-summary"></a>

[Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) adalah layanan terkelola penuh yang dapat digunakan pengembang untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan APIs pada skala apa pun. Ini menangani tugas-tugas yang terlibat dalam menerima dan memproses hingga ratusan ribu panggilan API bersamaan.

Kuota layanan penting API Gateway adalah batas waktu integrasi. Batas waktu adalah waktu maksimum di mana layanan backend harus mengembalikan respons sebelum REST API mengembalikan kesalahan. Batas keras 29 detik umumnya dapat diterima untuk beban kerja sinkron. Namun, batas itu merupakan tantangan bagi pengembang yang ingin menggunakan API Gateway dengan beban kerja asinkron.

Pola ini menunjukkan contoh arsitektur untuk memproses peristiwa secara asinkron menggunakan API Gateway, Amazon Simple Queue Service (Amazon SQS) dan. AWS Fargate Arsitektur mendukung menjalankan pekerjaan pemrosesan tanpa batasan durasi, dan menggunakan REST API dasar sebagai antarmuka.

[Projen](https://pypi.org/project/projen/) [digunakan untuk mengatur lingkungan pengembangan lokal dan untuk menyebarkan arsitektur contoh ke target Akun AWS, dalam kombinasi dengan, [Docker [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)](https://docs.docker.com/get-docker/), dan Node.js.](https://nodejs.org/en/download/) Projen secara otomatis menyiapkan lingkungan virtual [Python](https://www.python.org/downloads/) [dengan](https://pre-commit.com/) pra-komit dan alat yang digunakan untuk jaminan kualitas kode, pemindaian keamanan, dan pengujian unit. Untuk informasi selengkapnya, lihat bagian [Alat](#process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-tools).

## Prasyarat dan batasan
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Alat-alat berikut diinstal pada workstation Anda:
  + [AWS Cloud Development Kit (AWS CDK) Toolkit](https://docs.aws.amazon.com/cdk/v2/guide/cli.html) versi 2.85.0 atau yang lebih baru
  + [Docker](https://docs.docker.com/get-docker/) versi 20.10.21 atau yang lebih baru
  + [Node.js](https://nodejs.org/en/download/) versi 18 atau yang lebih baru
  + [Projen](https://pypi.org/project/projen/) versi 0.71.111 atau yang lebih baru
  + [Python](https://www.python.org/downloads/) versi 3.9.16 atau yang lebih baru

**Batasan**
+ Pekerjaan bersamaan dibatasi hingga 500 tugas per menit, yang merupakan jumlah maksimum tugas yang dapat disediakan Fargate.

## Arsitektur
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-architecture"></a>

Diagram berikut menunjukkan interaksi API jobs dengan tabel `jobs` Amazon DynamoDB, layanan Fargate pemrosesan peristiwa, dan fungsi penanganan kesalahan. AWS Lambda Acara disimpan dalam arsip EventBridge acara Amazon.

![\[Diagram arsitektur dengan deskripsi mengikuti diagram.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8a03149c-8f34-4593-84d5-accc1800a0a2/images/5e1071aa-4fbc-495c-bc22-8e62a32a136b.png)


Alur kerja tipikal mencakup langkah-langkah berikut:

1. Anda mengautentikasi terhadap AWS Identity and Access Management (IAM) dan mendapatkan kredensyal keamanan.

1. Anda mengirim `POST` permintaan HTTP ke titik akhir API `/jobs` lowongan, yang menentukan parameter pekerjaan di badan permintaan.

1. API jobs, yang merupakan API API Gateway REST API, mengembalikan respons HTTP yang berisi pengenal pekerjaan kepada Anda.

1. API pekerjaan mengirimkan pesan ke antrean SQS.

1. Fargate menarik pesan dari antrian SQS, memproses acara, dan kemudian menempatkan hasil pekerjaan di tabel DynamoDB. `jobs`

1. Anda mengirim `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` pekerjaan, dengan pengenal pekerjaan dari langkah 3 sebagai. `{jobId}`

1. API pekerjaan menanyakan tabel `jobs` DynamoDB untuk mengambil hasil pekerjaan.

1. API pekerjaan mengembalikan respons HTTP yang berisi hasil pekerjaan.

1. Jika pemrosesan acara gagal, antrian SQS mengirimkan acara ke antrian huruf mati (DLQ).

1. Sebuah EventBridge peristiwa memulai fungsi penanganan kesalahan.

1. Fungsi penanganan kesalahan menempatkan parameter pekerjaan dalam tabel `jobs` DynamoDB.

1. Anda dapat mengambil parameter pekerjaan dengan mengirimkan `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` lowongan.

1. Jika penanganan kesalahan gagal, fungsi penanganan kesalahan akan mengirimkan acara ke arsip. EventBridge 

   Anda dapat memutar ulang acara yang diarsipkan dengan menggunakan. EventBridge

## Alat
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-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 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 Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html)membantu Anda menjalankan container tanpa perlu mengelola server atau instans Amazon Elastic Compute Cloud EC2 (Amazon). Ini digunakan bersama dengan Amazon Elastic Container Service (Amazon ECS).
+ [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 Lambda, 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.
+ [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.

**Alat-alat lainnya**
+ [autopep8](https://github.com/hhatto/autopep8) secara otomatis memformat kode Python berdasarkan panduan gaya Proposal Peningkatan Python (PEP) 8.
+ [Bandit](https://bandit.readthedocs.io/en/latest/) memindai kode Python untuk menemukan masalah keamanan umum.
+ [Commitizen](https://commitizen-tools.github.io/commitizen/) adalah pemeriksa dan generator komit Git. `CHANGELOG`
+ [cfn-lint adalah linter](https://github.com/aws-cloudformation/cfn-lint) AWS CloudFormation 
+ [Checkov](https://github.com/bridgecrewio/checkov) adalah alat analisis kode statis yang memeriksa infrastruktur sebagai kode (IAc) untuk kesalahan konfigurasi keamanan dan kepatuhan.
+ [jq](https://stedolan.github.io/jq/download/) adalah alat baris perintah untuk mengurai JSON.
+ [Postman](https://www.postman.com/) adalah platform API.
+ [pre-commit](https://pre-commit.com/) adalah manajer Git Hooks.
+ [Projen](https://github.com/projen/projen) adalah generator proyek.
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) adalah kerangka kerja Python untuk menulis tes kecil yang dapat dibaca.

**Repositori kode**

Contoh kode arsitektur ini dapat ditemukan di GitHub [Asynchronous Processing dengan API Gateway dan](https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk) SQS repositori.

## Praktik terbaik
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-best-practices"></a>
+ Contoh arsitektur ini tidak termasuk pemantauan infrastruktur yang diterapkan. Jika kasus penggunaan Anda memerlukan pemantauan, evaluasi penambahan [Konstruksi Pemantauan CDK atau solusi](https://constructs.dev/packages/cdk-monitoring-constructs) pemantauan lainnya.
+ Contoh arsitektur ini menggunakan [izin IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) untuk mengontrol akses ke API pekerjaan. Siapa pun yang berwenang untuk berasumsi `JobsAPIInvokeRole` akan dapat memanggil API pekerjaan. Dengan demikian, mekanisme kontrol akses adalah biner. Jika kasus penggunaan Anda memerlukan model otorisasi yang lebih kompleks, evaluasi menggunakan [mekanisme kontrol akses](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html) yang berbeda.
+ Saat pengguna mengirim `POST` permintaan HTTP ke titik akhir API `/jobs` jobs, data input divalidasi pada dua tingkatan yang berbeda:
  + API Gateway bertanggung jawab atas [validasi permintaan](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) pertama.
  + Fungsi pemrosesan acara melakukan permintaan kedua.

    Tidak ada validasi yang dilakukan saat pengguna melakukan `GET` permintaan HTTP ke titik akhir API `/jobs/{jobId}` lowongan. Jika kasus penggunaan Anda memerlukan validasi input tambahan dan tingkat keamanan yang lebih tinggi, evaluasi [penggunaan AWS WAF untuk melindungi API Anda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).

## Epik
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-epics"></a>

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning repositori secara lokal, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/asynchronous-event-processing-api-gateway-sqs-cdk.git</pre> | DevOps insinyur | 
| Siapkan proyek. | [Ubah direktori ke root repositori, dan atur lingkungan virtual Python dan semua alat dengan menggunakan Projen:](https://github.com/projen/projen)<pre>cd asynchronous-event-processing-api-gateway-api-gateway-sqs-cdk<br />npx projen</pre> | DevOps insinyur | 
| Instal kait pra-komit. | Untuk memasang kait pra-komit, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | DevOps insinyur | 

### Menyebarkan contoh arsitektur
<a name="deploy-the-example-architecture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bootstrap AWS CDK. | Untuk bootstrap [AWS CDK](https://aws.amazon.com/cdk/)di Anda Akun AWS, jalankan perintah berikut:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen bootstrap</pre> | AWS DevOps | 
| Menyebarkan contoh arsitektur. | Untuk menerapkan arsitektur contoh di Anda Akun AWS, jalankan perintah berikut:<pre>AWS_PROFILE=$YOUR_AWS_PROFILE npx projen deploy</pre> | AWS DevOps | 

### Uji arsitekturnya
<a name="test-the-architecture"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal prasyarat tes. | [Instal di workstation Anda [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html), [Postman](https://www.postman.com/downloads/), dan jq.](https://jqlang.github.io/jq/)Menggunakan [Postman](https://www.postman.com/downloads/) untuk menguji arsitektur contoh ini disarankan tetapi tidak wajib. Jika Anda memilih alat pengujian API alternatif, pastikan alat tersebut mendukung [otentikasi AWS Signature Version 4](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html), dan lihat titik akhir API terbuka yang dapat diperiksa dengan [mengekspor](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) REST API. | DevOps insinyur | 
| Asumsikan`JobsAPIInvokeRole`. | [Asumsikan](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) `JobsAPIInvokeRole` yang dicetak sebagai output dari `deploy` perintah:<pre>CREDENTIALS=$(AWS_PROFILE=$<YOUR_AWS_PROFILE> aws sts assume-role \<br />--no-cli-pager \<br />--role-arn $<JOBS_API_INVOKE_ROLE_ARN> \<br />--role-session-name JobsAPIInvoke)<br />export AWS_ACCESS_KEY_ID=$(cat $CREDENTIALS | jq ‘.Credentials’’.AccessKeyId’)<br />export AWS_SECRET_ACCESS_KEY=$(cat $CREDENTIALS | jq ‘.Credentials’’.SecretAccessKey’)<br />export AWS_SESSION_TOKEN==$(cat $CREDENTIALS | jq ‘.Credentials’’.SessionToken’)</pre> | AWS DevOps | 
| Konfigurasikan Tukang Pos. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | AWS DevOps | 
| Uji contoh arsitektur. | Untuk menguji arsitektur contoh, kirim permintaan ke API pekerjaan. Untuk informasi lebih lanjut, lihat [dokumentasi Tukang Pos](https://learning.postman.com/docs/getting-started/first-steps/sending-the-first-request/#send-an-api-request). | DevOps insinyur | 

## Pemecahan masalah
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Penghancuran dan pemindahan arsitektur contoh berikutnya gagal karena [grup CloudWatch log Amazon Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/apigateway/JobsAPIAccessLogs` sudah ada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 
| Penghancuran dan pemindahan arsitektur contoh berikutnya gagal karena [grup CloudWatch log Log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) `/aws/ecs/EventProcessingServiceLogs` sudah ada. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate.html) | 

## Sumber daya terkait
<a name="process-events-asynchronously-with-amazon-api-gateway-amazon-sqs-and-aws-fargate-resources"></a>
+ [Template pemetaan API Gateway dan referensi variabel pencatatan akses](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html)
+ [Bagaimana cara mengintegrasikan API Gateway REST API dengan Amazon SQS dan mengatasi kesalahan umum?](https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-rest-api-sqs-errors/)

# Jalankan tugas AWS Systems Manager Automation secara sinkron dari AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El khoury, Amazon Web Services*

## Ringkasan
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Pola ini menjelaskan cara berintegrasi AWS Step Functions dengan AWS Systems Manager. Ini menggunakan integrasi layanan AWS SDK untuk memanggil Systems Manager **startAutomationExecution**API dengan token tugas dari alur kerja mesin status, dan berhenti sampai token kembali dengan panggilan sukses atau gagal. Untuk mendemonstrasikan integrasi, pola ini mengimplementasikan pembungkus dokumen Otomasi (runbook) di sekitar `AWS-RunPowerShellScript` dokumen `AWS-RunShellScript` atau, dan digunakan `.waitForTaskToken` untuk memanggil atau secara sinkron. `AWS-RunShellScript` `AWS-RunPowerShellScript` Untuk informasi selengkapnya tentang integrasi layanan AWS SDK di Step Functions, lihat Panduan [AWS Step Functions Pengembang](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** adalah layanan alur kerja visual dengan kode rendah yang dapat Anda gunakan untuk membangun aplikasi terdistribusi, mengotomatiskan proses TI dan bisnis, serta membangun jaringan data dan pembelajaran mesin dengan menggunakan layanan. AWS Alur kerja mengelola kegagalan, percobaan ulang, paralelisasi, integrasi layanan, dan observabilitas sehingga Anda dapat fokus pada logika bisnis bernilai lebih tinggi.

Otomatisasi, kemampuan AWS Systems Manager, menyederhanakan tugas pemeliharaan, penyebaran, dan remediasi umum Layanan AWS seperti Amazon Elastic Compute Cloud (Amazon), Amazon Relational Database Service (Amazon RDS EC2), Amazon Redshift, dan Amazon Simple Storage Service (Amazon S3). Otomasi memberi Anda kontrol terperinci atas konkurensi otomatisasi Anda. Misalnya, Anda dapat menentukan berapa banyak sumber daya yang akan ditargetkan secara bersamaan, dan berapa banyak kesalahan yang dapat terjadi sebelum otomatisasi dihentikan.

Untuk detail implementasi, termasuk langkah runbook, parameter, dan contoh, lihat bagian [Informasi tambahan](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Prasyarat dan batasan
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Prasyarat**
+  AWS Akun aktif
+ AWS Identity and Access Management Izin (IAM) untuk mengakses Step Functions dan Systems Manager
+ Sebuah EC2 instance dengan Systems Manager Agent (SSM Agent) [diinstal](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) pada instance
+ [Profil instans IAM untuk Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) yang dilampirkan ke instance tempat Anda berencana menjalankan runbook
+ Peran Step Functions yang memiliki izin IAM berikut (yang mengikuti prinsip hak istimewa terkecil):

```
{
             "Effect": "Allow",
             "Action": "ssm:StartAutomationExecution",
             "Resource": "*"
 }
```

**Versi produk**
+ Skema dokumen SSM versi 0.3 atau yang lebih baru
+ Agen SSM versi 2.3.672.0 atau yang lebih baru

## Arsitektur
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**Tumpukan teknologi target**
+ AWS Step Functions
+ AWS Systems Manager Otomasi

**Arsitektur target**

![\[Arsitektur untuk menjalankan tugas otomatisasi Systems Manager secara sinkron dari Step Functions\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Otomatisasi dan skala**
+ Pola ini menyediakan AWS CloudFormation template yang dapat Anda gunakan untuk menyebarkan runbook pada beberapa instance. (Lihat GitHub [Step Functions dan repositori implementasi Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

## Alat
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-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 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 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.
+ [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.

**Kode**

Kode untuk pola ini tersedia di repositori [implementasi GitHub Step Functions dan Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Epik
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Buat runbook
<a name="create-runbooks"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh CloudFormation template. | Unduh `ssm-automation-documents.cfn.json` templat dari `cloudformation ` folder GitHub repositori. | AWS DevOps | 
| Buat runbook. | Masuk ke Konsol Manajemen AWS, buka [CloudFormation konsol](https://console.aws.amazon.com/cloudformation/), dan terapkan template. Untuk informasi selengkapnya tentang penerapan CloudFormation templat, lihat [Membuat tumpukan di CloudFormation konsol](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dalam CloudFormation dokumentasi.  CloudFormation Template menyebarkan tiga sumber daya:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Buat mesin status sampel
<a name="create-a-sample-state-machine"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat mesin status uji.  | Ikuti petunjuk di [Panduan AWS Step Functions Pengembang](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) untuk membuat dan menjalankan mesin status. Untuk definisi, gunakan kode berikut. Pastikan untuk memperbarui `InstanceIds` nilai dengan ID instance Systems Manager-enabled yang valid di akun Anda.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Kode ini memanggil runbook untuk menjalankan dua perintah yang mendemonstrasikan `waitForTaskToken` panggilan ke Systems Manager Automation.Nilai `shell` parameter (`Shell`atau`PowerShell`) menentukan apakah dokumen Otomasi berjalan `AWS-RunShellScript` atau`AWS-RunPowerShellScript`.Tugas menulis “Ini adalah pengujian yang menjalankan waitForTask Token otomatisasi” ke dalam `/home/ssm-user/automation.log` file, dan kemudian tidur selama 100 detik sebelum merespons dengan token tugas dan melepaskan tugas berikutnya dalam alur kerja.Jika Anda ingin memanggil `SfnRunCommandByTargets` runbook sebagai gantinya, ganti `Parameters` bagian dari kode sebelumnya dengan yang berikut:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Perbarui peran IAM untuk mesin status. | Langkah sebelumnya secara otomatis membuat peran IAM khusus untuk mesin status. Namun, itu tidak memberikan izin untuk memanggil runbook. Perbarui peran dengan menambahkan izin berikut:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Validasi panggilan sinkron. | Jalankan state machine untuk memvalidasi panggilan sinkron antara Step Functions dan Systems Manager Automation. Untuk keluaran sampel, lihat bagian [Informasi tambahan](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Sumber daya terkait
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Memulai dengan AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Panduan AWS Step Functions Pengembang*)
+ [Tunggu panggilan balik dengan token tugas](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*Panduan AWS Step Functions Pengembang*, pola integrasi layanan)
+ [panggilan API send\$1task\$1success dan [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) (dokumentasi Boto3) 
+ [AWS Systems Manager Otomatisasi](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*Panduan AWS Systems Manager Pengguna*)

## Informasi tambahan
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Detail implementasi**

Pola ini menyediakan CloudFormation template yang menyebarkan dua runbook Systems Manager:
+ `SfnRunCommandByInstanceIds`menjalankan `AWS-RunPowerShellScript` perintah `AWS-RunShellScript` or dengan menggunakan instance IDs.
+ `SfnRunCommandByTargets`menjalankan `AWS-RunPowerShellScript` perintah `AWS-RunShellScript` or dengan menggunakan target.

Setiap runbook mengimplementasikan empat langkah untuk mencapai panggilan sinkron saat menggunakan `.waitForTaskToken` opsi di Step Functions.


| 
| 
| Langkah | Tindakan | Deskripsi | 
| --- |--- |--- |
| **1** | `Branch` | Memeriksa nilai `shell` parameter (`Shell`atau`PowerShell`) untuk memutuskan apakah akan dijalankan `AWS-RunShellScript` untuk Linux atau `AWS-RunPowerShellScript` untuk Windows. | 
| **2** | `RunCommand_Shell` atau `RunCommand_PowerShell` | Mengambil beberapa input dan menjalankan `RunPowerShellScript` perintah `RunShellScript` atau. Untuk informasi selengkapnya, periksa tab **Detail** untuk dokumen `RunCommand_PowerShell` Otomatisasi `RunCommand_Shell` atau di konsol Systems Manager. | 
| **3** | `SendTaskFailure` | Berjalan saat langkah 2 dibatalkan atau dibatalkan. Ini memanggil Step Functions [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) API, yang menerima tiga parameter sebagai input: token yang dilewatkan oleh mesin status, kesalahan kegagalan, dan deskripsi penyebab kegagalan. | 
| **4** | `SendTaskSuccess` | Berjalan ketika langkah 2 berhasil. Ini memanggil Step Functions [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) API, yang menerima token yang diteruskan oleh mesin status sebagai input. | 

**Parameter buku runbook**

`SfnRunCommandByInstanceIds`buku runbook:


| 
| 
| Nama parameter | Jenis | Opsional atau diperlukan | Deskripsi | 
| --- |--- |--- |--- |
| `shell` | String | Diperlukan | Contoh shell untuk memutuskan apakah akan dijalankan `AWS-RunShellScript` untuk Linux atau `AWS-RunPowerShellScript` untuk Windows. | 
| `deliveryTimeout` | Bilangan Bulat | Opsional | Waktu, dalam hitungan detik, untuk menunggu perintah dikirim ke Agen SSM pada sebuah instance. Parameter ini memiliki nilai minimum 30 (0,5 menit) dan nilai maksimum 2592000 (720 jam). | 
| `executionTimeout` | String | Opsional | Waktu, dalam hitungan detik, untuk menyelesaikan perintah sebelum dianggap gagal. Nilai defaultnya adalah 3600 (1 jam). Nilai maksimum adalah 172800 (48 jam). | 
| `workingDirectory` | String | Opsional | Jalur direktori kerja pada instans Anda. | 
| `Commands` | StringList | Diperlukan | Skrip shell atau perintah untuk dijalankan. | 
| `InstanceIds` | StringList | Diperlukan |  IDs Contoh di mana Anda ingin menjalankan perintah. | 
| `taskToken` | String | Diperlukan | Token tugas yang digunakan untuk respons callback. | 

`SfnRunCommandByTargets`buku runbook:


| 
| 
| Nama | Jenis | Opsional atau diperlukan | Deskripsi | 
| --- |--- |--- |--- |
| `shell` | String | Diperlukan | Contoh shell untuk memutuskan apakah akan dijalankan `AWS-RunShellScript` untuk Linux atau `AWS-RunPowerShellScript` untuk Windows. | 
| `deliveryTimeout` | Bilangan Bulat | Opsional | Waktu, dalam hitungan detik, untuk menunggu perintah dikirim ke Agen SSM pada sebuah instance. Parameter ini memiliki nilai minimum 30 (0,5 menit) dan nilai maksimum 2592000 (720 jam). | 
| `executionTimeout` | Bilangan Bulat | Opsional | Waktu, dalam hitungan detik, untuk menyelesaikan perintah sebelum dianggap gagal. Nilai defaultnya adalah 3600 (1 jam). Nilai maksimum adalah 172800 (48 jam). | 
| `workingDirectory` | String | Opsional | Jalur direktori kerja pada instans Anda. | 
| `Commands` | StringList | Diperlukan | Skrip shell atau perintah untuk dijalankan. | 
| `Targets` | MapList | Diperlukan | Array kriteria pencarian yang mengidentifikasi instance dengan menggunakan pasangan kunci-nilai yang Anda tentukan. Misalnya: `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | String | Diperlukan | Token tugas yang digunakan untuk respons callback. | 

**Keluaran sampel**

Tabel berikut memberikan output sampel dari fungsi langkah. Ini menunjukkan bahwa total waktu berjalan lebih dari 100 detik antara langkah 5 (`TaskSubmitted`) dan langkah 6 (`TaskSucceeded`). Ini menunjukkan bahwa fungsi langkah menunggu `sleep 100` perintah selesai sebelum pindah ke tugas berikutnya dalam alur kerja.


| 
| 
| ID | Jenis | Langkah | Sumber daya | Waktu Berlalu (ms) | Stempel Waktu | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 Mar 2022 02:50:34.303 | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 Mar 2022 02:50:34.343 | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 Mar 2022 02:50:34.343 | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 Mar 2022 02:50:34.457 | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 Mar 2022 02:50:34.960 | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 Mar 2022 02:52:18.138 | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 Mar 2022 02:52:18.163 | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 Mar 2022 02:52:18.200 | 

# Jalankan pembacaan paralel objek S3 dengan menggunakan Python dalam suatu fungsi AWS Lambda
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function"></a>

*Eduardo Bortoluzzi, Amazon Web Services*

## Ringkasan
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-summary"></a>

Anda dapat menggunakan pola ini untuk mengambil dan meringkas daftar dokumen dari Amazon Simple Storage Service (Amazon S3) bucket secara real time. Pola ini memberikan contoh kode ke objek baca paralel dari bucket S3 di Amazon Web Services ()AWS. Pola ini menampilkan cara menjalankan tugas I/O terikat secara efisien dengan AWS Lambda fungsi menggunakan Python.

Sebuah perusahaan keuangan menggunakan pola ini dalam solusi interaktif untuk secara manual menyetujui atau menolak transaksi keuangan yang berkorelasi secara real time. Dokumen transaksi keuangan disimpan dalam ember S3 yang terkait dengan pasar. Operator memilih daftar dokumen dari bucket S3, menganalisis nilai total transaksi yang dihitung oleh solusi, dan memutuskan untuk menyetujui atau menolak batch yang dipilih.

Tugas terikat I/O mendukung banyak utas. Dalam contoh kode ini, [concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3.13/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)digunakan dengan maksimal 30 utas simultan, meskipun fungsi Lambda mendukung hingga 1.024 utas (dengan salah satu utas tersebut menjadi proses utama Anda). Batas ini karena terlalu banyak utas menciptakan masalah latensi karena peralihan konteks dan pemanfaatan sumber daya komputasi. Anda juga perlu meningkatkan koneksi pool maksimum `botocore` sehingga semua thread dapat melakukan download objek S3 secara bersamaan.

Kode contoh menggunakan satu objek 8,3 KB, dengan data JSON, dalam ember S3. Objek dibaca beberapa kali. Setelah fungsi Lambda membaca objek, data JSON diterjemahkan ke objek Python. Pada bulan Desember 2024, hasil setelah menjalankan contoh ini adalah 1.000 pembacaan diproses dalam 2,3 detik dan 10.000 pembacaan diproses dalam 27 detik menggunakan fungsi Lambda yang dikonfigurasi dengan memori 2.304 MB. AWS Lambda mendukung konfigurasi memori dari 128 MB menjadi 10.240 MB (10 GB), meskipun meningkatkan Lambdamemory melebihi 2.304 MB tidak membantu mengurangi waktu untuk menjalankan tugas terikat I/O khusus ini.

Alat [AWS Lambda Power Tuning](https://github.com/alexcasalboni/aws-lambda-power-tuning) digunakan untuk menguji konfigurasi memori Lambda yang berbeda dan memverifikasi rasio performance-to-cost terbaik untuk tugas tersebut. Untuk hasil tes, lihat bagian [Informasi tambahan](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional).

## Prasyarat dan batasan
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Kemahiran dengan pengembangan Python

**Batasan**
+ Fungsi Lambda dapat memiliki paling banyak [1.024 proses eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution) atau utas.
+ Baru Akun AWS memiliki batas memori Lambda 3.008 MB. Sesuaikan alat AWS Lambda Power Tuning yang sesuai. Untuk informasi selengkapnya, lihat bagian [Pemecahan Masalah](#run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting).
+ Amazon S3 memiliki batas [5.500 GET/HEAD permintaan per detik per](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance.html) awalan yang dipartisi.

**Versi produk**
+ Python 3.9 atau yang lebih baru
+ AWS Cloud Development Kit (AWS CDK) v2
+ AWS Command Line Interface (AWS CLI) versi 2
+ AWS Lambda Power Tuning 4.3.6 (opsional)

## Arsitektur
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-architecture"></a>

**Tumpukan teknologi target**
+ AWS Lambda
+ Amazon S3
+ AWS Step Functions (jika AWS Lambda Power Tuning digunakan)

**Arsitektur target**

Diagram berikut menunjukkan fungsi Lambda yang membaca objek dari bucket S3 secara paralel. Diagram juga memiliki alur kerja Step Functions untuk alat AWS Lambda Power Tuning untuk menyempurnakan memori fungsi Lambda. Penyetelan halus ini membantu mencapai keseimbangan yang baik antara biaya dan kinerja.

![\[Diagram yang menampilkan fungsi Lambda, bucket S3, dan AWS Step Functions.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/828696e2-6df7-4536-9205-951c99449f4e.png)


**Otomatisasi dan skala**

Fungsi Lambda berskala cepat saat diperlukan. Untuk menghindari kesalahan 503 Slow Down dari Amazon S3 selama permintaan tinggi, kami sarankan untuk membatasi penskalaan.

## Alat
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html) adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode. Infrastruktur contoh dibuat untuk digunakan. AWS CDK
+ [AWS Command Line InterfaceAWS 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. Dalam pola ini, AWS CLI versi 2 digunakan untuk mengunggah contoh file JSON.
+ [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.
+ [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.

**Alat-alat lainnya**
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum. [Penggunaan kembali thread idle worker](https://docs.python.org/3.8/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor) diperkenalkan di Python versi 3.8, dan kode fungsi Lambda dalam pola ini dibuat untuk Python versi 3.9 dan yang lebih baru.

**Repositori kode**

Kode untuk pola ini tersedia di [aws-lambda-parallel-download](https://github.com/aws-samples/aws-lambda-parallel-download) GitHub repositori.

## Praktik terbaik
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-best-practices"></a>
+  AWS CDK Konstruksi ini bergantung pada izin Akun AWS pengguna Anda untuk menerapkan infrastruktur. [Jika Anda berencana menggunakan AWS CDK Pipelines atau penerapan lintas akun, lihat Stack synthesizer.](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html#bootstrapping-synthesizers)
+ Aplikasi contoh ini tidak mengaktifkan log akses di bucket S3. Ini adalah praktik terbaik untuk mengaktifkan log akses dalam kode produksi.

## Epik
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-epics"></a>

### Mempersiapkan lingkungan pengembangan
<a name="prepare-the-development-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Periksa versi yang diinstal Python. | Kode ini telah diuji secara khusus pada Python 3.9 dan Python 3.13, dan harus bekerja pada semua versi di antara rilis ini. Untuk memeriksa versi Python Anda, jalankan `python3 -V` di terminal Anda, dan instal versi yang lebih baru jika diperlukan.Untuk memverifikasi bahwa modul yang diperlukan diinstal, jalankan`python3 -c "import pip, venv"`. Tidak ada pesan kesalahan berarti modul diinstal dengan benar dan Anda siap untuk menjalankan contoh ini.  | Arsitek awan | 
| Instal AWS CDK. | Untuk menginstal AWS CDK jika belum diinstal, ikuti petunjuk di [Memulai dengan AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html). Untuk mengonfirmasi bahwa AWS CDK versi yang diinstal adalah 2.0 atau yang lebih baru, jalankan`cdk –version`. | Arsitek awan | 
| Bootstrap lingkungan Anda. | Untuk bootstrap lingkungan Anda, jika belum dilakukan, ikuti instruksi di [Bootstrap lingkungan Anda untuk digunakan dengan AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping-env.html). | Arsitek awan | 

### Kloning repositori contoh
<a name="clone-the-example-repository"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning versi terbaru dari repositori, jalankan perintah berikut:<pre>git clone --depth 1 --branch v1.2.0 \<br />git@github.com:aws-samples/aws-lambda-parallel-download.git</pre> | Arsitek awan | 
| Ubah direktori kerja ke repositori kloning. | Jalankan perintah berikut:<pre>cd aws-lambda-parallel-download</pre> | Arsitek awan | 
| Buat lingkungan virtual Python. | Untuk membuat lingkungan virtual Python, jalankan perintah berikut:<pre>python3 -m venv .venv</pre> | Arsitek awan | 
| Aktifkan lingkungan virtual. | Untuk mengaktifkan lingkungan virtual, jalankan perintah berikut:<pre>source .venv/bin/activate</pre> | Arsitek awan | 
| Instal dependensi. | Untuk menginstal dependensi Python, jalankan perintah: `pip`<pre>pip install -r requirements.txt</pre> | Arsitek awan | 
| Jelajahi kodenya. | (Opsional) Contoh kode yang mengunduh objek dari bucket S3 ada di`resources/parallel.py`.Kode infrastruktur ada di `parallel_download` folder. | Arsitek awan | 

### Terapkan dan uji aplikasi
<a name="deploy-and-test-the-app"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Terapkan aplikasi. | Jalankan `cdk deploy`.Tuliskan AWS CDK outputnya:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arsitek awan | 
| Unggah contoh file JSON. | Repositori berisi contoh file JSON sekitar 9 KB. Untuk mengunggah file ke bucket S3 dari tumpukan yang dibuat, jalankan perintah berikut:<pre>aws s3 cp sample.json s3://<ParallelDownloadStack.SampleS3BucketName></pre>Ganti `<ParallelDownloadStack.SampleS3BucketName>` dengan nilai yang sesuai dari AWS CDK output. | Arsitek awan | 
| Jalankan aplikasi. | Untuk menjalankan aplikasi, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html) | Arsitek awan | 
| Tambahkan jumlah unduhan. | (Opsional) Untuk menjalankan 1.500 get panggilan objek, gunakan JSON berikut di **Event JSON parameter**: `Test`<pre>{"repeat": 1500, "objectKey": "sample.json"}</pre> | Arsitek awan | 

### Opsional: Jalankan AWS Lambda Power Tuning
<a name="optional-run-lamlong-power-tuning"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan alat AWS Lambda Power Tuning. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function.html)Di akhir proses, hasilnya akan berada di tab **input dan output Eksekusi**. | Arsitek awan | 
| Lihat hasil AWS Lambda Power Tuning dalam grafik. | Pada tab **Input dan output eksekusi**, salin tautan `visualization` properti, dan tempel di tab browser baru. | Arsitek awan | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus objek dari ember S3. | Sebelum Anda menghancurkan sumber daya yang digunakan, Anda menghapus semua objek dari bucket S3:<pre>aws s3 rm s3://<ParallelDownloadStack.SampleS3BucketName> \<br />--recursive</pre>Ingatlah untuk mengganti `<ParallelDownloadStack.SampleS3BucketName>` dengan nilai dari AWS CDK output. | Arsitek awan | 
| Hancurkan sumber daya. | Untuk menghancurkan semua sumber daya yang dibuat untuk pilot ini, jalankan perintah berikut:<pre>cdk destroy</pre> | Arsitek awan | 

## Pemecahan masalah
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| `'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008` | Untuk akun baru, Anda mungkin tidak dapat mengonfigurasi lebih dari 3.008 MB di fungsi Lambda Anda. Untuk menguji menggunakan AWS Lambda Power Tuning, tambahkan properti berikut pada input JSON saat Anda memulai eksekusi Step Functions:<pre>"powerValues": [<br />    512,<br />    1024,<br />    1536,<br />    2048,<br />    2560,<br />    3008<br />  ]</pre> | 

## Sumber daya terkait
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-resources"></a>
+ [Python — concurrent.futures. ThreadPoolExecutor](https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.ThreadPoolExecutor)
+ [Kuota Lambda - Konfigurasi fungsi, penerapan, dan eksekusi](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html#function-configuration-deployment-and-execution)
+ [Bekerja dengan AWS CDK in Python](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [Fungsi pembuatan profil dengan AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html)

## Informasi tambahan
<a name="run-parallel-reads-of-s3-objects-by-using-python-in-an-aws-lambda-function-additional"></a>

**Kode**

Cuplikan kode berikut melakukan pemrosesan I/O paralel:

```
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
  for result in executor.map(a_function, (the_arguments)):
    ...
```

`ThreadPoolExecutor`Menggunakan kembali utas saat tersedia.

**Pengujian dan hasil**

Tes ini dilakukan pada Desember 2024.

Tes pertama memproses 2.500 pembacaan objek, dengan hasil sebagai berikut.

![\[Waktu doa turun dan biaya doa meningkat seiring dengan meningkatnya memori.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f6743412-1e52-4c4c-a51c-ac0f75b3b998.png)


Mulai dari 3.009 MB, tingkat waktu pemrosesan tetap hampir sama untuk setiap peningkatan memori, tetapi biaya meningkat seiring dengan meningkatnya ukuran memori.

Tes lain menyelidiki kisaran antara 1.536 MB dan 3.072 MB memori, menggunakan nilai yang kelipatan 256 MB dan memproses 10.000 pembacaan objek, dengan hasil sebagai berikut.

![\[Penurunan perbedaan antara penurunan waktu doa dan kenaikan biaya doa.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/c75d4443-74d8-4b93-9b4d-b2640869381e.png)


 performance-to-costRasio terbaik adalah dengan konfigurasi Lambda memori 2.304 MB.

Sebagai perbandingan, proses sekuensial 2.500 pembacaan objek membutuhkan waktu 47 detik. Proses paralel menggunakan konfigurasi Lambda 2.304 MB membutuhkan waktu 7 detik, yaitu 85 persen lebih sedikit.

![\[Bagan yang menunjukkan penurunan waktu saat beralih dari pemrosesan sekuensial ke paralel.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b46e9b16-9842-4291-adfa-3ef012b89aec/images/f3dcc44d-ac20-4b75-897d-1d71f0d59781.png)


# Kirim data telemetri dari AWS Lambda ke OpenSearch untuk analitik dan visualisasi waktu nyata
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization"></a>

*Tabby Ward, Guy Bachar, dan David Kilzer, Amazon Web Services*

## Ringkasan
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-summary"></a>

Aplikasi modern menjadi semakin terdistribusi dan didorong oleh peristiwa, yang memperkuat kebutuhan akan pemantauan dan observabilitas waktu nyata. AWS Lambda adalah layanan komputasi tanpa server yang memainkan peran penting dalam membangun arsitektur yang dapat diskalakan dan digerakkan oleh peristiwa. Namun, pemantauan dan pemecahan masalah fungsi Lambda dapat menjadi tantangan jika Anda hanya mengandalkan Amazon CloudWatch Logs, yang dapat memperkenalkan latensi dan periode retensi terbatas.

Untuk mengatasi tantangan ini, AWS memperkenalkan Lambda Telemetry API, yang memungkinkan fungsi Lambda mengirim data telemetri langsung ke alat pemantauan dan observabilitas pihak ketiga. API ini mendukung streaming real-time log, metrik, dan jejak, serta memberikan tampilan yang komprehensif dan tepat waktu tentang kinerja dan kesehatan fungsi Lambda Anda.

Pola ini menjelaskan cara mengintegrasikan API Telemetri Lambda dengan [OpenSearch](https://opensearch.org/docs/latest/), yang merupakan mesin pencari dan analitik terdistribusi sumber terbuka. OpenSearch menawarkan platform yang kuat dan terukur untuk menelan, menyimpan, dan menganalisis volume data yang besar, yang menjadikannya pilihan ideal untuk data telemetri Lambda. Secara khusus, pola ini menunjukkan cara mengirim log dari fungsi Lambda yang ditulis dengan Python langsung ke cluster dengan menggunakan OpenSearch ekstensi Lambda yang disediakan oleh. AWS Solusi ini fleksibel dan dapat disesuaikan, sehingga Anda dapat membuat ekstensi Lambda Anda sendiri atau mengubah kode sumber sampel untuk mengubah format output sesuai keinginan.

Pola ini menjelaskan cara mengatur dan mengonfigurasi integrasi API Telemetri Lambda dengan OpenSearch, dan mencakup praktik terbaik untuk keamanan, pengoptimalan biaya, dan skalabilitas. Tujuannya adalah untuk membantu Anda mendapatkan wawasan yang lebih dalam tentang fungsi Lambda Anda dan meningkatkan pengamatan keseluruhan aplikasi tanpa server Anda.


| 
| 
| Catatan: Pola ini berfokus pada integrasi Lambda Telemetry API dengan managed. OpenSearch Namun, prinsip dan teknik yang dibahas juga berlaku untuk self-managed OpenSearch dan Elasticsearch. | 
| --- |

## Prasyarat dan batasan
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-prereqs"></a>

Sebelum Anda memulai proses integrasi, pastikan Anda memiliki prasyarat berikut:

**Akun AWS**: Aktif Akun AWS dengan izin yang sesuai untuk membuat dan mengelola AWS sumber daya berikut:
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+  OpenSearch Layanan Amazon (jika Anda menggunakan OpenSearch kluster terkelola)

**OpenSearch klaster**:
+ Anda dapat menggunakan OpenSearch kluster yang dikelola sendiri atau layanan terkelola seperti OpenSearch Layanan.
+ Jika Anda menggunakan OpenSearch Layanan, siapkan OpenSearch klaster Anda dengan mengikuti petunjuk di [Memulai OpenSearch Layanan Amazon](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/gsg.html) di dokumentasi OpenSearch Layanan.
+ Pastikan OpenSearch klaster dapat diakses dari fungsi Lambda Anda dan dikonfigurasi dengan pengaturan keamanan yang diperlukan, seperti kebijakan akses, enkripsi, dan otentikasi.
+ Konfigurasikan OpenSearch cluster dengan pemetaan dan pengaturan indeks yang diperlukan untuk menyerap data telemetri Lambda. Untuk informasi selengkapnya, lihat [Memuat data streaming ke OpenSearch Layanan Amazon](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/integrations.html) di dokumentasi OpenSearch Layanan.

**Konektivitas jaringan**:
+ Pastikan fungsi Lambda Anda memiliki konektivitas jaringan yang diperlukan untuk mengakses cluster. OpenSearch Untuk panduan tentang cara mengonfigurasi setelan virtual private cloud (VPC), lihat [Meluncurkan domain OpenSearch Layanan Amazon Anda dalam VPC](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/vpc.html) di dokumentasi Layanan. OpenSearch 

**Peran dan kebijakan IAM**:
+ Buat peran IAM dengan izin yang diperlukan untuk fungsi Lambda Anda untuk mengakses OpenSearch klaster dan mengakses kredensil Anda yang disimpan di dalamnya. AWS Secrets Manager
+ Lampirkan kebijakan IAM yang sesuai ke peran, seperti `AWSLambdaBasicExecutionRole` kebijakan dan izin tambahan apa pun yang diperlukan untuk berinteraksi. OpenSearch
+ Verifikasi bahwa izin IAM yang diberikan ke fungsi Lambda Anda memungkinkannya menulis data ke cluster. OpenSearch Untuk informasi tentang mengelola izin IAM, lihat [Mendefinisikan izin fungsi Lambda dengan peran eksekusi dalam](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) dokumentasi Lambda.

**Pengetahuan bahasa pemrograman**:
+ Anda akan memerlukan pengetahuan dasar tentang Python (atau bahasa pemrograman pilihan Anda) untuk memahami dan memodifikasi kode sampel untuk fungsi Lambda dan ekstensi Lambda.

**Lingkungan pengembangan**:
+ Siapkan lingkungan pengembangan lokal dengan alat dan dependensi yang diperlukan untuk membangun dan menerapkan fungsi dan ekstensi Lambda. 

**AWS CLI atau Konsol Manajemen AWS**:
+ Instal dan konfigurasikan [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) atau gunakan Konsol Manajemen AWS dengan kredensil yang sesuai untuk berinteraksi dengan yang diperlukan. Layanan AWS

**Pemantauan dan pencatatan**:
+ Biasakan diri dengan pemantauan dan pencatatan praktik terbaik AWS, termasuk layanan seperti Amazon CloudWatch dan AWS CloudTrail untuk tujuan pemantauan dan audit.
+ Periksa CloudWatch Log untuk fungsi Lambda Anda untuk mengidentifikasi kesalahan atau pengecualian yang terkait dengan integrasi API Telemetri Lambda. Untuk panduan pemecahan masalah, lihat dokumentasi [Lambda Telemetry API](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html).

## Arsitektur
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-architecture"></a>

Pola ini menggunakan OpenSearch Layanan untuk menyimpan log dan data telemetri yang dihasilkan oleh fungsi Lambda. Pendekatan ini memungkinkan Anda untuk dengan cepat mengalirkan log langsung ke OpenSearch klaster Anda, yang mengurangi latensi dan biaya yang terkait dengan penggunaan CloudWatch Log sebagai perantara.


| 
| 
| [Kode ekstensi Lambda Anda dapat mendorong telemetri ke OpenSearch Layanan, baik dengan langsung menggunakan OpenSearch API atau dengan menggunakan pustaka klien. OpenSearch ](https://opensearch.org/docs/latest/clients/index/) Ekstensi Lambda dapat menggunakan operasi massal yang didukung oleh OpenSearch API untuk menggabungkan peristiwa telemetri bersama-sama dan mengirimkannya ke OpenSearch Layanan dalam satu permintaan. | 
| --- |

Diagram alur kerja berikut menggambarkan alur kerja log untuk fungsi Lambda saat Anda menggunakan klaster sebagai OpenSearch titik akhir.

![\[Alur kerja untuk mengirim data telemetri ke cluster. OpenSearch\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/57fe8796-9f36-46cf-8304-f506242b9f04/images/283ccdcd-a0e1-40a2-a95a-3bd046bfa8ca.png)


Arsitektur mencakup komponen-komponen ini:
+ Fungsi Lambda: Fungsi tanpa server yang menghasilkan log dan data telemetri selama eksekusi.
+ Ekstensi Lambda: Ekstensi berbasis Python yang menggunakan API Telemetri Lambda untuk berintegrasi langsung dengan cluster. OpenSearch Ekstensi ini berjalan bersama fungsi Lambda di lingkungan eksekusi yang sama.
+ Lambda Telemetry API: API yang memungkinkan ekstensi Lambda mengirim data telemetri, termasuk log, metrik, dan jejak, langsung ke alat pemantauan dan observabilitas pihak ketiga.
+ Kluster OpenSearch Layanan Amazon: OpenSearch Kluster terkelola yang di-host AWS. Cluster ini bertanggung jawab untuk menelan, menyimpan, dan mengindeks data log yang dialirkan dari fungsi Lambda melalui ekstensi Lambda.

Alur kerja terdiri dari langkah-langkah ini:

1. Fungsi Lambda dipanggil, dan menghasilkan log dan data telemetri selama pelaksanaannya.

1. Ekstensi Lambda berjalan di samping fungsi untuk menangkap log dan data telemetri dengan menggunakan Lambda Telemetry API.

1. Ekstensi Lambda membuat koneksi aman dengan kluster OpenSearch Layanan dan mengalirkan data log secara real time.

1. Kluster OpenSearch Layanan menyerap, mengindeks, dan menyimpan data log untuk membuatnya tersedia untuk pencarian, analisis, dan visualisasi melalui penggunaan alat seperti Kibana atau aplikasi lain yang kompatibel.

Dengan menghindari CloudWatch Log dan mengirimkan data log langsung ke OpenSearch cluster, solusi ini memberikan beberapa manfaat:
+ Streaming dan analisis log waktu nyata, memungkinkan pemecahan masalah yang lebih cepat dan peningkatan pengamatan.
+ Mengurangi latensi dan potensi pembatasan retensi yang terkait dengan CloudWatch Log.
+ Fleksibilitas untuk menyesuaikan ekstensi Lambda atau membuat ekstensi Anda sendiri untuk format keluaran tertentu atau pemrosesan tambahan.
+ Integrasi dengan kemampuan pencarian, analitik, dan visualisasi OpenSearch Layanan untuk analisis dan pemantauan log.

Bagian [Epics](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics) memberikan step-by-step instruksi untuk menyiapkan ekstensi Lambda, mengonfigurasi fungsi Lambda, dan mengintegrasikan dengan kluster Layanan. OpenSearch Untuk pertimbangan keamanan, strategi pengoptimalan biaya, dan tips untuk memantau dan memecahkan masalah solusi, lihat bagian Praktik [terbaik](#send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices).

## Alat
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-tools"></a>

**Layanan AWS**
+ [AWS Lambda](https://aws.amazon.com/lambda/) adalah layanan komputasi yang memungkinkan Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Lambda menjalankan kode Anda hanya saat diperlukan dan menskalakan secara otomatis, dari beberapa permintaan per hari hingga ribuan per detik.
+ [Amazon OpenSearch Service adalah layanan](https://aws.amazon.com/opensearch-service/) terkelola penuh yang disediakan oleh AWS yang memudahkan untuk menyebarkan, mengoperasikan, dan menskalakan OpenSearch cluster di cloud.
+ [Ekstensi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html) memperluas fungsionalitas fungsi Lambda Anda dengan menjalankan kode khusus di sampingnya. Anda dapat menggunakan ekstensi Lambda untuk mengintegrasikan Lambda dengan berbagai alat pemantauan, observabilitas, keamanan, dan tata kelola.
+ [AWS Lambda API telemetri](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html) memungkinkan Anda menggunakan ekstensi untuk menangkap data pemantauan dan observabilitas yang disempurnakan langsung dari Lambda dan mengirimkannya ke tujuan pilihan Anda.
+ [CloudFormation](https://aws.amazon.com/cloudformation/)membantu Anda memodelkan dan mengatur AWS sumber daya sehingga Anda dapat menghabiskan lebih sedikit waktu untuk mengelola sumber daya tersebut dan lebih banyak waktu untuk berfokus pada aplikasi Anda.

**Repositori kode**
+ [AWS Lambda Ekstensi](https://github.com/aws-samples/aws-lambda-extensions) mencakup demo dan proyek sampel dari AWS dan AWS Mitra untuk membantu Anda memulai membangun ekstensi Anda sendiri.
+ [Contoh Integrasi Telemetri Lambda untuk menyediakan OpenSearch](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) contoh ekstensi Lambda yang menunjukkan cara mengirim log dari fungsi Lambda ke cluster. OpenSearch 

**Alat lainnya**
+ [OpenSearch](https://opensearch.org/faq/)adalah mesin pencari dan analitik terdistribusi open-source yang menyediakan platform yang kuat untuk menelan, menyimpan, dan menganalisis volume data yang besar.
+ Kibana adalah alat visualisasi dan eksplorasi data sumber terbuka yang dapat Anda gunakan. OpenSearch Perhatikan bahwa implementasi visualisasi dan analitik berada di luar cakupan pola ini. Untuk informasi selengkapnya, lihat [dokumentasi Kibana dan sumber daya](https://www.elastic.co/guide/en/kibana/current/index.html) lainnya.

## Praktik terbaik
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-best-practices"></a>

Saat Anda mengintegrasikan API Telemetri Lambda dengan OpenSearch, pertimbangkan praktik terbaik berikut.

**Keamanan dan kontrol akses**
+ **Komunikasi aman**: Enkripsi semua komunikasi antara fungsi Lambda Anda dan klaster dengan OpenSearch menggunakan HTTPS. Konfigurasikan SSL/TLS pengaturan yang diperlukan di ekstensi dan OpenSearch konfigurasi Lambda Anda.
+ **Izin IAM**:
  + Ekstensi berjalan di lingkungan eksekusi yang sama dengan fungsi Lambda, sehingga mereka mewarisi tingkat akses yang sama ke sumber daya seperti sistem file, jaringan, dan variabel lingkungan.
  + Berikan izin IAM minimum yang diperlukan ke fungsi Lambda Anda untuk mengakses API Telemetri Lambda dan menulis data ke cluster. OpenSearch Gunakan [prinsip hak istimewa terkecil](https://docs.aws.amazon.com/lambda/latest/operatorguide/least-privilege.html) untuk membatasi ruang lingkup izin.
+ **OpenSearch kontrol akses**: Terapkan kontrol akses berbutir halus di OpenSearch klaster Anda untuk membatasi akses ke data sensitif. Gunakan fitur keamanan bawaan, seperti otentikasi pengguna, kontrol akses berbasis peran, dan izin tingkat indeks, di. OpenSearch
+ **Ekstensi tepercaya**: Selalu pasang ekstensi dari sumber tepercaya saja. Gunakan alat infrastruktur sebagai kode (IAc) seperti CloudFormation untuk menyederhanakan proses melampirkan konfigurasi ekstensi yang sama, termasuk izin IAM, ke beberapa fungsi Lambda. Alat IAC juga menyediakan catatan audit ekstensi dan versi yang digunakan sebelumnya.
+ **Penanganan data sensitif**: Saat membuat ekstensi, hindari mencatat data sensitif. Sanitasi muatan dan metadata sebelum mencatat atau menyimpannya untuk tujuan audit.

**Optimalisasi biaya**
+ **Pemantauan dan peringatan**: Siapkan mekanisme pemantauan dan peringatan untuk melacak volume data yang dikirim OpenSearch dari fungsi Lambda Anda. Ini akan membantu Anda mengidentifikasi dan mengatasi potensi pembengkakan biaya.
+ **Retensi data**: Pertimbangkan dengan cermat periode retensi data yang sesuai untuk data telemetri Lambda Anda di. OpenSearch Periode retensi yang lebih lama dapat meningkatkan biaya penyimpanan, jadi seimbangkan kebutuhan observabilitas Anda dengan pengoptimalan biaya.
+ **Kompresi dan pengindeksan**: Aktifkan kompresi data dan optimalkan strategi OpenSearch pengindeksan Anda untuk mengurangi jejak penyimpanan data telemetri Lambda Anda.
+ **Mengurangi ketergantungan pada CloudWatch**: Dengan mengintegrasikan API Telemetri Lambda secara langsung dengan OpenSearch, Anda berpotensi mengurangi ketergantungan Anda pada CloudWatch Log, yang dapat menghasilkan penghematan biaya. Ini karena Lambda Telemetry API memungkinkan Anda untuk mengirim log langsung ke OpenSearch, yang melewati kebutuhan untuk menyimpan dan memproses data. CloudWatch

**Skalabilitas dan keandalan**
+ Pemrosesan **asinkron: Gunakan pola pemrosesan** asinkron, seperti Amazon Simple Queue Service (Amazon SQS) atau Amazon Kinesis, untuk memisahkan eksekusi fungsi Lambda dari konsumsi data. OpenSearch Ini membantu menjaga daya tanggap fungsi Lambda Anda dan meningkatkan keandalan sistem secara keseluruhan.
+ **OpenSearch penskalaan klaster**: Pantau kinerja dan pemanfaatan sumber daya OpenSearch klaster Anda, dan tingkatkan atau turunkan sesuai kebutuhan untuk menangani peningkatan volume data telemetri Lambda.
+ **Failover dan pemulihan bencana**: Menerapkan strategi pemulihan bencana yang kuat untuk OpenSearch klaster Anda, termasuk pencadangan reguler dan kemampuan untuk memulihkan data dengan cepat jika terjadi kegagalan.

**Observabilitas dan pemantauan**
+ **Dasbor dan visualisasi**: Gunakan Kibana atau alat dasbor lainnya untuk membuat dasbor dan visualisasi khusus yang memberikan wawasan tentang kinerja dan kesehatan fungsi Lambda Anda berdasarkan data telemetri di. OpenSearch
+ **Peringatan dan pemberitahuan**: Siapkan peringatan dan notifikasi untuk secara proaktif memantau anomali, kesalahan, atau masalah kinerja di fungsi Lambda Anda. Integrasikan peringatan dan pemberitahuan ini dengan proses manajemen insiden yang ada.
+ **Penelusuran dan korelasi**: Pastikan data telemetri Lambda Anda menyertakan informasi penelusuran yang relevan, seperti permintaan IDs atau korelasi IDs, untuk memungkinkan end-to-end pengamatan dan pemecahan masalah di seluruh aplikasi tanpa server terdistribusi Anda.

Dengan mengikuti praktik terbaik ini, Anda dapat memastikan bahwa integrasi API Telemetri Lambda Anda aman, hemat biaya, dan dapat diskalakan, serta memberikan pengamatan komprehensif untuk aplikasi tanpa server Anda. OpenSearch 

## Epik
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-epics"></a>

### Bangun dan terapkan lapisan ekstensi Lambda
<a name="build-and-deploy-the-lam-extension-layer"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unduh kode sumbernya. | Unduh ekstensi sampel dari repositori [AWS Lambda Extensions](https://github.com/aws-samples/aws-lambda-extensions). | Pengembang aplikasi, arsitek Cloud | 
| Arahkan ke `python-example-telemetry-opensearch-extension` folder. | Repositori [AWS Lambda Ekstensi](https://github.com/aws-samples/aws-lambda-extensions) yang Anda unduh berisi banyak contoh untuk beberapa kasus penggunaan dan runtime bahasa. Arahkan ke folder [python-example-telemetry-opensearch-extension](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) untuk menggunakan ekstensi OpenSearch Python, yang mengirimkan log ke. OpenSearch | Pengembang aplikasi, arsitek Cloud | 
| Tambahkan izin untuk menjalankan titik akhir ekstensi. | Jalankan perintah berikut untuk membuat endpoint ekstensi dapat dieksekusi:<pre>chmod +x python-example-telemetry-opensearch-extension/extension.py</pre> | Pengembang aplikasi, arsitek Cloud | 
| Instal dependensi ekstensi secara lokal. | Jalankan perintah berikut untuk menginstal dependensi lokal untuk kode Python:<pre>pip3 install -r python-example-telemetry-opensearch-extension/requirements.txt -t ./python-example-telemetry-opensearch-extension/</pre>Dependensi ini akan dipasang bersama dengan kode ekstensi. | Pengembang aplikasi, arsitek Cloud | 
| Buat paket.zip untuk ekstensi untuk menerapkannya sebagai lapisan. | File ekstensi.zip harus berisi direktori root yang disebut`extensions/`, di mana ekstensi yang dapat dieksekusi berada, dan direktori root lain disebut`python-example-telemetry-opensearch-extension/`, di mana logika inti ekstensi dan dependensinya berada.Buat paket.zip untuk ekstensi:<pre>chmod +x extensions/python-example-telemetry-opensearch-extension<br />zip -r extension.zip extensions python-example-telemetry-opensearch-extension</pre> | Pengembang aplikasi, arsitek Cloud | 
| Terapkan ekstensi sebagai lapisan Lambda. | Publikasikan layer dengan menggunakan file ekstensi.zip Anda dan perintah berikut:<pre>aws lambda publish-layer-version \<br />--layer-name "python-example-telemetry-opensearch-extension" \<br />--zip-file "fileb://extension.zip"</pre> | Pengembang aplikasi, arsitek Cloud | 

### Integrasikan ekstensi ke dalam fungsi Anda
<a name="integrate-the-extension-into-your-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan lapisan ke fungsi Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)[Untuk informasi selengkapnya tentang menambahkan layer ke fungsi Lambda Anda, lihat dokumentasi Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/adding-layers.html) | Pengembang aplikasi, arsitek Cloud | 
| Mengatur variabel lingkungan untuk fungsi. | Pada halaman fungsi, pilih tab **Konfigurasi** dan tambahkan variabel lingkungan berikut ke fungsi Anda:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | Pengembang aplikasi, arsitek Cloud | 

### Tambahkan pernyataan logging dan uji fungsi Anda
<a name="add-logging-statements-and-test-your-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tambahkan pernyataan logging ke fungsi Anda. | Tambahkan pernyataan logging ke fungsi Anda dengan menggunakan salah satu [mekanisme logging bawaan](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html) atau modul logging pilihan Anda. Berikut adalah contoh pesan logging dengan Python:<pre>print("Your Log Message Here")<br />logger = logging.getLogger(__name__)<br /><br />logger.info("Test Info Log.")<br />logger.error("Test Error Log.")</pre> | Pengembang aplikasi, arsitek Cloud | 
| Uji fungsi Anda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html)Anda harus melihat **Executing function: berhasil** jika semuanya berfungsi dengan baik. | Pengembang aplikasi, arsitek Cloud | 

### Lihat log Anda di OpenSearch
<a name="view-your-logs-in-opensearch"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kueri indeks Anda. | Di OpenSearch, jalankan perintah berikut untuk menanyakan indeks Anda:<pre>SELECT * FROM index-name</pre>Log Anda harus ditampilkan dalam hasil kueri. | Arsitek awan | 

## Pemecahan masalah
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Masalah konektivitas | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 
| Kesalahan konsumsi data | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.html) | 

## Sumber daya terkait
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-resources"></a>
+ [Contoh Integrasi Telemetri Lambda](https://github.com/aws-samples/aws-lambda-extensions/tree/main/python-example-telemetry-opensearch-extension) untuk (repositori) OpenSearch GitHub 
+ [Menambah fungsi Lambda menggunakan ekstensi Lambda (dokumentasi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-extensions.html))
+ [API Telemetri Lambda (dokumentasi Lambda)](https://docs.aws.amazon.com/lambda/latest/dg/telemetry-api.html)
+ [Memperkenalkan API AWS Lambda Telemetri](https://aws.amazon.com/blogs/compute/introducing-the-aws-lambda-telemetry-api/) (AWS posting blog)
+ [Mengintegrasikan API AWS Lambda Telemetri dengan Prometheus](https://aws.amazon.com/blogs/opensource/integrating-the-aws-lambda-telemetry-api-with-prometheus-and-opensearch) dan (posting blog) OpenSearch AWS 

## Informasi tambahan
<a name="send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization-additional"></a>

**Mengubah struktur log**

Ekstensi mengirimkan log sebagai dokumen bersarang secara OpenSearch default. Ini memungkinkan Anda melakukan kueri bersarang untuk mengambil nilai kolom individual.

Jika keluaran log default tidak memenuhi kebutuhan spesifik Anda, Anda dapat menyesuaikannya dengan memodifikasi kode sumber ekstensi Lambda yang disediakan oleh. AWS AWS mendorong pelanggan untuk menyesuaikan output agar sesuai dengan kebutuhan bisnis mereka. Untuk mengubah output log, cari `dispatch_to_opensearch` fungsi dalam `telemetry_dispatcher.py` file dalam kode sumber ekstensi dan buat perubahan yang diperlukan.

# Siapkan router sel tanpa server untuk arsitektur berbasis sel
<a name="serverless-cell-router-architecture"></a>

*Mian Tariq dan Ioannis Lioupras, Amazon Web Services*

## Ringkasan
<a name="serverless-cell-router-architecture-summary"></a>

Sebagai titik masuk ke sistem aplikasi berbasis sel global, router sel bertanggung jawab untuk secara efisien menugaskan pengguna ke sel yang sesuai dan menyediakan titik akhir kepada pengguna. Router sel menangani fungsi-fungsi seperti menyimpan user-to-cell pemetaan, memantau kapasitas sel, dan meminta sel baru bila diperlukan. Penting untuk menjaga fungsionalitas router sel selama potensi gangguan.

Kerangka desain router sel dalam pola ini berfokus pada ketahanan, skalabilitas, dan pengoptimalan kinerja secara keseluruhan. Pola ini menggunakan perutean statis, di mana klien menyimpan titik akhir cache saat login awal dan berkomunikasi langsung dengan sel. Decoupling ini meningkatkan ketahanan sistem dengan membantu memastikan fungsionalitas aplikasi berbasis sel yang tidak terganggu selama gangguan router sel.

Pola ini menggunakan AWS CloudFormation template untuk menyebarkan arsitektur. Untuk detail tentang apa yang diterapkan template, atau untuk menerapkan konfigurasi yang sama dengan menggunakan Konsol Manajemen AWS, lihat bagian [Informasi tambahan](#serverless-cell-router-architecture-additional).

**penting**  
Demonstrasi, kode, dan CloudFormation template yang disajikan dalam pola ini dimaksudkan untuk tujuan penjelasan saja. Materi yang disediakan semata-mata untuk tujuan menggambarkan pola desain dan membantu dalam pemahaman. Demo dan kode tidak siap produksi dan tidak boleh digunakan untuk kegiatan produksi langsung apa pun. Setiap upaya untuk menggunakan kode atau demo di lingkungan produksi sangat tidak dianjurkan dan merupakan risiko Anda sendiri. Kami merekomendasikan konsultasi dengan profesional yang tepat dan melakukan pengujian menyeluruh sebelum menerapkan pola ini atau komponennya dalam pengaturan produksi.

## Prasyarat dan batasan
<a name="serverless-cell-router-architecture-prereqs"></a>

**Prasyarat**
+ Akun Amazon Web Services (AWS) yang aktif
+ Versi terbaru dari [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html))
+ [Kredensi AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) dengan izin yang diperlukan untuk membuat CloudFormation tumpukan, AWS Lambda fungsi, dan sumber daya terkait

**Versi produk**
+ Python 3.12

## Arsitektur
<a name="serverless-cell-router-architecture-architecture"></a>

Diagram berikut menunjukkan desain tingkat tinggi dari router sel.

![\[Proses lima langkah router sel.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/feb90b51-dd91-483b-b5a3-b0a5359686e3.png)


Diagram langkah-langkah melalui alur kerja berikut:

1. Pengguna menghubungi Amazon API Gateway, yang berfungsi sebagai bagian depan untuk titik akhir API router sel.

1. Amazon Cognito menangani otentikasi dan otorisasi.

1.  AWS Step Functions Alur kerja terdiri dari komponen-komponen berikut:
   + **Orchestrator** - `Orchestrator` Penggunaan AWS Step Functions untuk membuat alur kerja, atau mesin negara. Alur kerja dipicu oleh API router sel. `Orchestrator`Mengeksekusi fungsi Lambda berdasarkan jalur sumber daya.
   + **Dispatcher** - Fungsi `Dispatcher` Lambda mengidentifikasi dan menetapkan satu sel statis per pengguna baru yang terdaftar. Fungsi mencari sel dengan jumlah pengguna paling sedikit, menetapkannya ke pengguna, dan mengembalikan titik akhir.
   + **Mapper** - `Mapper` Operasi menangani user-to-cell pemetaan dalam database `RoutingDB` Amazon DynamoDB yang dibuat oleh template. CloudFormation Ketika dipicu, `Mapper` fungsi menyediakan pengguna yang sudah ditetapkan dengan endpoint mereka.
   + **Scaler** - `Scaler` Fungsi melacak hunian sel dan kapasitas yang tersedia. Bila diperlukan, `Scaler` fungsi dapat mengirim permintaan melalui Amazon Simple Queue Service (Amazon SQS) ke layer Provision and Deploy untuk meminta sel baru.
   + **Validator** - `Validator` Fungsi memvalidasi titik akhir sel dan mendeteksi potensi masalah.

1. `RoutingDB`Menyimpan informasi dan atribut sel (titik akhir API,, status Wilayah AWS, metrik).

1. Bila kapasitas sel yang tersedia melebihi ambang batas, router sel meminta layanan penyediaan dan penerapan melalui Amazon SQS untuk membuat sel baru.

Saat sel baru dibuat, `RoutingDB` akan diperbarui dari layer Provision and Deploy. Namun, proses itu berada di luar cakupan pola ini. [Untuk ikhtisar bangunan desain arsitektur berbasis sel dan detail tentang desain router sel yang digunakan dalam pola ini, lihat bagian Informasi tambahan.](#serverless-cell-router-architecture-additional)

## Alat
<a name="serverless-cell-router-architecture-tools"></a>

**Layanan AWS**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) membantu Anda membuat, menerbitkan, memelihara, memantau, dan mengamankan REST, HTTP, dan WebSocket APIs dalam skala apa pun.
+ [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
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) menyediakan otentikasi, otorisasi, dan manajemen pengguna untuk aplikasi web dan seluler.
+ [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 dapat diskalakan.
+ [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.
+ [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.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)adalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi Lambda dan lainnya untuk membangun aplikasi bisnis yang penting. Layanan AWS 

**Alat-alat lainnya**
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di repositori GitHub [Serverless-Cell-Router](https://github.com/aws-samples/Serverless-Cell-Router/). 

## Praktik terbaik
<a name="serverless-cell-router-architecture-best-practices"></a>

Untuk praktik terbaik saat membangun arsitektur berbasis sel, lihat panduan Well-Architected AWS berikut:
+ [Mengurangi Lingkup Dampak dengan Arsitektur Berbasis Sel](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/reducing-scope-of-impact-with-cell-based-architecture.html)
+ [AWS Pilar Keandalan Kerangka Well-Architected REL1: 0-BP04 Gunakan arsitektur sekat untuk membatasi cakupan dampak](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_fault_isolation_use_bulkhead.html)

## Epik
<a name="serverless-cell-router-architecture-epics"></a>

### Siapkan file sumber
<a name="prepare-source-files"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori kode contoh. | Untuk mengkloning Serverless-Cell-Router GitHub repositori ke komputer Anda, gunakan perintah berikut:<pre>git clone https://github.com/aws-samples/Serverless-Cell-Router/</pre> | Developer | 
| Siapkan kredensial AWS CLI sementara. | Konfigurasikan kredensi AWS CLI dengan untuk Anda. Akun AWS Panduan ini menggunakan kredensil sementara yang disediakan oleh **baris Perintah** Pusat Identitas AWS IAM atau opsi akses terprogram. Ini menetapkan variabel`AWS_ACCESS_KEY_ID`,`AWS_SECRET_ACCESS_KEY`, dan `AWS_SESSION_TOKEN` AWS lingkungan dengan kredensil yang sesuai untuk digunakan dengan. AWS CLI | Developer | 
| Buat ember S3. | Buat bucket S3 yang akan digunakan untuk menyimpan dan mengakses fungsi Serverless-Cell-Router Lambda untuk penerapan oleh template. CloudFormation Untuk membuat bucket S3, gunakan perintah berikut: <pre>aws s3api create-bucket --bucket <bucket name> --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1</pre> | Developer | 
| Buat file.zip. | Buat satu file.zip untuk setiap fungsi Lambda yang terletak di direktori Functions[.](https://github.com/aws-samples/Serverless-Cell-Router/tree/main/Functions) File.zip ini akan digunakan untuk menyebarkan fungsi Lambda. Di Mac, gunakan `zip` perintah berikut:<pre>zip -j mapper-scr.zip Functions/Mapper.py<br />zip -j dispatcher-scr.zip Functions/Dispatcher.py<br />zip -j scaler-scr.zip Functions/Scaler.py<br />zip -j cp validator-scr.zip Functions/Validator.py<br />zip -j dynamodbDummyData-scr.zip Functions/DynamodbDummyData.py</pre> | Developer | 
| Salin file.zip ke bucket S3. | Untuk menyalin semua file.zip fungsi Lambda ke bucket S3, gunakan perintah berikut:<pre>aws s3 cp mapper-scr.zip s3://<bucket name><br />aws s3 cp dispatcher-scr.zip s3://<bucket name><br />aws s3 cp scaler-scr.zip s3://<bucket name><br />aws s3 cp validator-scr.zip s3://<bucket name><br />aws s3 cp dynamodbDummyData-scr.zip s3://<bucket name></pre> | Developer | 

### Buat CloudFormation tumpukan
<a name="create-the-cfn-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan CloudFormation template. | Untuk menyebarkan CloudFormation template, jalankan AWS CLI perintah berikut:<pre>aws cloudformation create-stack --stack-name serverless.cell-router \<br />--template-body file://Serverless-Cell-Router-Stack-v10.yaml \<br />--capabilities CAPABILITY_IAM \<br />--parameters ParameterKey=LambdaFunctionMapperS3KeyParameterSCR,ParameterValue=mapper-scr.zip \<br />ParameterKey=LambdaFunctionDispatcherS3KeyParameterSCR,ParameterValue=dispatcher-scr.zip \<br />ParameterKey=LambdaFunctionScalerS3KeyParameterSCR,ParameterValue=scaler-scr.zip \<br />ParameterKey=LambdaFunctionAddDynamoDBDummyItemsS3KeyParameterSCR,ParameterValue=dynamodbDummyData-scr.zip \<br />ParameterKey=LambdaFunctionsS3BucketParameterSCR,ParameterValue=<S3 bucket storing lambda zip files> \<br />ParameterKey=CognitoDomain,ParameterValue=<Cognito Domain Name> \<br />--region <enter your aws region id, e.g. "eu-central-1"></pre> | Developer | 
| Periksa kemajuan. | Masuk ke Konsol Manajemen AWS, buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation/](), dan periksa kemajuan pengembangan tumpukan. Ketika statusnya`CREATE_COMPLETE`, tumpukan telah berhasil digunakan. | Developer | 

### Menilai dan memverifikasi
<a name="assess-and-verify"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tetapkan sel ke pengguna. | Untuk memulai`Orchestrator`, jalankan perintah curl berikut:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/cells</pre>`Orchestrator`Pemicu eksekusi `Dispatcher` fungsi. Itu`Dispatcher`, pada gilirannya, memverifikasi keberadaan pengguna. Jika pengguna ditemukan, `Dispatcher` mengembalikan ID sel terkait dan titik akhir URLs. Jika pengguna tidak ditemukan, `Dispatcher` mengalokasikan sel ke pengguna dan mengirimkan ID sel ke `Scaler` fungsi untuk penilaian kapasitas sisa sel yang ditetapkan.Respons `Scaler` fungsi adalah sebagai berikut:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Developer | 
| Ambil sel pengguna. | Untuk menggunakan `Orchestrator` untuk menjalankan `Mapper` fungsi, jalankan perintah berikut:<pre>curl -X POST \<br />-H "Authorization: Bearer {User id_token}" \<br />https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/Cell_Router_Development/mapper</pre>`Orchestrator`Pencarian untuk sel yang ditetapkan untuk pengguna dan mengembalikan ID sel dan URLs dalam respons berikut:`"cellID : cell-0002 , endPoint_1 : https://xxxxx.execute-api.eu-north-1.amazonaws.com/ , endPoint_2 : https://xxxxxxx.execute-api.eu-central-1.amazonaws.com/"` | Developer | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bersihkan sumber daya. | Untuk menghindari biaya tambahan di akun Anda, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/serverless-cell-router-architecture.html) | Pengembang aplikasi | 

## Sumber daya terkait
<a name="serverless-cell-router-architecture-resources"></a>

**Referensi**
+ [Stabilitas statis menggunakan Zona Ketersediaan](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)
+ [Batas Isolasi Kesalahan AWS: Stabilitas statis](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/static-stability.html)

**Video**

[Physalia: Arsitektur Berbasis Sel untuk Memberikan Ketersediaan Lebih Tinggi di Amazon EBS](https://www.youtube.com/watch?v=6IknqRZMFic) 




[https://www.youtube-nocookie.com/embed/6Iknq? RZMFic kontrol=0](https://www.youtube-nocookie.com/embed/6IknqRZMFic?controls=0)

## Informasi tambahan
<a name="serverless-cell-router-architecture-additional"></a>

**Tempat desain arsitektur berbasis sel**

Meskipun pola ini berfokus pada router sel, penting untuk memahami seluruh lingkungan. Lingkungan disusun menjadi tiga lapisan diskrit:
+ Lapisan Routing, atau Thin layer, yang berisi router sel
+ Lapisan sel, terdiri dari berbagai sel
+ Lapisan Penyediaan dan Penyebaran, yang menyediakan sel dan menyebarkan aplikasi

Setiap lapisan mempertahankan fungsionalitas bahkan jika terjadi gangguan yang mempengaruhi lapisan lain. Akun AWS berfungsi sebagai batas isolasi kesalahan.

Diagram berikut menunjukkan lapisan pada tingkat tinggi. Lapisan Cell dan layer Provision and Deploy berada di luar cakupan pola ini.

![\[Layer Routing, layer Cell dengan beberapa akun sel, dan layer Provision and Deploy.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/137ac34d-43c3-42b6-95de-a365ff611ce8.png)


Untuk informasi selengkapnya tentang arsitektur berbasis sel, lihat [Mengurangi Lingkup Dampak dengan Arsitektur Berbasis Sel: Perutean sel](https://docs.aws.amazon.com/wellarchitected/latest/reducing-scope-of-impact-with-cell-based-architecture/cell-routing.html).

**Pola desain cell-router**

Router sel adalah komponen bersama di seluruh sel. Untuk mengurangi dampak potensial, penting bagi lapisan Routing untuk menggunakan desain yang sederhana dan dapat diskalakan secara horizontal yang setipis mungkin. Berfungsi sebagai titik masuk sistem, lapisan Routing hanya terdiri dari komponen yang diperlukan untuk secara efisien menetapkan pengguna ke sel yang sesuai. Komponen dalam lapisan ini tidak terlibat dalam pengelolaan atau pembuatan sel.

Pola ini menggunakan routing statis, yang berarti bahwa klien cache endpoint pada login awal dan kemudian membangun komunikasi langsung dengan sel. Interaksi berkala antara klien dan router sel dimulai untuk mengkonfirmasi status saat ini atau mengambil pembaruan apa pun. Decoupling yang disengaja ini memungkinkan operasi tanpa gangguan untuk pengguna yang ada jika terjadi downtime router sel, dan menyediakan fungsionalitas dan ketahanan berkelanjutan dalam sistem.

Dalam pola ini, router sel mendukung fungsionalitas berikut:
+ Mengambil data sel dari database sel di lapisan Provision and Deploy dan menyimpan atau memperbarui database lokal.
+ Menetapkan sel untuk setiap pengguna aplikasi terdaftar baru dengan menggunakan algoritma penugasan sel.
+ Menyimpan user-to-cells pemetaan dalam database lokal.
+ Memeriksa kapasitas sel selama penugasan pengguna dan memunculkan acara untuk mesin penjual otomatis ke lapisan Provision and Deploy untuk membuat sel.
+ Menggunakan algoritma kriteria pembuatan sel untuk menyediakan fungsi ini.
+ Menanggapi permintaan pengguna yang baru terdaftar dengan menyediakan sel statis. URLs Ini URLs akan di-cache pada klien dengan waktu untuk hidup (TTL).
+ Menanggapi permintaan pengguna yang ada dari URL yang tidak valid dengan memberikan URL baru atau yang diperbarui.

Untuk lebih memahami router sel demonstrasi yang diatur oleh CloudFormation template, tinjau komponen dan langkah berikut:

1. Siapkan dan konfigurasikan kumpulan pengguna Amazon Cognito.

1. Siapkan dan konfigurasikan API Gateway API untuk router sel.

1. Buat tabel DynamoDB.

1. Buat dan konfigurasikan antrian SQS.

1. Menerapkan`Orchestrator`.

1. Menerapkan fungsi Lambda:`Dispatcher`,,`Scaler`,`Mapper`. `Validator`

1. Keledai dan verifikasi.

Anggapannya adalah bahwa lapisan Provision dan Deploy sudah ditetapkan. Detail implementasinya berada di luar cakupan artefak ini.

Karena komponen ini diatur dan dikonfigurasi oleh CloudFormation template, langkah-langkah berikut disajikan pada tingkat deskriptif dan tinggi. Asumsinya adalah Anda memiliki AWS keterampilan yang diperlukan untuk menyelesaikan pengaturan dan konfigurasi.

*1. Siapkan dan konfigurasikan kumpulan pengguna Amazon Cognito*

Masuk ke Konsol Manajemen AWS, dan buka konsol Amazon Cognito di. [https://console.aws.amazon.com/cognito/]() Siapkan dan konfigurasikan kumpulan pengguna Amazon Cognito bernama`CellRouterPool`, dengan integrasi aplikasi, UI yang dihosting, dan izin yang diperlukan.

*2. Siapkan dan konfigurasikan API Gateway API untuk router sel*

Buka konsol API Gateway di [https://console.aws.amazon.com/apigateway/](). Siapkan dan konfigurasikan API bernama`CellRouter`, menggunakan otorisasi Amazon Cognito yang terintegrasi dengan kumpulan pengguna Amazon Cognito. `CellRouterPool` Menerapkan elemen-elemen berikut:
+ `CellRouter`Sumber daya API, termasuk `POST` metode
+ Integrasi dengan alur kerja Step Functions diimplementasikan pada langkah 5
+ Otorisasi melalui otorisasi Amazon Cognito
+ Permintaan integrasi dan pemetaan respons
+ Alokasi izin yang diperlukan

*3. Buat tabel DynamoDB*

Buka konsol DynamoDB [https://console.aws.amazon.com/dynamodb/]()di, dan buat tabel DynamoDB standar yang disebut dengan konfigurasi berikut: `tbl_router`
+ **Kunci partisi** - `marketId`
+ **Kunci sortir** - `cellId`
+ **Mode kapasitas** - Disediakan
+ **Point-in-time pemulihan (PITR)** - Mati

Pada tab **Indeks**, buat indeks sekunder global yang disebut`marketId-currentCapacity-index`. Fungsi `Scaler` Lambda akan menggunakan indeks untuk melakukan pencarian efisien untuk sel dengan jumlah pengguna yang ditugaskan terendah.

Buat struktur tabel dengan atribut berikut:
+ `marketId`- Eropa
+ `cellId`- sel-0002
+ `currentCapacity`- 2
+ `endPoint_1`- <your endpoint for the first Region>
+ `endPoint_2`- <your endpoint for the second Region>
+ `IsHealthy`- Benar
+ `maxCapacity`- 10
+ `regionCode_1` ‒ `eu-north-1`
+ `regionCode_2` ‒ `eu-central-1`
+ `userIds`- <your email address>

*4. Membuat dan mengkonfigurasi antrian SQS*

**Buka konsol Amazon SQS di [https://console.aws.amazon.com/sqs/](), dan buat antrean SQS standar yang disebut dikonfigurasi dengan enkripsi kunci `CellProvisioning` Amazon SQS.**

*5. Menerapkan Orkestrator*

Kembangkan alur kerja Step Functions `Orchestrator` untuk berfungsi sebagai router. Alur kerja dapat dipanggil melalui API router sel. Alur kerja mengeksekusi fungsi Lambda yang ditunjuk berdasarkan jalur sumber daya. Integrasikan fungsi langkah dengan API Gateway API untuk router sel`CellRouter`, dan konfigurasikan izin yang diperlukan untuk menjalankan fungsi Lambda.

Diagram berikut menunjukkan alur kerja. Status pilihan memanggil salah satu fungsi Lambda. Jika fungsi Lambda berhasil, alur kerja berakhir. Jika fungsi Lambda gagal, status gagal dipanggil.

![\[Diagram alur kerja dengan empat fungsi dan berakhir dalam keadaan gagal.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/fd2fbf9d-9ae4-4c27-bc32-cf117350137a/images/cfe8d029-6f30-49a1-aaad-cad503bdcbae.png)


*6. Menerapkan fungsi Lambda*

Menerapkan `Dispatcher``Mapper`,,`Scaler`, dan `Validator` fungsi. Saat Anda mengatur dan mengonfigurasi setiap fungsi dalam demonstrasi, tentukan peran untuk fungsi tersebut dan tetapkan izin yang diperlukan untuk melakukan operasi yang diperlukan pada tabel DynamoDB. `tbl_router` Selain itu, integrasikan setiap fungsi ke dalam alur kerja`Orchestrator`.

*Fungsi dispatcher*

`Dispatcher`Fungsi ini bertanggung jawab untuk mengidentifikasi dan menetapkan sel statis tunggal untuk setiap pengguna terdaftar baru. Ketika pengguna baru mendaftar dengan aplikasi global, permintaan masuk ke `Dispatcher` fungsi. Fungsi memproses permintaan dengan menggunakan kriteria evaluasi yang telah ditentukan seperti berikut:

1. **Wilayah** - Pilih sel di pasar tempat pengguna berada. Misalnya, jika pengguna mengakses aplikasi global dari Eropa, pilih sel yang digunakan Wilayah AWS di Eropa.

1. **Kedekatan atau latensi** - Pilih sel yang paling dekat dengan pengguna Misalnya, jika pengguna mengakses aplikasi dari Belanda, fungsi tersebut mempertimbangkan sel yang menggunakan Frankfurt dan Irlandia. Keputusan mengenai sel mana yang paling dekat didasarkan pada metrik seperti latensi antara lokasi pengguna dan Wilayah sel. Untuk pola contoh ini, informasi diumpankan secara statis dari lapisan Provision and Deploy.

1. **Kesehatan** - `Dispatcher` Fungsi memeriksa apakah sel yang dipilih sehat berdasarkan keadaan sel yang disediakan (Sehat = benar atau salah).

1. **Kapasitas** - Distribusi pengguna didasarkan pada *jumlah pengguna paling sedikit dalam logika sel*, sehingga pengguna ditugaskan ke sel yang memiliki jumlah pengguna paling sedikit.

**catatan**  
Kriteria ini disajikan untuk menjelaskan pola contoh ini saja. Untuk implementasi router sel kehidupan nyata, Anda dapat menentukan kriteria berbasis kasus yang lebih halus dan menggunakan.

`Orchestrator`Memanggil fungsi Dispatcher untuk menetapkan pengguna ke sel. Dalam fungsi demo ini, nilai pasar adalah parameter statis yang didefinisikan sebagai`europe`.

`Dispatcher`Fungsi menilai apakah sel sudah ditetapkan ke pengguna. Jika sel sudah ditetapkan, `Dispatcher` fungsi mengembalikan titik akhir sel. Jika tidak ada sel yang ditetapkan ke pengguna, fungsi akan mencari sel dengan jumlah pengguna paling sedikit, menetapkannya ke pengguna, dan mengembalikan titik akhir. Efisiensi permintaan pencarian sel dioptimalkan dengan menggunakan indeks sekunder global.

*Fungsi mapper*

`Mapper`Fungsi mengawasi penyimpanan dan pemeliharaan user-to-cell pemetaan dalam database. Sel tunggal dialokasikan untuk setiap pengguna terdaftar. Setiap sel memiliki dua yang berbeda URLs —satu untuk setiap Wilayah AWS. Berfungsi sebagai titik akhir API yang dihosting di API Gateway, ini URLs berfungsi sebagai titik masuk ke aplikasi global.

Ketika `Mapper` fungsi menerima permintaan dari aplikasi klien, ia menjalankan query pada `tbl_router` tabel DynamoDB untuk mengambil user-to-cell pemetaan yang terkait dengan ID email yang disediakan. Jika menemukan sel yang ditetapkan, `Mapper` fungsi segera menyediakan dua URLs sel. `Mapper`Fungsi ini juga secara aktif memonitor perubahan pada sel URLs, dan memulai pemberitahuan atau pembaruan ke pengaturan pengguna.

*Fungsi scaler*

`Scaler`Fungsi ini mengelola kapasitas sisa sel. Untuk setiap permintaan pendaftaran pengguna baru, `Scaler` fungsi menilai kapasitas sel yang tersedia dari `Dispatcher` fungsi yang ditetapkan untuk pengguna. Jika sel telah mencapai batas yang telah ditentukan sesuai dengan kriteria evaluasi yang ditentukan, fungsi akan memulai permintaan melalui antrian Amazon SQS ke lapisan Penyediaan dan Penerapan, meminta penyediaan dan penerapan sel baru. Penskalaan sel dapat dijalankan berdasarkan serangkaian kriteria evaluasi seperti berikut:

1. **Pengguna maksimum** - Setiap sel dapat memiliki 500 jumlah maksimum pengguna.

1. **Kapasitas buffer** - Kapasitas buffer setiap sel adalah 20 persen, yang berarti bahwa setiap sel dapat ditetapkan ke 400 pengguna setiap saat. Kapasitas buffer 20 persen sisanya dicadangkan untuk kasus penggunaan di masa mendatang dan penanganan skenario yang tidak terduga (misalnya, ketika layanan pembuatan dan penyediaan sel tidak tersedia).

1. **Pembuatan sel** - Segera setelah sel yang ada mencapai 70 persen kapasitas, permintaan dipicu untuk membuat sel tambahan.

**catatan**  
Kriteria ini disajikan untuk menjelaskan pola contoh ini saja. Untuk implementasi router sel kehidupan nyata, Anda dapat menentukan kriteria berbasis kasus yang lebih halus dan menggunakan.

`Scaler`Kode demonstrasi dijalankan oleh `Orchestrator` setelah `Dispatcher` berhasil menetapkan sel ke pengguna yang baru terdaftar. Setelah menerima ID sel dari `Scaler``Dispatcher`, mengevaluasi apakah sel yang ditunjuk memiliki kapasitas yang memadai untuk mengakomodasi pengguna tambahan, berdasarkan kriteria evaluasi yang telah ditentukan. Jika kapasitas sel tidak mencukupi, `Scaler` fungsi mengirimkan pesan ke layanan Amazon SQS. Pesan ini diambil oleh layanan dalam layer Provision and Deploy, memulai penyediaan sel baru.

**Fungsi validator**

`Validator`Fungsi mengidentifikasi dan menyelesaikan masalah yang berkaitan dengan akses sel. Saat pengguna masuk ke aplikasi global, aplikasi mengambil sel URLs dari pengaturan profil pengguna dan merutekan permintaan pengguna ke salah satu dari dua Wilayah yang ditetapkan di dalam sel. Jika URLs tidak dapat diakses, aplikasi dapat mengirimkan permintaan URL validasi ke router sel. Router sel `Orchestrator` memanggil file. `Validator` `Validator`Memulai proses validasi. Validasi mungkin mencakup, di antara pemeriksaan lainnya, yang berikut:
+ Sel referensi silang URLs dalam permintaan dengan URLs disimpan dalam database untuk mengidentifikasi dan memproses pembaruan potensial
+ Menjalankan pemeriksaan kesehatan mendalam (misalnya, `HTTP GET` permintaan ke titik akhir sel)

Kesimpulannya, `Validator` fungsi memberikan tanggapan terhadap permintaan aplikasi klien, memberikan status validasi bersama dengan langkah-langkah remediasi yang diperlukan.

`Validator`Ini dirancang untuk meningkatkan pengalaman pengguna. Pertimbangkan skenario di mana pengguna tertentu mengalami kesulitan mengakses aplikasi global karena insiden menyebabkan sel untuk sementara tidak tersedia. Alih-alih menyajikan kesalahan umum, `Validator` fungsi ini dapat memberikan langkah-langkah remediasi instruktif. Langkah-langkah ini mungkin termasuk tindakan berikut:
+ Beri tahu pengguna tentang insiden tersebut.
+ Berikan perkiraan waktu tunggu sebelum ketersediaan layanan.
+ Berikan nomor kontak dukungan untuk mendapatkan informasi tambahan.

Kode demo untuk `Validator` fungsi memverifikasi bahwa sel yang disediakan pengguna URLs dalam permintaan cocok dengan catatan yang disimpan dalam tabel. `tbl_router` `Validator`Fungsi ini juga memeriksa apakah sel-sel sehat.

# Siapkan akses pribadi ke bucket Amazon S3 melalui titik akhir VPC
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint"></a>

*Martin Maritsch, Nicolas Jacob Baer, Gabriel Rodriguez Garcia, Shukhrat Khodjaev, Mohan Gowda Purushothama, dan Joaquin Rinaudo, Amazon Web Services*

## Ringkasan
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-summary"></a>

Di Amazon Simple Storage Service (Amazon S3), URLs presigned memungkinkan Anda berbagi file dengan ukuran arbitrer dengan pengguna target. Secara default, Amazon S3 presigned dapat URLs diakses dari internet dalam jangka waktu kedaluwarsa, yang membuatnya nyaman digunakan. Namun, lingkungan perusahaan seringkali memerlukan akses ke Amazon S3 yang ditetapkan URLs untuk dibatasi hanya pada jaringan pribadi.

Pola ini menyajikan solusi tanpa server untuk berinteraksi secara aman dengan objek S3 dengan menggunakan presigned URLs dari jaringan pribadi tanpa traversal internet. Dalam arsitektur, pengguna mengakses Application Load Balancer melalui nama domain internal. Lalu lintas dirutekan secara internal melalui Amazon API Gateway dan titik akhir virtual private cloud (VPC) untuk bucket S3. AWS Lambda Fungsi ini menghasilkan presigned URLs untuk unduhan file melalui titik akhir VPC pribadi, yang membantu meningkatkan keamanan dan privasi untuk data sensitif.

## Prasyarat dan batasan
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-prereqs"></a>

**Prasyarat**
+ VPC yang menyertakan subnet yang digunakan dalam Akun AWS yang terhubung ke jaringan perusahaan (misalnya, melalui). AWS Direct Connect

**Batasan**
+ Bucket S3 harus memiliki nama yang sama dengan domain, jadi sebaiknya Anda memeriksa aturan penamaan [bucket Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html).
+ Contoh arsitektur ini tidak menyertakan fitur pemantauan untuk infrastruktur yang digunakan. Jika kasus penggunaan Anda memerlukan pemantauan, pertimbangkan untuk menambahkan [layanan AWS pemantauan](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html).
+ Contoh arsitektur ini tidak menyertakan validasi masukan. Jika kasus penggunaan Anda memerlukan validasi input dan tingkat keamanan yang lebih tinggi, pertimbangkan [AWS WAF untuk menggunakan untuk melindungi API Anda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html).
+ Contoh arsitektur ini tidak menyertakan akses logging dengan Application Load Balancer. Jika kasus penggunaan Anda memerlukan pencatatan akses, pertimbangkan untuk mengaktifkan log [akses penyeimbang beban](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html).

**Versi**
+ Python versi 3.11 atau yang lebih baru
+ Terraform versi 1.6 atau yang lebih baru

## Arsitektur
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-architecture"></a>

**Tumpukan teknologi target**

Layanan AWS berikut digunakan dalam tumpukan teknologi target:
+ **Amazon S3** adalah layanan penyimpanan inti yang digunakan untuk mengunggah, mengunduh, dan menyimpan file dengan aman.
+ **Amazon API Gateway** mengekspos sumber daya dan titik akhir untuk berinteraksi dengan bucket S3. Layanan ini berperan dalam menghasilkan presigned URLs untuk mengunduh atau mengunggah data.
+ **AWS Lambda**menghasilkan presigned URLs untuk men-download file dari Amazon S3. Fungsi Lambda dipanggil oleh API Gateway.
+ **Amazon VPC** menyebarkan sumber daya dalam VPC untuk menyediakan isolasi jaringan. VPC mencakup subnet dan tabel routing untuk mengontrol arus lalu lintas.
+ **Application Load Balancer** merutekan lalu lintas masuk ke API Gateway atau ke endpoint VPC bucket S3. Ini memungkinkan pengguna dari jaringan perusahaan untuk mengakses sumber daya secara internal.
+ **Titik akhir VPC untuk Amazon S3** memungkinkan komunikasi langsung dan pribadi antara sumber daya di VPC dan Amazon S3 tanpa melintasi internet publik.
+ **AWS Identity and Access Management (IAM)** mengontrol akses ke AWS sumber daya. Izin disiapkan untuk memastikan interaksi yang aman dengan API dan layanan lainnya.

**Arsitektur target**

![\[Menyiapkan akses pribadi ke bucket S3 melalui endpoing VPC\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/683ca6a1-789c-4444-bcbf-e4e80d253df3/images/1ca7ee17-d346-4eb9-bf61-ccf42528a401.png)


Diagram ini menggambarkan hal sebagai berikut:

1. Pengguna dari jaringan perusahaan dapat mengakses Application Load Balancer melalui nama domain internal. Kami berasumsi bahwa ada koneksi antara jaringan perusahaan dan subnet intranet di Akun AWS (misalnya, melalui koneksi). Direct Connect 

1. Application Load Balancer merutekan lalu lintas masuk ke API Gateway untuk menghasilkan presigned URLs untuk mengunduh atau mengunggah data ke Amazon S3, atau ke titik akhir VPC bucket S3. Dalam kedua skenario, permintaan dirutekan secara internal dan tidak perlu melintasi internet.

1. API Gateway mengekspos sumber daya dan titik akhir untuk berinteraksi dengan bucket S3. Dalam contoh ini, kami menyediakan titik akhir untuk mengunduh file dari bucket S3, tetapi ini dapat diperluas untuk menyediakan fungsionalitas unggah juga.

1. Fungsi Lambda menghasilkan URL yang telah ditetapkan sebelumnya untuk mengunduh file dari Amazon S3 dengan menggunakan nama domain Application Load Balancer, bukan domain Amazon S3 publik.

1. Pengguna menerima URL yang telah ditetapkan sebelumnya dan menggunakannya untuk mengunduh file dari Amazon S3 dengan menggunakan Application Load Balancer. Penyeimbang beban menyertakan rute default untuk mengirim lalu lintas yang tidak dimaksudkan untuk API menuju titik akhir VPC bucket S3.

1. Titik akhir VPC merutekan URL yang telah ditetapkan sebelumnya dengan nama domain kustom ke bucket S3. Bucket S3 harus memiliki nama yang sama dengan domain.

**Otomatisasi dan skala**

Pola ini menggunakan Terraform untuk menyebarkan infrastruktur dari repositori kode ke file. Akun AWS

## Alat
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-tools"></a>

**Alat**
+ [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.
+ [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 dengan AWS layanan melalui perintah di shell baris perintah Anda.

**Repositori kode**

[Kode untuk pola ini tersedia dalam GitHub repositori di private-s3-vpce. https://github.com/aws-samples/](https://github.com/aws-samples/private-s3-vpce)

## Praktik terbaik
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-best-practices"></a>

Contoh arsitektur untuk pola ini menggunakan [izin IAM](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html) untuk mengontrol akses ke API. Siapa pun yang memiliki kredensil IAM yang valid dapat memanggil API. Jika kasus penggunaan Anda memerlukan model otorisasi yang lebih kompleks, Anda mungkin ingin [menggunakan mekanisme kontrol akses yang berbeda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html).

## Epik
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-epics"></a>

### Menerapkan solusi dalam Akun AWS
<a name="deploy-the-solution-in-an-aws-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Dapatkan AWS kredensil. | Tinjau AWS kredensi Anda dan akses Anda ke akun Anda. Untuk petunjuk, lihat [Pengaturan konfigurasi dan file kredensyal](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) dalam AWS CLI dokumentasi. | AWS DevOps, AWS Umum | 
| Kloning repositori. | Kloning GitHub repositori yang disediakan dengan pola ini:<pre>git clone https://github.com/aws-samples/private-s3-vpce</pre> | AWS DevOps, AWS Umum | 
| Konfigurasikan variabel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS Umum | 
| Menyebarkan solusi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS Umum | 

### Pengujian solusi
<a name="test-the-solution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat file uji. | Unggah file ke Amazon S3 untuk membuat skenario pengujian untuk unduhan file. Anda dapat menggunakan [konsol Amazon S3](https://console.aws.amazon.com/s3/) atau perintah berikut: AWS CLI <pre>aws s3 cp /path/to/testfile s3://your-bucket-name/testfile</pre> | AWS DevOps, AWS Umum | 
| Uji fungsionalitas URL yang telah ditetapkan sebelumnya. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint.html) | AWS DevOps, AWS Umum | 
| Bersihkan. | Pastikan untuk menghapus sumber daya saat tidak lagi diperlukan:<pre>terraform destroy</pre> | AWS DevOps, AWS Umum | 

## Pemecahan masalah
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Nama kunci objek S3 dengan karakter khusus seperti tanda angka (\$1) memecah parameter URL dan menyebabkan kesalahan. | Encode parameter URL dengan benar, dan pastikan bahwa nama kunci objek S3 mengikuti pedoman [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html). | 

## Sumber daya terkait
<a name="set-up-private-access-to-an-amazon-s3-bucket-through-a-vpc-endpoint-resources"></a>

Amazon S3:
+ [Berbagi objek dengan presigned URLs](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)
+ [Mengontrol akses dari titik akhir VPC dengan kebijakan bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html)

Amazon API Gateway:
+ [Menggunakan kebijakan titik akhir VPC secara pribadi APIs di API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-vpc-endpoint-policies.html)

Application Load Balancer:
+ [Hosting Situs Web Statis HTTPS Internal dengan ALB, S3, dan PrivateLink](https://aws.amazon.com/blogs/networking-and-content-delivery/hosting-internal-https-static-websites-with-alb-s3-and-privatelink/) (AWS posting blog)

# Memecahkan masalah status AWS Step Functions dengan menggunakan Amazon Bedrock
<a name="troubleshooting-states-in-aws-step-functions"></a>

*Aniket Kurzadkar dan Sangam Kushwaha, Amazon Web Services*

## Ringkasan
<a name="troubleshooting-states-in-aws-step-functions-summary"></a>

AWS Step Functions Kemampuan penanganan kesalahan dapat membantu Anda melihat kesalahan yang terjadi selama status dalam [alur kerja](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html), tetapi masih bisa menjadi tantangan untuk menemukan akar penyebab kesalahan dan men-debugnya. Pola ini membahas tantangan tersebut dan menunjukkan bagaimana Amazon Bedrock dapat membantu Anda mengatasi kesalahan yang terjadi selama status di Step Functions. 

Step Functions menyediakan orkestrasi alur kerja, sehingga memudahkan pengembang untuk mengotomatisasi proses. Step Functions juga menyediakan fungsionalitas penanganan kesalahan yang memberikan manfaat sebagai berikut:
+ Pengembang dapat membuat aplikasi yang lebih tangguh yang tidak gagal sepenuhnya ketika terjadi kesalahan.
+ Alur kerja dapat mencakup logika bersyarat untuk menangani berbagai jenis kesalahan secara berbeda.
+ Sistem dapat secara otomatis mencoba kembali operasi yang gagal, mungkin dengan backoff eksponensial.
+ Jalur eksekusi alternatif dapat didefinisikan untuk skenario kesalahan, memungkinkan alur kerja beradaptasi dan melanjutkan pemrosesan.

Ketika terjadi kesalahan dalam alur kerja Step Functions, pola ini menunjukkan bagaimana pesan kesalahan dan konteks dapat dikirim ke model dasar (FM) seperti Claude 3 yang didukung oleh Step Functions. FM dapat menganalisis kesalahan, mengkategorikannya, dan menyarankan langkah-langkah perbaikan potensial.

## Prasyarat dan batasan
<a name="troubleshooting-states-in-aws-step-functions-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Pemahaman dasar [AWS Step Functions dan alur kerja](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html)
+ Konektivitas Amazon Bedrock [API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)

**Batasan**
+ Anda dapat menggunakan pendekatan pola ini untuk berbagai Layanan AWS. Namun, hasilnya mungkin bervariasi sesuai dengan prompt yang dibuat oleh AWS Lambda yang kemudian dievaluasi oleh Amazon Bedrock.
+ 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="troubleshooting-states-in-aws-step-functions-architecture"></a>

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

![\[Alur kerja untuk penanganan kesalahan dan pemberitahuan menggunakan Step Functions, Amazon Bedrock, dan Amazon SNS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/78f86c74-c9de-4562-adcc-105b87a77a54/images/d8eda499-ea1d-45e5-8a36-e04a44ad5c4b.png)


Diagram menunjukkan alur kerja otomatis untuk penanganan kesalahan dan pemberitahuan di mesin status Step Functions:

1. Pengembang memulai eksekusi mesin negara.

1. Mesin status Step Functions mulai memproses statusnya. Ada dua kemungkinan hasil:
   + (a) Jika semua status berhasil dijalankan, alur kerja dilanjutkan langsung ke Amazon SNS untuk pemberitahuan keberhasilan email.
   + (b) Jika ada status yang gagal, alur kerja berpindah ke kesalahan penanganan fungsi Lambda.

1. Jika terjadi kesalahan, berikut ini terjadi:
   + (a) Fungsi Lambda (penangan kesalahan) dipicu. Fungsi Lambda mengekstrak pesan kesalahan dari data peristiwa yang diteruskan oleh mesin status Step Functions kepadanya. Kemudian fungsi Lambda menyiapkan prompt berdasarkan pesan kesalahan ini dan mengirimkan prompt ke Amazon Bedrock. Prompt meminta solusi dan saran terkait dengan kesalahan spesifik yang ditemui.
   + (b) Amazon Bedrock, yang menampung model AI generatif, memproses prompt input. (Pola ini menggunakan model pondasi Anthropic Claude 3 (FM), yang merupakan salah satu dari banyak yang didukung FMs Amazon Bedrock.) Model AI menganalisis konteks kesalahan. Kemudian model menghasilkan respons yang dapat mencakup penjelasan mengapa kesalahan terjadi, solusi potensial untuk menyelesaikan kesalahan, dan saran untuk menghindari membuat kesalahan yang sama di masa depan.

     Amazon Bedrock mengembalikan respons yang dihasilkan AI ke fungsi Lambda. Fungsi Lambda memproses respons, berpotensi memformatnya atau mengekstrak informasi kunci. Kemudian fungsi Lambda mengirimkan respons ke output mesin status.

1. Setelah penanganan kesalahan atau eksekusi berhasil, alur kerja diakhiri dengan memicu Amazon SNS untuk mengirim pemberitahuan email.

## Alat
<a name="troubleshooting-states-in-aws-step-functions-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 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.
+ [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.

## Praktik terbaik
<a name="troubleshooting-states-in-aws-step-functions-best-practices"></a>
+ Mengingat bahwa Amazon Bedrock adalah model AI generatif yang belajar dari data terlatih, ia juga menggunakan data tersebut untuk melatih dan menghasilkan konteks. Sebagai praktik terbaik, sembunyikan informasi pribadi apa pun yang dapat menyebabkan masalah kebocoran data. 
+ Meskipun AI generatif dapat memberikan wawasan yang berharga, keputusan penanganan kesalahan kritis harus tetap melibatkan pengawasan manusia, terutama di lingkungan produksi.

## Epik
<a name="troubleshooting-states-in-aws-step-functions-epics"></a>

### Buat mesin status untuk alur kerja Anda
<a name="create-a-state-machine-for-your-workflow"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat mesin negara. | Untuk membuat mesin status yang sesuai dengan alur kerja Anda, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Buat fungsi Lambda
<a name="create-a-lam-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat fungsi Lambda.  | Untuk membuat fungsi Lambda, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 
| Siapkan logika yang diperlukan dalam kode Lambda. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html)<pre>client = boto3.client(<br />        service_name="bedrock-runtime", region_name="selected-region"<br />    )<br /><br />    # Invoke Claude 3 with the text prompt<br />    model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format<br /><br />    try:<br />        response = client.invoke_model(<br />            modelId=model_id,<br />            body=json.dumps(<br />                {<br />                    "anthropic_version": "bedrock-2023-05-31",<br />                    "max_tokens": 1024,<br />                    "messages": [<br />                        {<br />                            "role": "user",<br />                            "content": [{"type": "text", "text": prompt}],<br />                        }<br />                    ],<br />                }<br />            ),<br />        )<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

### Integrasikan Step Functions dengan Lambda
<a name="integrate-sfn-with-lam"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan Lambda untuk menangani kesalahan di Step Functions. | Untuk mengatur Step Functions untuk menangani kesalahan tanpa mengganggu alur kerja, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/troubleshooting-states-in-aws-step-functions.html) | AWS DevOps | 

## Pemecahan masalah
<a name="troubleshooting-states-in-aws-step-functions-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Lambda tidak dapat mengakses Amazon Bedrock API (Tidak diizinkan untuk melakukan) | Kesalahan ini terjadi ketika peran Lambda tidak memiliki izin untuk mengakses Amazon Bedrock API. Untuk mengatasi masalah ini, tambahkan `AmazonBedrockFullAccess` kebijakan untuk peran Lambda. Untuk informasi selengkapnya, lihat [AmazonBedrockFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html)di *Panduan Referensi Kebijakan AWS Terkelola*. | 
| Kesalahan batas waktu Lambda | Terkadang mungkin diperlukan lebih dari 30 detik untuk menghasilkan respons dan mengirimkannya kembali, tergantung pada prompt. Untuk mengatasi masalah ini, tingkatkan waktu konfigurasi. *Untuk informasi selengkapnya, lihat [Mengonfigurasi batas waktu fungsi Lambda di Panduan](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockFullAccess.html) Pengembang.AWS Lambda * | 

## Sumber daya terkait
<a name="troubleshooting-states-in-aws-step-functions-resources"></a>
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [Akses Amazon Bedrock API](https://docs.aws.amazon.com/bedrock/latest/userguide/getting-started-api.html)
+ [Buat fungsi Lambda pertama Anda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)
+ [Mengembangkan alur kerja dengan Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/developing-workflows.html#development-run-debug)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

# Lebih banyak pola
<a name="serverless-more-patterns-pattern-list"></a>

**Topics**
+ [Akses, kueri, dan gabungkan tabel Amazon DynamoDB menggunakan Athena](access-query-and-join-amazon-dynamodb-tables-using-athena.md)
+ [Otomatiskan CodeGuru ulasan Amazon untuk aplikasi AWS CDK Python dengan menggunakan Tindakan GitHub](automate-amazon-codeguru-reviews-for-aws-cdk-python-applications.md)
+ [Mengotomatiskan penilaian sumber daya AWS](automate-aws-resource-assessment.md)
+ [Otomatiskan penerapan aplikasi bersarang menggunakan AWS SAM](automate-deployment-of-nested-applications-using-aws-sam.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)
+ [Otomatiskan replikasi instans Amazon RDS di seluruh Akun AWS](automate-the-replication-of-amazon-rds-instances-across-aws-accounts.md)
+ [Secara otomatis mengarsipkan item ke Amazon S3 menggunakan DynamoDB TTL](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.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)
+ [Membangun arsitektur tanpa server multi-tenant di Amazon Service OpenSearch](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [Membangun penampil file mainframe tingkat lanjut di AWS Cloud](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Hitung value at risk (VaR) dengan menggunakan layanan AWS](calculate-value-at-risk-var-by-using-aws-services.md)
+ [Salin produk AWS Service Catalog di berbagai akun AWS dan Wilayah AWS](copy-aws-service-catalog-products-across-different-aws-accounts-and-aws-regions.md)
+ [Buat pipeline CI dinamis untuk proyek Java dan Python secara otomatis](create-dynamic-ci-pipelines-for-java-and-python-projects-automatically.md)
+ [Menguraikan monolit menjadi layanan mikro dengan menggunakan CQRS dan sumber acara](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [Menerapkan aplikasi satu halaman berbasis React ke Amazon S3 dan CloudFront](deploy-a-react-based-single-page-application-to-amazon-s3-and-cloudfront.md)
+ [Menerapkan API Amazon API Gateway di situs web internal menggunakan endpoint pribadi dan Application Load Balancer](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.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)
+ [Terapkan kasus penggunaan RAG AWS dengan menggunakan Terraform dan Amazon Bedrock](deploy-rag-use-case-on-aws.md)
+ [Kembangkan asisten berbasis obrolan otomatis sepenuhnya dengan menggunakan agen dan basis pengetahuan Amazon Bedrock](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.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)
+ [Buat kebijakan IAM secara dinamis dengan IAM Access Analyzer dengan menggunakan Step Functions](dynamically-generate-an-iam-policy-with-iam-access-analyzer-by-using-step-functions.md)
+ [Sematkan komponen visual Amazon Quick Sight ke dalam aplikasi web dengan menggunakan otomatisasi Amazon Cognito dan IAc](embed-quick-sight-visual-components-into-web-apps-cognito-iac.md)
+ [Pastikan pencatatan EMR Amazon ke Amazon S3 diaktifkan saat peluncuran](ensure-amazon-emr-logging-to-amazon-s3-is-enabled-at-launch.md)
+ [Perkirakan biaya tabel DynamoDB untuk kapasitas sesuai permintaan](estimate-the-cost-of-a-dynamodb-table-for-on-demand-capacity.md)
+ [Buat rekomendasi yang dipersonalisasi dan diberi peringkat ulang menggunakan Amazon Personalize](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [Hasilkan data pengujian menggunakan pekerjaan AWS Glue dan Python](generate-test-data-using-an-aws-glue-job-and-python.md)
+ [Menerapkan SHA1 hashing untuk data PII saat bermigrasi dari SQL Server ke PostgreSQL](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Menerapkan pola saga tanpa server dengan menggunakan AWS Step Functions](implement-the-serverless-saga-pattern-by-using-aws-step-functions.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)
+ [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)
+ [Migrasikan beban kerja Apache Cassandra ke Amazon Keyspaces dengan menggunakan AWS Glue](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [Pantau penggunaan Gambar Mesin Amazon bersama di beberapa Akun AWS](monitor-use-of-a-shared-amazon-machine-image-across-multiple-aws-accounts.md)
+ [Optimalkan penerapan tanpa server multi-akun dengan menggunakan alur kerja dan Tindakan AWS CDK GitHub](optimize-multi-account-serverless-deployments.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)
+ [Kueri tabel Amazon DynamoDB dengan SQL dengan menggunakan Amazon Athena](query-amazon-dynamodb-tables-sql-amazon-athena.md)
+ [Jalankan beban kerja yang digerakkan oleh peristiwa dan terjadwal dalam skala besar dengan AWS Fargate](run-event-driven-and-scheduled-workloads-at-scale-with-aws-fargate.md)
+ [Kirim atribut khusus ke Amazon Cognito dan masukkan ke dalam token](send-custom-attributes-cognito.md)
+ [Sajikan konten statis dalam bucket Amazon S3 melalui VPC dengan menggunakan Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.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)
+ [Struktur proyek Python dalam arsitektur heksagonal menggunakan AWS Lambda](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [Terjemahkan bahasa alami ke dalam kueri DSL untuk OpenSearch dan kueri Elasticsearch](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [Membongkar data dari klaster Amazon Redshift di seluruh akun ke Amazon S3](unload-data-from-amazon-redshift-cross-accounts-to-amazon-s3.md)
+ [Koordinasikan ketergantungan sumber daya dan eksekusi tugas dengan menggunakan konstruksi AWS Fargate WaitCondition kait](use-the-aws-fargate-waitcondition-hook-construct.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)

# Jaringan
<a name="networking-pattern-list"></a>

**Topics**
+ [Mengotomatiskan pengaturan peering Antar wilayah dengan AWS Transit Gateway](automate-the-setup-of-inter-region-peering-with-aws-transit-gateway.md)
+ [Memusatkan konektivitas jaringan menggunakan AWS Transit Gateway](centralize-network-connectivity-using-aws-transit-gateway.md)
+ [Konfigurasikan enkripsi HTTPS untuk Oracle JD Edwards EnterpriseOne di Oracle WebLogic dengan menggunakan Application Load Balancer](configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.md)
+ [Connect ke data Application Migration Service dan kontrol pesawat melalui jaringan pribadi](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [Buat objek Infoblox menggunakan sumber daya CloudFormation khusus AWS dan Amazon SNS](create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.md)
+ [Buat arsitektur IPAM Multi-wilayah yang hierarkis dengan menggunakan Terraform AWS](multi-region-ipam-architecture.md)
+ [Kustomisasi CloudWatch peringatan Amazon untuk AWS Network Firewall](customize-amazon-cloudwatch-alerts-for-aws-network-firewall.md)
+ [Menerapkan sumber daya di AWS Wavelength Zona dengan menggunakan Terraform](deploy-resources-wavelength-zone-using-terraform.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)
+ [Ubah header HTTP saat Anda bermigrasi dari F5 ke Application Load Balancer di AWS](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [Buat laporan temuan Network Access Analyzer untuk akses internet masuk dalam beberapa Akun AWS](create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.md)
+ [Mengatur resolusi DNS untuk jaringan hybrid di lingkungan multi-akun AWS](set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.md)
+ [Verifikasi bahwa penyeimbang beban ELB memerlukan penghentian TLS](verify-that-elb-load-balancers-require-tls-termination.md)
+ [Lihat log dan metrik AWS Network Firewall dengan menggunakan Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)
+ [Lebih banyak pola](networking-more-patterns-pattern-list.md)

# Mengotomatiskan pengaturan peering Antar wilayah dengan AWS Transit Gateway
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway"></a>

*Ram Kandaswamy, Amazon Web Services*

## Ringkasan
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-summary"></a>

AWS Transit Gateway menghubungkan cloud pribadi virtual (VPCs) dan jaringan lokal melalui hub pusat. Lalu lintas Transit Gateway selalu berada di tulang punggung Amazon Web Services (AWS) global dan tidak melintasi internet publik, yang mengurangi vektor ancaman, seperti eksploitasi umum dan serangan penolakan layanan terdistribusi. DDo

Jika Anda perlu berkomunikasi antara dua atau lebih Wilayah AWS, Anda dapat menggunakan peering Gateway Transit Antar wilayah untuk membuat koneksi peering antara gateway transit di Wilayah yang berbeda. Namun, mengonfigurasi peering Antar wilayah secara manual dengan Transit Gateway dapat menjadi proses yang memakan waktu yang memiliki beberapa langkah. Pola ini menyediakan proses otomatis untuk menghapus langkah-langkah manual ini dengan menggunakan kode untuk melakukan peering. Anda dapat menggunakan pendekatan ini jika Anda harus berulang kali mengonfigurasi beberapa akun Wilayah dan AWS selama penyiapan organisasi Multi-wilayah.

Pola ini menggunakan CloudFormation tumpukan AWS yang mencakup alur kerja AWS Step Functions, fungsi AWS Lambda, peran AWS Identity and Access Management (IAM), dan grup log di Amazon Logs. CloudWatch Anda kemudian dapat memulai eksekusi Step Functions dan membuat koneksi peering Antar wilayah untuk gateway transit Anda. Untuk mengatur peering Antar wilayah secara manual, lihat [Peer di Wilayah AWS VPCs yang berbeda menggunakan AWS Transit Gateway](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/peer-vpcs-different-regions-transit-gateway.html).

## Prasyarat dan batasan
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif.
+ Bucket Amazon Simple Storage Service (Amazon S3) yang sudah ada.
+ Gateway transit, dibuat dan dikonfigurasi di Wilayah pemohon dan Wilayah akseptor. Wilayah *pemohon* adalah tempat permintaan peering berasal dan Wilayah *akseptor menerima* permintaan peering. Untuk informasi selengkapnya tentang hal ini, lihat [Membuat dan menerima koneksi peering VPC di dokumentasi](https://docs.aws.amazon.com/vpc/latest/peering/create-vpc-peering-connection.html) VPC Amazon.
+ VPCs, diinstal dan dikonfigurasi di Wilayah akseptor dan pemohon. Untuk langkah-langkah membuat VPC, lihat [Membuat VPC dari Memulai dengan Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html#getting-started-create-vpc) [di dokumentasi Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html).
+  VPCs Harus menggunakan `addToTransitGateway` tag dan `true` nilai.
+ Grup keamanan dan daftar kontrol akses jaringan (ACLs) untuk Anda VPCs, dikonfigurasi sesuai dengan kebutuhan Anda. Untuk informasi selengkapnya tentang ini, lihat [Grup keamanan untuk VPC dan [Jaringan](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) Anda](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) ACLs di dokumentasi Amazon VPC.

 

**Wilayah dan batasan AWS**
+ Hanya Wilayah AWS tertentu yang mendukung peering Antar wilayah. Untuk daftar lengkap Wilayah yang mendukung peering Antar wilayah, lihat [AWS](https://aws.amazon.com/transit-gateway/faqs/) Transit Gateway. FAQs
+ Dalam kode sampel terlampir, Wilayah pemohon diasumsikan`us-east-2`, dan Wilayah akseptor diasumsikan. `us-west-2` Jika Anda ingin mengkonfigurasi Wilayah yang berbeda, Anda harus mengedit nilai-nilai ini di semua file Python. Untuk menerapkan pengaturan yang lebih kompleks yang melibatkan lebih dari dua Wilayah, Anda dapat mengubah Fungsi Langkah untuk meneruskan Wilayah sebagai parameter ke fungsi Lambda dan menjalankan fungsi untuk setiap kombinasi.

## Arsitektur
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-architecture"></a>

![\[Mesin status Step Functions menggunakan fungsi Lambda untuk membuat koneksi peering untuk gateway transit.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/d58f0586-659d-4111-b3a8-2fe23d578fef.png)


 

Diagram menunjukkan alur kerja dengan langkah-langkah berikut:

1. Pengguna membuat CloudFormation tumpukan AWS.

1. AWS CloudFormation membuat mesin status Step Functions yang menggunakan fungsi Lambda. Untuk informasi selengkapnya tentang hal ini, lihat [Membuat mesin status Step Functions yang menggunakan Lambda](https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-creating-lambda-state-machine.html) dalam dokumentasi AWS Step Functions.

1. Step Functions memanggil fungsi Lambda untuk mengintip. 

1. Fungsi Lambda menciptakan koneksi peering antara gateway transit.

1. Step Functions memanggil fungsi Lambda untuk modifikasi tabel rute.

1. Fungsi Lambda memodifikasi tabel rute dengan menambahkan blok Classless Inter-Domain Routing (CIDR) dari. VPCs

**Alur kerja Step Functions**

![\[Alur kerja Step Functions untuk memanggil fungsi Lambda untuk memodifikasi tabel rute untuk mengintip gateway transit.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/images/2f235f47-5d68-492c-b954-7dc170939cae.png)


 

Diagram menunjukkan alur kerja Step Functions berikut:

1. Alur kerja Step Functions memanggil fungsi Lambda untuk peering gateway transit. 

1. Ada panggilan timer untuk menunggu satu menit.

1. Status peering diambil dan dikirim ke blok kondisi. Blok bertanggung jawab atas perulangan. 

1. Jika kondisi keberhasilan tidak terpenuhi, alur kerja dikodekan untuk memasuki tahap timer. 

1. Jika kondisi keberhasilan terpenuhi, fungsi Lambda dipanggil untuk memodifikasi tabel rute. Setelah panggilan ini, alur kerja Step Functions berakhir.

## Alat
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-tools"></a>
+ [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 Anda.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) — CloudWatch Log membantu Anda memusatkan log dari semua sistem, aplikasi, dan layanan AWS yang Anda gunakan.
+ [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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) — Lambda menjalankan kode Anda pada infrastruktur komputasi ketersediaan tinggi dan menjalankan semua administrasi sumber daya komputasi.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) — Step Functions memudahkan untuk mengoordinasikan komponen aplikasi terdistribusi sebagai serangkaian langkah dalam alur kerja visual. 

## Epik
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-epics"></a>

### Mengotomatiskan mengintip
<a name="automate-peering"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Unggah file terlampir ke bucket S3 Anda. | Masuk ke AWS Management Console, buka konsol Amazon S3, lalu unggah file, `modify-transit-gateway-routes.zip``peer-transit-gateway.zip`, dan `get-transit-gateway-peering-status.zip` file (terlampir) ke bucket S3 Anda. | AWS Umum | 
| Buat CloudFormation tumpukan AWS. | Jalankan perintah berikut untuk membuat CloudFormation tumpukan AWS menggunakan `transit-gateway-peering.json` file (terlampir):`aws cloudformation create-stack --stack-name myteststack --template-body file://sampletemplate.json` CloudFormation Tumpukan AWS membuat alur kerja Step Functions, fungsi Lambda, peran IAM, dan grup log. CloudWatch Pastikan CloudFormation template AWS mengacu pada bucket S3 yang berisi file yang Anda unggah sebelumnya.Anda juga dapat membuat tumpukan dengan menggunakan CloudFormation konsol AWS. Untuk informasi selengkapnya tentang ini, lihat [Membuat tumpukan di CloudFormation konsol AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dalam CloudFormation dokumentasi AWS. | DevOps insinyur | 
| Mulai eksekusi baru di Step Functions. | Buka konsol Step Functions dan mulai eksekusi baru. Step Functions memanggil fungsi Lambda dan membuat koneksi peering untuk gateway transit. Anda tidak memerlukan file JSON masukan. Verifikasi bahwa lampiran tersedia dan jenis koneksinya adalah **Peering**.Untuk informasi selengkapnya tentang ini, lihat [Memulai eksekusi baru](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html#start-new-execution) dari [Memulai AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html) dalam dokumentasi AWS Steps Functions. | DevOps insinyur, AWS Umum | 
| Verifikasi rute dalam tabel rute.  | Pengintipan Antar Wilayah didirikan di antara gerbang transit. Tabel rute diperbarui dengan rentang blok IPv4 CIDR Region VPC peer. Buka konsol VPC Amazon dan pilih tab **Asosiasi** di tabel rute yang sesuai dengan lampiran gateway transit. Verifikasi rentang blok VPC CIDR dari Wilayah yang diintip. Untuk langkah dan petunjuk mendetail, lihat [Mengaitkan tabel rute gateway transit](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#associate-tgw-route-table) di dokumentasi Amazon VPC. | Administrator jaringan | 

## Sumber daya terkait
<a name="automate-the-setup-of-inter-region-peering-with-aws-transit-gateway-resources"></a>
+ [Eksekusi dalam Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/concepts-state-machine-executions.html)
+ [Lampiran transit gateway peering](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)
+ [Peer VPCs di Wilayah AWS yang berbeda dengan menggunakan AWS Transit Gateway](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/peer-vpcs-different-regions-transit-gateway.html)
+ [Interkoneksi VPCs di seluruh Wilayah AWS menggunakan AWS Transit Gateway - Demo](https://www.youtube.com/watch?v=cj1rQqLxXU8) (video)

## Lampiran
<a name="attachments-b678bb87-c7b9-4f7b-b26e-eaac650e5d1b"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/b678bb87-c7b9-4f7b-b26e-eaac650e5d1b/attachments/attachment.zip)

# Memusatkan konektivitas jaringan menggunakan AWS Transit Gateway
<a name="centralize-network-connectivity-using-aws-transit-gateway"></a>

*Mydhili Palagummi dan Nikhil Marrapu, Amazon Web Services*

## Ringkasan
<a name="centralize-network-connectivity-using-aws-transit-gateway-summary"></a>

Pola ini menjelaskan konfigurasi paling sederhana di mana AWS Transit Gateway dapat digunakan untuk menghubungkan jaringan lokal ke cloud pribadi virtual (VPCs) di beberapa akun AWS dalam Wilayah AWS. Dengan pengaturan ini, Anda dapat membuat jaringan hybrid yang menghubungkan beberapa jaringan VPC di Wilayah dan jaringan lokal. Ini dilakukan dengan menggunakan gateway transit dan koneksi jaringan pribadi virtual (VPN) ke jaringan lokal. 

## Prasyarat dan batasan
<a name="centralize-network-connectivity-using-aws-transit-gateway-prereqs"></a>

**Prasyarat**
+ Akun untuk layanan jaringan hosting, dikelola sebagai akun anggota organisasi di AWS Organizations
+ VPCs di beberapa akun AWS, tanpa tumpang tindih blok Classless Inter-Domain Routing (CIDR)

**Batasan**

Pola ini tidak mendukung isolasi lalu lintas antara jaringan tertentu VPCs atau jaringan lokal. Semua jaringan yang terpasang pada gateway transit akan dapat menjangkau satu sama lain. Untuk mengisolasi lalu lintas, Anda perlu menggunakan tabel rute khusus pada gateway transit. Pola ini hanya menghubungkan jaringan VPCs dan lokal dengan menggunakan tabel rute gateway transit default tunggal, yang merupakan konfigurasi paling sederhana.

## Arsitektur
<a name="centralize-network-connectivity-using-aws-transit-gateway-architecture"></a>

**Tumpukan teknologi target**
+ AWS Transit Gateway
+ AWS Site-to-Site VPN
+ VPC
+ Manajer Akses Sumber Daya AWS (AWS RAM)

 

**Arsitektur target**

![\[AWS Transit Gateway menghubungkan jaringan lokal ke VPCs beberapa akun AWS dalam suatu Wilayah.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e23f5faf-e75e-42a3-80e3-142516a2db4e/images/1ecf7e04-bbf8-4304-88c8-6aceb7271d1e.jpeg)


## Alat
<a name="centralize-network-connectivity-using-aws-transit-gateway-tools"></a>

**Layanan AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) membantu Anda berbagi sumber daya dengan aman di seluruh akun AWS, unit organisasi, atau seluruh organisasi Anda dari AWS Organizations.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) adalah hub pusat yang menghubungkan cloud pribadi virtual (VPCs) dan jaringan lokal.

## Epik
<a name="centralize-network-connectivity-using-aws-transit-gateway-epics"></a>

### Buat gateway transit di akun layanan jaringan
<a name="create-a-transit-gateway-in-the-network-services-account"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat gateway transit. | Di akun AWS tempat Anda ingin meng-host layanan jaringan, buat gateway transit di Wilayah AWS target. Untuk petunjuknya, lihat [Membuat gateway transit](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw). Perhatikan hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/centralize-network-connectivity-using-aws-transit-gateway.html) | Administrator jaringan | 

### Connect gateway transit ke jaringan lokal
<a name="connect-the-transit-gateway-to-your-on-premises-network"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan perangkat gateway pelanggan untuk koneksi VPN. | Perangkat gateway pelanggan terpasang di sisi lokal koneksi Site-to-Site VPN antara gateway transit dan jaringan lokal Anda. Untuk informasi selengkapnya, lihat [perangkat gateway pelanggan Anda](https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html) di dokumentasi AWS Site-to-Site VPN. Identifikasi atau luncurkan perangkat pelanggan lokal yang didukung dan catat alamat IP publiknya. Konfigurasi VPN selesai nanti dalam epik ini.  | Administrator jaringan | 
| Di akun layanan jaringan, buat lampiran VPN ke gateway transit. | Untuk mengatur koneksi, buat lampiran VPN untuk gateway transit. Untuk petunjuk, lihat [Lampiran VPN gateway Transit](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html). | Administrator jaringan | 
| Konfigurasikan VPN pada perangkat gateway pelanggan di jaringan lokal Anda.  | Unduh file konfigurasi untuk koneksi Site-to-Site VPN yang terkait dengan gateway transit dan konfigurasikan pengaturan VPN pada perangkat gateway pelanggan. Untuk petunjuk, lihat [Mengunduh file konfigurasi](https://docs.aws.amazon.com/vpn/latest/s2svpn/SetUpVPNConnections.html#vpn-download-config). | Administrator jaringan | 

### Bagikan gateway transit di akun layanan jaringan ke akun AWS lain atau organisasi Anda
<a name="share-the-transit-gateway-in-the-network-services-account-to-other-aws-accounts-or-your-organization"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Di akun manajemen AWS Organizations, aktifkan berbagi. | Untuk berbagi gateway transit dengan organisasi Anda atau dengan unit organisasi tertentu, aktifkan berbagi di AWS Organizations. Jika tidak, Anda perlu membagikan gateway transit untuk setiap akun satu per satu. Untuk petunjuknya, lihat [Mengaktifkan berbagi sumber daya dalam AWS Organizations](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs). | Administrator sistem AWS | 
| Buat berbagi sumber daya gateway transit di akun layanan jaringan. | Untuk mengizinkan akun AWS lain VPCs dalam organisasi Anda terhubung ke gateway transit, di akun layanan jaringan, gunakan konsol AWS RAM untuk berbagi sumber daya gateway transit. Untuk petunjuknya, lihat [Membuat berbagi sumber daya](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-create). | Administrator sistem AWS | 

### Connect VPCs ke gateway transit
<a name="connect-vpcs-to-the-transit-gateway"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat lampiran VPC di akun individual.  | Di akun tempat gateway transit telah dibagikan, buat lampiran VPC gateway transit. Untuk petunjuknya, lihat [Membuat lampiran gateway transit ke VPC](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment). | Administrator jaringan | 
| Terima permintaan lampiran VPC. | Di akun layanan jaringan, terima permintaan lampiran VPC gateway transit. Untuk petunjuk, lihat [Menerima lampiran bersama](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#tgw-accept-shared-attachment). | Administrator jaringan | 

### Konfigurasikan perutean
<a name="configure-routing"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan rute di akun individual VPCs. | Di setiap VPC akun individual, tambahkan rute ke jaringan lokal dan ke jaringan VPC lainnya, menggunakan gateway transit sebagai target. Untuk petunjuk, lihat [Menambahkan dan menghapus rute dari tabel rute](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes). | Administrator jaringan | 
| Konfigurasikan rute di tabel rute gateway transit. | Rute dari VPCs dan koneksi VPN harus disebarkan dan akan muncul di tabel rute default gateway transit. Jika diperlukan, buat rute statis apa pun (salah satu contohnya adalah rute statis untuk koneksi VPN statis) di tabel rute default gateway transit. Untuk petunjuk, lihat [Membuat rute statis](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-create-static-route). | Administrator jaringan | 
| Tambahkan aturan grup keamanan dan daftar kontrol akses jaringan (ACL). | Untuk EC2 instans dan sumber daya lainnya di VPC, pastikan bahwa aturan grup keamanan dan aturan ACL jaringan mengizinkan lalu lintas VPCs antara serta jaringan lokal. Untuk petunjuknya, lihat [Mengontrol lalu lintas ke sumber daya menggunakan grup keamanan](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#AddRemoveRules) [dan Menambahkan dan menghapus aturan dari ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html#Rules). | Administrator jaringan | 

### Uji konektivitas
<a name="test-connectivity"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji konektivitas antara VPCs. | Pastikan bahwa ACL jaringan dan grup keamanan memungkinkan lalu lintas Internet Control Message Protocol (ICMP), dan kemudian ping dari instance dalam VPC ke VPC lain yang juga terhubung ke gateway transit. | Administrator jaringan | 
| Uji konektivitas antara VPCs dan jaringan lokal. | Pastikan aturan ACL jaringan, aturan grup keamanan, dan firewall apa pun mengizinkan lalu lintas ICMP, lalu ping antara jaringan lokal dan instance di EC2 . VPCs Komunikasi jaringan harus dimulai dari jaringan lokal terlebih dahulu untuk membawa koneksi VPN ke `UP` status. | Administrator jaringan | 

## Sumber daya terkait
<a name="centralize-network-connectivity-using-aws-transit-gateway-resources"></a>
+ [Membangun Infrastruktur Jaringan AWS multi VPC AWS yang dapat diskalakan dan aman](https://d1.awsstatic.com/whitepapers/building-a-scalable-and-secure-multi-vpc-aws-network-infrastructure.pdf) (whitepaper AWS)
+ [Bekerja dengan sumber daya bersama](https://docs.aws.amazon.com/ram/latest/userguide/working-with.html) (dokumentasi AWS RAM)
+ [Bekerja dengan gateway transit](https://docs.aws.amazon.com/vpc/latest/tgw/working-with-transit-gateways.html) (dokumentasi AWS Transit Gateway)

# Konfigurasikan enkripsi HTTPS untuk Oracle JD Edwards EnterpriseOne di Oracle WebLogic dengan menggunakan Application Load Balancer
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## Ringkasan
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-summary"></a>

Pola ini menjelaskan cara mengkonfigurasi enkripsi HTTPS untuk pembongkaran SSL di Oracle JD EnterpriseOne Edwards pada beban kerja Oracle. WebLogic Pendekatan ini mengenkripsi lalu lintas antara browser pengguna dan penyeimbang beban untuk menghilangkan beban enkripsi dari server. EnterpriseOne 

Banyak pengguna menskalakan tingkat mesin virtual EnterpriseOne JAVA (JVM) secara horizontal dengan menggunakan [AWS Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html).Load balancer berfungsi sebagai titik kontak tunggal untuk klien, dan mendistribusikan lalu lintas masuk ke beberapa. JVMs Secara opsional, penyeimbang beban dapat mendistribusikan lalu lintas di beberapa Availability Zone dan meningkatkan ketersediaan. EnterpriseOne

Proses yang dijelaskan dalam pola ini mengonfigurasi enkripsi antara browser dan penyeimbang beban alih-alih mengenkripsi lalu lintas antara penyeimbang beban dan. EnterpriseOne JVMs Pendekatan ini disebut sebagai pembongkaran *SSL*. Membongkar proses dekripsi SSL dari EnterpriseOne web atau server aplikasi ke Application Load Balancer mengurangi beban di sisi aplikasi. Setelah penghentian SSL di penyeimbang beban, lalu lintas yang tidak terenkripsi dialihkan ke aplikasi di AWS.

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/) adalah solusi perencanaan sumber daya perusahaan (ERP) untuk organisasi yang memproduksi, membangun, mendistribusikan, melayani, atau mengelola produk atau aset fisik. JD Edwards EnterpriseOne mendukung berbagai perangkat keras, sistem operasi, dan platform basis data.

## Prasyarat dan batasan
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Peran AWS Identity and Access Management (IAM) yang memiliki izin untuk melakukan panggilan layanan AWS dan mengelola sumber daya AWS
+ Sertifikat SSL

**Versi produk**
+ Pola ini diuji dengan Oracle WebLogic 12c, tetapi Anda juga dapat menggunakan versi lain.

## Arsitektur
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-architecture"></a>

Ada beberapa pendekatan untuk melakukan pembongkaran SSL. Pola ini menggunakan Application Load Balancer dan Oracle HTTP Server (OHS), seperti yang diilustrasikan dalam diagram berikut.

![\[Pembongkaran SSL dengan penyeimbang beban dan OHS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/2ae2d0eb-b9f3-41f8-ad86-9af3aade7072.png)


Diagram berikut menunjukkan JD Edwards EnterpriseOne, Application Load Balancer, dan Java Application Server (JAS) JVM layout.

![\[EnterpriseOne, penyeimbang beban, dan tata letak JAS JVM\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c62b976b-31e4-42ca-b7e8-13f7c9d9a187/images/72ea35b0-2907-48b3-aeb7-0c5d9a3b831b.png)


## Alat
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-tools"></a>

**Layanan AWS**
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/) mendistribusikan lalu lintas aplikasi yang masuk ke beberapa target, seperti Amazon Elastic Compute Cloud ( EC2 instans Amazon), di beberapa Availability Zone.
+ [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) membantu Anda membuat, menyimpan, dan memperbarui sertifikat dan kunci SSL/TLS X.509 publik dan pribadi yang melindungi situs web dan aplikasi AWS Anda.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan terukur.

## Praktik terbaik
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-best-practices"></a>
+ Untuk praktik terbaik ACM, lihat dokumentasi [ACM](https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html).

## Epik
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-epics"></a>

### Mengatur WebLogic dan OHS
<a name="set-up-weblogic-and-ohs"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal dan konfigurasikan komponen Oracle. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrator WebLogic  | 
| Aktifkan WebLogic plugin di tingkat domain. |  WebLogic Plugin diperlukan untuk load balancing. Untuk mengaktifkan plugin:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrator WebLogic  | 
| Edit file konfigurasi. | `mod_wl_ohs.conf`File mengkonfigurasi permintaan proxy dari OHS ke. WebLogic[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)<pre><VirtualHost *:8000><br /><Location /jde><br />WLSRequest On<br />SetHandler weblogic-handler<br />WebLogicHost localhost<br />WebLogicPort 8000<br />WLProxySSL On<br />WLProxySSLPassThrough On<br /></Location><br /></VirtualHost></pre> | JDE CNC, administrator WebLogic  | 
| Mulai K3 dengan menggunakan Enterprise Manager. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | JDE CNC, administrator WebLogic  | 

### Konfigurasikan Application Load Balancer
<a name="configure-the-application-load-balancer"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan kelompok sasaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Untuk petunjuk terperinci, lihat dokumentasi [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html). | Administrator AWS | 
| Siapkan penyeimbang beban. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html) | Administrator AWS | 
| Tambahkan catatan Route 53 (DNS). | (Opsional) Anda dapat menambahkan data DNS Amazon Route 53 untuk subdomain. Catatan ini akan mengarah ke Application Load Balancer Anda. Untuk petunjuk, lihat [dokumentasi Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html). | Administrator AWS | 

## Pemecahan masalah
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Server HTTP tidak muncul. | Jika **Server HTTP** tidak muncul di daftar **Target Navigasi** di konsol Enterprise Manager, ikuti langkah-langkah berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer.html)Ketika instance telah dibuat dan perubahan telah diaktifkan, Anda akan dapat melihat server HTTP di panel **Target Navigation**. | 

## Sumber daya terkait
<a name="configure-https-encryption-for-oracle-jd-edwards-enterpriseone-on-oracle-weblogic-by-using-an-application-load-balancer-resources"></a>

**Dokumentasi AWS**
+ [Penyeimbang Beban Aplikasi](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
+ [Bekerja dengan zona yang dihosting publik](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html)
+ [Bekerja dengan zona yang dihosting pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html)

**Dokumentasi Oracle:**
+ [Ikhtisar Plug-In Proxy WebLogic Server Oracle](https://docs.oracle.com/middleware/1221/webtier/develop-plugin/overview.htm#PLGWL391)
+ [Instalasi WebLogic Server menggunakan Infrastructure Installer](https://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/12_2_1/02-01-004-InstallWLSInfrastructure/installweblogicinfrastructure.html)
+ [Menginstal dan Mengkonfigurasi Oracle HTTP Server](https://docs.oracle.com/middleware/1221/core/install-ohs/toc.htm)

# Connect ke data Application Migration Service dan kontrol pesawat melalui jaringan pribadi
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network"></a>

*Dipin Jain dan Mike Kuznetsov, Amazon Web Services*

## Ringkasan
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-summary"></a>

Pola ini menjelaskan bagaimana Anda dapat terhubung ke bidang AWS Application Migration Service data dan bidang kontrol pada jaringan pribadi yang aman dengan menggunakan titik akhir VPC antarmuka.

Layanan Migrasi Aplikasi adalah solusi lift-and-shift (rehost) yang sangat otomatis yang menyederhanakan, mempercepat, dan mengurangi biaya migrasi aplikasi. AWS Ini memungkinkan perusahaan untuk meng-host kembali sejumlah besar server fisik, virtual, atau cloud tanpa masalah kompatibilitas, gangguan kinerja, atau jendela cutover yang panjang. Layanan Migrasi Aplikasi tersedia dari Konsol Manajemen AWS. Ini memungkinkan integrasi tanpa batas dengan yang lain Layanan AWS, seperti AWS CloudTrail, Amazon CloudWatch, dan AWS Identity and Access Management (IAM).

Anda dapat terhubung dari pusat data sumber ke bidang data—yaitu, ke subnet yang berfungsi sebagai area pementasan untuk replikasi data di VPC tujuan—melalui koneksi pribadi dengan menggunakan layanan Site-to-Site VPN , AWS Direct Connect atau mengintip VPC di Layanan Migrasi Aplikasi. Anda juga dapat menggunakan [titik akhir VPC antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) yang didukung oleh AWS PrivateLink untuk terhubung ke bidang kontrol Layanan Migrasi Aplikasi melalui jaringan pribadi. 

## Prasyarat dan batasan
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-prereqs"></a>

**Prasyarat**
+ **Subnet area pementasan** — Sebelum Anda menyiapkan Layanan Migrasi Aplikasi, buat subnet yang akan digunakan sebagai area pementasan untuk data yang direplikasi dari server sumber Anda ke AWS (yaitu, bidang data). Anda harus menentukan subnet ini di [template Pengaturan Replikasi](https://docs.aws.amazon.com/mgn/latest/ug/template-vs-server.html) saat pertama kali mengakses konsol Layanan Migrasi Aplikasi. Anda dapat mengganti subnet ini untuk server sumber tertentu di template Pengaturan Replikasi. Meskipun Anda dapat menggunakan subnet yang ada di Anda Akun AWS, kami sarankan Anda membuat subnet khusus baru untuk tujuan ini.
+ **Persyaratan jaringan** — Server replikasi yang diluncurkan oleh Layanan Migrasi Aplikasi di subnet area pementasan Anda harus dapat mengirim data ke titik akhir API Layanan Migrasi Aplikasi di`https://mgn.<region>.amazonaws.com/`, di mana `<region>` kode untuk Wilayah AWS Anda replikasi (misalnya,). `https://mgn.us-east-1.amazonaws.com` Layanan Amazon Simple Storage Service (Amazon S3) diperlukan untuk mengunduh URLs perangkat lunak Layanan Migrasi Aplikasi.
  + Installer Agen AWS Replikasi harus memiliki akses ke URL bucket Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) yang Anda gunakan dengan Layanan Wilayah AWS Migrasi Aplikasi.
  + Subnet area pementasan harus memiliki akses ke Amazon S3.
  + Server sumber tempat Agen AWS Replikasi diinstal harus dapat mengirim data ke server replikasi di subnet area pementasan dan ke titik akhir API Layanan Migrasi Aplikasi di. `https://mgn.<region>.amazonaws.com/`

Tabel berikut mencantumkan port yang diperlukan.


| 
| 
| Sumber | Destinasi | Port | Untuk informasi selengkapnya, silakan lihat | 
| --- |--- |--- |--- |
| Pusat data sumber | Layanan Amazon S3 URLs | 443 (TCP) | [Komunikasi melalui port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Pusat data sumber | Wilayah AWS-alamat konsol khusus untuk Layanan Migrasi Aplikasi | 443 (TCP) | [Komunikasi antara server sumber dan Layanan Migrasi Aplikasi melalui port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Source-Manager-TCP-443) | 
| Pusat data sumber | Subnet area pementasan | 1500 (TCP) | [Komunikasi antara server sumber dan subnet area pementasan melalui port TCP 1500](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-1500) | 
| Subnet area pementasan | Wilayah AWS-alamat konsol khusus untuk Layanan Migrasi Aplikasi | 443 (TCP) | [Komunikasi antara subnet area pementasan dan Layanan Migrasi Aplikasi melalui port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#Communication-TCP-443-Staging) | 
| Subnet area pementasan | Layanan Amazon S3 URLs | 443 (TCP) | [Komunikasi melalui port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 
| Subnet area pementasan | Titik akhir Amazon Elastic Compute Cloud (Amazon EC2) dari subnet Wilayah AWS | 443 (TCP) | [Komunikasi melalui port TCP 443](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html#TCP-443) | 

**Keterbatasan**

Layanan Migrasi Aplikasi saat ini tidak tersedia di semua Wilayah AWS dan sistem operasi.
+ [Didukung Wilayah AWS](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)
+ [Sistem operasi yang didukung](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html)

## Arsitektur
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-architecture"></a>

Diagram berikut menggambarkan arsitektur jaringan untuk migrasi tipikal. Untuk informasi selengkapnya tentang arsitektur ini, lihat [dokumentasi Layanan Migrasi Aplikasi](https://docs.aws.amazon.com/mgn/latest/ug/Network-Settings-Video.html) [dan arsitektur layanan Layanan Migrasi Aplikasi dan video arsitektur jaringan](https://youtu.be/ao8geVzmmRo).

![\[Arsitektur jaringan untuk Layanan Migrasi Aplikasi untuk migrasi tipikal\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/546598b2-8026-4849-a441-eaa2bc2bf6bb.png)


Tampilan rinci berikut menunjukkan konfigurasi titik akhir VPC antarmuka di area pementasan VPC untuk menghubungkan Amazon S3 dan Layanan Migrasi Aplikasi.

![\[Arsitektur jaringan untuk Layanan Migrasi Aplikasi untuk migrasi tipikal - tampilan rinci\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/21346c0f-0643-4f4f-b21f-fdfe24fc6a8f/images/bd0dfd42-4ab0-466f-b696-804dedcf4513.png)


## Alat
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)menyederhanakan, mempercepat, dan mengurangi biaya rehosting aplikasi. AWS
+ [Endpoint VPC antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html) memungkinkan Anda untuk terhubung ke layanan yang didukung oleh AWS PrivateLink tanpa memerlukan gateway internet, perangkat NAT, koneksi VPN, atau koneksi. AWS Direct Connect Instans di VPC Anda tidak memerlukan alamat IP publik untuk berkomunikasi dengan sumber daya di layanan. Lalu lintas antara VPC Anda dan layanan lainnya tidak meninggalkan jaringan Amazon.

## Epik
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-epics"></a>

### Buat titik akhir untuk Layanan Migrasi Aplikasi, Amazon EC2, dan Amazon S3
<a name="create-endpoints-for-mgn-ec2-and-s3"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan titik akhir antarmuka untuk Layanan Migrasi Aplikasi. | Pusat data sumber dan area pementasan VPC terhubung secara pribadi ke bidang kontrol Layanan Migrasi Aplikasi melalui titik akhir antarmuka yang Anda buat di area pementasan target VPC. Untuk membuat titik akhir:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Untuk informasi selengkapnya, lihat [Mengakses titik akhir VPC antarmuka Layanan AWS menggunakan antarmuka di dokumentasi VPC Amazon](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html). | Pimpin migrasi | 
| Konfigurasikan titik akhir antarmuka untuk Amazon EC2. | Area pementasan VPC terhubung secara pribadi ke EC2 Amazon API melalui titik akhir antarmuka yang Anda buat di area pementasan target VPC. Untuk membuat titik akhir, ikuti instruksi yang diberikan di cerita sebelumnya.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html) | Pimpin migrasi | 
| Konfigurasikan titik akhir antarmuka untuk Amazon S3. | Pusat data sumber dan area pementasan VPC terhubung secara pribadi ke Amazon S3 API melalui titik akhir antarmuka yang Anda buat di area pementasan target VPC. Untuk membuat titik akhir, ikuti instruksi yang diberikan di cerita pertama.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Anda menggunakan titik akhir antarmuka karena koneksi titik akhir gateway tidak dapat diperpanjang dari VPC. (Untuk detailnya, lihat [AWS PrivateLink dokumentasi](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html).) | Pimpin migrasi | 
| Konfigurasikan titik akhir Amazon S3 Gateway. | Selama fase konfigurasi, server replikasi harus terhubung ke bucket S3 untuk mengunduh pembaruan perangkat lunak Server AWS Replikasi. Namun, titik akhir antarmuka Amazon S3 tidak mendukung nama DNS pribadi*,* dan tidak ada cara untuk menyediakan nama DNS titik akhir Amazon S3 ke server replikasi. Untuk mengurangi masalah ini, Anda membuat titik akhir gateway Amazon S3 di VPC yang menjadi milik subnet area pementasan, dan memperbarui tabel rute subnet pementasan dengan rute yang relevan. Untuk informasi selengkapnya, lihat [Membuat titik akhir gateway](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3) dalam AWS PrivateLink dokumentasi. | Administrator awan | 
| Konfigurasikan DNS lokal untuk menyelesaikan nama DNS pribadi untuk titik akhir. | Titik akhir antarmuka untuk Layanan Migrasi Aplikasi dan Amazon EC2 memiliki nama DNS pribadi yang dapat diselesaikan di VPC. Namun, Anda juga perlu mengonfigurasi server lokal untuk menyelesaikan nama DNS pribadi untuk titik akhir antarmuka ini.Ada beberapa cara untuk mengkonfigurasi server ini. Dalam pola ini, kami menguji fungsionalitas ini dengan meneruskan kueri DNS lokal ke titik akhir Amazon Route 53 Resolver masuk di area pementasan VPC. Untuk informasi selengkapnya, lihat [Menyelesaikan kueri DNS antara VPCs dan jaringan Anda di dokumentasi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-DSN-queries-to-vpc.html) Route 53. | Insinyur migrasi | 

### Connect ke bidang kontrol Layanan Migrasi Aplikasi melalui tautan pribadi
<a name="connect-to-the-mgn-control-plane-over-a-private-link"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal Agen AWS Replikasi dengan menggunakan AWS PrivateLink. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Berikut adalah contoh untuk Linux:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/connect-to-application-migration-service-data-and-control-planes-over-a-private-network.html)Setelah Anda membuat koneksi dengan Layanan Migrasi Aplikasi dan menginstal Agen AWS Replikasi, ikuti petunjuk dalam [dokumentasi Layanan Migrasi Aplikasi untuk memigrasikan](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html) server sumber Anda ke VPC dan subnet target Anda. | Insinyur migrasi | 

## Sumber daya terkait
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-resources"></a>

**Dokumentasi Layanan Migrasi Aplikasi**
+ [Konsep](https://docs.aws.amazon.com/mgn/latest/ug/CloudEndure-Concepts.html)
+ [Alur kerja migrasi](https://docs.aws.amazon.com/mgn/latest/ug/migration-workflow-gs.html)
+ [Panduan memulai cepat](https://docs.aws.amazon.com/mgn/latest/ug/quick-start-guide-gs.html)
+ [FAQ](https://docs.aws.amazon.com/mgn/latest/ug/FAQ.html)
+ [Pemecahan Masalah](https://docs.aws.amazon.com/mgn/latest/ug/troubleshooting.html)

**Sumber daya tambahan**
+ [Menghosting ulang aplikasi Anda dalam arsitektur multi-akun AWS dengan menggunakan titik akhir antarmuka VPC](https://docs.aws.amazon.com/prescriptive-guidance/latest/rehost-multi-account-architecture-interface-endpoints/) (panduan panduan preskriptif)AWS 
+ [AWS Application Migration Service — Pengantar Teknis](https://www.aws.training/Details/eLearning?id=71732) (Panduan AWS Pelatihan dan Sertifikasi)
+ [AWS Application Migration Service arsitektur dan arsitektur jaringan](https://youtu.be/ao8geVzmmRo) (video)

## Informasi tambahan
<a name="connect-to-application-migration-service-data-and-control-planes-over-a-private-network-additional"></a>

**Pemecahan masalah *AWS *****Instalasi Agen Replikasi** di server Linux

Jika Anda mendapatkan kesalahan **gcc** di server Amazon Linux, konfigurasikan repositori paket dan gunakan perintah berikut:

```
## sudo yum groupinstall "Development Tools"
```

# Buat objek Infoblox menggunakan sumber daya CloudFormation khusus AWS dan Amazon SNS
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns"></a>

*Tim Sutton, Amazon Web Services*

## Ringkasan
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-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/)

Infoblox Domain Name System (DNS), Dynamic Host Configuration Protocol (DHCP), dan manajemen alamat IP ([Infoblox DDI](https://www.infoblox.com/products/ddi/)) memungkinkan Anda untuk memusatkan dan mengontrol lingkungan hybrid yang kompleks secara efisien. Dengan Infoblox DDI, Anda dapat menemukan dan merekam semua aset jaringan dalam satu database manajemen alamat IP otoritatif (IPAM), selain mengelola DNS di tempat dan di Amazon Web Services (AWS) Cloud dengan menggunakan peralatan yang sama.

Pola ini menjelaskan cara menggunakan sumber daya CloudFormation khusus AWS untuk membuat objek Infoblox (misalnya, catatan DNS atau objek IPAM) dengan memanggil Infoblox WAPI API. Untuk informasi selengkapnya tentang WAPI Infoblox, lihat dokumentasi WAPI di [dokumentasi](https://www.infoblox.com/wp-content/uploads/infoblox-deployment-infoblox-rest-api.pdf) Infoblox.

Dengan menggunakan pendekatan pola ini, Anda dapat memperoleh tampilan terpadu dari catatan DNS dan konfigurasi IPAM untuk AWS dan lingkungan lokal, selain menghapus proses manual yang membuat catatan dan menyediakan jaringan Anda. Anda dapat menggunakan pendekatan pola ini untuk kasus penggunaan berikut:
+ Menambahkan catatan A setelah membuat instance Amazon Elastic Compute Cloud (Amazon EC2) 
+ Menambahkan catatan CNAME setelah membuat Application Load Balancer
+ Menambahkan objek jaringan setelah membuat virtual private cloud (VPC)
+ Menyediakan rentang jaringan berikutnya dan menggunakan rentang itu untuk membuat subnet

Anda juga dapat memperluas pola ini dan menggunakan fitur perangkat Infoblox lainnya seperti menambahkan jenis catatan DNS yang berbeda atau mengonfigurasi Infoblox vDiscovery. 

Pola ini menggunakan hub-and-spoke desain di mana hub memerlukan konektivitas ke alat Infoblox di AWS Cloud atau di tempat dan menggunakan AWS Lambda untuk memanggil Infoblox API. Spoke berada di akun yang sama atau berbeda di organisasi yang sama di AWS Organizations, dan memanggil fungsi Lambda dengan menggunakan sumber daya CloudFormation khusus AWS.

## Prasyarat dan batasan
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-prereqs"></a>

**Prasyarat**
+ Alat atau kisi Infoblox yang ada, diinstal di AWS Cloud, di tempat, atau keduanya, dan dikonfigurasi dengan pengguna admin yang dapat mengelola tindakan IPAM dan DNS. Untuk informasi selengkapnya tentang ini, lihat [Tentang akun admin](https://docs.infoblox.com/display/nios86/About+Admin+Accounts) di dokumentasi Infoblox. 
+ Zona otoritatif DNS yang ada yang ingin Anda tambahkan catatan pada alat Infoblox. Untuk informasi selengkapnya tentang ini, lihat [Mengonfigurasi zona otoritatif dalam dokumentasi](https://docs.infoblox.com/display/nios86/Configuring+Authoritative+Zones) Infoblox.  
+ Dua akun AWS aktif di AWS Organizations. Satu akun adalah akun hub dan akun lainnya adalah akun spoke.
+ Akun hub dan spoke harus berada di Wilayah AWS yang sama. 
+ VPC akun hub harus terhubung ke alat Infoblox; misalnya, dengan menggunakan AWS Transit Gateway atau peering VPC.
+ [AWS Serverless Application Model (AWS SAM), diinstal dan dikonfigurasi secara lokal dengan AWS](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) Cloud9 atau AWS. CloudShell
+ `ClientTest.yaml`File `Infoblox-Hub.zip` dan (terlampir), diunduh ke lingkungan lokal yang berisi AWS SAM.

**Batasan**
+ Token layanan sumber daya CloudFormation khusus AWS harus berasal dari Wilayah yang sama tempat tumpukan dibuat. Sebaiknya gunakan akun hub di setiap Wilayah, alih-alih membuat topik Amazon Simple Notification Service (Amazon SNS) di satu Wilayah dan memanggil fungsi Lambda di Wilayah lain.

**Versi produk**
+ Infoblox WAPI versi 2.7

## Arsitektur
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-architecture"></a>

Diagram berikut menunjukkan alur kerja pola ini. 

![\[Membuat objek Infoblox menggunakan sumber daya CloudFormation khusus AWS dan Amazon SNS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8d609d3f-6f5e-4084-849f-ca191db8055e/images/3594a064-e103-4211-84b7-da67c41ebb15.png)


Diagram menunjukkan komponen-komponen berikut untuk solusi pola ini:

1. Sumber daya CloudFormation khusus AWS memungkinkan Anda menulis logika penyediaan khusus dalam templat yang CloudFormation dijalankan AWS saat Anda membuat, memperbarui, atau menghapus tumpukan. Saat Anda membuat tumpukan, AWS CloudFormation mengirimkan `create` permintaan ke topik SNS yang dipantau oleh aplikasi yang berjalan pada instance EC2 .

1. Pemberitahuan Amazon SNS dari sumber daya CloudFormation khusus AWS dienkripsi melalui kunci AWS Key Management Service (AWS KMS) tertentu dan akses dibatasi ke akun di organisasi Anda di Organizations. Topik SNS memulai sumber daya Lambda yang memanggil API WAPI Infoblox.

1. Amazon SNS memanggil fungsi Lambda berikut yang menggunakan URL WAPI Infoblox, nama pengguna, dan kata sandi AWS Secrets Manager Amazon Resource Names () sebagai variabel lingkungan: ARNs 
   + `dnsapi.lambda_handler`— Menerima`DNSName`,`DNSType`, dan `DNSValue` nilai dari sumber daya CloudFormation khusus AWS dan menggunakannya untuk membuat catatan DNS A dan CNAMES.
   + `ipaddr.lambda_handler`— Menerima `VPCCIDR``Type`,`SubnetPrefix`,, dan `Network Name` nilai dari sumber daya CloudFormation khusus AWS dan menggunakannya untuk menambahkan data jaringan ke dalam database IPAM Infoblox atau menyediakan sumber daya khusus dengan jaringan berikutnya yang tersedia yang dapat digunakan untuk membuat subnet baru.
   + `describeprefixes.lambda_handler`— Memanggil `describe_managed_prefix_lists` AWS API dengan menggunakan `"com.amazonaws."+Region+".s3"` filter untuk mengambil yang diperlukan`prefix ID`.
**penting**  
Fungsi Lambda ini ditulis dengan Python dan mirip satu sama lain tetapi panggilan berbeda. APIs

1. Anda dapat menerapkan grid Infoblox sebagai peralatan jaringan fisik, virtual, atau berbasis cloud.  Ini dapat digunakan di tempat atau sebagai alat virtual menggunakan berbagai hypervisor, termasuk, VMware ESXi Microsoft Hyper-V, Linux KVM, dan Xen. Anda juga dapat menerapkan kisi Infoblox di AWS Cloud dengan Amazon Machine Image (AMI).

1. Diagram menunjukkan solusi hybrid untuk grid Infoblox yang menyediakan DNS dan IPAM ke sumber daya di AWS Cloud dan di tempat.

**Tumpukan teknologi**
+ AWS CloudFormation
+ IAM
+ AWS KMS
+ AWS Lambda
+ AWS SAM
+ AWS Secrets Manager
+ Amazon SNS
+ Amazon VPC 

## Alat
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-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 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.
+ [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 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.
+ [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.
+ [AWS Serverless Application Model (AWS SAM) adalah kerangka kerja sumber terbuka yang membantu Anda membangun aplikasi](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) tanpa server di AWS Cloud.
+ [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 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.

**Kode**

Anda dapat menggunakan `ClientTest.yaml` contoh CloudFormation template AWS (terlampir) untuk menguji hub Infoblox. Anda dapat menyesuaikan CloudFormation template AWS untuk menyertakan sumber daya khusus dari tabel berikut.


|  | 
| --- |
| Buat catatan A menggunakan sumber daya kustom Infoblox spoke | Mengembalikan nilai: `infobloxref `— Referensi InfobloxContoh sumber daya:

```
ARECORDCustomResource:

  Type: "Custom::InfobloxAPI"

  Properties:

    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxDNSFunction

    DNSName: 'arecordtest.company.com'

    DNSType: 'ARecord' 

    DNSValue: '10.0.0.1'
``` | 
| --- |--- |
| Buat catatan CNAME menggunakan sumber daya kustom Infoblox spoke | **Mengembalikan nilai**: `infobloxref `— Referensi Infoblox**Contoh sumber daya**:<pre>CNAMECustomResource:<br /><br />  Type: "Custom::InfobloxAPI"<br /><br />  Properties:<br /><br />    ServiceToken: !Sub arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfoblox    <br /><br />    DNSFunction<br /><br />    DNSName: 'cnametest.company.com'<br /><br />    DNSType: 'cname' <br /><br />    DNSValue: 'aws.amazon.com'</pre> | 
| Buat objek jaringan menggunakan sumber daya kustom Infoblox spoke | **Mengembalikan nilai:**`infobloxref `— Referensi Infoblox`network`— Jangkauan jaringan (sama seperti`VPCCIDR`)**Contoh sumber daya:**<pre>VPCCustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: VPC<br /><br />    NetworkName: My-VPC</pre> | 
| Ambil subnet berikutnya yang tersedia menggunakan sumber daya kustom Infoblox spoke | **Mengembalikan nilai:**`infobloxref`— Referensi Infoblox`network `— Jangkauan jaringan subnet**Contoh sumber daya:**<pre>Subnet1CustomResource:<br /><br />  Type: 'Custom::InfobloxAPI'<br /><br />  DependsOn: VPCCustomResource<br /><br />  Properties:<br /><br />    ServiceToken: !Sub  arn:aws:sns:${AWS::Region}:${HubAccountID}:RunInfobloxNextSubnetFunction<br /><br />    VPCCIDR: !Ref VpcCIDR<br /><br />    Type: Subnet<br /><br />    SubnetPrefix: !Ref SubnetPrefix<br /><br />NetworkName: My-Subnet</pre> | 

## Epik
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-epics"></a>

### Buat dan konfigurasikan VPC akun hub
<a name="create-and-configure-the-hub-accountrsquor-s-vpc"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat VPC dengan koneksi ke alat Infoblox. | Masuk ke AWS Management Console untuk akun hub Anda dan buat VPC dengan mengikuti langkah-langkah di Amazon [VPC pada penerapan referensi AWS Cloud Quick Start dari AWS Quick](https://aws-quickstart.github.io/quickstart-aws-vpc/) Starts.VPC harus memiliki konektivitas HTTPS ke alat Infoblox dan kami menyarankan Anda menggunakan subnet pribadi untuk koneksi ini. | Administrator jaringan, Administrator sistem | 
| (Opsional) Buat titik akhir VPC untuk subnet pribadi.  | Endpoint VPC menyediakan konektivitas ke layanan publik untuk subnet pribadi Anda. Titik akhir berikut diperlukan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html)Untuk informasi selengkapnya tentang membuat titik akhir untuk subnet pribadi, lihat [titik akhir VPC VPC](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html) di dokumentasi Amazon VPC. | Administrator jaringan, Administrator sistem | 

### Menyebarkan hub Infoblox
<a name="deploy-the-infoblox-hub"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bangun template AWS SAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns.html) | Pengembang, Administrator sistem | 
| Terapkan template AWS SAM. | `sam deploy`Perintah mengambil parameter yang diperlukan dan menyimpannya ke dalam `samconfig.toml` file, menyimpan CloudFormation template AWS dan fungsi Lambda dalam bucket S3, dan kemudian menerapkan template CloudFormation AWS ke akun hub Anda.  Contoh kode berikut menunjukkan cara menerapkan template AWS SAM:<pre>$ sam deploy --guided<br /><br />Configuring SAM deploy<br />======================<br />        Looking for config file [samconfig.toml] :  Found<br />        Reading default arguments  :  Success<br />        Setting default arguments for 'sam deploy'<br />        =========================================<br />        Stack Name [Infoblox-Hub]:<br />        AWS Region [eu-west-1]:<br />        Parameter InfobloxUsername:<br />        Parameter InfobloxPassword:<br />        Parameter InfobloxIPAddress [xxx.xxx.xx.xxx]:<br />        Parameter AWSOrganisationID [o-xxxxxxxxx]:<br />        Parameter VPCID [vpc-xxxxxxxxx]:<br />        Parameter VPCCIDR [xxx.xxx.xxx.xxx/16]:<br />        Parameter VPCSubnetID1 [subnet-xxx]:<br />        Parameter VPCSubnetID2 [subnet-xxx]:<br />        Parameter VPCSubnetID3 [subnet-xxx]:<br />        Parameter VPCSubnetID4 []: <br />        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy<br />        Confirm changes before deploy [Y/n]: y<br />        #SAM needs permission to be able to create roles to connect to the resources in your template<br />Allow SAM CLI IAM role creation [Y/n]: n<br />Capabilities [['CAPABILITY_NAMED_IAM']]:<br />        Save arguments to configuration file [Y/n]: y<br />        SAM configuration file [samconfig.toml]:<br />        SAM configuration environment [default]: </pre>Anda harus menggunakan `--guided` opsi ini setiap kali karena kredenal masuk Infoblox tidak disimpan dalam file. `samconfig.toml` | Pengembang, Administrator sistem | 

## Sumber daya terkait
<a name="create-infoblox-objects-using-aws-cloudformation-custom-resources-and-amazon-sns-resources"></a>
+ [Memulai dengan WAPIs menggunakan Postman](https://blogs.infoblox.com/community/getting-started-with-wapis-using-postman/) (Infoblox Blog)
+ [Penyediaan VNIO untuk AWS Menggunakan Model BYOL (dokumentasi Infoblox](https://docs.infoblox.com/display/NAIG/Provisioning+vNIOS+for+AWS+Using+the+BYOL+Model))
+ [quickstart-aws-vpc](https://github.com/aws-quickstart/quickstart-aws-vpc)(GitHub repo)
+ [describe\$1managed\$1prefix\$1lists (AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_managed_prefix_lists) SDK untuk dokumentasi Python)

## Lampiran
<a name="attachments-8d609d3f-6f5e-4084-849f-ca191db8055e"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/8d609d3f-6f5e-4084-849f-ca191db8055e/attachments/attachment.zip)

# Buat arsitektur IPAM Multi-wilayah yang hierarkis dengan menggunakan Terraform AWS
<a name="multi-region-ipam-architecture"></a>

*Donny Schreiber, Amazon Web Services*

## Ringkasan
<a name="multi-region-ipam-architecture-summary"></a>

*IP Address Management (IPAM)* adalah komponen penting dari manajemen jaringan, dan menjadi semakin kompleks ketika organisasi menskalakan infrastruktur cloud mereka. Tanpa IPAM yang tepat, organisasi berisiko konflik alamat IP, ruang alamat yang terbuang, dan pemecahan masalah kompleks yang dapat menyebabkan pemadaman dan downtime aplikasi. Pola ini menunjukkan bagaimana menerapkan solusi IPAM komprehensif untuk lingkungan AWS perusahaan dengan menggunakan HashiCorp Terraform. [Ini membantu organisasi untuk membuat arsitektur IPAM multi-wilayah hierarkis yang memfasilitasi manajemen alamat IP terpusat di semua Akun AWS dalam suatu organisasi.AWS](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organization-structure)

Pola ini membantu Anda menerapkan [Manajer Alamat IP VPC Amazon](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) dengan hierarki kumpulan empat tingkat yang canggih: kolam tingkat atas, kolam Regional, kumpulan unit bisnis, dan kumpulan khusus lingkungan. Struktur ini mendukung tata kelola alamat IP yang tepat sambil memungkinkan pendelegasian manajemen IP ke tim yang sesuai dalam organisasi. Solusinya menggunakan AWS Resource Access Manager (AWS RAM) untuk berbagi kumpulan IP Address Manager secara mulus di seluruh organisasi. AWS RAM memusatkan dan menstandarisasi spesifikasi IPAM, yang dapat dibangun oleh tim di semua akun yang dikelola.

Pola ini dapat membantu Anda mencapai hal berikut:
+ Mengotomatiskan alokasi alamat IP di seluruh Wilayah AWS, unit bisnis, dan lingkungan.
+ Menegakkan kebijakan jaringan organisasi melalui validasi terprogram.
+ Skala infrastruktur jaringan secara efisien seiring dengan berkembangnya kebutuhan bisnis.
+ Mengurangi overhead operasional melalui manajemen terpusat ruang alamat IP.
+ Mempercepat penerapan beban kerja cloud-native dengan alokasi rentang CIDR swalayan.
+ Mencegah konflik alamat melalui kontrol dan validasi berbasis kebijakan.

## Prasyarat dan batasan
<a name="multi-region-ipam-architecture-prereqs"></a>

**Prasyarat**
+ Satu atau lebih Akun AWS, dikelola sebagai organisasi di AWS Organizations.
+ Hub jaringan atau akun manajemen jaringan yang akan berfungsi sebagai administrator yang didelegasikan oleh IP Address Manager.
+ 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).
+ [Terraform versi 1.5.0 atau yang lebih baru, diinstal.](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)
+ AWS [Penyedia untuk Terraform, dikonfigurasi.](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)
+ Izin untuk mengelola [IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html), [AWS RAM](https://docs.aws.amazon.com/ram/latest/userguide/security-iam.html), dan [virtual private cloud (VPCs)](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html), dikonfigurasi di AWS Identity and Access Management (IAM).

**Batasan**
+ IP Address Manager tunduk pada [kuota layanan](https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html). Kuota layanan default untuk pool adalah 50 per lingkup. Menjalankan penerapan ini untuk 6 Wilayah, 2 unit bisnis, dan 4 lingkungan akan membuat 67 kumpulan. Oleh karena itu, peningkatan kuota mungkin diperlukan.
+ Memodifikasi atau menghapus kumpulan IP Address Manager setelah sumber daya dialokasikan dapat menyebabkan masalah ketergantungan. Anda harus [melepaskan alokasi](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html) sebelum Anda dapat menghapus kumpulan.
+ Di IP Address Manager, [pemantauan sumber daya](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) dapat mengalami sedikit keterlambatan dalam mencerminkan perubahan sumber daya. Penundaan ini bisa sekitar 20 menit.
+ IP Address Manager tidak dapat secara otomatis menerapkan keunikan alamat IP di berbagai cakupan.
+ Tag khusus harus mematuhi [praktik terbaik AWS penandaan](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html). Misalnya, setiap kunci harus unik dan tidak dapat dimulai dengan`aws:`.
+ Ada [pertimbangan dan batasan](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam-outside-org-considerations.html) saat mengintegrasikan IP Address Manager dengan akun di luar organisasi Anda.

## Arsitektur
<a name="multi-region-ipam-architecture-architecture"></a>

**Arsitektur target**

*Konfigurasi IP Address Manager dan hirarki pool*

Diagram berikut menunjukkan konstruksi logis dari arsitektur target. *Lingkup* adalah wadah tingkat tertinggi di IP Address Manager. Setiap ruang lingkup mewakili ruang alamat IP untuk satu jaringan. *Kumpulan adalah kumpulan* rentang alamat IP yang berdekatan (atau rentang CIDR) dalam ruang lingkup. Pools membantu Anda mengatur alamat IP Anda sesuai dengan kebutuhan routing dan keamanan Anda. Diagram ini menunjukkan empat tingkat hierarkis kolam: kolam tingkat atas, kolam Regional, kolam unit bisnis, dan kolam lingkungan.

![\[Ruang lingkup pribadi dan empat tingkat kumpulan dalam satu Wilayah AWS dalam akun Jaringan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/1e23b2a7-a274-4a19-9097-61d8a31dfbf8.png)


Solusi ini menetapkan hierarki yang jelas dari kumpulan IP Address Manager:

1. Kumpulan tingkat atas mencakup seluruh ruang alamat IP organisasi, seperti. `10.176.0.0/12`

1. Kolam Regional adalah untuk alokasi khusus Wilayah, seperti untuk. `10.176.0.0/15` `us-east-1`

1. Kumpulan unit bisnis adalah alokasi khusus domain di masing-masing. Wilayah AWS Misalnya, unit bisnis keuangan di `us-east-1` Wilayah mungkin memiliki`10.176.0.0/16`.

1. Kolam lingkungan adalah alokasi khusus tujuan untuk lingkungan yang berbeda. Misalnya, unit bisnis keuangan di `us-east-1` Wilayah mungkin memiliki `10.176.0.0/18` lingkungan produksi.

Topologi penyebaran ini mendistribusikan sumber daya IP Address Manager secara geografis sambil mempertahankan kontrol terpusat. Berikut ini adalah fitur-fiturnya:
+ IP Address Manager digunakan dalam satu primer Wilayah AWS.
+ Wilayah Tambahan terdaftar sebagai [wilayah operasi](https://docs.aws.amazon.com/vpc/latest/ipam/mod-ipam-region.html), di mana Manajer Alamat IP dapat mengelola sumber daya.
+ Setiap wilayah operasi menerima kumpulan alamat khusus dari kolam tingkat atas.
+ Sumber daya di semua wilayah operasi dikelola secara terpusat melalui IP Address Manager di Wilayah utama.
+ Setiap kolam Regional memiliki properti lokal yang terkait dengan Wilayahnya untuk membantu Anda mengalokasikan sumber daya dengan benar.

*Validasi rentang CIDR tingkat lanjut*

Solusi ini dirancang untuk mencegah penyebaran konfigurasi yang tidak valid. Saat Anda menerapkan kumpulan melalui Terraform, berikut ini divalidasi selama fase rencana Terraform:
+ Memvalidasi bahwa semua rentang CIDR lingkungan terkandung dalam rentang CIDR unit bisnis induknya
+ Mengonfirmasi bahwa semua rentang CIDR unit bisnis terkandung dalam rentang CIDR regional induknya
+ Memverifikasi bahwa semua rentang CIDR Regional terkandung dalam rentang CIDR tingkat atas
+ Memeriksa rentang CIDR yang tumpang tindih dalam tingkat hierarki yang sama
+ Memvalidasi pemetaan lingkungan yang tepat ke unit bisnis masing-masing

*Alokasi rentang CIDR*

Diagram berikut menunjukkan contoh bagaimana pengembang atau administrator dapat membuat alamat IP baru VPCs dan mengalokasikan alamat IP dari tingkat pool.

![\[Ruang lingkup pribadi dan empat tingkat kumpulan dalam satu Wilayah AWS dalam akun Jaringan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/780e344e-37f7-4b70-8d7c-94ec67a29305/images/7c3de2e3-e71b-4fc0-abcd-7e88cfab5c87.png)


Diagram menunjukkan alur kerja berikut:

1. Melalui Konsol Manajemen AWS, the AWS CLI, atau melalui infrastruktur sebagai kode (IAc), pengembang atau administrator meminta rentang CIDR berikutnya yang tersedia di kolam `AY3` lingkungan.

1. IP Address Manager mengalokasikan rentang CIDR berikutnya yang tersedia di pool tersebut ke VPC. `AY3-4` Rentang CIDR ini tidak dapat lagi digunakan.

**Otomatisasi dan skala**

Solusi ini dirancang untuk skalabilitas sebagai berikut:
+ **Ekspansi regional** — Tambahkan Wilayah baru dengan memperluas konfigurasi Terraform dengan entri kumpulan Regional tambahan.
+ **Pertumbuhan unit bisnis** — Mendukung unit bisnis baru dengan menambahkannya ke peta konfigurasi BU.
+ **Fleksibilitas lingkungan** — Konfigurasikan jenis lingkungan yang berbeda, seperti pengembangan atau produksi, berdasarkan kebutuhan organisasi.
+ **Dukungan multi-akun** — Bagikan kumpulan di semua akun di organisasi Anda melalui AWS RAM.
+ Penyediaan **VPC otomatis — Integrasikan dengan alur kerja penyediaan VPC untuk mengotomatiskan** alokasi rentang CIDR.

Struktur hierarkis juga memungkinkan untuk skala delegasi dan kontrol yang berbeda, seperti berikut ini:
+ Administrator jaringan mungkin mengelola kumpulan tingkat atas dan Regional.
+ Tim TI unit bisnis mungkin telah mendelegasikan kontrol dari kumpulan masing-masing.
+ Tim aplikasi mungkin menggunakan alamat IP dari kumpulan lingkungan yang ditunjuk.

**catatan**  
Anda juga dapat mengintegrasikan solusi ini dengan [AWS Control Tower Account Factory for Terraform (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html). Untuk informasi selengkapnya, lihat *Integrasi dengan AFT* di bagian [Informasi tambahan](#multi-region-ipam-architecture-additional) dari pola ini.

## Alat
<a name="multi-region-ipam-architecture-tools"></a>

**Layanan 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.
+ [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 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.
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) membantu Anda berbagi sumber daya dengan aman Akun AWS untuk mengurangi overhead operasional dan memberikan visibilitas dan auditabilitas.
+ [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[IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html) adalah fitur Amazon VPC. Ini membantu Anda merencanakan, melacak, dan memantau alamat IP untuk AWS beban kerja Anda.

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

**Repositori kode**

Kode untuk pola ini tersedia di [Contoh Terraform Implementasi untuk Hierarchical IPAM](https://github.com/aws-samples/sample-amazon-vpc-ipam-terraform) pada repositori di. AWS** GitHub** Struktur repositori meliputi:
+ **Modul root** - Orkestrasi penerapan dan variabel input.
+ **Modul IPAM** — Implementasi inti dari arsitektur yang dijelaskan dalam pola ini.
+ **Modul tag** - Penandaan standar untuk semua sumber daya.

## Praktik terbaik
<a name="multi-region-ipam-architecture-best-practices"></a>

Pertimbangkan praktik terbaik berikut untuk perencanaan jaringan:
+ **Rencanakan terlebih dahulu** - Rencanakan ruang alamat IP Anda secara menyeluruh sebelum penerapan. Untuk informasi selengkapnya, lihat [Merencanakan penyediaan alamat IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html).
+ **Hindari rentang CIDR yang tumpang tindih — Pastikan rentang** CIDR di setiap level tidak tumpang tindih.
+ **Ruang penyangga cadangan** — Selalu alokasikan rentang CIDR yang lebih besar dari yang dibutuhkan untuk mengakomodasi pertumbuhan.
+ **Alokasi alamat IP dokumen** — Pertahankan dokumentasi strategi alokasi alamat IP Anda.

Pertimbangkan praktik terbaik penerapan berikut:
+ **Mulailah dengan non-produksi** - Terapkan di lingkungan non-produksi terlebih dahulu.
+ **Gunakan manajemen status Terraform** — Terapkan penyimpanan dan penguncian status jarak jauh. Untuk informasi selengkapnya, lihat [Penyimpanan status dan penguncian](https://developer.hashicorp.com/terraform/language/state/backends) dalam dokumentasi Terraform.
+ **Menerapkan kontrol versi** - Kontrol versi semua kode Terraform.
+ **Implementasikan CI/CD integrasi** — Gunakan pipeline continuous integration dan continuous delivery (CI/CD) untuk penerapan berulang.

Pertimbangkan praktik terbaik operasional berikut:
+ **Aktifkan impor otomatis** - Konfigurasikan kumpulan Manajer Alamat IP untuk menemukan dan mengimpor sumber daya yang ada secara otomatis. Ikuti petunjuk di [Edit kolam IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html) untuk mengaktifkan impor otomatis.
+ **Memantau penggunaan alamat IP** - Mengatur alarm untuk ambang batas penggunaan alamat IP. Untuk informasi selengkapnya, lihat [Memantau IPAM dengan Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html).
+ **Audit secara teratur** - Audit penggunaan dan kepatuhan alamat IP secara berkala. Untuk informasi selengkapnya, lihat [Melacak penggunaan alamat IP di IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tracking-ip-addresses-ipam.html).
+ **Bersihkan alokasi yang tidak digunakan - Lepaskan alokasi** alamat IP saat sumber daya dinonaktifkan. Untuk informasi lebih lanjut, lihat [Deprovision CIDRs dari pool](https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html).

Pertimbangkan praktik terbaik keamanan berikut:
+ **Terapkan hak istimewa terkecil** - Gunakan peran IAM dengan izin minimum yang diperlukan. Untuk informasi selengkapnya, lihat [Praktik terbaik keamanan di IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dan [Manajemen Identitas dan akses di IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/iam-ipam.html).
+ **Gunakan kebijakan kontrol layanan** — Menerapkan kebijakan kontrol layanan (SCPs) untuk menerapkan penggunaan IP Address Manager di organisasi Anda. Untuk informasi selengkapnya, lihat [Menegakkan penggunaan IPAM untuk pembuatan VPC](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) dengan. SCPs
+ **Kontrol berbagi sumber daya** - Kelola ruang lingkup berbagi sumber daya IP Address Manager dengan hati-hati AWS RAM. Untuk informasi selengkapnya, lihat [Berbagi kumpulan IPAM menggunakan AWS RAM](https://docs.aws.amazon.com/vpc/latest/ipam/share-pool-ipam.html).
+ **Menegakkan penandaan - Menerapkan** penandaan wajib untuk semua sumber daya yang terkait dengan Manajer Alamat IP. Untuk informasi selengkapnya, lihat *Strategi penandaan* di bagian [Informasi tambahan](#multi-region-ipam-architecture-additional).

## Epik
<a name="multi-region-ipam-architecture-epics"></a>

### Siapkan akun administrator yang didelegasikan untuk IP Address Manager
<a name="set-up-a-delegated-administrator-account-for-ip-address-manager"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Aktifkan AWS Organizations fitur. | Pastikan semua AWS Organizations fitur diaktifkan. Untuk petunjuk, lihat [Mengaktifkan semua fitur untuk organisasi AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_support-all-features.html) dalam AWS Organizations dokumentasi. | Administrator AWS | 
| Aktifkan berbagi sumber daya di AWS RAM. | Menggunakan AWS CLI, masukkan perintah berikut untuk mengaktifkan berbagi AWS RAM sumber daya untuk organisasi Anda:<pre>aws ram enable-sharing-with-aws-organization</pre>Untuk informasi selengkapnya, lihat [Mengaktifkan berbagi sumber daya AWS Organizations dalam](https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs) AWS RAM dokumentasi. | Administrator AWS | 
| Tentukan administrator untuk IP Address Manager. | Dari akun manajemen organisasi, menggunakan AWS CLI, masukkan perintah berikut, di `123456789012` mana ID akun yang akan mengelola Manajer Alamat IP:<pre>aws ec2 enable-ipam-organization-admin-account \<br />    --delegated-admin-account-id 123456789012</pre>Biasanya, akun hub jaringan atau jaringan digunakan sebagai administrator yang didelegasikan untuk IP Address Manager.Untuk informasi selengkapnya, lihat [Mengintegrasikan IPAM dengan akun di AWS Organisasi](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html) dalam dokumentasi Manajer Alamat IP. | Administrator AWS | 

### Menyebarkan infrastruktur
<a name="deploy-the-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan arsitektur jaringan. | Tentukan dan dokumentasikan arsitektur jaringan Anda, termasuk rentang CIDR untuk Wilayah, unit bisnis, dan lingkungan. Untuk informasi selengkapnya, lihat [Merencanakan penyediaan alamat IP](https://docs.aws.amazon.com/vpc/latest/ipam/planning-ipam.html) dalam dokumentasi Manajer Alamat IP. | Insinyur jaringan | 
| Kloning repositori. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | DevOps insinyur | 
| Konfigurasikan variabel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Insinyur jaringan, Terraform | 
| Menyebarkan sumber daya Manajer Alamat IP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | Terraform | 
| Validasi penerapan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS Umum, Insinyur jaringan | 

### Membuat VPCs dan mengatur pemantauan
<a name="create-vpcs-and-set-up-monitoring"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sebuah VPC. | Ikuti langkah-langkah di [Buat VPC di dokumentasi](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) Amazon VPC. Saat Anda mencapai langkah untuk memilih rentang CIDR untuk VPC, alokasikan rentang berikutnya yang tersedia dari salah satu Regional, unit bisnis, dan kolam lingkungan Anda. | AWS Umum, Administrator jaringan, Insinyur jaringan | 
| Validasi alokasi rentang CIDR. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/multi-region-ipam-architecture.html) | AWS Umum, Administrator jaringan, Insinyur jaringan | 
| Pantau Manajer Alamat IP. | Konfigurasikan pemantauan dan alarm yang terkait dengan alokasi sumber daya IP Address Manager. Untuk informasi dan petunjuk selengkapnya, lihat [Memantau IPAM dengan Amazon CloudWatch](https://docs.aws.amazon.com/vpc/latest/ipam/cloudwatch-ipam.html) dan [Memantau penggunaan CIDR berdasarkan sumber daya](https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html) dalam dokumentasi Manajer Alamat IP. | AWS Umum | 
| Menegakkan penggunaan IP Address Manager. | Buat kebijakan kontrol layanan (SCP) AWS Organizations yang mengharuskan anggota di organisasi Anda untuk menggunakan IP Address Manager saat mereka membuat VPC. Untuk petunjuknya, lihat [Menerapkan penggunaan IPAM untuk pembuatan VPC dengan dokumentasi SCPs Manajer](https://docs.aws.amazon.com/vpc/latest/ipam/scp-ipam.html) Alamat IP. | AWS umum, administrator AWS | 

## Pemecahan masalah
<a name="multi-region-ipam-architecture-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Terraform gagal dengan sumber daya Manajer Alamat IP tidak ditemukan | Pastikan akun administrator IP Address Manager didelegasikan dengan benar dan AWS Penyedia Anda diautentikasi ke akun tersebut. | 
| Alokasi rentang CIDR gagal | Periksa apakah rentang CIDR yang diminta sesuai dengan rentang yang tersedia dari kumpulan Manajer Alamat IP dan tidak tumpang tindih dengan alokasi yang ada. | 
| AWS RAM berbagi masalah | Verifikasi bahwa berbagi sumber daya diaktifkan untuk AWS Organisasi Anda. Verifikasi bahwa prinsipal yang benar, organisasi Amazon Resource Name (ARN), digunakan dalam pembagian AWS RAM . | 
| Kesalahan validasi hierarki kumpulan | Pastikan bahwa rentang CIDR kolam anak terkandung dengan benar dalam rentang CIDR kolam induk mereka dan tidak tumpang tindih dengan kolam saudara kandung. | 
| Batas kuota IP Address Manager terlampaui | Minta peningkatan kuota untuk kumpulan IP Address Manager. Untuk informasi selengkapnya, lihat [Meminta peningkatan kuota](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html) di *Panduan Pengguna Service Quotas*. | 

## Sumber daya terkait
<a name="multi-region-ipam-architecture-resources"></a>

**Layanan AWS dokumentasi**
+ [Dokumentasi Manajer Alamat IP VPC Amazon](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)
+ [AWS Resource Access Manager dokumentasi](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html)
+ [AWS Organizations dokumentasi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)

**AWS posting blog**
+ [Mengelola kumpulan IP di seluruh VPCs dan Wilayah menggunakan Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/networking-and-content-delivery/managing-ip-pools-across-vpcs-and-regions-using-amazon-vpc-ip-address-manager/)
+ [Manajemen alamat jaringan dan audit dalam skala besar dengan Amazon VPC IP Address Manager](https://aws.amazon.com/blogs/aws/network-address-management-and-auditing-at-scale-with-amazon-vpc-ip-address-manager/)

**Video dan tutorial**
+ [AWS re:invent 2022: Praktik terbaik untuk desain VPC Amazon dan IPAM (0) NET31](https://www.youtube.com/watch?v=XrEHsy_8RYs)
+ [AWS Re:invent 2022: Desain VPC tingkat lanjut dan kemampuan baru (01) NET4](https://www.youtube.com/watch?v=tbXTVpwx87o)

## Informasi tambahan
<a name="multi-region-ipam-architecture-additional"></a>

**Integrasi dengan AFT**

Anda dapat mengintegrasikan solusi ini dengan AWS Control Tower Account Factory for Terraform (AFT) untuk memastikan bahwa akun yang baru disediakan secara otomatis menerima konfigurasi jaringan yang tepat. Dengan menerapkan solusi IPAM ini di akun hub jaringan Anda, akun baru yang dibuat melalui AFT dapat mereferensikan kumpulan Manajer Alamat IP bersama saat Anda membuat. VPCs

Contoh kode berikut menunjukkan integrasi AFT dalam kustomisasi akun dengan menggunakan AWS Systems Manager Parameter Store:

```
# Get the IP Address Manager pool ID from Parameter Store
data "aws_ssm_parameter" "dev_ipam_pool_id" {
  name = "/org/network/ipam/finance/dev/pool-id"
}

# Create a VPC using the IP Address Manager pool
resource "aws_vpc" "this" {
  ipv4_ipam_pool_id   = data.aws_ssm_parameter.dev_ipam_pool_id.value
  ipv4_netmask_length = 24
  
  tags = {
    Name = "aft-account-vpc"
  }
}
```

**Strategi penandaan**

Solusinya menerapkan strategi penandaan yang komprehensif untuk memfasilitasi manajemen sumber daya. Contoh kode berikut menunjukkan bagaimana itu digunakan:

```
# Example tag configuration
module "tags" {
  source = "./modules/tags"
  
  # Required tags
  product_name  = "enterprise-network"
  feature_name  = "ipam"
  org_id        = "finance"
  business_unit = "network-operations"
  owner         = "network-team"
  environment   = "prod"
  repo          = "https://github.com/myorg/ipam-terraform"
  branch        = "main"
  cost_center   = "123456"
  dr_tier       = "tier1"
  
  # Optional tags
  optional_tags = {
    "project"    = "network-modernization"
    "stack_role" = "infrastructure"
  }
}
```

Tag ini secara otomatis diterapkan ke semua sumber IP Address Manager. Ini memfasilitasi tata kelola yang konsisten, alokasi biaya, dan manajemen sumber daya.

# Kustomisasi CloudWatch peringatan Amazon untuk AWS Network Firewall
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall"></a>

*Jason Owens, Amazon Web Services*

## Ringkasan
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-summary"></a>

Pola ini membantu Anda menyesuaikan CloudWatch peringatan Amazon yang dihasilkan oleh AWS Network Firewall. Anda dapat menggunakan aturan yang telah ditentukan sebelumnya atau membuat aturan khusus yang menentukan pesan, metadata, dan tingkat keparahan peringatan. Anda kemudian dapat menindaklanjuti peringatan ini atau mengotomatiskan tanggapan oleh layanan Amazon lainnya, seperti Amazon. EventBridge

Dalam pola ini, Anda menghasilkan aturan firewall yang kompatibel dengan Suricata. [Suricata](https://suricata.io/) adalah mesin pendeteksi ancaman sumber terbuka. Pertama-tama Anda membuat aturan sederhana dan kemudian mengujinya untuk mengonfirmasi bahwa CloudWatch peringatan dibuat dan dicatat. Setelah Anda berhasil menguji aturan, Anda memodifikasinya untuk menentukan pesan kustom, metadata, dan tingkat keparahan, dan Anda kemudian menguji sekali lagi untuk mengonfirmasi pembaruan.

## Prasyarat dan batasan
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi di workstation Linux, macOS, atau Windows Anda. Untuk informasi selengkapnya, lihat [Menginstal atau memperbarui versi terbaru AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ AWS Network Firewall diinstal dan dikonfigurasi untuk menggunakan CloudWatch Log. Untuk informasi selengkapnya, lihat [Mencatat lalu lintas jaringan dari AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/firewall-logging.html).
+ Instans Amazon Elastic Compute Cloud (Amazon EC2) di subnet pribadi virtual private cloud (VPC) yang dilindungi oleh Network Firewall.

**Versi produk**
+ Untuk versi 1 AWS CLI, gunakan 1.18.180 atau yang lebih baru. Untuk versi 2 AWS CLI, gunakan 2.1.2 atau yang lebih baru.
+ File klasifikasi.config dari Suricata versi 5.0.2. Untuk salinan file konfigurasi ini, lihat bagian [Informasi tambahan](#customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional).

## Arsitektur
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-architecture"></a>

![\[Permintaan EC2 instance menghasilkan peringatan di Network Firewall, yang meneruskan peringatan ke CloudWatch\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/da6087a9-e942-4cfe-85e3-3b08de6f3ba5/images/778d85cd-bc87-4ed0-a161-d35eb5daa694.png)


Diagram arsitektur menunjukkan alur kerja berikut:

1.  EC2 [Instans Amazon di subnet pribadi membuat permintaan dengan menggunakan [curl atau Wget](https://curl.se/).](https://www.gnu.org/software/wget/)

1. Network Firewall memproses lalu lintas dan menghasilkan peringatan.

1. Network Firewall mengirimkan peringatan yang dicatat ke CloudWatch Log.

## Alat
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-tools"></a>

**Layanan 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 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 sumber terbuka yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda.
+ [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html)adalah firewall jaringan stateful, dikelola, dan layanan deteksi dan pencegahan intrusi untuk cloud pribadi virtual () VPCs di. AWS Cloud 

**Alat-alat lainnya**
+ [curl](https://curl.se/) adalah alat baris perintah sumber terbuka dan perpustakaan.
+ [GNU Wget](https://www.gnu.org/software/wget/) adalah alat baris perintah gratis.

## Epik
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-epics"></a>

### Buat aturan firewall dan grup aturan
<a name="create-the-firewall-rules-and-rule-group"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat aturan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrator sistem AWS, Administrator jaringan | 
| Buat grup aturan. | Di AWS CLI, masukkan perintah berikut. Ini menciptakan grup aturan.<pre>❯ aws network-firewall create-rule-group \<br />        --rule-group-name custom --type STATEFUL \<br />        --capacity 10 --rules file://custom.rules \<br />        --tags Key=environment,Value=development</pre>Berikut ini adalah output contoh. Catat`RuleGroupArn`, yang Anda butuhkan di langkah selanjutnya.<pre>{<br />    "UpdateToken": "4f998d72-973c-490a-bed2-fc3460547e23",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }</pre> | Administrator sistem AWS | 

### Perbarui kebijakan firewall
<a name="update-the-firewall-policy"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Dapatkan ARN dari kebijakan firewall. | Di AWS CLI, masukkan perintah berikut. Ini mengembalikan Nama Sumber Daya Amazon (ARN) dari kebijakan firewall. Rekam ARN untuk digunakan nanti dalam pola ini.<pre>❯ aws network-firewall describe-firewall \<br />    --firewall-name aws-network-firewall-anfw \<br />    --query 'Firewall.FirewallPolicyArn'</pre>Berikut ini adalah contoh ARN yang dikembalikan oleh perintah ini.<pre>"arn:aws:network-firewall:us-east-2:1234567890:firewall-policy/firewall-policy-anfw"</pre> | Administrator sistem AWS | 
| Perbarui kebijakan firewall. | Dalam editor teks, salin tempel kode berikut. Ganti `<RuleGroupArn>` dengan nilai yang Anda rekam di epik sebelumnya. Simpan file sebagai `firewall-policy-anfw.json`.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "<RuleGroupArn>"<br />        }<br />    ]<br />}</pre>Masukkan perintah berikut di file AWS CLI. Perintah ini memerlukan [token pembaruan](https://docs.aws.amazon.com/cli/latest/reference/network-firewall/update-firewall-policy.html) untuk menambahkan aturan baru. Token digunakan untuk mengonfirmasi bahwa kebijakan tidak berubah sejak terakhir kali Anda mengambilnya.<pre>UPDATETOKEN=(`aws network-firewall describe-firewall-policy \<br />              --firewall-policy-name firewall-policy-anfw \<br />              --output text --query UpdateToken`)<br /> <br /> aws network-firewall update-firewall-policy \<br /> --update-token $UPDATETOKEN \<br /> --firewall-policy-name firewall-policy-anfw \<br /> --firewall-policy file://firewall-policy-anfw.json</pre> | Administrator sistem AWS | 
| Konfirmasikan pembaruan kebijakan. | (Opsional) Jika Anda ingin mengonfirmasi aturan ditambahkan dan melihat format kebijakan, masukkan perintah berikut di AWS CLI.<pre>❯ aws network-firewall describe-firewall-policy \<br />  --firewall-policy-name firewall-policy-anfw \<br />  --query FirewallPolicy</pre>Berikut ini adalah output contoh.<pre>{<br />    "StatelessDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatelessFragmentDefaultActions": [<br />        "aws:forward_to_sfe"<br />    ],<br />    "StatefulRuleGroupReferences": [<br />        {<br />            "ResourceArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom"<br />        }<br />    ]<br />}</pre> | Administrator sistem AWS | 

### Fungsionalitas peringatan uji
<a name="test-alert-functionality"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hasilkan peringatan untuk pengujian. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrator sistem AWS | 
| Validasi bahwa peringatan dicatat. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrator sistem AWS | 

### Perbarui aturan firewall dan grup aturan
<a name="update-the-firewall-rules-and-rule-group"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui aturan firewall. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrator sistem AWS | 
| Perbarui grup aturan. | Di AWS CLI, jalankan perintah berikut. Gunakan ARN kebijakan firewall Anda. Perintah ini mendapatkan token pembaruan dan memperbarui grup aturan dengan perubahan aturan.<pre>❯ UPDATETOKEN=(`aws network-firewall \<br />                describe-rule-group \<br />--rule-group-arn arn:aws:network-firewall:us-east-2:123457890:stateful-rulegroup/custom \<br />--output text --query UpdateToken`)</pre><pre> ❯ aws network-firewall update-rule-group \<br />  --rule-group-arn arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom \<br />--rules file://custom.rules \<br />--update-token $UPDATETOKEN</pre>Berikut ini adalah output contoh.<pre>{<br />    "UpdateToken": "7536939f-6a1d-414c-96d1-bb28110996ed",<br />    "RuleGroupResponse": {<br />        "RuleGroupArn": "arn:aws:network-firewall:us-east-2:1234567890:stateful-rulegroup/custom",<br />        "RuleGroupName": "custom",<br />        "RuleGroupId": "238a8259-9eaf-48bb-90af-5e690cf8c48b",<br />        "Type": "STATEFUL",<br />        "Capacity": 10,<br />        "RuleGroupStatus": "ACTIVE",<br />        "Tags": [<br />            {<br />                "Key": "environment",<br />                "Value": "development"<br />            }<br />        ]<br />    }<br />}</pre> | Administrator sistem AWS | 

### Uji fungsionalitas peringatan yang diperbarui
<a name="test-the-updated-alert-functionality"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hasilkan peringatan untuk pengujian. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrator sistem AWS | 
| Validasi peringatan diubah. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/customize-amazon-cloudwatch-alerts-for-aws-network-firewall.html) | Administrator sistem AWS | 

## Sumber daya terkait
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-resources"></a>

**Referensi**
+ [Kirim peringatan dari AWS Network Firewall ke saluran Slack](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/send-alerts-from-aws-network-firewall-to-a-slack-channel.html) (Panduan AWS Preskriptif)
+ [Meningkatkan pencegahan ancaman AWS dengan Suricata](https://aws.amazon.com/blogs/opensource/scaling-threat-prevention-on-aws-with-suricata/) (AWS posting blog)
+ [Model penyebaran untuk AWS Network Firewall](https://aws.amazon.com/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/) (posting AWS blog)
+ [Pekerjaan kunci meta Suricata (dokumentasi](https://suricata.readthedocs.io/en/suricata-6.0.1/rules/meta.html) Suricata)

**Tutorial dan video**
+ [AWS Network Firewall lokakarya](https://networkfirewall.workshop.aws/)

## Informasi tambahan
<a name="customize-amazon-cloudwatch-alerts-for-aws-network-firewall-additional"></a>

Berikut ini adalah file konfigurasi klasifikasi dari Suricata 5.0.2. Klasifikasi ini digunakan saat membuat aturan firewall.

```
# config classification:shortname,short description,priority
 
config classification: not-suspicious,Not Suspicious Traffic,3
config classification: unknown,Unknown Traffic,3
config classification: bad-unknown,Potentially Bad Traffic, 2
config classification: attempted-recon,Attempted Information Leak,2
config classification: successful-recon-limited,Information Leak,2
config classification: successful-recon-largescale,Large Scale Information Leak,2
config classification: attempted-dos,Attempted Denial of Service,2
config classification: successful-dos,Denial of Service,2
config classification: attempted-user,Attempted User Privilege Gain,1
config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1
config classification: successful-user,Successful User Privilege Gain,1
config classification: attempted-admin,Attempted Administrator Privilege Gain,1
config classification: successful-admin,Successful Administrator Privilege Gain,1
 
# NEW CLASSIFICATIONS
config classification: rpc-portmap-decode,Decode of an RPC Query,2
config classification: shellcode-detect,Executable code was detected,1
config classification: string-detect,A suspicious string was detected,3
config classification: suspicious-filename-detect,A suspicious filename was detected,2
config classification: suspicious-login,An attempted login using a suspicious username was detected,2
config classification: system-call-detect,A system call was detected,2
config classification: tcp-connection,A TCP connection was detected,4
config classification: trojan-activity,A Network Trojan was detected, 1
config classification: unusual-client-port-connection,A client was using an unusual port,2
config classification: network-scan,Detection of a Network Scan,3
config classification: denial-of-service,Detection of a Denial of Service Attack,2
config classification: non-standard-protocol,Detection of a non-standard protocol or event,2
config classification: protocol-command-decode,Generic Protocol Command Decode,3
config classification: web-application-activity,access to a potentially vulnerable web application,2
config classification: web-application-attack,Web Application Attack,1
config classification: misc-activity,Misc activity,3
config classification: misc-attack,Misc Attack,2
config classification: icmp-event,Generic ICMP event,3
config classification: inappropriate-content,Inappropriate Content was Detected,1
config classification: policy-violation,Potential Corporate Privacy Violation,1
config classification: default-login-attempt,Attempt to login by a default username and password,2
 
# Update
config classification: targeted-activity,Targeted Malicious Activity was Detected,1
config classification: exploit-kit,Exploit Kit Activity Detected,1
config classification: external-ip-check,Device Retrieving External IP Address Detected,2
config classification: domain-c2,Domain Observed Used for C2 Detected,1
config classification: pup-activity,Possibly Unwanted Program Detected,2
config classification: credential-theft,Successful Credential Theft Detected,1
config classification: social-engineering,Possible Social Engineering Attempted,2
config classification: coin-mining,Crypto Currency Mining Activity Detected,2
config classification: command-and-control,Malware Command and Control Activity Detected,1
```

# Menerapkan sumber daya di AWS Wavelength Zona dengan menggunakan Terraform
<a name="deploy-resources-wavelength-zone-using-terraform"></a>

*Zahoor Chaudhrey dan Luca Iannario, Amazon Web Services*

## Ringkasan
<a name="deploy-resources-wavelength-zone-using-terraform-summary"></a>

[AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)membantu Anda membangun infrastruktur yang dioptimalkan untuk aplikasi Multi-Access Edge Computing (MEC). *Wavelength* Zones AWS adalah penyebaran infrastruktur yang AWS menanamkan layanan komputasi dan penyimpanan dalam jaringan 5G penyedia layanan komunikasi (CSP). Lalu lintas aplikasi dari perangkat 5G mencapai server aplikasi yang berjalan di Wavelength Zones tanpa meninggalkan jaringan telekomunikasi. Berikut ini memfasilitasi konektivitas jaringan melalui Wavelength:
+ **Virtual private cloud (VPCs)** — VPCs dalam Akun AWS kaleng diperluas untuk menjangkau beberapa Availability Zone, termasuk Wavelength Zones. Instans Amazon Elastic Compute Cloud (Amazon EC2) dan layanan terkait muncul sebagai bagian dari VPC Regional Anda. VPCs dibuat dan dikelola di [Amazon Virtual Private Cloud (Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)).
+ **Carrier gateway** — Gateway operator memungkinkan konektivitas dari subnet di Wavelength Zone ke jaringan CSP, internet, atau melalui jaringan CSP. Wilayah AWS Gerbang pembawa melayani dua tujuan. Ini memungkinkan lalu lintas masuk dari jaringan CSP di lokasi tertentu, dan memungkinkan lalu lintas keluar ke jaringan telekomunikasi dan internet.

Pola ini dan kode Terraform terkait membantu Anda meluncurkan sumber daya, seperti EC2 instans Amazon, volume Amazon Elastic Block Store (Amazon EBS), subnet, dan gateway operator VPCs, di Zona Wavelength.

## Prasyarat dan batasan
<a name="deploy-resources-wavelength-zone-using-terraform-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ Lingkungan pengembangan terintegrasi (IDE)
+ [Ikut serta](https://docs.aws.amazon.com/wavelength/latest/developerguide/get-started-wavelength.html#enable-zone-group) ke Zona Wavelength target
+ 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)
+ Terraform versi 1.8.4 atau yang lebih baru, [diinstal](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) (dokumentasi Terraform)
+  AWS Penyedia Terraform versi 5.32.1 atau yang lebih baru, [dikonfigurasi](https://hashicorp.github.io/terraform-provider-aws/) (dokumentasi Terraform)
+ Git, [diinstal](https://github.com/git-guides/install-git) (GitHub)
+ [Izin](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) untuk membuat sumber daya Amazon VPC, Wavelength, dan Amazon EC2 

**Batasan**

Tidak semua Wilayah AWS mendukung Wavelength Zones. Untuk informasi selengkapnya, lihat Zona [Wavelength yang Tersedia dalam dokumentasi Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/available-wavelength-zones.html).

## Arsitektur
<a name="deploy-resources-wavelength-zone-using-terraform-architecture"></a>

Diagram berikut menunjukkan bagaimana Anda dapat membuat subnet dan AWS sumber daya di Wavelength Zone. VPCs yang berisi subnet di Wavelength Zone dapat terhubung ke gateway operator. Gateway operator memungkinkan Anda untuk terhubung ke sumber daya berikut:
+ Perangkat 4G/LTE dan 5G di jaringan operator telekomunikasi.
+ Akses nirkabel tetap untuk mitra Wavelength Zone tertentu. Untuk informasi selengkapnya, lihat [Multi-akses AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/multi-access.html).
+ Lalu lintas keluar ke sumber daya internet publik.

![\[Gateway operator menghubungkan sumber daya AWS di Wavelength Zone ke jaringan CSP.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8c507de1-208c-4563-bb58-52388ab2fa6d/images/a4cc0699-0cbc-4f15-ab14-3ae569ced7f4.png)


## Alat
<a name="deploy-resources-wavelength-zone-using-terraform-tools"></a>

**Layanan AWS**
+ [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
+ [AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)memperluas AWS Cloud infrastruktur ke jaringan 5G penyedia telekomunikasi. Ini membantu Anda membangun aplikasi yang memberikan latensi sangat rendah ke perangkat seluler dan pengguna akhir.

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

**Repositori kode**

Kode untuk pola ini tersedia di GitHub [Creating AWS Wavelength Infrastructure menggunakan repositori Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure). Kode Terraform menyebarkan infrastruktur dan sumber daya berikut:
+ VPC
+ Zona Wavelength
+ Subnet kemaluan di Zona Wavelength
+ Gerbang pembawa di Zona Wavelength
+  EC2 Contoh Amazon di Zona Wavelength

## Praktik terbaik
<a name="deploy-resources-wavelength-zone-using-terraform-best-practices"></a>
+ Sebelum menerapkan, konfirmasikan bahwa Anda menggunakan versi terbaru Terraform dan. AWS CLI
+ Gunakan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) untuk menyebarkan IAc. Untuk informasi selengkapnya, lihat [Praktik terbaik untuk mengelola file Status Terraform di AWS CI/CD Pipeline di](https://aws.amazon.com/blogs/devops/best-practices-for-managing-terraform-state-files-in-aws-ci-cd-pipeline/) Blog. AWS 

## Epik
<a name="deploy-resources-wavelength-zone-using-terraform-epics"></a>

### Penyediaan infrastruktur
<a name="provision-the-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Masukkan perintah berikut untuk mengkloning [Creating AWS Wavelength Infrastructure menggunakan repositori Terraform](https://github.com/aws-samples/terraform-wavelength-infrastructure) ke lingkungan Anda.`git clone git@github.com:aws-samples/terraform-wavelength-infrastructure.git` | DevOps insinyur | 
| Perbarui variabel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps insinyur, Terraform | 
| Inisialisasi konfigurasi. | Masukkan perintah berikut untuk menginisialisasi direktori kerja.<pre>terraform init</pre> | DevOps insinyur, Terraform | 
| Pratinjau paket Terraform. | Masukkan perintah berikut untuk membandingkan status target dengan keadaan AWS lingkungan Anda saat ini. Perintah ini menghasilkan pratinjau sumber daya yang akan dikonfigurasi.<pre>terraform plan</pre> | DevOps insinyur, Terraform | 
| Verifikasi dan terapkan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps insinyur, Terraform | 

### Validasi dan bersihkan
<a name="validate-and-clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi penyebaran infrastruktur. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | AWS DevOps, DevOps insinyur | 
| (Opsional) Bersihkan infrastruktur. | Jika Anda perlu menghapus semua sumber daya yang disediakan oleh Terraform, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | DevOps insinyur, Terraform | 

## Pemecahan masalah
<a name="deploy-resources-wavelength-zone-using-terraform-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Konektivitas ke EC2 instans Amazon di. Wilayah AWS | Lihat [Memecahkan masalah saat menghubungkan ke instans Linux Anda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html) atau [Memecahkan masalah saat menghubungkan ke](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/troubleshooting-windows-instances.html) instans Windows Anda. | 
| Konektivitas ke EC2 instans Amazon di Wavelength Zone. | Lihat [Memecahkan masalah konektivitas SSH atau RDP ke EC2 instans saya yang diluncurkan](https://repost.aws/knowledge-center/ec2-wavelength-zone-connection-errors) di Wavelength Zone. | 
| Kapasitas di Zona Wavelength. | Lihat [Kuota dan pertimbangan untuk Zona Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/wavelength-quotas.html). | 
| Konektivitas seluler atau operator dari jaringan operator ke Wilayah AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/deploy-resources-wavelength-zone-using-terraform.html) | 

## Sumber daya terkait
<a name="deploy-resources-wavelength-zone-using-terraform-resources"></a>
+ [Apa itu AWS Wavelength?](https://docs.aws.amazon.com/wavelength/latest/developerguide/what-is-wavelength.html)
+ [Bagaimana cara AWS Wavelength kerja](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html)
+ [Ketahanan di AWS Wavelength](https://docs.aws.amazon.com/wavelength/latest/developerguide/disaster-recovery-resiliency.html)

# Migrasikan data DNS secara massal ke zona host pribadi Amazon Route 53
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy, Amazon Web Services*

## Ringkasan
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

Insinyur jaringan dan administrator cloud memerlukan cara yang efisien dan sederhana untuk menambahkan catatan Domain Name System (DNS) ke zona yang dihosting pribadi di Amazon Route 53. Menggunakan pendekatan manual untuk menyalin entri dari lembar kerja Microsoft Excel ke lokasi yang sesuai di konsol Route 53 membosankan dan rawan kesalahan. Pola ini menjelaskan pendekatan otomatis yang mengurangi waktu dan upaya yang diperlukan untuk menambahkan beberapa catatan. Ini juga menyediakan serangkaian langkah yang dapat diulang untuk beberapa pembuatan zona yang dihosting.

Pola ini menggunakan Amazon Simple Storage Service (Amazon S3) untuk menyimpan catatan. Untuk bekerja dengan data secara efisien, pola menggunakan format JSON karena kesederhanaan dan kemampuannya untuk mendukung kamus Python `dict` (tipe data).

**catatan**  
Jika Anda dapat membuat file zona dari sistem Anda, pertimbangkan untuk menggunakan [fitur impor Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) sebagai gantinya.

## Prasyarat dan batasan
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**Prasyarat**
+ Lembar kerja Excel yang berisi catatan zona yang dihosting pribadi
+ [Keakraban dengan berbagai jenis catatan DNS seperti catatan A, catatan Name Authority Pointer (NAPTR), dan catatan SRV (lihat Jenis rekaman DNS yang didukung)](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)
+ Keakraban dengan bahasa Python dan perpustakaannya

**Batasan**
+ Pola tidak memberikan cakupan yang luas untuk semua skenario kasus penggunaan. Misalnya, panggilan [change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) tidak menggunakan semua properti API yang tersedia.
+ Di lembar kerja Excel, nilai di setiap baris diasumsikan unik. Beberapa nilai untuk setiap nama domain yang memenuhi syarat (FQDN) diharapkan muncul di baris yang sama. Jika itu tidak benar, Anda harus memodifikasi kode yang disediakan dalam pola ini untuk melakukan penggabungan yang diperlukan.
+ Pola ini menggunakan AWS SDK for Python (Boto3) untuk memanggil layanan Route 53 secara langsung. Anda dapat menyempurnakan kode untuk menggunakan CloudFormation pembungkus AWS untuk `update_stack` perintah `create_stack` dan, dan menggunakan nilai JSON untuk mengisi sumber daya template.

## Arsitektur
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**Tumpukan teknologi**
+ Route 53 zona host pribadi untuk merutekan lalu lintas
+ Amazon S3 untuk menyimpan file JSON output

![\[Alur kerja untuk memigrasi catatan DNS secara massal ke zona host pribadi Route 53.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


Alur kerja terdiri dari langkah-langkah ini, seperti yang diilustrasikan dalam diagram sebelumnya dan dibahas di bagian *Epik*:

1. Unggah lembar kerja Excel yang memiliki informasi kumpulan rekaman ke bucket S3.

1. Buat dan jalankan skrip Python yang mengonversi data Excel ke format JSON.

1. Baca catatan dari bucket S3 dan bersihkan datanya.

1. Buat kumpulan rekaman di zona host pribadi Anda.

## Alat
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) - Amazon Route 53 adalah layanan web DNS yang sangat tersedia dan dapat diskalakan yang menangani pendaftaran domain, perutean DNS, dan pemeriksaan kesehatan.
+ [Amazon S3 - Amazon Simple Storage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) Service (Amazon S3) Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek. Anda dapat menggunakan Amazon S3 untuk menyimpan dan mengambil data sebanyak apa pun kapan pun, dari mana pun di web.

## Epik
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### Siapkan data untuk otomatisasi
<a name="prepare-data-for-automation"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat file Excel untuk catatan Anda. | Gunakan catatan yang Anda ekspor dari sistem Anda saat ini untuk membuat lembar kerja Excel yang memiliki kolom yang diperlukan untuk catatan, seperti nama domain yang sepenuhnya memenuhi syarat (FQDN), jenis rekaman, Waktu untuk Hidup (TTL), dan nilai. Untuk catatan NAPTR dan SRV, nilainya adalah kombinasi dari beberapa properti, jadi gunakan `concat` metode Excel untuk menggabungkan properti ini.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | Insinyur data, keterampilan Excel | 
| Verifikasi lingkungan kerja. | Di IDE Anda, buat file Python untuk mengonversi lembar kerja input Excel ke format JSON. (Alih-alih IDE, Anda juga dapat menggunakan SageMaker notebook Amazon untuk bekerja dengan kode Python.)Verifikasi bahwa versi Python yang Anda gunakan adalah versi 3.7 atau yang lebih baru.<pre> python3 --version</pre>Instal paket **panda**.<pre> pip3 install pandas --user</pre> | AWS Umum | 
| Ubah data lembar kerja Excel ke JSON. | Buat file Python yang berisi kode berikut untuk dikonversi dari Excel ke JSON.<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>di mana `Book1` adalah nama lembar kerja Excel dan `my.json` merupakan nama file JSON keluaran. | Insinyur data, keterampilan Python | 
| Unggah file JSON ke bucket S3. | Unggah `my.json` file ke bucket S3. Untuk informasi selengkapnya, lihat [Membuat bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) di dokumentasi Amazon S3. | Pengembang aplikasi | 
| FqdnName | RecordType | Nilai | TTL | 
| something.example.org | A | 1.1.1.1 | 900 | 

### Sisipkan catatan
<a name="insert-records"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat zona host pribadi. | Gunakan [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) API dan kode contoh Python berikut untuk membuat zona host pribadi. Ganti parameter`hostedZoneName`,`vpcRegion`, dan `vpcId` dengan nilai Anda sendiri.<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>Anda juga dapat menggunakan alat infrastruktur sebagai kode (IAc) seperti AWS CloudFormation untuk mengganti langkah-langkah ini dengan templat yang membuat tumpukan dengan sumber daya dan properti yang sesuai. | Arsitek cloud, administrator Jaringan, keterampilan Python | 
| Ambil detail sebagai kamus dari Amazon S3. | Gunakan kode berikut untuk membaca dari bucket S3 dan untuk mendapatkan nilai JSON sebagai kamus Python. <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>dimana `json_content` berisi kamus Python. | Pengembang aplikasi, keterampilan Python | 
| Bersihkan nilai data untuk spasi dan karakter Unicode. | Sebagai langkah pengamanan untuk memastikan kebenaran data, gunakan kode berikut untuk melakukan operasi strip pada nilai di`json_content`. Kode ini menghapus karakter spasi di bagian depan dan akhir setiap string. Hal ini juga menggunakan `replace` metode untuk menghapus hard (non-breaking) spasi (`\xa0`karakter).<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | Pengembang aplikasi, keterampilan Python | 
| Sisipkan catatan. | Gunakan kode berikut sebagai bagian dari `for` loop sebelumnya.<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>Di `xxxxxxx` mana ID zona yang dihosting dari langkah pertama epik ini. | Pengembang aplikasi, keterampilan Python | 

## Sumber daya terkait
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**Referensi**
+ [Membuat catatan dengan mengimpor file zona](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html) (dokumentasi Amazon Route 53)
+ [metode create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) (dokumentasi Boto3)
+ [metode change\$1resource\$1record\$1sets (dokumentasi Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets))

**Tutorial dan video**
+ [Tutorial Python (dokumentasi](https://docs.python.org/3/tutorial/) Python)
+ [Desain DNS menggunakan Amazon Route 53](https://www.youtube.com/watch?v=2y_RBjDkRgY) (YouTube video, *AWS Online Tech Talks*)

# Ubah header HTTP saat Anda bermigrasi dari F5 ke Application Load Balancer di AWS
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws"></a>

*Sachin Trivedi, Amazon Web Services*

## Ringkasan
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-summary"></a>

Saat Anda memigrasikan aplikasi yang menggunakan penyeimbang Load F5 ke Amazon Web Services (AWS) dan ingin menggunakan Application Load Balancer di AWS, memigrasikan aturan F5 untuk modifikasi header adalah masalah umum. Application Load Balancer tidak mendukung modifikasi header, tetapi Anda dapat menggunakan Amazon CloudFront sebagai jaringan pengiriman konten (CDN) dan Lambda @Edge untuk memodifikasi header.

Pola ini menjelaskan integrasi yang diperlukan dan menyediakan kode contoh untuk modifikasi header dengan menggunakan AWS CloudFront dan Lambda @Edge.

## Prasyarat dan batasan
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-prereqs"></a>

**Prasyarat**
+ Aplikasi lokal yang menggunakan penyeimbang beban F5 dengan konfigurasi yang menggantikan nilai header HTTP dengan menggunakan. `if, else` Untuk informasi selengkapnya tentang konfigurasi ini, lihat [HTTP: :header](https://clouddocs.f5.com/api/irules/HTTP__header.html) dalam dokumentasi produk F5. 

**Batasan**
+ Pola ini berlaku untuk kustomisasi header load balancer F5. Untuk penyeimbang beban pihak ketiga lainnya, silakan periksa dokumentasi penyeimbang beban untuk informasi dukungan.
+ Fungsi Lambda yang Anda gunakan untuk Lambda @Edge harus berada di Wilayah AS Timur (Virginia N.).

## Arsitektur
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-architecture"></a>

Diagram berikut menunjukkan arsitektur di AWS, termasuk aliran integrasi antara CDN dan komponen AWS lainnya.

![\[Arsitektur untuk modifikasi header dengan menggunakan Amazon CloudFront dan Lambda @Edge\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/00abbe3c-2453-4291-9b24-b488dced4868/images/4ee9a19e-6da2-4c5a-a8bc-19d3918a166e.png)


## Alat
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-tools"></a>

**Layanan AWS**
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) ─ Application Load Balancer adalah layanan load balancing AWS yang dikelola sepenuhnya yang berfungsi pada lapisan ketujuh model Open Systems Interconnection (OSI). Ini menyeimbangkan lalu lintas di beberapa target dan mendukung permintaan perutean lanjutan berdasarkan header dan metode HTTP, string kueri, dan perutean berbasis host atau berbasis jalur.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) - Amazon CloudFront adalah layanan web yang mempercepat distribusi konten web statis dan dinamis Anda, seperti.html, .css, .js, dan file gambar, kepada pengguna Anda. CloudFront mengirimkan konten Anda melalui jaringan pusat data di seluruh dunia yang disebut lokasi tepi untuk latensi yang lebih rendah dan peningkatan kinerja.
+ [Lambda @Edge ─](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html) Lambda @Edge adalah ekstensi AWS Lambda yang memungkinkan Anda menjalankan fungsi untuk menyesuaikan konten yang dikirimkan. CloudFront Anda dapat membuat fungsi di Wilayah AS Timur (Virginia N.), dan kemudian mengaitkan fungsi tersebut dengan CloudFront distribusi untuk secara otomatis mereplikasi kode Anda di seluruh dunia, tanpa menyediakan atau mengelola server. Ini mengurangi latensi dan meningkatkan pengalaman pengguna.

**Kode**

Kode contoh berikut menyediakan cetak biru untuk memodifikasi CloudFront header respons. Ikuti instruksi di bagian *Epik* untuk menyebarkan kode.

```
exports.handler = async (event, context) => {
    const response = event.Records[0].cf.response;
    const headers = response.headers;


    const headerNameSrc = 'content-security-policy';
    const headerNameValue = '*.xyz.com';


    if (headers[headerNameSrc.toLowerCase()]) {
        headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
        }];
        console.log(`Response header "${headerNameSrc}" was set to ` +
                    `"${headers[headerNameSrc.toLowerCase()][0].value}"`);
    }
    else {
            headers[headerNameSrc.toLowerCase()] = [{
            key: headerNameSrc,
            value: headerNameValue,
            }];
    }
    return response;
};
```

## Epik
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-epics"></a>

### Buat distribusi CDN
<a name="create-a-cdn-distribution"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat distribusi CloudFront web.  | Pada langkah ini, Anda membuat CloudFront distribusi untuk memberi tahu dari CloudFront mana Anda ingin konten dikirim, dan detail tentang cara melacak dan mengelola pengiriman konten.Untuk membuat distribusi menggunakan konsol, masuk ke AWS Management Console, buka [CloudFront konsol](https://console.aws.amazon.com/cloudfront/v3/home), lalu ikuti langkah-langkah dalam [CloudFront dokumentasi](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html). | Administrator awan | 

### Buat dan terapkan fungsi Lambda @Edge
<a name="create-and-deploy-the-lambda-edge-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat dan terapkan fungsi Lambda @Edge. | Anda dapat membuat fungsi Lambda @Edge dengan menggunakan cetak biru untuk memodifikasi header respons. CloudFront (Cetak Biru lainnya tersedia untuk kasus penggunaan yang berbeda; untuk informasi selengkapnya, lihat [Lambda @Edge contoh fungsi](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) dalam dokumentasi.) CloudFront  Untuk membuat fungsi Lambda @Edge:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.html) | Administrator AWS | 
| Terapkan fungsi Lambda @Edge. | Ikuti petunjuk di [langkah 4](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-add-trigger) dari *Tutorial: Membuat fungsi Lambda @Edge sederhana* dalam CloudFront dokumentasi Amazon untuk mengonfigurasi CloudFront pemicu dan menyebarkan fungsi. | Administrator AWS | 

## Sumber daya terkait
<a name="modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws-resources"></a>

**CloudFront dokumentasi**
+ [Perilaku permintaan dan respons untuk asal kustom](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html) 
+ [Bekerja dengan distribusi](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html) 
+ [Lambda @Edge contoh fungsi](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-examples.html) 
+ [Menyesuaikan di tepi dengan Lambda @Edge](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html)
+ [Tutorial: Membuat fungsi Lambda @Edge sederhana](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html)

# Buat laporan temuan Network Access Analyzer untuk akses internet masuk dalam beberapa Akun AWS
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts"></a>

*Mike Virgilio, Amazon Web Services*

## Ringkasan
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-summary"></a>

Akses internet masuk yang tidak disengaja ke AWS sumber daya dapat menimbulkan risiko bagi perimeter data organisasi. [Network Access Analyzer](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html) adalah fitur Amazon Virtual Private Cloud (Amazon VPC) yang membantu Anda mengidentifikasi akses jaringan yang tidak diinginkan ke sumber daya Anda di Amazon Web Services ().AWS Anda dapat menggunakan Network Access Analyzer untuk menentukan persyaratan akses jaringan Anda dan untuk mengidentifikasi jalur jaringan potensial yang tidak memenuhi persyaratan yang Anda tentukan. Anda dapat menggunakan Network Access Analyzer untuk melakukan hal berikut:

1. Identifikasi AWS sumber daya yang dapat diakses oleh internet melalui gateway internet.

1. Validasi bahwa virtual private cloud (VPCs) Anda tersegmentasi dengan tepat, seperti mengisolasi lingkungan produksi dan pengembangan dan memisahkan beban kerja transaksional.

Network Access Analyzer menganalisis kondisi jangkauan end-to-end jaringan dan bukan hanya satu komponen. Untuk menentukan apakah sumber daya dapat diakses internet, Network Access Analyzer mengevaluasi gateway internet, tabel rute VPC, daftar kontrol akses jaringan (ACLs), alamat IP publik pada antarmuka jaringan elastis, dan grup keamanan. Jika salah satu komponen ini mencegah akses internet, Network Access Analyzer tidak menghasilkan temuan. Misalnya, jika instans Amazon Elastic Compute Cloud (Amazon EC2) memiliki grup keamanan terbuka yang memungkinkan lalu lintas dari `0/0` tetapi instance berada dalam subnet pribadi yang tidak dapat dirutekan dari gateway internet mana pun, maka Network Access Analyzer tidak akan menghasilkan temuan. Ini memberikan hasil kesetiaan tinggi sehingga Anda dapat mengidentifikasi sumber daya yang benar-benar dapat diakses dari internet.

Ketika Anda menjalankan Network Access Analyzer, Anda menggunakan [Network Access Scopes](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html#concepts) untuk menentukan persyaratan akses jaringan Anda. Solusi ini mengidentifikasi jalur jaringan antara gateway internet dan elastic network interface. Dalam pola ini, Anda menyebarkan solusi secara terpusat Akun AWS di organisasi Anda, dikelola oleh AWS Organizations, dan menganalisis semua akun, di mana pun Wilayah AWS, di organisasi.

Solusi ini dirancang dengan mempertimbangkan hal-hal berikut:
+  AWS CloudFormation Template mengurangi upaya yang diperlukan untuk menyebarkan AWS sumber daya dalam pola ini.
+ Anda dapat menyesuaikan parameter dalam CloudFormation template dan skrip **naa-script.sh** pada saat penerapan untuk menyesuaikannya untuk lingkungan Anda.
+ Bash scripting secara otomatis menyediakan dan menganalisis Network Access Scopes untuk beberapa akun, secara paralel.
+ Skrip Python memproses temuan, mengekstrak data, dan kemudian mengkonsolidasikan hasilnya. Anda dapat memilih untuk meninjau laporan konsolidasi temuan Network Access Analyzer dalam format CSV atau dalam format. AWS Security Hub CSPM Contoh laporan CSV tersedia di bagian [Informasi tambahan](#create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional) dari pola ini.
+ Anda dapat memulihkan temuan, atau Anda dapat mengecualikannya dari analisis future dengan menambahkannya ke **file naa-exclusions.csv**.

## Prasyarat dan batasan
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-prereqs"></a>

**Prasyarat**
+ Sebuah Akun AWS untuk layanan dan alat keamanan hosting, dikelola sebagai akun anggota organisasi di AWS Organizations. Dalam pola ini, akun ini disebut sebagai akun keamanan.
+ Di akun keamanan, Anda harus memiliki subnet pribadi dengan akses internet keluar. Untuk petunjuknya, lihat [Membuat subnet](https://docs.aws.amazon.com/vpc/latest/userguide/create-subnets.html) dalam dokumentasi Amazon VPC. Anda dapat membuat akses internet dengan menggunakan [gateway NAT atau titik](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) akhir [VPC antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html).
+ Akses ke akun AWS Organizations manajemen atau akun yang telah mendelegasikan izin administrator untuk. CloudFormation Untuk petunjuk, lihat [Mendaftarkan administrator yang didelegasikan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-delegated-admin.html) dalam CloudFormation dokumentasi.
+ Aktifkan akses tepercaya antara AWS Organizations dan CloudFormation. 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.
+ Jika Anda mengunggah temuan ke Security Hub CSPM, CSPM Security Hub harus diaktifkan di akun dan tempat instans Amazon Wilayah AWS disediakan. EC2 Untuk informasi selengkapnya, lihat [Menyiapkan AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-settingup.html).

**Batasan**
+ Jalur jaringan lintas akun saat ini tidak dianalisis karena keterbatasan fitur Network Access Analyzer.
+ Target Akun AWS harus dikelola sebagai organisasi di AWS Organizations. **Jika Anda tidak menggunakan AWS Organizations, Anda dapat memperbarui CloudFormation template **naa-execrole.yaml** dan skrip naa-script.sh untuk lingkungan Anda.** Sebagai gantinya, Anda memberikan daftar Akun AWS IDs dan Wilayah tempat Anda ingin menjalankan skrip.
+  CloudFormation Template ini dirancang untuk menyebarkan EC2 instance Amazon di subnet pribadi yang memiliki akses internet keluar. AWS Systems Manager Agen (Agen SSM) memerlukan akses keluar untuk mencapai titik akhir layanan Systems Manager, dan Anda memerlukan akses keluar untuk mengkloning repositori kode dan menginstal dependensi. [Jika Anda ingin menggunakan subnet publik, Anda harus memodifikasi template **naa-resources.yaml** untuk mengaitkan alamat IP Elastis dengan instance Amazon.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) EC2 

## Arsitektur
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-architecture"></a>

**Arsitektur target**

*Opsi 1: Akses temuan di ember Amazon S3*

![\[Diagram arsitektur untuk mengakses laporan temuan Network Access Analyzer di bucket Amazon S3\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/d0b08437-e5b0-47a1-abdd-040c67b5da8f.png)


Diagram menunjukkan proses berikut:

1. Jika Anda menjalankan solusi secara manual, pengguna mengautentikasi ke EC2 instance Amazon dengan menggunakan Session Manager dan kemudian menjalankan skrip **naa-script.sh**. Skrip shell ini melakukan langkah 2—7.

   Jika Anda menjalankan solusi secara otomatis, skrip **naa-script.sh** dimulai secara otomatis pada jadwal yang Anda tentukan dalam ekspresi cron. Skrip shell ini melakukan langkah 2—7. Untuk informasi selengkapnya, lihat *Otomatisasi dan skala* di akhir bagian ini.

1.  EC2 Instans Amazon mengunduh file **naa-exception.csv** terbaru dari bucket Amazon S3. File ini digunakan nanti dalam proses ketika skrip Python memproses pengecualian.

1.  EC2 Instans Amazon mengasumsikan peran `NAAEC2Role` AWS Identity and Access Management (IAM), yang memberikan izin untuk mengakses bucket Amazon S3 dan untuk mengambil peran `NAAExecRole` IAM di akun lain di organisasi.

1.  EC2 Instans Amazon mengasumsikan peran `NAAExecRole` IAM dalam akun manajemen organisasi dan menghasilkan daftar akun dalam organisasi.

1.  EC2 Instans Amazon mengasumsikan peran `NAAExecRole` IAM dalam akun anggota organisasi (disebut *akun beban kerja* dalam diagram arsitektur) dan melakukan penilaian keamanan di setiap akun. Temuan disimpan sebagai file JSON di EC2 instance Amazon.

1.  EC2 Instans Amazon menggunakan skrip Python untuk memproses file JSON, mengekstrak bidang data, dan membuat laporan CSV.

1.  EC2 Instans Amazon mengunggah file CSV ke bucket Amazon S3.

1.  EventBridge Aturan Amazon mendeteksi unggahan file dan menggunakan topik Amazon SNS untuk mengirim email yang memberi tahu pengguna bahwa laporan sudah lengkap.

1. Pengguna mengunduh file CSV dari bucket Amazon S3. Pengguna mengimpor hasil ke template Excel dan meninjau hasilnya.

*Opsi 2: Akses temuan di AWS Security Hub CSPM*

![\[Diagram arsitektur untuk mengakses temuan Network Access Analyzer melalui AWS Security Hub\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/9cb4f059-dfb6-4a33-9f8d-159fe5df0d64.png)


Diagram menunjukkan proses berikut:

1. Jika Anda menjalankan solusi secara manual, pengguna mengautentikasi ke EC2 instance Amazon dengan menggunakan Session Manager dan kemudian menjalankan skrip **naa-script.sh**. Skrip shell ini melakukan langkah 2—7.

   Jika Anda menjalankan solusi secara otomatis, skrip **naa-script.sh** dimulai secara otomatis pada jadwal yang Anda tentukan dalam ekspresi cron. Skrip shell ini melakukan langkah 2—7. Untuk informasi selengkapnya, lihat *Otomatisasi dan skala* di akhir bagian ini.

1.  EC2 Instans Amazon mengunduh file **naa-exception.csv** terbaru dari bucket Amazon S3. File ini digunakan nanti dalam proses ketika skrip Python memproses pengecualian.

1.  EC2 Instans Amazon mengasumsikan peran `NAAEC2Role` IAM, yang memberikan izin untuk mengakses bucket Amazon S3 dan untuk mengambil peran `NAAExecRole` IAM di akun lain di organisasi.

1.  EC2 Instans Amazon mengasumsikan peran `NAAExecRole` IAM dalam akun manajemen organisasi dan menghasilkan daftar akun dalam organisasi.

1.  EC2 Instans Amazon mengasumsikan peran `NAAExecRole` IAM dalam akun anggota organisasi (disebut *akun beban kerja* dalam diagram arsitektur) dan melakukan penilaian keamanan di setiap akun. Temuan disimpan sebagai file JSON di EC2 instance Amazon.

1.  EC2 Instans Amazon menggunakan skrip Python untuk memproses file JSON dan mengekstrak bidang data untuk diimpor ke Security Hub CSPM.

1.  EC2 Instans Amazon mengimpor temuan Network Access Analyzer ke Security Hub CSPM.

1.  EventBridge Aturan Amazon mendeteksi impor dan menggunakan topik Amazon SNS untuk mengirim email yang memberi tahu pengguna bahwa prosesnya selesai.

1. Pengguna melihat temuan di Security Hub CSPM.

**Otomatisasi dan skala**

Anda dapat menjadwalkan solusi ini untuk menjalankan skrip **naa-script.sh** secara otomatis pada jadwal khusus. Untuk mengatur jadwal kustom, dalam template ** CloudFormation naa-resources.yaml**, ubah parameter. `CronScheduleExpression` Misalnya, nilai default `0 0 * * 0` menjalankan solusi pada tengah malam setiap hari Minggu. Nilai `0 0 * 1-12 0` akan menjalankan solusi pada tengah malam pada hari Minggu pertama setiap bulan. Untuk informasi selengkapnya tentang penggunaan ekspresi cron, lihat [Cron dan ekspresi tingkat](https://docs.aws.amazon.com/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html) dalam dokumentasi Systems Manager.

Jika Anda ingin sesuaikan jadwal setelah `NAA-Resources` tumpukan digunakan, Anda dapat mengedit jadwal cron secara manual. `/etc/cron.d/naa-schedule`

## Alat
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-tools"></a>

**Layanan AWS**
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) 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.
+ [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.
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)memberikan pandangan komprehensif tentang keadaan keamanan Anda di AWS. Ini juga membantu Anda memeriksa AWS lingkungan Anda terhadap standar industri keamanan dan praktik terbaik.
+ [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 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. Pola ini menggunakan Session Manager, kemampuan Systems Manager.

**Repositori kode**

Kode untuk pola ini tersedia di repositori [Analisis Multi-Akun GitHub Network Access Analyzer](https://github.com/aws-samples/network-access-analyzer-multi-account-analysis). Repositori kode berisi file-file berikut:
+ **naa-script.sh** - Skrip bash ini digunakan untuk memulai analisis Network Access Analyzer dari beberapa Akun AWS, secara paralel. Seperti yang didefinisikan dalam CloudFormation template **naa-resources.yaml**, skrip ini secara otomatis diterapkan ke folder pada instance Amazon. `/usr/local/naa` EC2 
+ **naa-resources.yaml** - Anda menggunakan CloudFormation template ini untuk membuat tumpukan di akun keamanan dalam organisasi. Template ini menyebarkan semua sumber daya yang diperlukan untuk akun ini untuk mendukung solusinya. Tumpukan ini harus digunakan sebelum template **naa-execrole.yaml**.
**catatan**  
Jika tumpukan ini dihapus dan digunakan kembali, Anda harus membangun kembali kumpulan `NAAExecRole` tumpukan untuk membangun kembali dependensi lintas akun di antara peran IAM.
+ **naa-execrole.yaml** - Anda menggunakan CloudFormation templat ini untuk membuat kumpulan tumpukan yang menerapkan peran `NAAExecRole` IAM di semua akun di organisasi, termasuk akun manajemen.
+ **naa-processfindings.py** - Skrip **naa-script.sh** secara otomatis memanggil skrip Python ini untuk memproses output JSON Network Access Analyzer, mengecualikan sumber daya yang diketahui baik dalam file **naa-exclusions.csv**, dan kemudian menghasilkan file CSV dari hasil konsolidasi atau mengimpor hasilnya ke Security Hub CSPM.

## Epik
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-epics"></a>

### Mempersiapkan penyebaran
<a name="prepare-for-deployment"></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/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Tinjau template. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Buat CloudFormation tumpukan
<a name="create-the-cfnshort-stacks"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyediakan sumber daya di akun keamanan. | Menggunakan template **naa-resources.yaml**, Anda membuat CloudFormation tumpukan yang menyebarkan semua sumber daya yang diperlukan di akun keamanan. Untuk petunjuk, lihat [Membuat tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dalam CloudFormation dokumentasi. Perhatikan hal berikut saat menerapkan template ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Menyediakan peran IAM di akun anggota. | Di akun AWS Organizations manajemen atau akun dengan izin administrator yang didelegasikan CloudFormation, gunakan templat **naa-execrole.yaml** untuk membuat kumpulan tumpukan. CloudFormation Kumpulan tumpukan menyebarkan peran `NAAExecRole` IAM di semua akun anggota di organisasi. Untuk petunjuknya, lihat [Membuat kumpulan tumpukan dengan izin yang dikelola layanan dalam dokumentasi](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-getting-started-create.html#stacksets-orgs-associate-stackset-with-org). CloudFormation Perhatikan hal berikut saat menerapkan template ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Menyediakan peran IAM dalam akun manajemen. | Menggunakan template **naa-execrole.yaml**, Anda membuat CloudFormation tumpukan yang menerapkan peran `NAAExecRole` IAM di akun manajemen organisasi. Kumpulan tumpukan yang Anda buat sebelumnya tidak menerapkan peran IAM di akun manajemen. Untuk petunjuk, lihat [Membuat tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dalam CloudFormation dokumentasi. Perhatikan hal berikut saat menerapkan template ini:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Lakukan analisis
<a name="perform-the-analysis"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Sesuaikan skrip shell. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Analisis akun target. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opsi 1 - Ambil hasil dari bucket Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 
| Opsi 2 — Tinjau hasilnya di Security Hub CSPM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### Memperbaiki dan mengecualikan temuan
<a name="remediate-and-exclude-findings"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Memperbaiki temuan. | Perbaiki temuan apa pun yang ingin Anda atasi. Untuk informasi selengkapnya dan praktik terbaik tentang cara membuat perimeter di sekitar AWS identitas, sumber daya, dan jaringan Anda, lihat [Membangun perimeter data di AWS](https://docs.aws.amazon.com/whitepapers/latest/building-a-data-perimeter-on-aws/building-a-data-perimeter-on-aws.html) (AWS Whitepaper). | AWS DevOps | 
| Kecualikan sumber daya dengan jalur jaringan yang diketahui baik. | Jika Network Access Analyzer menghasilkan temuan untuk sumber daya yang seharusnya dapat diakses dari internet, maka Anda dapat menambahkan sumber daya ini ke daftar pengecualian. Lain kali Network Access Analyzer berjalan, itu tidak akan menghasilkan temuan untuk sumber daya itu.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Opsional) Perbarui skrip naa-script.sh
<a name="optional-update-the-naa-script-sh-script"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui skrip naa-script.sh. | Jika Anda ingin memperbarui skrip **naa-script.sh** ke versi terbaru di repo, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

### (Opsional) Bersihkan
<a name="optional-clean-up"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Hapus semua sumber daya yang digunakan. | Anda dapat meninggalkan sumber daya yang digunakan di akun.Jika Anda ingin menghentikan semua sumber daya, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | AWS DevOps | 

## Pemecahan masalah
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Tidak dapat terhubung ke EC2 instans Amazon dengan menggunakan Pengelola Sesi. | Agen SSM harus dapat berkomunikasi dengan endpoint Systems Manager. Lakukan hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts.html) | 
| Saat menerapkan set tumpukan, CloudFormation konsol meminta Anda untuk melakukannya. `Enable trusted access with AWS Organizations to use service-managed permissions` | Ini menunjukkan bahwa akses tepercaya belum diaktifkan antara AWS Organizations dan CloudFormation. Akses tepercaya diperlukan untuk menerapkan set tumpukan yang dikelola layanan. Pilih tombol untuk mengaktifkan akses tepercaya. Untuk informasi selengkapnya, lihat [Mengaktifkan akses tepercaya](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-enable-trusted-access.html) dalam CloudFormation dokumentasi. | 

## Sumber daya terkait
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-resources"></a>
+ [Baru - Penganalisis Akses Jaringan Amazon VPC](https://aws.amazon.com/blogs/aws/new-amazon-vpc-network-access-analyzer/) (AWS posting blog)
+ [AWS re:Inforce 2022 - Validasi kontrol akses jaringan yang efektif pada AWS (NIS202) (video)](https://youtu.be/aN2P2zeQek0)
+ [Demo - Analisis Jalur Data Ingress Internet di Seluruh Organisasi Menggunakan Penganalisis Akses Jaringan](https://youtu.be/1IFNZWy4iy0) (video)

## Informasi tambahan
<a name="create-a-report-of-network-access-analyzer-findings-for-inbound-internet-access-in-multiple-aws-accounts-additional"></a>

**Contoh keluaran konsol**

Contoh berikut menunjukkan output dari menghasilkan daftar akun target dan menganalisis akun target.

```
[root@ip-10-10-43-82 naa]# ./naa-script.sh
download: s3://naa-<account ID>-us-east-1/naa-exclusions.csv to ./naa-exclusions.csv

AWS Management Account: <Management account ID>

AWS Accounts being processed...
<Account ID 1> <Account ID 2> <Account ID 3>

Assessing AWS Account: <Account ID 1>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 2>, using Role: NAAExecRole
Assessing AWS Account: <Account ID 3>, using Role: NAAExecRole
Processing account: <Account ID 1> / Region: us-east-1
Account: <Account ID 1> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 2> / Region: us-east-1
Account: <Account ID 2> / Region: us-east-1 – Detecting Network Analyzer scope...
Processing account: <Account ID 3> / Region: us-east-1
Account: <Account ID 3> / Region: us-east-1 – Detecting Network Analyzer scope...
Account: <Account ID 1> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 1> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 2> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 2> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
Account: <Account ID 3> / Region: us-east-1 – Network Access Analyzer scope detected.
Account: <Account ID 3> / Region: us-east-1 – Continuing analyses with Scope ID. Accounts with many resources may take up to one hour
```

**Contoh laporan CSV**

Gambar berikut adalah contoh dari output CSV.

![\[Contoh 1 dari laporan CSV yang dihasilkan oleh solusi ini.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/55e02e61-054e-4da6-aaae-c9a8b6f4f272.png)


![\[Contoh 2 dari laporan CSV yang dihasilkan oleh solusi ini.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/eda6abba-632a-4e3d-92b9-31848fa6dead/images/95f980ad-92c1-4392-92d4-9c742755aab2.png)


# Mengatur resolusi DNS untuk jaringan hybrid di lingkungan multi-akun AWS
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment"></a>

*Anvesh Kokganti, Amazon Web Services*

## Ringkasan
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-summary"></a>

Pola ini memberikan solusi komprehensif untuk menyiapkan resolusi DNS di lingkungan jaringan hybrid yang mencakup beberapa akun Amazon Web Services (AWS). Ini memungkinkan resolusi DNS dua arah antara jaringan lokal dan lingkungan melalui titik akhir. AWS Amazon Route 53 Resolver Pola ini menyajikan dua solusi untuk mengaktifkan resolusi DNS dalam arsitektur [multi-akun dan terpusat](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html#multi-account-centralized):
+ *Pengaturan dasar* tidak menggunakan Profil Route 53. Ini membantu mengoptimalkan biaya untuk penyebaran kecil hingga menengah dengan kompleksitas yang lebih rendah.
+ *Penyiapan yang disempurnakan* menggunakan Route 53 Profiles untuk menyederhanakan operasi. Cara terbaik untuk penyebaran DNS yang lebih besar atau lebih kompleks.

**catatan**  
Tinjau bagian *Batasan* untuk batasan layanan dan kuota sebelum implementasi. Pertimbangkan faktor-faktor seperti overhead manajemen, biaya, kompleksitas operasional, dan keahlian tim ketika Anda membuat keputusan.

## Prasyarat dan batasan
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-prereqs"></a>

**Prasyarat**
+ Lingkungan AWS multi-akun dengan Amazon Virtual Private Cloud (Amazon VPC) diterapkan di seluruh Layanan Bersama dan akun beban kerja (sebaiknya disiapkan melalui [AWS Control Tower dengan AWS mengikuti praktik terbaik](https://docs.aws.amazon.com/controltower/latest/userguide/aws-multi-account-landing-zone.html) untuk struktur akun).
+ Konektivitas hybrid yang ada (AWS Direct Connect atau AWS Site-to-Site VPN) antara jaringan lokal dan AWS lingkungan.
+ Amazon VPC peering, AWS Transit Gateway, atau AWS Cloud WAN untuk konektivitas jaringan Layer 3 antara. VPCs (Konektivitas ini diperlukan untuk lalu lintas aplikasi. Resolusi DNS tidak diperlukan untuk bekerja. Resolusi DNS beroperasi secara independen dari konektivitas jaringan antara VPCs.)
+ Server DNS berjalan di lingkungan lokal.

**Batasan**
+ Titik akhir, aturan, dan Profil Resolver Route 53 adalah konstruksi Regional dan mungkin memerlukan replikasi dalam beberapa untuk organisasi global. Wilayah AWS 
+ Untuk daftar lengkap kuota layanan untuk Resolver Route 53, zona host pribadi, dan Profil, lihat [Kuota](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html) dalam dokumentasi Route 53.

## Arsitektur
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture"></a>

**Tumpukan teknologi target**
+ Rute 53 titik akhir keluar dan masuk
+ Aturan Route 53 Resolver untuk penerusan bersyarat
+ AWS Resource Access Manager (AWS RAM)
+ Route 53 zona host pribadi

**Arsitektur target**

**Titik akhir keluar dan masuk**

Diagram berikut menunjukkan aliran resolusi DNS dari AWS ke tempat. Ini adalah pengaturan konektivitas untuk resolusi keluar tempat domain di-host di tempat. Berikut adalah ikhtisar tingkat tinggi dari proses yang terlibat dalam pengaturan ini. Untuk detailnya, lihat bagian [Epik](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Terapkan titik akhir Resolver Route 53 keluar di VPC Layanan Bersama.

1. Buat aturan Resolver Route 53 (aturan penerusan) di akun Layanan Bersama untuk domain yang dihosting di tempat.

1. Bagikan dan kaitkan aturan dengan VPCs akun lain yang menghosting sumber daya yang diperlukan untuk menyelesaikan domain yang dihosting lokal. Ini dapat dilakukan dengan cara yang berbeda tergantung pada kasus penggunaan Anda, seperti yang dijelaskan nanti di bagian ini.

![\[Titik akhir masuk dan keluar di AWS ke alur resolusi DNS lokal.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/d69d4cad-5e2c-4481-9370-2708e8a4f8c1.png)


Setelah Anda mengatur konektivitas, langkah-langkah yang terlibat dalam resolusi keluar adalah sebagai berikut:

1. Instans Amazon Elastic Compute Cloud (Amazon EC2) mengirimkan permintaan resolusi DNS `db.onprem.example.com` ke Resolver Route 53 VPC di alamat VPC\$12.

1. Route 53 Resolver memeriksa aturan Resolver dan meneruskan permintaan ke server DNS lokal dengan menggunakan titik akhir keluar. IPs 

1. Titik akhir keluar meneruskan permintaan ke DNS lokal. IPs Lalu lintas melewati konektivitas jaringan hybrid yang mapan antara VPC Layanan Bersama dan pusat data lokal.

1. Server DNS lokal merespons kembali ke titik akhir keluar, yang kemudian meneruskan respons kembali ke Resolver Route 53 VPC. Resolver mengembalikan respons terhadap instance. EC2 

Diagram berikutnya menunjukkan aliran resolusi DNS dari lingkungan lokal ke. AWS Ini adalah pengaturan konektivitas untuk resolusi masuk tempat domain di-host. AWS Berikut adalah ikhtisar tingkat tinggi dari proses yang terlibat dalam pengaturan ini. Untuk detailnya, lihat bagian [Epik](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics).

1. Menerapkan titik akhir Resolver masuk di VPC Layanan Bersama.

1. Buat zona host pribadi di akun Layanan Bersama (pendekatan terpusat).

1. Kaitkan zona yang dihosting pribadi dengan VPC Layanan Bersama. Bagikan dan kaitkan zona ini dengan akun silang VPCs untuk resolusi VPC-to-VPC DNS. Ini dapat dilakukan dengan cara yang berbeda tergantung pada kasus penggunaan Anda, seperti yang dijelaskan nanti di bagian ini.

![\[Titik akhir masuk dan keluar di lokasi lokal ke alur resolusi AWS DNS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/a6f5348c-2041-453e-8939-2b4ee0b7ebd8.png)


Setelah Anda mengatur konektivitas, langkah-langkah yang terlibat dalam resolusi masuk adalah sebagai berikut:

1. Sumber daya lokal mengirimkan permintaan resolusi DNS `ec2.prod.aws.example.com` ke server DNS lokal.

1. Server DNS lokal meneruskan permintaan ke titik akhir Resolver masuk di VPC Layanan Bersama melalui koneksi jaringan hybrid.

1. Titik akhir Resolver masuk mencari permintaan di zona host pribadi terkait dengan bantuan VPC Route 53 Resolver dan mendapatkan alamat IP yang sesuai.

1. Alamat IP ini dikirim kembali ke server DNS lokal, yang mengembalikan respons ke sumber daya lokal.

Konfigurasi ini memungkinkan sumber daya lokal untuk menyelesaikan nama domain AWS pribadi dengan merutekan kueri melalui titik akhir masuk ke zona host pribadi yang sesuai. Dalam arsitektur ini, zona host pribadi dipusatkan dalam VPC Layanan Bersama, yang memungkinkan manajemen DNS pusat oleh satu tim. Zona ini dapat dikaitkan dengan banyak orang VPCs untuk mengatasi kasus penggunaan resolusi VPC-to-VPC DNS. Atau, Anda mungkin ingin mendelegasikan kepemilikan dan pengelolaan domain DNS ke masing-masing domain. Akun AWS Dalam hal ini, setiap akun mengelola zona host pribadinya sendiri dan mengaitkan setiap zona dengan VPC Layanan Bersama pusat untuk resolusi terpadu dengan lingkungan lokal. Pendekatan terdesentralisasi ini berada di luar cakupan pola ini. Untuk informasi selengkapnya, lihat [Menskalakan manajemen DNS di beberapa akun dan VPCs di whitepaper](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/scaling-dns-management-across-multiple-accounts-and-vpcs.html) opsi *DNS Cloud Hybrid untuk Amazon VPC*.

Saat Anda menetapkan alur resolusi DNS dasar dengan menggunakan titik akhir Resolver, Anda perlu menentukan cara mengelola pembagian dan asosiasi aturan Resolver dan zona host pribadi di seluruh area Anda. Akun AWS Anda dapat melakukan pendekatan ini dengan dua cara: melalui berbagi yang dikelola sendiri dengan menggunakan AWS RAM untuk berbagi aturan Resolver dan mengarahkan asosiasi zona host pribadi, seperti yang dirinci di bagian *Pengaturan dasar*, atau melalui Profil Route 53, seperti yang dibahas di bagian Penyiapan yang *ditingkatkan*. Pilihannya tergantung pada preferensi manajemen DNS organisasi Anda dan persyaratan operasional. Diagram arsitektur berikut menggambarkan lingkungan berskala yang mencakup beberapa akun yang berbeda, VPCs yang mewakili penerapan perusahaan yang khas.

**Pengaturan dasar**

Dalam penyiapan dasar, implementasi untuk resolusi DNS hibrid di AWS lingkungan multi-akun digunakan AWS RAM untuk berbagi aturan penerusan Resolver dan asosiasi zona host pribadi untuk mengelola kueri DNS antara lokal dan sumber daya. AWS Metode ini menggunakan titik akhir Resolver Route 53 terpusat dalam VPC Layanan Bersama yang terhubung ke jaringan lokal Anda untuk menangani resolusi DNS masuk dan keluar secara efisien.
+ Untuk resolusi keluar, aturan penerusan Resolver dibuat di akun Layanan Bersama dan kemudian dibagikan dengan orang lain dengan menggunakan. Akun AWS AWS RAM Berbagi ini terbatas pada akun dalam Wilayah yang sama. Akun target kemudian dapat mengaitkan aturan ini dengan aturan mereka VPCs dan memungkinkan sumber daya di akun tersebut VPCs untuk menyelesaikan nama domain lokal.
+ Untuk resolusi masuk, zona yang dihosting pribadi dibuat di akun Layanan Bersama dan dikaitkan dengan VPC Layanan Bersama. Zona ini kemudian dapat dikaitkan dengan VPCs akun lain dengan menggunakan API Route 53 AWS SDKs,, atau AWS Command Line Interface (AWS CLI). Sumber daya yang terkait kemudian VPCs dapat menyelesaikan catatan DNS yang ditentukan di zona host pribadi, yang menciptakan tampilan DNS terpadu di seluruh lingkungan Anda. AWS 

Diagram berikut menunjukkan aliran resolusi DNS dalam pengaturan dasar ini.

![\[Menggunakan pengaturan dasar untuk resolusi DNS hybrid di lingkungan AWS multi-akun.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/258e4bcd-e9c6-43b5-bab8-856ca22206b9.png)


Pengaturan ini berfungsi dengan baik ketika Anda bekerja dengan infrastruktur DNS dalam skala terbatas. Namun, itu bisa menjadi tantangan untuk dikelola saat lingkungan Anda tumbuh. Overhead operasional untuk mengelola bagaimana zona host pribadi dan aturan Resolver dibagikan dan dikaitkan dengan VPCs individu meningkat secara signifikan dengan skala. Selain itu, kuota layanan seperti batas asosiasi VPC 300 per zona host pribadi dapat menjadi faktor pembatas dalam penerapan skala besar. Penyiapan yang disempurnakan mengatasi tantangan ini.

**Pengaturan yang disempurnakan**

Route 53 Profiles menawarkan solusi efisien untuk mengelola resolusi DNS di jaringan hybrid di beberapa jaringan. Akun AWS Alih-alih mengelola zona yang dihosting pribadi dan aturan Resolver secara individual, Anda dapat mengelompokkan konfigurasi DNS ke dalam satu wadah yang dapat dengan mudah dibagikan dan diterapkan di beberapa akun VPCs dan akun di Wilayah. Pengaturan ini mempertahankan arsitektur titik akhir Resolver terpusat dalam VPC Layanan Bersama sambil secara signifikan menyederhanakan pengelolaan konfigurasi DNS.

Diagram berikut menunjukkan aliran resolusi DNS dalam pengaturan yang disempurnakan.

![\[Menggunakan pengaturan lanjutan dengan Route 53 Profiles untuk resolusi DNS hybrid di lingkungan AWS multi-akun.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/01e700cd-be8c-4a5d-bc89-b901a260d045/images/55b9681d-ddb4-4a55-b4ec-fc9afa9870fa.png)


Profil Route 53 memungkinkan Anda mengemas asosiasi zona host pribadi, aturan penerusan Resolver, dan aturan firewall DNS ke dalam satu unit yang dapat dibagikan. Anda dapat membuat Profil di akun Layanan Bersama dan membagikannya dengan akun anggota dengan menggunakan AWS RAM. Ketika profil dibagikan dan diterapkan ke target VPCs, semua asosiasi dan konfigurasi yang diperlukan ditangani secara otomatis oleh layanan. Ini secara signifikan mengurangi overhead operasional manajemen DNS dan memberikan skalabilitas yang sangat baik untuk lingkungan yang berkembang.

**Otomatisasi dan skala**

Gunakan alat infrastruktur sebagai kode (IAc) seperti CloudFormation atau Terraform untuk secara otomatis menyediakan dan mengelola titik akhir Route 53 Resolver, aturan, zona yang dihosting pribadi, dan Profil. Integrasikan konfigurasi DNS dengan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) untuk konsistensi, pengulangan, dan pembaruan cepat.

## Alat
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-tools"></a>

**Layanan AWS**
+ [AWS Resource Access Manager (AWS RAM)](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) membantu Anda berbagi sumber daya dengan aman Akun AWS untuk mengurangi overhead operasional dan memberikan visibilitas dan auditabilitas.
+ [Amazon Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)merespons secara rekursif kueri DNS dari AWS sumber daya dan tersedia secara default di semua. VPCs Anda dapat membuat titik akhir Resolver dan aturan penerusan bersyarat untuk menyelesaikan ruang nama DNS antara pusat data lokal dan pusat data lokal Anda. VPCs
+ [Amazon Route 53 private hosted zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) adalah wadah yang menyimpan informasi tentang bagaimana Anda ingin Route 53 merespons kueri DNS untuk domain dan subdomainnya.
+ [Profil Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/profiles.html) memungkinkan Anda menerapkan dan mengelola konfigurasi Route 53 terkait DNS di banyak VPCs dan berbeda dengan Akun AWS cara yang disederhanakan.

## Praktik terbaik
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-best-practices"></a>

Bagian ini menyediakan beberapa praktik terbaik untuk mengoptimalkan Resolver Route 53. Ini mewakili bagian dari praktik terbaik Route 53. Untuk daftar lengkap, lihat [Praktik terbaik untuk Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices.html).

**Hindari konfigurasi loop dengan titik akhir Resolver**
+ Rancang arsitektur DNS Anda untuk mencegah perutean rekursif dengan merencanakan asosiasi VPC dengan cermat. Saat VPC menghosting titik akhir masuk, hindari mengaitkannya dengan aturan Resolver yang dapat membuat referensi melingkar.
+ Gunakan AWS RAM secara strategis saat Anda berbagi sumber daya DNS di seluruh akun untuk mempertahankan jalur perutean yang bersih.

Untuk informasi selengkapnya, lihat [Menghindari konfigurasi loop dengan titik akhir Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoints.html) dalam dokumentasi Route 53.

**Titik akhir Resolver Skala**
+ Untuk lingkungan yang membutuhkan jumlah query per detik (QPS) yang tinggi, ketahuilah bahwa ada batas 10.000 QPS per ENI di titik akhir. Lebih banyak ENIs dapat ditambahkan ke titik akhir untuk menskalakan DNS QPS.
+ Amazon CloudWatch menyediakan `InboundQueryVolume` dan `OutboundQueryVolume` metrik (lihat [CloudWatch dokumentasi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-resolver-with-cloudwatch.html)). Kami menyarankan Anda mengatur aturan pemantauan yang mengingatkan Anda jika ambang batas melebihi nilai tertentu (misalnya, 80 persen dari 10.000 QPS).
+ Konfigurasikan aturan grup keamanan stateful untuk titik akhir Resolver untuk mencegah batas pelacakan koneksi menyebabkan pembatasan kueri DNS selama lalu lintas volume tinggi. Untuk mempelajari selengkapnya tentang cara kerja pelacakan koneksi di grup keamanan, lihat [Pelacakan sambungan grup EC2 keamanan Amazon](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html) di EC2 dokumentasi Amazon.

Untuk informasi selengkapnya, lihat [Penskalaan titik akhir Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-scaling.html) dalam dokumentasi Route 53.

**Menyediakan ketersediaan tinggi untuk titik akhir Resolver**
+ Buat titik akhir masuk dengan alamat IP di setidaknya dua Availability Zone untuk redundansi.
+ Menyediakan antarmuka jaringan tambahan untuk memastikan ketersediaan selama pemeliharaan atau lonjakan lalu lintas.

Untuk informasi selengkapnya, lihat [Ketersediaan tinggi untuk titik akhir Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/best-practices-resolver-endpoint-high-availability.html) dalam dokumentasi Route 53.

## Epik
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-epics"></a>

### Menyebarkan titik akhir Resolver Route 53
<a name="deploy-r53r-endpoints"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menerapkan titik akhir masuk. | Route 53 Resolver menggunakan titik akhir masuk untuk menerima kueri DNS dari resolver DNS lokal. Untuk petunjuk, lihat [Meneruskan kueri DNS masuk ke dokumentasi Route 53 Anda VPCs ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html). Catat alamat IP titik akhir masuk. | Administrator AWS, Administrator cloud | 
| Menyebarkan titik akhir keluar. | Route 53 Resolver menggunakan titik akhir keluar untuk mengirim kueri DNS ke resolver DNS lokal. Untuk petunjuk, lihat [Meneruskan kueri DNS keluar ke jaringan Anda](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-forwarding-outbound-queries.html) di dokumentasi Route 53. Catat ID titik akhir keluaran. | Administrator AWS, Administrator cloud | 

### Konfigurasikan dan bagikan Route 53 zona yang dihosting pribadi
<a name="configure-and-share-r53-private-hosted-zones"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat zona host pribadi untuk domain yang di-host AWS. | Zona ini menyimpan catatan DNS untuk sumber daya dalam domain AWS-host (misalnya,`prod.aws.example.com`) yang harus diselesaikan dari lingkungan lokal. Untuk petunjuk, lihat [Membuat zona host pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-creating.html) dalam dokumentasi Route 53.Saat membuat zona host pribadi, Anda harus mengaitkan VPC dengan zona host yang dimiliki oleh akun yang sama. Pilih VPC Layanan Bersama untuk tujuan ini. | Administrator AWS, Administrator cloud | 
| Pengaturan dasar: Kaitkan zona yang dihosting pribadi VPCs dengan akun lain. | Jika Anda menggunakan pengaturan dasar (lihat bagian [Arsitektur](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):Untuk mengaktifkan sumber daya di akun anggota VPCs untuk menyelesaikan catatan DNS di zona host pribadi ini, Anda harus mengaitkannya VPCs dengan zona yang dihosting. Anda harus mengotorisasi asosiasi dan kemudian membuat asosiasi secara terprogram. Untuk petunjuknya, lihat [Mengaitkan VPC Amazon dan zona host pribadi yang Anda buat dengan Akun AWS](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zone-private-associate-vpcs-different-accounts.html) berbeda dalam dokumentasi Route 53. | Administrator AWS, Administrator cloud | 
| Penyiapan yang disempurnakan: Konfigurasikan dan bagikan Profil Route 53. | Jika Anda menggunakan penyiapan yang disempurnakan (lihat bagian [Arsitektur](#set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-architecture)):[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)Bergantung pada struktur organisasi dan persyaratan DNS, Anda mungkin perlu membuat dan mengelola beberapa Profil untuk akun atau beban kerja yang berbeda. | Administrator AWS, Administrator cloud | 

### Konfigurasikan dan bagikan aturan penerusan Resolver Route 53
<a name="configure-and-share-r53r-forwarding-rules"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat aturan penerusan untuk domain yang di-host di tempat. | Aturan ini akan menginstruksikan Resolver Route 53 untuk meneruskan kueri DNS apa pun untuk domain lokal (seperti) ke resolver DNS lokal. `onprem.example.com` Untuk membuat aturan ini, Anda memerlukan alamat IP resolver DNS lokal dan ID titik akhir keluar. Untuk petunjuknya, lihat [Membuat aturan penerusan dalam dokumentasi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-creating-rules.html) Route 53. | Administrator AWS, Administrator cloud | 
| Pengaturan dasar: Bagikan dan kaitkan aturan penerusan dengan akun Anda VPCs di akun lain. | Jika Anda menggunakan pengaturan dasar:Agar aturan penerusan berlaku, Anda harus membagikan dan mengaitkan aturan tersebut dengan akun Anda VPCs di akun lain. Route 53 Resolver kemudian mempertimbangkan aturan saat menyelesaikan domain. Untuk petunjuknya, lihat [Berbagi aturan Resolver dengan aturan lain Akun AWS dan menggunakan aturan bersama serta Mengaitkan aturan](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-sharing.html) [penerusan dengan VPC dalam](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-rules-managing-associating-rules.html) dokumentasi Route 53. | Administrator AWS, Administrator cloud | 
| Penyiapan yang disempurnakan: Konfigurasikan dan bagikan Profil Route 53. | Jika Anda menggunakan pengaturan yang disempurnakan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment.html)Bergantung pada struktur organisasi dan persyaratan DNS, Anda mungkin perlu membuat dan mengelola beberapa Profil untuk akun atau beban kerja yang berbeda. | Administrator AWS, Administrator cloud | 

### Konfigurasikan resolver DNS lokal untuk integrasi AWS
<a name="configure-on-premises-dns-resolvers-for-aws-integration"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
|  Konfigurasikan penerusan bersyarat di resolver DNS lokal. | Agar kueri DNS dikirim AWS dari lingkungan lokal untuk resolusi, Anda harus mengonfigurasi penerusan bersyarat di resolver DNS lokal untuk menunjuk ke alamat IP titik akhir masuk. Ini menginstruksikan resolver DNS untuk meneruskan semua kueri DNS untuk domain AWS-host (misalnya, untuk`prod.aws.example.com`) ke alamat IP titik akhir masuk untuk resolusi oleh Route 53 Resolver.  | Administrator jaringan | 

### Verifikasi resolusi end-to-end DNS di lingkungan hybrid
<a name="verify-end-to-end-dns-resolution-in-a-hybrid-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji resolusi DNS dari AWS ke lingkungan lokal. | Dari instance di VPC yang memiliki aturan penerusan yang terkait dengannya, lakukan kueri DNS untuk domain host lokal (misalnya, untuk). `db.onprem.example.com` | Administrator jaringan | 
| Uji resolusi DNS dari lingkungan lokal ke. AWS | Dari server lokal, lakukan resolusi DNS untuk domain AWS-host (misalnya, untuk). `ec2.prod.aws.example.com` | Administrator jaringan | 

## Sumber daya terkait
<a name="set-up-dns-resolution-for-hybrid-networks-in-a-multi-account-aws-environment-resources"></a>
+ [Opsi DNS Cloud Hybrid untuk Amazon VPC](https://docs.aws.amazon.com/whitepapers/latest/hybrid-cloud-dns-options-for-vpc/hybrid-cloud-dns-options-for-vpc.html)AWS (whitepaper)
+ [Bekerja dengan zona host pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) (dokumentasi Route 53)
+ [Memulai dengan Resolver Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-getting-started.html) (Dokumentasi Route 53)
+ [Sederhanakan manajemen DNS di lingkungan multi-akun dengan Route 53 Resolver](https://aws.amazon.com/blogs/security/simplify-dns-management-in-a-multiaccount-environment-with-route-53-resolver/) (posting blog)AWS 
+ [Menyatukan manajemen DNS menggunakan Profil Amazon Route 53 dengan beberapa VPCs dan Akun AWS](https://aws.amazon.com/blogs/aws/unify-dns-management-using-amazon-route-53-profiles-with-multiple-vpcs-and-aws-accounts/) (AWS posting blog)
+ [Memigrasi lingkungan DNS multi-akun Anda ke Profil Amazon Route 53 (posting blog](https://aws.amazon.com/blogs/networking-and-content-delivery/migrating-your-multi-account-dns-environment-to-amazon-route-53-profiles/))AWS 
+ [Menggunakan Profil Amazon Route 53 untuk AWS lingkungan multi-akun yang dapat diskalakan](https://aws.amazon.com/blogs/networking-and-content-delivery/using-amazon-route-53-profiles-for-scalable-multi-account-aws-environments/) (AWS posting blog)

 

# Verifikasi bahwa penyeimbang beban ELB memerlukan penghentian TLS
<a name="verify-that-elb-load-balancers-require-tls-termination"></a>

*Priyanka Chaudhary, Amazon Web Services*

## Ringkasan
<a name="verify-that-elb-load-balancers-require-tls-termination-summary"></a>

Di Amazon Web Services (AWS) Cloud, Elastic Load Balancing (ELB) secara otomatis mendistribusikan lalu lintas aplikasi yang masuk ke beberapa target, seperti instans Amazon Elastic Compute Cloud (Amazon EC2), container, alamat IP, dan fungsi AWS Lambda. Load balancer menggunakan pendengar untuk menentukan port dan protokol yang digunakan penyeimbang beban untuk menerima lalu lintas dari pengguna. Application Load Balancers membuat keputusan routing di lapisan aplikasi dan menggunakan protokol. HTTP/HTTPS Classic Load Balancer membuat keputusan routing baik pada layer transport, dengan menggunakan protokol TCP atau Secure Sockets Layer (SSL), atau pada layer aplikasi, dengan menggunakan HTTP/HTTPS.

Pola ini menyediakan kontrol keamanan yang memeriksa beberapa jenis peristiwa untuk Application Load Balancers dan Classic Load Balancers. Saat fungsi dipanggil, AWS Lambda memeriksa peristiwa dan memastikan bahwa penyeimbang beban sesuai.

Fungsi ini memulai CloudWatch peristiwa Amazon Events pada panggilan API berikut: [CreateLoadBalancer](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancer.html), [CreateLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerListeners.html), [DeleteLoadBalancerListeners](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_DeleteLoadBalancerListeners.html), [CreateLoadBalancerPolicy](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_CreateLoadBalancerPolicy.html), [SetLoadBalancerPoliciesOfListener](https://docs.aws.amazon.com/elasticloadbalancing/2012-06-01/APIReference/API_SetLoadBalancerPoliciesOfListener.html), [CreateListener[DeleteListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DeleteListener.html)](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateListener.html), dan [ModifyListener](https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_ModifyListener.html). Ketika acara mendeteksi salah satunya APIs, ia memanggil AWS Lambda, yang menjalankan skrip Python. Skrip Python mengevaluasi untuk melihat apakah listener berisi sertifikat SSL, dan apakah kebijakan yang diterapkan menggunakan Transport Layer Security (TLS). Jika kebijakan SSL ditentukan sebagai apa pun selain TLS, fungsi akan mengirimkan notifikasi Amazon Simple Notification Service (Amazon SNS) kepada pengguna dengan informasi yang relevan. 

## Prasyarat dan batasan
<a name="verify-that-elb-load-balancers-require-tls-termination-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif

**Batasan**
+ Kontrol keamanan ini tidak memeriksa penyeimbang beban yang ada, kecuali pembaruan dilakukan untuk pendengar penyeimbang beban.
+ Kontrol keamanan ini bersifat regional. Anda harus menerapkannya di setiap Wilayah AWS yang ingin Anda pantau.

## Arsitektur
<a name="verify-that-elb-load-balancers-require-tls-termination-architecture"></a>

**Arsitektur target**

![\[Memastikan bahwa penyeimbang beban memerlukan penghentian TLS.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/da99cda2-ac34-4791-a2bd-d37264d8d3d9/images/af92b3c8-32bb-45eb-a2a8-d8276fb3e824.png)


**Otomatisasi dan skala**
+ Jika Anda menggunakan [AWS Organizations](https://aws.amazon.com/organizations/), Anda dapat menggunakan [AWS Cloudformation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) untuk menerapkan template ini di beberapa akun yang ingin Anda pantau.

## Alat
<a name="verify-that-elb-load-balancers-require-tls-termination-tools"></a>

**Layanan AWS**
+ [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.
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html) — Amazon CloudWatch Events menghadirkan aliran peristiwa sistem yang mendekati real-time yang menjelaskan perubahan sumber daya AWS.
+ [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.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) - Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek yang sangat skalabel yang dapat digunakan untuk berbagai solusi penyimpanan, termasuk situs web, aplikasi seluler, cadangan, dan danau data.
+ [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 topik menerima pesan yang sama.

**Kode**

Pola ini mencakup lampiran berikut:
+ `ELBRequirestlstermination.zip`— Kode Lambda untuk kontrol keamanan.
+ `ELBRequirestlstermination.yml`— CloudFormation Template yang mengatur acara dan fungsi Lambda.

## Epik
<a name="verify-that-elb-load-balancers-require-tls-termination-epics"></a>

### Siapkan ember S3
<a name="set-up-the-s3-bucket"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Tentukan bucket S3. | Di [konsol Amazon S3](https://console.aws.amazon.com/s3/), pilih atau buat bucket S3 untuk meng-host file kode Lambda .zip. Bucket S3 ini harus berada di Wilayah AWS yang sama dengan penyeimbang beban yang ingin Anda evaluasi. Nama bucket S3 unik secara global, dan namespace dibagikan oleh semua akun AWS. Nama bucket S3 tidak dapat menyertakan garis miring terdepan. | Arsitek awan | 
| Unggah kode Lambda. | Unggah kode Lambda (`ELBRequirestlstermination.zip`file) yang disediakan di bagian *Lampiran* ke bucket S3. | Arsitek awan | 

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


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Luncurkan CloudFormation template AWS. | Buka [ CloudFormation konsol AWS](https://console.aws.amazon.com/cloudformation/) di Wilayah AWS yang sama dengan bucket S3 Anda dan terapkan template terlampir. `ELBRequirestlstermination.yml` Untuk informasi selengkapnya tentang penerapan CloudFormation templat AWS, lihat [Membuat tumpukan di CloudFormation konsol AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dalam CloudFormation dokumentasi. | Arsitek awan | 
| Lengkapi parameter dalam template. | Ketika Anda meluncurkan template, Anda akan diminta untuk informasi berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/verify-that-elb-load-balancers-require-tls-termination.html) | Arsitek awan | 

### Konfirmasi langganan.
<a name="confirm-the-subscription"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfirmasi langganan. | Ketika CloudFormation template berhasil digunakan, ia mengirimkan email berlangganan ke alamat email yang Anda berikan. Anda harus mengonfirmasi langganan email ini untuk mulai menerima pemberitahuan pelanggaran. | Arsitek awan | 

## Sumber daya terkait
<a name="verify-that-elb-load-balancers-require-tls-termination-resources"></a>
+ [Membuat tumpukan di CloudFormation konsol AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) ( CloudFormation dokumentasi AWS)
+ [Apa itu AWS Lambda?](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) (Dokumentasi AWS Lambda)
+ [Apa itu Classic Load Balancer?](https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html) (Dokumentasi ELB)
+ [Apa itu Penyeimbang Beban Aplikasi?](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) (Dokumentasi ELB)

## Lampiran
<a name="attachments-da99cda2-ac34-4791-a2bd-d37264d8d3d9"></a>

[Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip](samples/p-attach/da99cda2-ac34-4791-a2bd-d37264d8d3d9/attachments/attachment.zip)

# Lihat log dan metrik AWS Network Firewall dengan menggunakan Splunk
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk"></a>

*Ivo Pinto, Amazon Web Services*

## Ringkasan
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-summary"></a>

Banyak organisasi menggunakan [Splunk Enterprise](https://www.splunk.com/en_us/products/splunk-enterprise.html) sebagai alat agregasi dan visualisasi terpusat untuk log dan metrik dari berbagai sumber. Pola ini membantu Anda mengonfigurasi Splunk untuk mengambil log dan metrik [AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) dari [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) dengan menggunakan Splunk Add-On untuk AWS. 

Untuk mencapai hal ini, Anda membuat peran AWS Identity and Access Management (IAM) read-only. Splunk Add-On untuk AWS menggunakan peran ini untuk mengakses. CloudWatch Anda mengonfigurasi Add-On Splunk untuk AWS untuk mengambil metrik dan log. CloudWatch Terakhir, Anda membuat visualisasi di Splunk dari data log dan metrik yang diambil.

## Prasyarat dan batasan
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-prereqs"></a>

**Prasyarat**
+ Akun [Splunk](https://www.splunk.com/)
+ Instans Splunk Enterprise, versi 8.2.2 atau yang lebih baru 
+ Akun AWS yang aktif
+ Network Firewall, [atur](https://docs.aws.amazon.com/network-firewall/latest/developerguide/getting-started.html) dan [konfigurasi](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-cw-logs.html) untuk mengirim log ke CloudWatch Log

**Batasan**
+ Splunk Enterprise harus digunakan sebagai klaster instans Amazon Elastic Compute Cloud (Amazon EC2) di AWS Cloud.
+ Mengumpulkan data dengan menggunakan peran IAM yang ditemukan secara otomatis untuk Amazon EC2 tidak didukung di Wilayah AWS China.

## Arsitektur
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-architecture"></a>

![\[AWS Network Firewall dan arsitektur logging Splunk\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/c6ce254a-841f-4bed-8f9f-b35e99f22e56/images/3dd420e9-70af-4a42-b24d-c54872c55e0b.png)


Diagram ini menggambarkan hal sebagai berikut:

1. Network Firewall menerbitkan log ke CloudWatch Log.

1. Splunk Enterprise mengambil metrik dan log dari. CloudWatch

Untuk mengisi contoh metrik dan log dalam arsitektur ini, beban kerja menghasilkan lalu lintas yang melewati titik akhir Network Firewall untuk masuk ke internet. Ini dicapai dengan menggunakan [tabel rute](https://docs.aws.amazon.com/network-firewall/latest/developerguide/vpc-config.html#vpc-config-route-tables). Meskipun pola ini menggunakan satu instans Amazon EC2 sebagai beban kerja, pola ini dapat diterapkan ke arsitektur apa pun selama Network Firewall dikonfigurasi untuk mengirim log ke Log. CloudWatch 

Arsitektur ini juga menggunakan instance Splunk Enterprise di virtual private cloud (VPC) lainnya. Namun, instance Splunk dapat berada di lokasi lain, seperti di VPC yang sama dengan beban kerja, selama dapat mencapai. CloudWatch APIs

## Alat
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-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, dan layanan AWS sehingga Anda dapat memantau dan mengarsipkannya dengan aman.
+ [Amazon Elastic Compute Cloud (Amazon EC2) menyediakan kapasitas](https://docs.aws.amazon.com/ec2/) 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 Network Firewall adalah firewall jaringan](https://docs.aws.amazon.com/network-firewall/latest/developerguide/what-is-aws-network-firewall.html) yang stateful, dikelola, dan layanan deteksi dan pencegahan intrusi untuk AWS Cloud VPCs .

**Alat lainnya**
+ [Splunk](https://www.splunk.com/) membantu Anda memantau, memvisualisasikan, dan menganalisis data log.

## Epik
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-epics"></a>

### Membuat peran IAM
<a name="create-an-iam-role"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat kebijakan IAM. | Ikuti petunjuk dalam [Membuat kebijakan menggunakan editor JSON](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor) untuk membuat kebijakan IAM yang memberikan akses hanya-baca ke data dan metrik Log. CloudWatch CloudWatch Tempelkan kebijakan berikut ke editor JSON.<pre>{<br />    "Statement": [<br />        {<br />            "Action": [<br />                "cloudwatch:List*",<br />                "cloudwatch:Get*",<br />                "network-firewall:List*",<br />                "logs:Describe*",<br />                "logs:Get*",<br />                "logs:List*",<br />                "logs:StartQuery",<br />                "logs:StopQuery",<br />                "logs:TestMetricFilter",<br />                "logs:FilterLogEvents",<br />                "network-firewall:Describe*"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": "*"<br />        }<br />    ],<br />    "Version": "2012-10-17"<br />}</pre> | Administrator AWS | 
| Buat peran IAM baru. | Ikuti petunjuk dalam [Membuat peran untuk mendelegasikan izin ke layanan AWS guna](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) membuat peran IAM yang digunakan oleh Add-On Splunk untuk AWS. CloudWatch Untuk **kebijakan Izin**, pilih kebijakan yang Anda buat sebelumnya. | Administrator AWS | 
| Tetapkan peran IAM ke instans EC2 di cluster Splunk. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrator AWS | 

### Instal Add-On Splunk untuk AWS
<a name="install-the-splunk-add-on-for-aws"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal add-on. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrator splunk | 
| Konfigurasikan kredenal AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Untuk informasi selengkapnya, lihat [Menemukan peran IAM dalam instans platform Splunk Anda dalam dokumentasi](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Find_an_IAM_role_within_your_Splunk_platform_instance) Splunk. | Administrator splunk | 

### Konfigurasikan akses Splunk ke CloudWatch
<a name="configure-splunk-access-to-cloudwatch"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan pengambilan log Network Firewall dari CloudWatch Log. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Secara default, Splunk mengambil data log setiap 10 menit. Ini adalah parameter yang dapat dikonfigurasi di bawah **Pengaturan Lanjutan**. Untuk informasi selengkapnya, lihat [Mengkonfigurasi input CloudWatch Log menggunakan Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_Logs_input_using_Splunk_Web) dalam dokumentasi Splunk. | Administrator splunk | 
| Konfigurasikan pengambilan metrik Network Firewall dari. CloudWatch | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html)Secara default, Splunk mengambil data metrik setiap 5 menit. Ini adalah parameter yang dapat dikonfigurasi di bawah **Pengaturan Lanjutan**. Untuk informasi selengkapnya, lihat [Mengkonfigurasi CloudWatch input menggunakan Splunk Web](https://splunk.github.io/splunk-add-on-for-amazon-web-services/#Configure_a_CloudWatch_input_using_Splunk_Web) dalam dokumentasi Splunk. | Administrator splunk | 

### Buat visualisasi Splunk dengan menggunakan kueri
<a name="create-splunk-visualizations-by-using-queries"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Lihat alamat IP sumber teratas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrator splunk | 
| Lihat statistik paket. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrator splunk | 
| Lihat port sumber yang paling banyak digunakan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/view-aws-network-firewall-logs-and-metrics-by-using-splunk.html) | Administrator splunk | 

## Sumber daya terkait
<a name="view-aws-network-firewall-logs-and-metrics-by-using-splunk-resources"></a>

**Dokumentasi AWS**
+ [Membuat peran untuk mendelegasikan izin ke layanan AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) (dokumentasi IAM)
+ [Membuat kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start) (dokumentasi IAM)
+ [Pencatatan dan pemantauan di AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/logging-monitoring.html) (dokumentasi Network Firewall)
+ [Konfigurasi tabel rute untuk AWS Network Firewall](https://docs.aws.amazon.com/network-firewall/latest/developerguide/route-tables.html) (dokumentasi Network Firewall)

**Posting blog AWS**
+ [Model penerapan AWS Network Firewall](https://aws.amazon.com/pt/blogs/networking-and-content-delivery/deployment-models-for-aws-network-firewall/)

**AWS Marketplace**
+ [Gambar Mesin Amazon Splunk Enterprise (AMI)](https://aws.amazon.com/marketplace/pp/prodview-l6oos72bsyaks)

# Lebih banyak pola
<a name="networking-more-patterns-pattern-list"></a>

**Topics**
+ [Akses host bastion menggunakan Session Manager dan Amazon EC2 Instance Connect](access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.md)
+ [Akses aplikasi kontainer secara pribadi di Amazon ECS dengan menggunakan AWS Fargate, PrivateLink AWS, dan Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-fargate-aws-privatelink-and-a-network-load-balancer.md)
+ [Akses aplikasi kontainer secara pribadi di Amazon ECS dengan menggunakan AWS PrivateLink dan Network Load Balancer](access-container-applications-privately-on-amazon-ecs-by-using-aws-privatelink-and-a-network-load-balancer.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)
+ [Buat portal untuk frontend mikro dengan menggunakan AWS Amplify, Angular, dan Federasi Modul](create-amplify-micro-frontend-portal.md)
+ [Menerapkan API Amazon API Gateway di situs web internal menggunakan endpoint pribadi dan Application Load Balancer](deploy-an-amazon-api-gateway-api-on-an-internal-website-using-private-endpoints-and-an-application-load-balancer.md)
+ [Menyebarkan kontrol akses berbasis atribut detektif untuk subnet publik dengan menggunakan AWS Config](deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.md)
+ [Menyebarkan kontrol akses berbasis atribut preventif untuk subnet publik](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Aktifkan koneksi terenkripsi untuk instans PostgreSQL DB di Amazon RDS](enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.md)
+ [Memperluas VRFs ke AWS dengan menggunakan AWS Transit Gateway Connect](extend-vrfs-to-aws-by-using-aws-transit-gateway-connect.md)
+ [Migrasikan beban kerja F5 BIG-IP ke F5 BIG-IP VE di AWS Cloud](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.md)
+ [Migrasikan Pengontrol Ingress NGINX saat mengaktifkan Mode Otomatis Amazon EKS](migrate-nginx-ingress-controller-eks-auto-mode.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)
+ [Mencegah akses internet di tingkat akun dengan menggunakan kebijakan kontrol layanan](prevent-internet-access-at-the-account-level-by-using-a-service-control-policy.md)
+ [Kirim peringatan dari AWS Network Firewall ke saluran Slack](send-alerts-from-aws-network-firewall-to-a-slack-channel.md)
+ [Sajikan konten statis dalam bucket Amazon S3 melalui VPC dengan menggunakan Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Siapkan pemulihan bencana untuk Oracle JD Edwards dengan EnterpriseOne AWS Elastic Disaster Recovery](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [Gunakan kueri BMC Discovery untuk mengekstrak data migrasi untuk perencanaan migrasi](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.md)
+ [Gunakan Network Firewall untuk menangkap nama domain DNS dari Indikasi Nama Server untuk lalu lintas keluar](use-network-firewall-to-capture-the-dns-domain-names-from-the-server-name-indication-sni-for-outbound-traffic.md)

# Pengiriman konten
<a name="contentdelivery-pattern-list"></a>

**Topics**
+ [Kirim AWS WAF log ke Splunk dengan menggunakan AWS Firewall Manager dan Amazon Data Firehose](send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.md)
+ [Sajikan konten statis dalam bucket Amazon S3 melalui VPC dengan menggunakan Amazon CloudFront](serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.md)
+ [Lebih banyak pola](contentdelivery-more-patterns-pattern-list.md)

# Kirim AWS WAF log ke Splunk dengan menggunakan AWS Firewall Manager dan Amazon Data Firehose
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose"></a>

*Michael Friedenthal, Aman Kaur Gandhi, dan JJ Johnson, Amazon Web Services*

## Ringkasan
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-summary"></a>

Secara historis, ada dua cara untuk memindahkan data ke Splunk: arsitektur push atau pull. *Arsitektur pull* menawarkan jaminan data pengiriman melalui percobaan ulang, tetapi membutuhkan sumber daya khusus di Splunk data jajak pendapat tersebut. Arsitektur pull biasanya tidak real time karena polling. *Arsitektur push* biasanya memiliki latensi yang lebih rendah, lebih terukur, dan mengurangi kompleksitas dan biaya operasional. Namun, itu tidak menjamin pengiriman dan biasanya membutuhkan agen.

Integrasi splunk dengan Amazon Data Firehose memberikan data streaming real-time ke Splunk melalui HTTP event collector (HEC). Integrasi ini memberikan keuntungan dari arsitektur push dan pull — ini menjamin pengiriman data melalui percobaan ulang, mendekati waktu nyata, dan latensi rendah dan kompleksitas rendah. HEC dengan cepat dan efisien mengirimkan data melalui HTTP atau HTTPS langsung ke Splunk. HECs berbasis token, yang menghilangkan kebutuhan untuk hardcode kredensil dalam aplikasi atau dalam file pendukung.

Dalam AWS Firewall Manager kebijakan, Anda dapat mengonfigurasi pencatatan untuk semua lalu lintas ACL AWS WAF web di semua akun, dan kemudian Anda dapat menggunakan aliran pengiriman Firehose untuk mengirim data log tersebut ke Splunk untuk pemantauan, visualisasi, dan analisis. Solusi ini memberikan manfaat sebagai berikut:
+ Manajemen pusat dan pencatatan untuk lalu lintas ACL AWS WAF web di semua akun Anda
+ Integrasi splunk dengan satu Akun AWS
+ Skalabilitas
+ Mendekati pengiriman data log secara real-time
+ Optimalisasi biaya melalui penggunaan solusi tanpa server, sehingga Anda tidak perlu membayar sumber daya yang tidak digunakan.

## Prasyarat dan batasan
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS yang merupakan bagian dari organisasi di AWS Organizations.
+ Anda harus memiliki izin berikut untuk mengaktifkan logging dengan Firehose:
  + `iam:CreateServiceLinkedRole`
  + `firehose:ListDeliveryStreams`
  + `wafv2:PutLoggingConfiguration`
+ AWS WAF dan webnya ACLs harus dikonfigurasi. Untuk petunjuk, lihat [Memulai dengan AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html).
+ AWS Firewall Manager harus setup. Untuk instruksi, lihat [AWS Firewall Manager prasyarat](https://docs.aws.amazon.com/waf/latest/developerguide/fms-prereq.html).
+ Kebijakan keamanan Firewall Manager untuk AWS WAF harus dikonfigurasi. Untuk petunjuk, lihat [Memulai AWS Firewall ManagerAWS WAF kebijakan](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html).
+ Splunk harus diatur dengan titik akhir HTTP publik yang dapat dijangkau oleh Firehose.

**Batasan**
+  Akun AWS Harus dikelola dalam satu organisasi di AWS Organizations.
+ ACL web harus berada di Wilayah yang sama dengan aliran pengiriman. Jika Anda menangkap log untuk Amazon CloudFront, buat aliran pengiriman Firehose di Wilayah AS Timur (Virginia N.),. `us-east-1`
+ Add-on Splunk untuk Firehose tersedia untuk penerapan Splunk Cloud berbayar, penerapan Splunk Enterprise terdistribusi, dan penerapan Splunk Enterprise satu instance. Add-on ini tidak didukung untuk penerapan Splunk Cloud uji coba gratis.

## Arsitektur
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-architecture"></a>

**Tumpukan teknologi target**
+ Firewall Manager
+ Firehouse
+ Amazon Simple Storage Service (Amazon S3)
+ AWS WAF
+ Splunk

**Arsitektur target**

Gambar berikut menunjukkan bagaimana Anda dapat menggunakan Firewall Manager untuk mencatat semua AWS WAF data secara terpusat dan mengirimkannya ke Splunk melalui Firehose.

![\[Diagram arsitektur yang menunjukkan pengiriman data log AWS WAF ke Splunk melalui Amazon Data Firehose\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/3dfeaae0-985a-42b8-91c4-ece081f0b51b/images/669169b1-caa4-419b-9988-19806ded54eb.png)


1.  AWS WAF Web ACLs mengirim data log firewall ke Firewall Manager.

1. Firewall Manager mengirimkan data log ke Firehose.

1. Aliran pengiriman Firehose meneruskan data log ke Splunk dan ke bucket S3. Bucket S3 bertindak sebagai cadangan jika terjadi kesalahan dengan aliran pengiriman Firehose.

**Otomatisasi dan skala**

Solusi ini dirancang untuk skala dan mengakomodasi semua AWS WAF web ALCs dalam organisasi. Anda dapat mengonfigurasi semua web ACLs untuk menggunakan instance Firehose yang sama. Namun, jika Anda ingin mengatur dan menggunakan beberapa instance Firehose, Anda bisa.

## Alat
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-tools"></a>

**Layanan AWS**
+ [AWS Firewall Manager](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html)adalah layanan manajemen keamanan yang membantu Anda mengonfigurasi dan mengelola aturan firewall secara terpusat di seluruh akun dan aplikasi Anda. AWS Organizations
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) membantu Anda mengirimkan [data streaming](https://aws.amazon.com/streaming-data/) real-time ke titik akhir HTTP kustom lainnya Layanan AWS, dan titik akhir HTTP yang dimiliki oleh penyedia layanan pihak ketiga yang didukung, seperti Splunk.
+ [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 WAF](https://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html)adalah firewall aplikasi web yang membantu Anda memantau permintaan HTTP dan HTTPS yang diteruskan ke sumber daya aplikasi web Anda yang dilindungi.

**Alat-alat lainnya**
+ [Splunk](https://docs.splunk.com/Documentation) membantu Anda memantau, memvisualisasikan, dan menganalisis data log.

## Epik
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-epics"></a>

### Konfigurasikan Splunk
<a name="configure-splunk"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Instal Aplikasi Splunk untuk AWS. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrator keamanan, administrator Splunk | 
| Instal add-on untuk AWS WAF. | Ulangi instruksi sebelumnya untuk menginstal **Add-on Firewall Aplikasi AWS Web** untuk Splunk. | Administrator keamanan, administrator Splunk | 
| Instal dan konfigurasikan add-on Splunk untuk Firehose. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html) | Administrator keamanan, administrator Splunk | 

### Buat aliran pengiriman Firehose
<a name="create-the-akf-delivery-stream"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Berikan akses Firehose ke tujuan Splunk. | Konfigurasikan kebijakan akses yang mengizinkan Firehose mengakses tujuan Splunk dan mencadangkan data log ke bucket S3. Untuk informasi selengkapnya, lihat [Grant Firehose akses ke tujuan Splunk](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#using-iam-splunk). | Administrator keamanan | 
| Buat aliran pengiriman Firehose. | Di akun yang sama tempat Anda mengelola web AWS WAF, ACLs buat aliran pengiriman di Firehose. Anda harus memiliki IAM role saat membuat aliran pengiriman. Firehose mengasumsikan bahwa IAM berperan dan mendapatkan akses ke bucket S3 yang ditentukan. Untuk petunjuknya, lihat [Membuat aliran pengiriman](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html). Perhatikan hal-hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose.html)Ulangi proses ini untuk setiap token yang Anda konfigurasikan di kolektor acara HTTP. | Administrator keamanan | 
| Uji aliran pengiriman. | Uji aliran pengiriman untuk memvalidasi bahwa itu dikonfigurasi dengan benar. Untuk petunjuk, lihat [Menguji menggunakan Splunk sebagai tujuan](https://docs.aws.amazon.com/firehose/latest/dev/test-drive-firehose.html#test-drive-destination-splunk) dalam dokumentasi Firehose. | Administrator keamanan | 

### Konfigurasikan Firewall Manager untuk mencatat data
<a name="configure-firewall-manager-to-log-data"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan kebijakan Firewall Manager. | Kebijakan Firewall Manager harus dikonfigurasi untuk mengaktifkan logging dan meneruskan log ke aliran pengiriman Firehose yang benar. Untuk informasi dan petunjuk selengkapnya, lihat [Mengonfigurasi pencatatan untuk AWS WAF kebijakan](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config). | Administrator keamanan | 

## Sumber daya terkait
<a name="send-aws-waf-logs-to-splunk-by-using-aws-firewall-manager-and-amazon-data-firehose-resources"></a>

**AWS sumber daya**
+ [Logging lalu lintas ACL web](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) (AWS WAF dokumentasi)
+ [Mengkonfigurasi pencatatan untuk AWS WAF kebijakan](https://docs.aws.amazon.com/waf/latest/developerguide/waf-policies.html#waf-policies-logging-config) (AWS WAF dokumentasi)
+ [Tutorial: Mengirim Log Aliran VPC ke Splunk Menggunakan Amazon Data Firehose (dokumentasi Firehose](https://docs.aws.amazon.com/firehose/latest/dev/vpc-splunk-tutorial.html))
+ [Bagaimana cara mendorong log aliran VPC ke Splunk menggunakan Amazon Data Firehose?](https://aws.amazon.com/premiumsupport/knowledge-center/push-flow-logs-splunk-firehose/) (Pusat AWS Pengetahuan)
+ [Daya konsumsi data ke Splunk menggunakan Amazon Data Firehose](https://aws.amazon.com/blogs/big-data/power-data-ingestion-into-splunk-using-amazon-kinesis-data-firehose/) (posting blog)AWS 

**Dokumentasi splunk**
+ [Pengaya Splunk untuk Amazon Data Firehose](https://docs.splunk.com/Documentation/AddOns/released/Firehose/About)

# Sajikan konten statis dalam bucket Amazon S3 melalui VPC dengan menggunakan Amazon CloudFront
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront"></a>

*Malaikat Emmanuel Hernandez Cebrian, Amazon Web Services*

## Ringkasan
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-summary"></a>

Saat Anda menayangkan konten statis yang di-host di Amazon Web Services (AWS), pendekatan yang disarankan adalah menggunakan bucket Amazon Simple Storage Service (S3) Amazon Simple Storage Service (S3) sebagai asal dan menggunakan Amazon CloudFront untuk mendistribusikan konten. Solusi ini memiliki dua manfaat utama: kenyamanan caching konten statis di lokasi tepi, dan kemampuan untuk menentukan [daftar kontrol akses web](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) (web ACLs) untuk CloudFront distribusi, yang membantu Anda mengamankan permintaan ke konten dengan konfigurasi minimal dan overhead administratif.

Namun, ada batasan arsitektur umum untuk standar, pendekatan yang direkomendasikan. Di beberapa lingkungan, Anda ingin peralatan firewall virtual digunakan di cloud pribadi virtual (VPC) untuk memeriksa semua konten, termasuk konten statis. Pendekatan standar tidak merutekan lalu lintas melalui VPC untuk diperiksa. Pola ini memberikan solusi arsitektur alternatif. Anda masih menggunakan CloudFront distribusi untuk menyajikan konten statis dalam bucket S3, tetapi lalu lintas dirutekan melalui VPC dengan menggunakan Application Load Balancer. Fungsi AWS Lambda kemudian mengambil dan mengembalikan konten dari bucket S3.

## Prasyarat dan batasan
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-prereqs"></a>

**Prasyarat**
+ Akun AWS aktif.
+ Konten situs web statis yang dihosting di bucket S3.

**Batasan**
+ Sumber daya dalam pola ini harus dalam satu Wilayah AWS, tetapi dapat disediakan di akun AWS yang berbeda.
+ Batas berlaku untuk ukuran permintaan dan respons maksimum yang dapat diterima dan dikirim oleh fungsi Lambda. Untuk informasi selengkapnya, lihat *Batas* dalam [fungsi Lambda sebagai target](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (dokumentasi Elastic Load Balancing).
+ Penting untuk menemukan keseimbangan yang baik antara kinerja, skalabilitas, keamanan, dan efektivitas biaya saat menggunakan pendekatan ini. Meskipun skalabilitas Lambda tinggi, jika jumlah pemanggilan Lambda bersamaan melebihi kuota maksimum, beberapa permintaan dibatasi. Untuk informasi selengkapnya, lihat Kuota Lambda (dokumentasi Lambda). Anda juga perlu mempertimbangkan harga saat menggunakan Lambda. Untuk meminimalkan pemanggilan Lambda, pastikan Anda menentukan cache untuk distribusi dengan benar. CloudFront Untuk informasi selengkapnya, lihat [Mengoptimalkan caching dan ketersediaan](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html) (CloudFront dokumentasi).

## Arsitektur
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-architecture"></a>

**Tumpukan teknologi target**
+ CloudFront
+ Amazon Virtual Private Cloud (Amazon VPC)
+ Penyeimbang Beban Aplikasi
+ Lambda
+ Amazon S3

**Arsitektur target**

Gambar berikut menunjukkan arsitektur yang disarankan saat Anda perlu menggunakan CloudFront untuk menyajikan konten statis dari bucket S3 melalui VPC.

![\[Arus lalu lintas melalui Application Load Balancers di VPC ke fungsi Lambda.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e0dd6928-4fe0-47ab-954f-9de5563349d8/images/b42c7dd9-4a72-4998-bf88-195c8f90ed3e.png)


1. Klien meminta URL CloudFront distribusi untuk mendapatkan file situs web tertentu di bucket S3.

1. CloudFront mengirimkan permintaan ke AWS WAF. AWS WAF memfilter permintaan dengan menggunakan web yang ACLs diterapkan pada distribusi. CloudFront Jika permintaan ditentukan valid, aliran berlanjut. Jika permintaan ditentukan tidak valid, klien menerima kesalahan 403.

1. CloudFront memeriksa cache internalnya. Jika ada kunci yang valid yang cocok dengan permintaan yang masuk, nilai terkait dikirim kembali ke klien sebagai respons. Jika tidak, aliran terus berlanjut.

1. CloudFront meneruskan permintaan ke URL Application Load Balancer yang ditentukan.

1. Application Load Balancer memiliki pendengar yang terkait dengan grup target berdasarkan fungsi Lambda. Application Load Balancer memanggil fungsi Lambda.

1. Fungsi Lambda terhubung ke bucket S3, melakukan `GetObject` operasi di atasnya, dan mengembalikan konten sebagai respons.

**Otomatisasi dan skala**

Untuk mengotomatiskan penyebaran konten statis menggunakan pendekatan ini, buat CI/CD pipeline untuk memperbarui bucket Amazon S3 yang meng-host situs web.

Fungsi Lambda menskalakan secara otomatis untuk menangani permintaan bersamaan, dalam kuota dan batasan layanan. Untuk informasi selengkapnya, lihat [Penskalaan fungsi Lambda dan](https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html) [kuota Lambda (dokumentasi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)). Untuk layanan dan fitur AWS lainnya, seperti CloudFront dan Application Load Balancer, AWS menskalakan ini secara otomatis.

## Alat
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-tools"></a>
+ [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.
+ [Elastic Load Balancing (ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Dalam pola ini, Anda menggunakan [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) yang disediakan melalui Elastic Load Balancing untuk mengarahkan lalu lintas ke fungsi Lambda.
+ [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.
+ [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.

## Epik
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-epics"></a>

### Gunakan CloudFront untuk menyajikan konten statis dari Amazon S3 melalui VPC
<a name="use-cloudfront-to-serve-static-content-from-amazon-s3-through-a-vpc"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat sebuah VPC. | Buat VPC untuk hosting sumber daya yang digunakan dalam pola ini, seperti Application Load Balancer dan fungsi Lambda.  Untuk petunjuk, lihat [Membuat VPC (dokumentasi](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC) Amazon VPC). | Arsitek awan | 
| Buat AWS WAF web ACL. | Buat AWS WAF web ACL. Kemudian dalam pola ini, Anda menerapkan ACL web ini ke CloudFront distribusi. Untuk petunjuk, lihat [Membuat ACL web (dokumentasi](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-creating.html) AWS WAF). | Arsitek awan | 
| Buat fungsi Lambda. | Buat fungsi Lambda yang menyajikan konten statis yang dihosting di bucket S3 sebagai situs web. Gunakan kode yang disediakan di bagian [Informasi tambahan](#serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional) dari pola ini. Sesuaikan kode untuk mengidentifikasi bucket S3 target Anda. | AWS Umum | 
| Unggah fungsi Lambda. | Masukkan perintah berikut untuk mengunggah kode fungsi Lambda ke arsip file.zip di Lambda.<pre>aws lambda update-function-code \<br />--function-name  \ <br />--zip-file fileb://lambda-alb-s3-website.zip</pre> | AWS Umum | 
| Buat Application Load Balancer. | Buat Application Load Balancer yang menghadap ke internet yang menunjuk ke fungsi Lambda. Untuk petunjuk, lihat [Membuat grup target untuk fungsi Lambda](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#register-lambda-function) (dokumentasi Elastic Load Balancing). Untuk konfigurasi ketersediaan tinggi, buat Application Load Balancer dan pasang ke subnet pribadi di Availability Zone yang berbeda. | Arsitek awan | 
| Buat CloudFront distribusi. | Buat CloudFront distribusi yang menunjuk ke Application Load Balancer yang Anda buat.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront.html) | Arsitek awan | 

## Sumber daya terkait
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-resources"></a>

**Dokumentasi AWS**
+ [Mengoptimalkan caching dan ketersediaan (dokumentasi](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ConfiguringCaching.html)) CloudFront 
+ [Lambda berfungsi sebagai target](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html) (dokumentasi Elastic Load Balancing)
+ [Kuota Lambda (dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html) Lambda)

**Situs web layanan AWS**
+ [Penyeimbang Beban Aplikasi](https://aws.amazon.com/es/elasticloadbalancing/application-load-balancer/)
+ [Lambda](https://aws.amazon.com/en/lambda/)
+ [CloudFront](https://aws.amazon.com/en/cloudfront/)
+ [Amazon S3](https://aws.amazon.com/en/s3/)
+ [AWS WAF](https://aws.amazon.com/en/waf/)
+ [Amazon VPC](https://aws.amazon.com/en/vpc/)

## Informasi tambahan
<a name="serve-static-content-in-an-amazon-s3-bucket-through-a-vpc-by-using-amazon-cloudfront-additional"></a>

**Kode**

Berikut contoh fungsi Lambda ditulis dalam Node.js. Fungsi Lambda ini bertindak sebagai server web yang melakukan `GetObject` operasi ke bucket S3 yang berisi sumber daya situs web. 

```
/**

 * This is an AWS Lambda function created for demonstration purposes.

 * It retrieves static assets from a defined Amazon S3 bucket.

 * To make the content available through a URL, use an Application Load Balancer with a Lambda integration.
 * 
 * Set the S3_BUCKET environment variable in the Lambda function definition.
 */

var AWS = require('aws-sdk');

exports.handler = function(event, context, callback) {

    var bucket = process.env.S3_BUCKET;    
    var key = event.path.replace('/', '');
    
    if (key == '') {
        key = 'index.html';
    }

    // Fetch from S3
    var s3 = new AWS.S3();
    return s3.getObject({Bucket: bucket, Key: key},
       function(err, data) {

            if (err) {
                return err;
            }

            var isBase64Encoded = false;
            var encoding = 'utf8';
            
            if (data.ContentType.indexOf('image/') > -1) {
                isBase64Encoded = true;
                encoding = 'base64'
            }
    
            var resp = {
                statusCode: 200,
                headers: {
                    'Content-Type': data.ContentType,
                },
                body: new Buffer(data.Body).toString(encoding),
                isBase64Encoded: isBase64Encoded
            };

            callback(null, resp);
        }
    );
};
```

# Lebih banyak pola
<a name="contentdelivery-more-patterns-pattern-list"></a>

**Topics**
+ [Periksa CloudFront distribusi Amazon untuk log akses, HTTPS, dan versi TLS](check-an-amazon-cloudfront-distribution-for-access-logging-https-and-tls-version.md)
+ [Menerapkan aplikasi berbasis GRPC di cluster Amazon EKS dan mengaksesnya dengan Application Load Balancer](deploy-a-grpc-based-application-on-an-amazon-eks-cluster-and-access-it-with-an-application-load-balancer.md)
+ [Menyebarkan kontrol akses berbasis atribut preventif untuk subnet publik](deploy-preventative-attribute-based-access-controls-for-public-subnets.md)
+ [Menerapkan sumber daya di AWS Wavelength Zona dengan menggunakan Terraform](deploy-resources-wavelength-zone-using-terraform.md)
+ [Terapkan Otomatisasi Keamanan untuk AWS WAF solusi dengan menggunakan Terraform](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Siapkan router sel tanpa server untuk arsitektur berbasis sel](serverless-cell-router-architecture.md)
+ [Gunakan Amazon Q Developer sebagai asisten pengkodean untuk meningkatkan produktivitas Anda](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [Lihat log dan metrik AWS Network Firewall dengan menggunakan Splunk](view-aws-network-firewall-logs-and-metrics-by-using-splunk.md)