Tutorial #1: Menggunakan filter untuk memproses semua peristiwa dengan Amazon AWS Lambda DynamoDB dan menggunakan AWS CLI - Amazon DynamoDB

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

Tutorial #1: Menggunakan filter untuk memproses semua peristiwa dengan Amazon AWS Lambda DynamoDB dan menggunakan AWS CLI

Dalam tutorial ini, Anda akan membuat AWS Lambda pemicu untuk memproses aliran dari tabel DynamoDB.

Skenario untuk tutorial ini adalah Woofer, sebuah jejaring sosial sederhana. Pengguna Woofer berkomunikasi menggunakan bark (pesan teks singkat) yang dikirim ke pengguna Woofer lainnya. Diagram berikut menunjukkan komponen dan alur kerja untuk aplikasi ini.

Alur kerja aplikasi woofer dari tabel DynamoDB, catatan aliran, fungsi Lambda, dan topik Amazon SNS.
  1. Seorang pengguna menulis item ke tabel DynamoDB (BarkTable). Setiap item dalam tabel mewakili bark.

  2. Sebuah catatan stream baru ditulis untuk mencerminkan bahwa item baru telah ditambahkan ke BarkTable.

  3. Rekaman aliran baru memicu AWS Lambda fungsi (publishNewBark).

  4. Jika catatan stream menunjukkan bahwa item baru ditambahkan ke BarkTable, fungsi Lambda membaca data dari catatan stream dan menerbitkan pesan ke topik di Amazon Simple Notification Service (Amazon SNS).

  5. Pesan diterima oleh pelanggan untuk topik Amazon SNS. (Dalam tutorial ini, satu-satunya pelanggan adalah alamat email.)

Sebelum Anda Memulai

Tutorial ini menggunakan AWS Command Line Interface AWS CLI. Jika Anda belum melakukannya, ikuti petunjuk di Panduan Pengguna AWS Command Line Interface untuk menginstal dan mengkonfigurasi AWS CLI.

Langkah 1: Buat tabel DynamoDB dengan aliran diaktifkan

Pada langkah ini, Anda membuat tabel DynamoDB (BarkTable) untuk menyimpan semua bark dari pengguna Woofer. Kunci primer terdiri dari Username (kunci partisi) dan Timestamp (kunci urutan). Kedua atribut ini berjenis string.

BarkTable memiliki aliran yang diaktifkan. Kemudian dalam tutorial ini, Anda membuat pemicu dengan mengaitkan AWS Lambda fungsi dengan aliran.

  1. Masukkan perintah berikut untuk membuat tabel.

    aws dynamodb create-table \ --table-name BarkTable \ --attribute-definitions AttributeName=Username,AttributeType=S AttributeName=Timestamp,AttributeType=S \ --key-schema AttributeName=Username,KeyType=HASH AttributeName=Timestamp,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES
  2. Dalam output, cari LatestStreamArn.

    ... "LatestStreamArn": "arn:aws:dynamodb:region:accountID:table/BarkTable/stream/timestamp ...

    Buat catatan tentang region dan accountID, karena Anda membutuhkannya untuk langkah-langkah lain dalam tutorial ini.

Langkah 2: Buat peran eksekusi Lambda

Pada langkah ini, Anda membuat peran AWS Identity and Access Management (IAM) (WooferLambdaRole) dan menetapkan izin untuk itu. Peran ini digunakan oleh fungsi Lambda yang Anda buat di Langkah 4: Buat dan uji fungsi Lambda.

Anda juga membuat kebijakan untuk peran. Kebijakan ini berisi semua izin yang dibutuhkan fungsi Lambda pada saat waktu aktif.

  1. Buat file bernama trust-relationship.json dengan isi berikut ini.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Masukkan perintah berikut untuk membuat WooferLambdaRole.

    aws iam create-role --role-name WooferLambdaRole \ --path "/service-role/" \ --assume-role-policy-document file://trust-relationship.json
  3. Buat file bernama role-policy.json dengan isi berikut ini. (Ganti region dan accountID dengan AWS Wilayah dan ID akun Anda.)

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:region:accountID:*" }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:ListStreams" ], "Resource": "arn:aws:dynamodb:region:accountID:table/BarkTable/stream/*" }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": [ "*" ] } ] }

    Kebijakan ini memiliki empat pernyataan yang memungkinkan WooferLambdaRole untuk melakukan hal berikut:

    • Menjalankan fungsi Lambda (publishNewBark). Anda membuat fungsi nanti dalam tutorial ini.

    • Akses CloudWatch Log Amazon. Fungsi Lambda menulis diagnostik ke CloudWatch Log saat runtime.

    • Membaca data dari stream DynamoDB untuk BarkTable.

    • Memublikasikan pesan ke Amazon SNS.

  4. Masukkan perintah berikut untuk melampirkan kebijakan ke WooferLambdaRole.

    aws iam put-role-policy --role-name WooferLambdaRole \ --policy-name WooferLambdaRolePolicy \ --policy-document file://role-policy.json

