【问题标题】:How to invoke lambda in a different aws account using SAM template cloudformation如何使用 SAM 模板 cloudformation 在不同的 aws 帐户中调用 lambda
【发布时间】:2020-02-08 05:02:21
【问题描述】:

Cloudformation snippet for the role

我正在使用 AWS lambda cloudformation 创建一个无服务器架构模型 (SAM)。我有两个 lambda - 前端 lambda 和一个后端 lambda。前端 lambda 在帐户 A 中,后端 lambda 在帐户 B 中。前端 lambda 为 UI 呈现来自 S3 的静态文件。当它必须进行后端数据处理时,它应该调用另一个 aws 帐户中的后端 lambda。我确实在这两个帐户中都有角色,并且也信任这两个帐户。它仍然无法调用后端 lambda。 如何使用 cloudformation 模板调用后端 lambda。

【问题讨论】:

  • 你找到一个完整的工作 cloudformation 模板了吗?

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


【解决方案1】:

后端:

您的后端 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 的 Policies 部分,具体取决于您的 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

【讨论】:

  • 对于后端权限,您可以进一步缩小 Principal、SourceAccount 和 SourceArn 字段的范围,这只是一个简单的示例。
猜你喜欢
  • 2021-07-01
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2020-07-05
  • 2019-08-11
  • 1970-01-01
相关资源
最近更新 更多