[英]How can i create a cloudwatch rule to trigger a lambda function every 15 minutes using aws cdk (JAVA)?
[英]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.