繁体   English   中英

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

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

我正在尝试使用 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没有这样的功能。

最后的代码将导致使用 lambda 的$LATEST版本。 换句话说,我需要一个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,
});

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

您缺少 1 个要点 - 每个别名都有一个唯一的 ARN

Function.fromFunctionArn接受 3 个参数,最后一个是 Lambda 函数 ARN。

您可以使用以下 ARN 格式导入所需的任何 Lambda 别名:

arn:aws:lambda:${REGION}:${ACCOUNT}:function:${FUNCTION_NAME}:${ALIAS_NAME}

例如,如果您的函数 ARN 是:

arn:aws:lambda:eu-west-1:585470346692:function:MyFunction

名为Alias1的 Lambda 别名的 ARN 将是:

arn:aws:lambda:eu-west-1:585470346692:function:MyFunction:Alias1

通过使用别名 ARN 导入 Lambda 函数的别名,然后将事件源添加到导入的别名,将事件源设置为 Lambda 别名。

这将起作用:

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

const aliasName = "SOME_ALIAS";
const aliasArn = lambdaArn + ":" + aliasName;

const lambdaAlias = Function.fromFunctionArn(stack, "lambda", aliasArn);

lambdaAlias.addEventSource(new DynamoEventSource(table, {
    startingPosition: StartingPosition.LATEST,
}));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM