

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

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