通过 CDK 中的 ARN 将 eventSource 添加到 Lambda
Posted
技术标签:
【中文标题】通过 CDK 中的 ARN 将 eventSource 添加到 Lambda【英文标题】:Adding eventSource to Lambda by ARN in CDK 【发布时间】:2019-09-10 02:33:55 【问题描述】:我有一个从 Dynamodb 流中读取的 lambda 函数。我有从同一个 AWS 账户中的另一个堆栈导出的 Dynamodb 流 ARN。现在,在 Lambda 中添加 eventSource 时,它从 Table 构造中询问。
const function = new lambda.Function(...);
function.addEventSource(new DynamoEventSource(table,
startingPosition: lambda.StartingPosition.TrimHorizon
));
参考:https://awslabs.github.io/aws-cdk/refs/_aws-cdk_aws-lambda-event-sources.html#dynamodb-streams
但我有流 ARN。有什么办法可以利用它来添加事件源。还是我必须自己导出表格?
【问题讨论】:
有趣的是,Python 等其他 SDK 有一个create_event_source_mapping()
API 调用,确实可以接受 ARN。 CDK 中似乎没有。
【参考方案1】:
目前无法使用 AWS CDK 导入 DynamoDB 表。 Importing a DynamoDB table。
您仍然可以通过直接使用来自@aws-cdk/aws-lambda
的EventSourceMapping
类来实现您的目标:
import iam = require('@aws-cdk/aws-iam');
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(...);
new lambda.EventSourceMapping(this, 'DynamoDBEventSource',
target: fn,
batchSize: ...,
eventSourceArn: <your stream arn>,
startingPosition: lambda.StartingPosition.TrimHorizon
);
fn.addToRolePolicy(
new iam.PolicyStatement()
.addActions('dynamodb:DescribeStream', 'dynamodb:GetRecords', 'dynamodb:GetShardIterator', 'dynamodb:ListStreams')
.addResource('<your stream arn>/*');
);
【讨论】:
成功了。非常感谢。我一直在努力寻找这个答案。 在哪里可以找到流 arn? @Matthew 在 DynamoDB 控制台的“导出和流”选项卡中以上是关于通过 CDK 中的 ARN 将 eventSource 添加到 Lambda的主要内容,如果未能解决你的问题,请参考以下文章
如何使用适用于 Python 的 AWS CDK 通过 ARN 查找现有的经典负载均衡器 (CLB)?
如何将生命周期策略添加到 AWS CDK Typescript 中的现有 S3 存储桶
如何授权 lambda 使用 CDK 执行 ses:SendEmail?