gpt4 book ai didi

aws-lambda - 如何设置依赖于使用 SAM 创建的另一个无服务器函数的 ARN 的 SAM 调用权限?

转载 作者:行者123 更新时间:2023-12-03 07:13:11 25 4
gpt4 key购买 nike

我正在向现有无服务器应用程序添加 SAM 模板。我有一个没有。调用其他 lambda 的 lambda,并且调用者具有指定“被调用者”或调用的 lambda 的 ARN 的策略。在这种情况下,策略创建可以完成一次,因为我的函数名称是静态的,例如:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-west-2:[acct-no]:function:MyLambda"
}
]
}

我可以为调用者提供具有此策略的角色,而无需在更新被调用者时更改它。然而,在 SAM/CloudFormations 框架下,创建的函数会自动在其名称后附加一个字符串(例如 arn:aws:lambda:us-west-2:[acct-no]:function:MyLambda-3kx71lzkhge3 ),这会使之前创建的策略无效,因为旧的 ARN 不再有效,这让我认为我需要创建策略动态 ARN。

我不确定执行此操作的正确方法是什么。我的理解是,ARN 是 sam deploy 的输出,所以目前,我考虑首先部署调用者,记下 ARN,然后使用 ARN 更新调用者的 sam 模板,然后部署调用者。然而,这感觉不正确,因为这是对设计为自动化的流程的手动干预。我想知道是否还有其他方法可以解决这个问题,并且希望任何人能够提供任何见解。

最佳答案

您的直觉是正确的,您不必手动执行任何操作或使用多个部署。 CloudFormation 将允许您使用另一个 lambda 的 ARN 的 GetAtt 调用来执行此操作。 Here's an example from another question's answer :

"MyFieldName": "Fn::GetAtt": ["MyLambdaFunc","Arn"]

所以你的 JSON 是:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:InvokeFunction",
"Resource": "Fn::GetAtt": ["MyLambda","Arn"]
}
]
}

关于aws-lambda - 如何设置依赖于使用 SAM 创建的另一个无服务器函数的 ARN 的 SAM 调用权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69812942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com