Langkah 3: Buat Topik Amazon SNS

Pada langkah ini, Anda membuat topik Amazon SNS (wooferTopic) dan mendaftarkan langganan alamat email untuk itu. Fungsi Lambda Anda menggunakan topik ini untuk memublikasikan bark baru dari pengguna Woofer.

  1. Masukkan perintah berikut untuk membuat topik Amazon SNS.

    aws sns create-topic --name wooferTopic
  2. Masukkan perintah berikut untuk mendaftarkan langganan alamat email ke wooferTopic. (Ganti region dan accountID dengan Wilayah AWS dan ID akun Anda, dan ganti example@example.com dengan alamat email yang valid.)

    aws sns subscribe \ --topic-arn arn:aws:sns:region:accountID:wooferTopic \ --protocol email \ --notification-endpoint example@example.com
  3. Amazon SNS mengirimkan pesan konfirmasi ke alamat email Anda. Pilih tautan Konfirmasi langganan di pesan tersebut untuk menyelesaikan proses berlangganan.

Langkah 4: Buat dan uji fungsi Lambda

Pada langkah ini, Anda membuat AWS Lambda fungsi (publishNewBark) untuk memproses catatan aliran dariBarkTable.

Fungsi publishNewBark hanya memproses hanya peristiwa stream yang sesuai dengan item baru di BarkTable. Fungsi membaca data dari peristiwa tersebut, dan kemudian memanggil Amazon SNS untuk memublikasikannya.

  1. Buat file bernama publishNewBark.js dengan isi berikut ini. Ganti region dan accountID dengan AWS Wilayah dan ID akun Anda.

    'use strict'; var AWS = require("aws-sdk"); var sns = new AWS.SNS(); exports.handler = (event, context, callback) => { event.Records.forEach((record) => { console.log('Stream record: ', JSON.stringify(record, null, 2)); if (record.eventName == 'INSERT') { var who = JSON.stringify(record.dynamodb.NewImage.Username.S); var when = JSON.stringify(record.dynamodb.NewImage.Timestamp.S); var what = JSON.stringify(record.dynamodb.NewImage.Message.S); var params = { Subject: 'A new bark from ' + who, Message: 'Woofer user ' + who + ' barked the following at ' + when + ':\n\n ' + what, TopicArn: 'arn:aws:sns:region:accountID:wooferTopic' }; sns.publish(params, function(err, data) { if (err) { console.error("Unable to send message. Error JSON:", JSON.stringify(err, null, 2)); } else { console.log("Results from sending message: ", JSON.stringify(data, null, 2)); } }); } }); callback(null, `Successfully processed ${event.Records.length} records.`); };
  2. Buat file zip untuk menampung publishNewBark.js. Jika Anda memiliki utilitas baris perintah zip, Anda dapat memasukkan perintah berikut untuk melakukan hal ini.

    zip publishNewBark.zip publishNewBark.js
  3. Ketika Anda membuat fungsi Lambda, Anda menentukan Amazon Resource Name (ARN) untuk WooferLambdaRole, yang Anda buat di Langkah 2: Buat peran eksekusi Lambda. Masukkan perintah berikut untuk mengambil ARN ini.

    aws iam get-role --role-name WooferLambdaRole

    Dalam output, cari ARN untuk WooferLambdaRole.

    ... "Arn": "arn:aws:iam::region:role/service-role/WooferLambdaRole" ...

    Masukkan perintah berikut untuk membuat fungsi Lambda. Ganti roleARN dengan ARN untuk WooferLambdaRole.

    aws lambda create-function \ --region region \ --function-name publishNewBark \ --zip-file fileb://publishNewBark.zip \ --role roleARN \ --handler publishNewBark.handler \ --timeout 5 \ --runtime nodejs16.x
  4. Sekarang uji publishNewBark untuk memverifikasi bahwa ia bekerja. Untuk melakukannya, Anda memberikan input yang menyerupai catatan nyata dari DynamoDB Streams.

    Buat file bernama payload.json dengan isi berikut ini. Ganti region dan accountID dengan ID akun Wilayah AWS dan Anda.

    { "Records": [ { "eventID": "7de3041dd709b024af6f29e4fa13d34c", "eventName": "INSERT", "eventVersion": "1.1", "eventSource": "aws:dynamodb", "awsRegion": "region", "dynamodb": { "ApproximateCreationDateTime": 1479499740, "Keys": { "Timestamp": { "S": "2016-11-18:12:09:36" }, "Username": { "S": "John Doe" } }, "NewImage": { "Timestamp": { "S": "2016-11-18:12:09:36" }, "Message": { "S": "This is a bark from the Woofer social network" }, "Username": { "S": "John Doe" } }, "SequenceNumber": "13021600000000001596893679", "SizeBytes": 112, "StreamViewType": "NEW_IMAGE" }, "eventSourceARN": "arn:aws:dynamodb:region:account ID:table/BarkTable/stream/2016-11-16T20:42:48.104" } ] }

    Masukkan perintah berikut untuk menguji fungsi publishNewBark.

    aws lambda invoke --function-name publishNewBark --payload file://payload.json --cli-binary-format raw-in-base64-out output.txt

    Jika tes berhasil, Anda akan melihat output sebagai berikut.

    { "StatusCode": 200, "ExecutedVersion": "$LATEST" }

    Selain itu, file output.txt akan berisi teks berikut.

    "Successfully processed 1 records."

    Anda juga akan menerima pesan email baru dalam beberapa menit.

    catatan

    AWS Lambda menulis informasi diagnostik ke Amazon CloudWatch Logs. Jika Anda mengalami kesalahan dengan fungsi Lambda Anda, Anda dapat menggunakan diagnostik ini untuk tujuan pemecahan masalah:

    1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

    2. Pilih Log di panel navigasi.

    3. Pilih grup log berikut ini: /aws/lambda/publishNewBark

    4. Pilih stream log terbaru untuk melihat output (dan kesalahan) dari fungsi.

