首页 > 解决方案 > aws lambda 权限中的 SourceArn 是什么

问题描述

这是我的 lambda 的 cft,我将 jar 文件上传到 s3,然后通过 s3 上传到 lambda,我完成了 LambdaRole 和 LambdaFunction 部分,在权限部分,SourceArn 应该是什么?我浏览了 lambda 官方文档,但没有找到任何示例。

另外,任何人都可以看看这个cft是否正确?谢谢!

ConfigurationLambdaRole:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: 'configuration-sqs-lambda'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
                - events.amazonaws.com
                - s3.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSQSFullAccess
        - arn:aws:iam::aws:policy/CloudWatchLogsFullAccess

  ConfigurationLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Description: 'configuration service with lambda'
      FunctionName: 'configuration-lambda'
      Handler: com.lambda.handler.EventHandler::handleRequest
      Runtime: Java 11
      MemorySize: 128
      Timeout: 120
      Code:
        S3Bucket: configurationlambda
        S3Key: lambda-service-1.0.0-SNAPSHOT.jar
      Role: !GetAtt ConfiguratioLambdaRole.Arn

  ConfigurationLambdaInvokePermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName:
        Fn::GetAtt:
          - ConfigurationLambdaFunction
          - Arn
      Action: 'lambda:InvokeFunction'
      Principal: s3.amazonaws.com
      SourceArn: ''

标签: amazon-web-servicesaws-lambdaamazon-cloudformation

解决方案


您正在创建一个角色来运行您的 lambda、一个 lambda 函数以及调用该 lambda 的权限。这SourceArn是将调用 lambda 的东西。所以在你的情况下,听起来你想要一个 S3 存储桶来调用 lambda,所以 SourceArn 将是 S3 存储桶的 ARN。

本教程与您正在做的事情有关——特别是“创建 Lambda 函数”部分下的第 8 步。

您的 CF 模板通常看起来是正确的。我看到的唯一假设是这个角色是 lambda.amazonaws.com,因此该角色可能不需要在该AssumeRolePolicyDocument部分中列出以下内容:

        - events.amazonaws.com
        - s3.amazonaws.com

另请参阅https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html


推荐阅读