Amazon cloudformation 将Lambda Arn放入资源:类型:AWS::Lambda::Permission

Amazon cloudformation 将Lambda Arn放入资源:类型:AWS::Lambda::Permission,amazon-cloudformation,serverless-framework,Amazon Cloudformation,Serverless Framework,我的无服务器yml文件中包含以下内容: lambdaQueueFirstInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: ServiceLambdaFunctionQualifiedArn Action: ‘lambda:InvokeFunction’ Principal: sqs.amazonaws.com 在输出部分,我有以下内容: Outputs: Ser

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

lambdaQueueFirstInvokePermission:
  Type: AWS::Lambda::Permission
  Properties:
    FunctionName: ServiceLambdaFunctionQualifiedArn
    Action: ‘lambda:InvokeFunction’
    Principal: sqs.amazonaws.com
在输出部分,我有以下内容:

Outputs:
  ServiceLambdaFunctionQualifiedArn:
  Value:
    ‘Fn::GetAtt’: [ lambdaQueueFirst, Arn ]
这将返回一条消息:
模板错误:Fn::GetAtt的实例引用了未定义的资源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" ] ] }
参考:

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

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}"

请参阅和示例。

显示您的
类型:AWS::Serverless::Function
资源您的
lambdaQueueFirst
资源在哪里?您好。谢谢你们两位的回复。该函数位于serverless.yml文件的“function”部分下。它不在参考资料部分。还有可能吗?这对我很有用。我可以使用
{“Fn::GetAtt:[“LoghandlerLambdaFunction”,“Arn”]}在
参考资料
部分中获取lambda函数的
Arn