

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

# 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)