Langkah 5: Buat dan uji pemicu

Dalam Langkah 4: Buat dan uji fungsi Lambda, Anda menguji fungsi Lambda untuk memastikan bahwa itu berjalan dengan benar. Pada langkah ini, Anda membuat pemicu dengan mengaitkan fungsi Lambda (publishNewBark) dengan sumber peristiwa (aliran BarkTable).

  1. Saat Anda membuat pemicu, Anda perlu menentukan ARN untuk stream BarkTable. Masukkan perintah berikut untuk mengambil ARN ini.

    aws dynamodb describe-table --table-name BarkTable

    Dalam output, cari LatestStreamArn.

    ... "LatestStreamArn": "arn:aws:dynamodb:region:accountID:table/BarkTable/stream/timestamp ...
  2. Masukkan perintah berikut untuk membuat pemicu. Ganti streamARN dengan ARN stream yang sebenarnya.

    aws lambda create-event-source-mapping \ --region region \ --function-name publishNewBark \ --event-source streamARN \ --batch-size 1 \ --starting-position TRIM_HORIZON
  3. Uji pemicu. Masukkan perintah berikut untuk menambahkan item ke BarkTable.

    aws dynamodb put-item \ --table-name BarkTable \ --item Username={S="Jane Doe"},Timestamp={S="2016-11-18:14:32:17"},Message={S="Testing...1...2...3"}

    Anda akan menerima pesan email baru dalam beberapa menit.

  4. Buka konsol DynamoDB dan tambahkan beberapa item lagi ke BarkTable. Anda harus menentukan nilai untuk atribut Username dan Timestamp. (Anda juga harus menentukan nilai untuk Message, meskipun tidak diperlukan.) Anda akan menerima pesan email baru untuk setiap item yang ditambahkan ke BarkTable.

    Fungsi Lambda memproses hanya item baru yang Anda tambahkan ke BarkTable. Jika Anda memperbarui atau menghapus item dalam tabel, fungsi tidak melakukan apa pun.

catatan

AWS Lambda menulis informasi diagnostik ke Amazon CloudWatch Logs. Jika Anda mengalami kesalahan dengan fungsi Lambda Anda, Anda dapat menggunakan diagnostik ini untuk tujuan pemecahan masalah.

  1. Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/.

  2. Pilih Log di panel navigasi.

  3. Pilih grup log berikut ini: /aws/lambda/publishNewBark

  4. Pilih stream log terbaru untuk melihat output (dan kesalahan) dari fungsi.