在 AWS 控制台上,创建 DynamoDB 表并启用数据流。将数据流的 ARN 复制到剪贴板,以备后续使用。
为了让 Lambda 函数能够访问 DynamoDB 数据流和其他 AWS 资源,需要创建一个专用的 IAM 角色。以下是示例代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetRecords",
"dynamodb:GetShardIterator",
"dynamodb:DescribeStream",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:dynamodb:::table//stream/",
"arn:aws:logs:::*"
]
}
]
}
需要将
、
和
替换为实际的值。
以下是示例代码,用于从 DynamoDB 数据流中读取数据并将其写入到 CloudWatch 日志中:
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func HandleRequest(event events.DynamoDBEvent) {
for _, record := range event.Records {
fmt.Printf("Processing record [%s]\n", record.EventID)
item := map[string]interface{}{}
err := json.Unmarshal(record.Change.NewImage, &item)
if err != nil {
log.Printf("Error unmarshalling event: %s", err)
continue
}
log.Printf("Received item: %v", item)
}
}
func main() {
lambda.Start(HandleRequest)
}
该函数接收 DynamoDB 的事件作为输入,解析每个事件并打印到 CloudWatch 日志中。
使用 go build
命令编译上面的 Go 代码并打包为一个执行文件。接下来,使用 aws-cli
提交该文件作为 Lambda 函数的代码包:
$ GOOS=linux go build -o main
$ zip deployment.zip main
$ aws lambda create-function --function-name