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.
Topik
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.
-
Seorang pengguna menulis item ke tabel DynamoDB (
BarkTable
). Setiap item dalam tabel mewakili bark. -
Sebuah catatan stream baru ditulis untuk mencerminkan bahwa item baru telah ditambahkan ke
BarkTable
. -
Rekaman aliran baru memicu AWS Lambda fungsi (
publishNewBark
). -
Jika catatan aliran menunjukkan bahwa item baru telah ditambahkan
BarkTable
, fungsi Lambda akan membaca data dari catatan aliran dan menerbitkan pesan ke topik di Amazon Simple Notification Service (Amazon). SNS -
Pesan diterima oleh pelanggan ke SNS topik Amazon. (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.
-
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
-
Dalam output, cari
LatestStreamArn
.... "LatestStreamArn": "arn:aws:dynamodb:
region
:accountID
:table/BarkTable/stream/timestamp ...Buat catatan tentang
danregion
, karena Anda membutuhkannya untuk langkah-langkah lain dalam tutorial ini.accountID
Langkah 2: Buat peran eksekusi Lambda
Pada langkah ini, Anda membuat AWS Identity and Access Management (IAM) role (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.
-
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" } ] }
-
Masukkan perintah berikut untuk membuat
WooferLambdaRole
.aws iam create-role --role-name WooferLambdaRole \ --path "/service-role/" \ --assume-role-policy-document file://trust-relationship.json
-
Buat file bernama
role-policy.json
dengan isi berikut ini. (Ganti
danregion
dengan AWS Wilayah dan ID akun Anda.)accountID
{ "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
. -
Publikasikan pesan ke AmazonSNS.
-
-
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 SNS topik Amazon
Pada langkah ini, Anda membuat SNS topik Amazon (wooferTopic
) dan berlangganan alamat email ke sana. Fungsi Lambda Anda menggunakan topik ini untuk memublikasikan bark baru dari pengguna Woofer.
-
Masukkan perintah berikut untuk membuat SNS topik Amazon baru.
aws sns create-topic --name wooferTopic
-
Masukkan perintah berikut untuk mendaftarkan langganan alamat email ke
wooferTopic
. (Ganti
danregion
dengan Wilayah AWS dan ID akun Anda, dan gantiaccountID
dengan alamat email yang valid.)example@example.com
aws sns subscribe \ --topic-arn arn:aws:sns:
region
:accountID
:wooferTopic \ --protocol email \ --notification-endpointexample@example.com
-
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 semacam itu, dan kemudian memanggil Amazon SNS untuk mempublikasikannya.
-
Buat file bernama
publishNewBark.js
dengan isi berikut ini. Ganti
danregion
dengan AWS Wilayah dan ID akun Anda.accountID
'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.`); }; -
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
-
Saat Anda membuat fungsi Lambda, Anda menentukan Amazon Resource Name (ARN) untuk
WooferLambdaRole
, yang Anda buat. Langkah 2: Buat peran eksekusi Lambda Masukkan perintah berikut untuk mengambil iniARN.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 forWooferLambdaRole
.aws lambda create-function \ --region
region
\ --function-name publishNewBark \ --zip-file fileb://publishNewBark.zip \ --roleroleARN
\ --handler publishNewBark.handler \ --timeout 5 \ --runtime nodejs16.x -
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
danregion
dengan ID akun Wilayah AWS dan Anda.accountID
{ "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:
Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/
. -
Pilih Log di panel navigasi.
-
Pilih grup log berikut ini:
/aws/lambda/publishNewBark
-
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
).
-
Saat Anda membuat pemicu, Anda perlu menentukan ARN untuk
BarkTable
aliran. Masukkan perintah berikut untuk mengambil iniARN.aws dynamodb describe-table --table-name BarkTable
Dalam output, cari
LatestStreamArn
.... "LatestStreamArn": "arn:aws:dynamodb:
region
:accountID
:table/BarkTable/stream/timestamp ... -
Masukkan perintah berikut untuk membuat pemicu. Ganti
dengan aliran yang sebenarnyaARN.streamARN
aws lambda create-event-source-mapping \ --region
region
\ --function-name publishNewBark \ --event-sourcestreamARN
\ --batch-size 1 \ --starting-position TRIM_HORIZON -
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.
-
Buka konsol DynamoDB dan tambahkan beberapa item lagi ke
BarkTable
. Anda harus menentukan nilai untuk atributUsername
danTimestamp
. (Anda juga harus menentukan nilai untukMessage
, meskipun tidak diperlukan.) Anda akan menerima pesan email baru untuk setiap item yang ditambahkan keBarkTable
.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.
Buka CloudWatch konsol di https://console.aws.amazon.com/cloudwatch/
. -
Pilih Log di panel navigasi.
-
Pilih grup log berikut ini:
/aws/lambda/publishNewBark
-
Pilih stream log terbaru untuk melihat output (dan kesalahan) dari fungsi.