如何使用 SAM 模板 cloudformation 在不同的 aws 帐户中调用 lambda
How to invoke lambda in a different aws account using SAM template cloudformation
Cloudformation snippet for the role
我正在使用 AWS lambda cloudformation 创建无服务器架构模型 (SAM)。我有两个 lambda——前端 lambda 和后端 lambda。前端lambda在账户A中,后端lambda在账户B中。前端lambda渲染来自S3的静态文件UI。当它必须进行后端数据处理时,它应该在另一个 aws 帐户中调用后端 lambda。我确实在这两个帐户中都有角色,并且也信任这两个帐户。它仍然无法调用后端 lambda。
如何使用 cloudformation 模板调用后端 lambda。
后端:
您的后端 lambda 需要授予前端 lambda 调用它的权限:
BackEndLambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: 'lambda:InvokeFunction'
FunctionName:
Fn::GetAtt:
- BackEndLambda
- Arn
Principal: <enter principal>
SourceArn: <front end lambda arn is optional but recommended>
前端:
前端,您需要授予调用其他函数的权限(这位于 Serverless::Function 或 Iam::Role 的策略部分,具体取决于您的 lambda 设置方式) :
- Effect: Allow
Action:
- 'lambda:InvokeFunction'
Resource: "arn:aws:lambda:us-east-1:123456789012:function:function-name"
将函数 arn 传递到 Environment
中的前端 lambda 属性:
Environment:
Variables:
BackEndFunctionArn:"arn:aws:lambda:us-east-1:123456789012:function:function-name"
从您的前端 lambda 代码调用后端 lambda(python 示例):
def invoke_back_end(event):
event = {"data": "Hello back end"}
function_arn = os.environ.get("BackEndFunctionArn")
client = boto3.client('lambda')
# "RequestResponse" is a synchronous invocation. Use "Event" for async
response = client.invoke(FunctionName=function_arn, Payload=json.dumps(event), InvocationType='RequestResponse')
return response
Cloudformation snippet for the role
我正在使用 AWS lambda cloudformation 创建无服务器架构模型 (SAM)。我有两个 lambda——前端 lambda 和后端 lambda。前端lambda在账户A中,后端lambda在账户B中。前端lambda渲染来自S3的静态文件UI。当它必须进行后端数据处理时,它应该在另一个 aws 帐户中调用后端 lambda。我确实在这两个帐户中都有角色,并且也信任这两个帐户。它仍然无法调用后端 lambda。 如何使用 cloudformation 模板调用后端 lambda。
后端:
您的后端 lambda 需要授予前端 lambda 调用它的权限:
BackEndLambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: 'lambda:InvokeFunction'
FunctionName:
Fn::GetAtt:
- BackEndLambda
- Arn
Principal: <enter principal>
SourceArn: <front end lambda arn is optional but recommended>
前端:
前端,您需要授予调用其他函数的权限(这位于 Serverless::Function 或 Iam::Role 的策略部分,具体取决于您的 lambda 设置方式) :
- Effect: Allow
Action:
- 'lambda:InvokeFunction'
Resource: "arn:aws:lambda:us-east-1:123456789012:function:function-name"
将函数 arn 传递到 Environment
中的前端 lambda 属性:
Environment:
Variables:
BackEndFunctionArn:"arn:aws:lambda:us-east-1:123456789012:function:function-name"
从您的前端 lambda 代码调用后端 lambda(python 示例):
def invoke_back_end(event):
event = {"data": "Hello back end"}
function_arn = os.environ.get("BackEndFunctionArn")
client = boto3.client('lambda')
# "RequestResponse" is a synchronous invocation. Use "Event" for async
response = client.invoke(FunctionName=function_arn, Payload=json.dumps(event), InvocationType='RequestResponse')
return response