![](/img/trans.png)
[英]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.