如何使用SAM模板cloudformation在其他AWS帐户中调用lambda

时间:2019-10-10 17:25:01

标签: aws-lambda amazon-cloudformation serverless-application-model

Cloudformation snippet for the role

我正在使用AWS lambda cloudformation创建无服务器架构模型(SAM)。我有两个Lambda:前端Lambda和后端Lambda。前端Lambda在帐户A中,后端Lambda在帐户B中。前端Lambda从S3渲染UI的静态文件。当必须执行后端数据处理时,应在另一个AWS帐户中调用后端Lambda。我确实在两个帐户中都扮演过角色,并且也信任两个帐户。它仍然无法调用后端lambda。 如何使用cloudformation模板调用后端lambda。

1 个答案:

答案 0 :(得分:0)

后端:

您的后端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>

前端

前端,您需要授予调用其他功能的权限(这取决于Serverlam :: 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