Tutorial: Menggunakan SQS antrian Amazon lintas akun sebagai sumber acara - AWS Lambda

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 (zipseperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, instal Windows Subsystem untuk Linux. Contoh CLI perintah dalam panduan ini menggunakan pemformatan Linux. Perintah yang menyertakan JSON dokumen inline harus diformat ulang jika Anda menggunakan Windows. CLI

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
  1. Buka halaman Peran di konsol AWS Identity and Access Management (IAM).

  2. Pilih Buat peran.

  3. Buat peran dengan properti berikut.

    • Entitas tepercaya - AWS Lambda

    • Izin - AWSLambdaSQSQueueExecutionRole

    • Nama perancross-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.

  1. Simpan contoh kode sebagai file bernamaindex.mjs.

  2. Buat paket deployment.

    zip function.zip index.mjs
  3. 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.

  1. Simpan yang berikut ini JSON sebagai file bernamainput.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.

  2. 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, jalankanaws 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.

  3. 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
  1. Buka SQSkonsol Amazon.

  2. Pilih Buat antrean.

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

  4. 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:

  1. Di Akun B, buka SQSkonsol Amazon.

  2. Pilih LambdaCrossAccountQueue, yang Anda buat sebelumnya.

  3. Pilih Kirim dan terima pesan.

  4. Di bawah Badan pesan, masukkan pesan pengujian.

  5. 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
  1. Buka halaman Peran IAM konsol.

  2. Pilih peran eksekusi yang Anda buat.

  3. Pilih Hapus.

  4. Masukkan nama peran di bidang input teks dan pilih Hapus.

Untuk menghapus fungsi Lambda
  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih fungsi yang Anda buat.

  3. Pilih Tindakan, Hapus.

  4. Ketik delete kolom input teks dan pilih Hapus.

Di Akun B, bersihkan SQS antrian Amazon.

Untuk menghapus SQS antrian Amazon
  1. Masuk ke AWS Management Console dan buka SQS konsol Amazon di https://console.aws.amazon.com/sqs/.

  2. Pilih antrean yang Anda buat.

  3. Pilih Hapus.

  4. Masukkan confirm di bidang input teks.

  5. Pilih Hapus.