在 CDK 中通过 ARN 将 eventSource 添加到 Lambda
Adding eventSource to Lambda by ARN in CDK
我有一个从 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。有什么办法可以利用它来添加事件源。或者我必须导出 table 本身?
目前无法使用 AWS CDK 导入 DynamoDB table。 Importing a DynamoDB table。
您仍然可以通过直接使用 @aws-cdk/aws-lambda
中的 EventSourceMapping
class 来实现您的目标:
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>/*');
);
我有一个从 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。有什么办法可以利用它来添加事件源。或者我必须导出 table 本身?
目前无法使用 AWS CDK 导入 DynamoDB table。 Importing a DynamoDB table。
您仍然可以通过直接使用 @aws-cdk/aws-lambda
中的 EventSourceMapping
class 来实现您的目标:
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>/*');
);