【发布时间】:2021-10-29 21:26:08
【问题描述】:
我正在尝试使用 CDK 为 DynamoDB 表设置触发器,其中 lambda 及其别名已在不同的堆栈中创建。
我想将特定的 Lambda 别名关联到 DynamoDB 表作为其触发器。
到目前为止,我的这段代码对于 Lambda 的 $LATEST 版本非常有效:
const lambdaArn = `arn:aws:lambda:${stack.region}:${stack.account}:function:SOME_LAMBDA`;
const lamdba = Function.fromFunctionArn(stack, "lambda", lambdaArn);
lamdba.addEventSource(new DynamoEventSource(table, {
startingPosition: StartingPosition.LATEST,
}));
如何根据名称指定特定别名?
[更新]
在我看来,我需要做这样的事情:
const lambdaArn = `arn:aws:lambda:${stack.region}:${stack.account}:function:SOME_LAMBDA`;
const lamdba = Function.fromFunctionArn(stack, "lambda", lambdaArn);
const version = Version.fromVersionAttributes(stack, "version", {
lambda: lamdba,
version: ???,//Supposedly a string
});
const alias = Alias.fromAliasAttributes(stack, "alias", {
aliasName: "SOME_ALIAS",
aliasVersion: version,
});
alias.addEventSource(new DynamoEventSource(table, {
startingPosition: StartingPosition.LATEST,
}));
但是这段代码的问题是我不知道如何在CDK中找到别名的版本!
[更新]
也许是我的错,没有提及我尝试过但失败的所有不同方式。但无论如何,只是简单地将别名添加到 ARN 的末尾并使用 Function.fromFunctionArn 并没有帮助。这就是我的意思:
const lambdaArn = `arn:aws:lambda:${stack.region}:${stack.account}:function:SOME_LAMBDA:SOME_ALIAS`;
const lamdba = Function.fromFunctionArn(stack, "lambda", lambdaArn);
lamdba.addEventSource(new DynamoEventSource(table, {
startingPosition: StartingPosition.LATEST,
}));
上述代码的行为与没有SOME_ALIAS 的代码相同。这是我第一次尝试解决这个问题。它不起作用的原因是返回的IFunction 中没有别名的概念。那是因为IFunction 没有这个功能。
最后的代码将导致使用 $LATEST 版本的 lambda。换句话说,我需要一个 IAlias 实例才能使其工作,而不是 IFunction 实例。
【问题讨论】:
标签: amazon-web-services aws-cdk amazon-dynamodb-streams