Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tutorial: Menggunakan SQS antrian Amazon lintas akun sebagai sumber acara
Dalam tutorial ini, Anda membuat fungsi Lambda yang menggunakan pesan dari antrian Amazon Simple Queue Service (AmazonSQS) di akun yang berbeda. AWS Tutorial ini melibatkan dua AWS akun: Akun A mengacu pada akun yang berisi fungsi Lambda Anda, dan Akun B mengacu pada akun yang berisi antrian AmazonSQS.
Prasyarat
Tutorial ini mengasumsikan bahwa Anda memiliki pengetahuan tentang operasi Lambda dan konsol Lambda dasar. Jika belum, ikuti petunjuk di Membuat fungsi Lambda dengan konsol untuk membuat fungsi Lambda pertama Anda.
Untuk menyelesaikan langkah-langkah berikut, Anda memerlukan AWS Command Line Interface (AWS CLI) versi 2. Perintah dan output yang diharapkan dicantumkan dalam blok terpisah:
aws --version
Anda akan melihat output berikut:
aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2
Untuk perintah panjang, karakter escape (\
) digunakan untuk memisahkan perintah menjadi beberapa baris.
Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.
catatan
Di Windows, beberapa CLI perintah Bash yang biasa Anda gunakan dengan Lambda (zip
seperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, instal Windows Subsystem untuk
Buat peran eksekusi (Akun A)
Di Akun A, buat peran eksekusi yang memberikan izin fungsi Anda untuk mengakses AWS sumber daya yang diperlukan.
Untuk membuat peran eksekusi
-
Buka halaman Peran
di konsol AWS Identity and Access Management (IAM). -
Pilih Buat peran.
-
Buat peran dengan properti berikut.
-
Entitas tepercaya - AWS Lambda
-
Izin - AWSLambdaSQSQueueExecutionRole
-
Nama peran –
cross-account-lambda-sqs-role
-
AWSLambdaSQSQueueExecutionRoleKebijakan ini memiliki izin yang diperlukan fungsi untuk membaca item dari Amazon SQS dan menulis log ke Amazon CloudWatch Logs.
Buat fungsi (Akun A)
Di Akun A, buat fungsi Lambda yang memproses pesan Amazon SQS Anda. Fungsi Lambda dan SQS antrian Amazon harus sama. Wilayah AWS
Contoh kode Node.js 18 berikut menulis setiap pesan ke log in CloudWatch Log.
contoh index.mjs
export const handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }
Untuk membuat fungsi
catatan
Mengikuti langkah-langkah ini menciptakan fungsi di Node.js 18. Untuk bahasa lain, langkah-langkahnya serupa, tetapi beberapa detailnya berbeda.
-
Simpan contoh kode sebagai file bernama
index.mjs
. -
Buat paket deployment.
zip function.zip index.mjs
-
Buat fungsi menggunakan perintah
create-function
AWS Command Line Interface (AWS CLI).aws lambda create-function --function-name CrossAccountSQSExample \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \ --role arn:aws:iam::
<AccountA_ID>
:role/cross-account-lambda-sqs-role
Uji fungsi (Akun A)
Di Akun A, uji fungsi Lambda Anda secara manual menggunakan invoke
AWS CLI
perintah dan contoh peristiwa AmazonSQS.
Jika handler kembali normal tanpa pengecualian, Lambda menganggap pesan berhasil diproses dan mulai membaca pesan baru dalam antrian. Setelah berhasil memproses pesan, Lambda secara otomatis menghapusnya dari antrian. Jika handler melempar pengecualian, Lambda menganggap kumpulan pesan tidak berhasil diproses, dan Lambda memanggil fungsi dengan kumpulan pesan yang sama.
-
Simpan yang berikut ini JSON sebagai file bernama
input.txt
.{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:example-queue", "awsRegion": "us-east-1" } ] }
Yang sebelumnya JSON mensimulasikan peristiwa yang SQS mungkin dikirimkan Amazon ke fungsi Lambda Anda, yang
"body"
berisi pesan aktual dari antrian. -
Jalankan perintah
invoke
AWS CLI berikut.aws lambda invoke --function-name CrossAccountSQSExample \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt
cli-binary-formatOpsi ini diperlukan jika Anda menggunakan AWS CLI versi 2. Untuk menjadikan ini pengaturan default, jalankan
aws configure set cli-binary-format raw-in-base64-out
. Untuk informasi selengkapnya, lihat opsi baris perintah global yang AWS CLI didukung di Panduan AWS Command Line Interface Pengguna untuk Versi 2. -
Verifikasikan output dalam
outputfile.txt
file.
Buat SQS antrian Amazon (Akun B)
Di Akun B, buat SQS antrian Amazon yang dapat digunakan oleh fungsi Lambda di Akun A sebagai sumber peristiwa. Fungsi Lambda dan SQS antrian Amazon harus sama. Wilayah AWS
Untuk membuat antrean
-
Buka SQSkonsol Amazon
. -
Pilih Buat antrean.
-
Buat antrian dengan properti berikut.
-
Tipe - Standar
-
Nama - LambdaCrossAccountQueue
-
Konfigurasi - Pertahankan pengaturan default.
-
Kebijakan akses — Pilih Lanjutan. Tempel dalam JSON kebijakan berikut:
{ "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
<AccountA_ID>
:role/cross-account-lambda-sqs-role" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-1:<AccountB_ID>
:LambdaCrossAccountQueue" } ] }Kebijakan ini memberikan peran eksekusi Lambda dalam izin Akun A untuk menggunakan pesan dari antrean Amazon ini. SQS
-
-
Setelah membuat antrian, rekam Nama Sumber Daya Amazon (ARN). Anda memerlukan ini di langkah berikutnya ketika Anda mengasosiasikan antrean dengan fungsi Lambda Anda.
Konfigurasikan sumber acara (Akun A)
Di Akun A, buat pemetaan sumber peristiwa antara SQS antrian Amazon di Akun B dan fungsi Lambda Anda dengan menjalankan perintah berikut. create-event-source-mapping
AWS CLI
aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-1:
<AccountB_ID>
:LambdaCrossAccountQueue
Untuk mendapatkan daftar pemetaan sumber acara Anda, jalankan perintah berikut.
aws lambda list-event-source-mappings --function-name CrossAccountSQSExample \ --event-source-arn arn:aws:sqs:us-east-1:
<AccountB_ID>
:LambdaCrossAccountQueue
Uji penyiapan
Anda sekarang dapat menguji pengaturan sebagai berikut:
-
Di Akun B, buka SQSkonsol Amazon
. -
Pilih LambdaCrossAccountQueue, yang Anda buat sebelumnya.
-
Pilih Kirim dan terima pesan.
-
Di bawah Badan pesan, masukkan pesan pengujian.
-
Pilih Kirim pesan.
Fungsi Lambda Anda di Akun A harus menerima pesan. Lambda akan terus melakukan polling antrian untuk pembaruan. Ketika ada pesan baru, Lambda memanggil fungsi Anda dengan data peristiwa baru ini dari antrian. Fungsi Anda berjalan dan membuat log di Amazon CloudWatch. Anda dapat melihat log di CloudWatch konsol
Bersihkan sumber daya Anda
Sekarang Anda dapat menghapus sumber daya yang Anda buat untuk tutorial ini, kecuali Anda ingin mempertahankannya. Dengan menghapus AWS sumber daya yang tidak lagi Anda gunakan, Anda mencegah tagihan yang tidak perlu ke Anda Akun AWS.
Di Akun A, bersihkan peran eksekusi dan fungsi Lambda Anda.
Untuk menghapus peran eksekusi
-
Buka halaman Peran
IAM konsol. -
Pilih peran eksekusi yang Anda buat.
-
Pilih Hapus.
-
Masukkan nama peran di bidang input teks dan pilih Hapus.
Untuk menghapus fungsi Lambda
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi yang Anda buat.
-
Pilih Tindakan, Hapus.
-
Ketik
delete
kolom input teks dan pilih Hapus.
Di Akun B, bersihkan SQS antrian Amazon.
Untuk menghapus SQS antrian Amazon
-
Masuk ke AWS Management Console dan buka SQS konsol Amazon di https://console.aws.amazon.com/sqs/
. -
Pilih antrean yang Anda buat.
-
Pilih Hapus.
-
Masukkan
confirm
di bidang input teks. -
Pilih Hapus.