【问题标题】:How do I specify an existing Lambda function's alias as a DynamoDB trigger using the AWS CDK?如何使用 AWS CDK 将现有 Lambda 函数的别名指定为 DynamoDB 触发器?
【发布时间】: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


    【解决方案1】:

    您的第一个代码几乎是正确的 - 要导入版本,请使用其 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,
    });
    

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

    【讨论】:

      猜你喜欢
      • 2022-08-08
      • 2016-10-19
      • 2021-10-03
      • 2019-04-16
      • 2022-07-21
      • 1970-01-01
      • 2017-11-28
      • 2018-08-29
      • 1970-01-01
      相关资源
      最近更新 更多