如何使用 AWS CDK 将现有 Lambda 函数的别名指定为 DynamoDB 触发器?

How do I specify an existing Lambda function's alias as a DynamoDB trigger using the AWS CDK?

我正在尝试使用 CDK 为 DynamoDB table 设置触发器,lambda 及其别名已在不同的堆栈中创建。

我想将特定的 Lambda 别名关联到 DynamoDB table 作为其触发器。

到目前为止,我有这段代码,它在 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 实例。

您的第一个代码几乎是正确的 - 要导入版本,请使用其 ARN:

const lambdaArn = `arn:aws:lambda:${stack.region}:${stack.account}:function:SOME_LAMBDA`;
const lamdba = Function.fromFunctionArn(stack, "lambda", lambdaArn);

const versionArn = `arn:aws:lambda:${stack.region}:${stack.account}:function:SOME_LAMBDA:VERSION_NAME`;

const version = Version.fromVersionArn(stack, "version", versionArn);

const alias = Alias.fromAliasAttributes(stack, "alias", {
    aliasName: "SOME_ALIAS",
    aliasVersion: version,
});

您在创建别名时指定了版本名称。