将 Lambda Arn 获取到资源中:类型:AWS::Lambda::Permission

Get Lambda Arn into Resources : Type: AWS::Lambda::Permission

我的无服务器 yml 文件中有以下内容:

lambdaQueueFirstInvokePermission:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName: ServiceLambdaFunctionQualifiedArn
    Action: ‘lambda:InvokeFunction’
    Principal: sqs.amazonaws.com

我在输出部分有以下内容:

Outputs:
  ServiceLambdaFunctionQualifiedArn:
  Value:
    ‘Fn::GetAtt’: [ lambdaQueueFirst, Arn ]

返回一条消息: Template error: instance of Fn::GetAtt references undefined resource lambdaQueueFirst

我是不是漏掉了什么,如果漏了什么?因为它在帮助或示例方面很少...... 另外,将 lambda arn 放入权限代码是否更好?如果有,那是什么?

你可以这样做:

resources:
  Resources:
    LoggingLambdaPermission:
      Type: AWS::Lambda::Permission
      Properties:
        FunctionName: { "Fn::GetAtt": ["LoghandlerLambdaFunction", "Arn" ] }
        Action: lambda:InvokeFunction
        Principal: { "Fn::Join" : ["", ["logs.", { "Ref" : "AWS::Region"}, ".amazonaws.com" ] ] }

参考: https://github.com/andymac4182/serverless_example

您可以使用环境变量来构造 ARN 值。在您的情况下,您可以在您的提供者部分定义一个变量,如下所示。您可能需要根据您的应用进行一些修改。

service: serverless App2
provider:
  name: aws
  runtime: python3.6
  region: ap-southeast-2
  stage: dev
  environment:
    AWS_ACCOUNT: 1234567890 # use your own AWS ACCOUNT number here

    # define the ARN of the function that you want to invoke
    FUNCTION_ARN: "arn:aws:lambda:${self:provider.region}:${self:provider.environment.AWS_ACCOUNT}:function:${self:service}-${self:provider.stage}-lambdaQueueFirst" 

Outputs:
ServiceLambdaFunctionQualifiedArn:
Value: "${self:provider.environment.FUNCTION_ARN}"

例如参见 and serverless variables for aws