如何使用 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,
});
您在创建别名时指定了版本名称。
我正在尝试使用 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,
});
您在创建别名时指定了版本名称。