从 DynamoDB 触发 lambda 函数
Posted
技术标签:
【中文标题】从 DynamoDB 触发 lambda 函数【英文标题】:trigger lambda function from DynamoDB 【发布时间】:2021-12-28 15:38:47 【问题描述】:每当一个新项目到达我的发电机表时,我想运行一个 lambda 函数trigger_lambda_function
。这就是我定义表和触发器的方式。但是,触发器无法按预期工作。
resource "aws_dynamodb_table" "filenames"
name = local.dynamodb_table_filenames
billing_mode = "PROVISIONED"
read_capacity = 1000
write_capacity = 1000
hash_key = "filename"
#range_key = ""
attribute
name = "filename"
type = "S"
tags = var.tags
resource "aws_lambda_event_source_mapping" "allow_dynamodb_table_to_trigger_lambda"
event_source_arn = aws_dynamodb_table.filenames.stream_arn
function_name = aws_lambda_function.trigger_stepfunction_lambda.arn
starting_position = "LATEST"
在terraform apply
上,我收到一个错误:
│ Error: error creating Lambda Event Source Mapping (): InvalidParameterValueException: Unrecognized event source.
│
│ RespMetadata:
│ StatusCode: 400,
│ RequestID: "5ae68da6-3f6d-4adb-b104-72ae584dbca7"
│ ,
│ Message_: "Unrecognized event source.",
│ Type: "User"
│
│
│ with module.ingest_system["alpegatm"].aws_lambda_event_source_mapping.allow_dynamodb_table_to_trigger_lambda,
│ on ../../modules/ingest_system/dynamo.tf line 39, in resource "aws_lambda_event_source_mapping" "allow_dynamodb_table_to_trigger_lambda":
│ 39: resource "aws_lambda_event_source_mapping" "allow_dynamodb_table_to_trigger_lambda"
我也尝试了.arn
而不是stream_arn
,但这也引发了错误。我还能尝试什么?
我遵循了触发器的文档: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_event_source_mapping
【问题讨论】:
随机猜测 - 尽管有错误消息文本,但您的 Lambda 调用dynamodb:*
是否缺少 IAM 权限?
分配的角色有"dynamodb:GetItem","dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:Query"
但我怀疑这是问题@GrzegorzOledzki
【参考方案1】:
在aws_dynamodb_table
文档中,stream_arn
仅在 stream_enabled
设置为 true
时可用。您可能希望将 stream_enabled = true
添加到您的 DynamoDB 表定义中。
默认情况下,stream_enabled
设置为 false
。您可以看到here 的所有默认值aws_dynamodb_table
。
【讨论】:
那么它还需要我提供一个stream_view_type。那会是什么? “NEW_AND_OLD_IMAGES”? 这取决于您希望您的流包含什么:docs.aws.amazon.com/amazondynamodb/latest/APIReference/…。如果被修改,NEW_AND_OLD_IMAGES
将拥有一个项目的两个版本。以上是关于从 DynamoDB 触发 lambda 函数的主要内容,如果未能解决你的问题,请参考以下文章
让 DynamoDB Stream Lambda 函数调用 AWS AppSync 突变