【问题标题】:Export the Lambda ARN导出 Lambda ARN
【发布时间】:2019-05-21 12:37:59
【问题描述】:

我想导出我使用无服务器框架创建的 Lambda ARN,因为我需要在其他 CF 模板中使用此 ARN

我在 serverless.yml 文件中定义了输出和导出。

resources:
  Outputs:
    ServiceLambdaFunctionQualifiedArn:
      Export:
        Name: MyServiceARN

一切正常。

但是,导出包含 lambda 版本 ARN(即 arn:aws:lambda:region:12345:function:servicename:2)。

这会导致问题,因为此 ARN 被其他 CF 使用,因此无法更新。

“Export MyServiceArn 无法更新,因为它正在被 xyz 使用”

有没有办法在没有版本号的情况下获取 ARN?

感谢您的帮助。

【问题讨论】:

  • 显示完整的ServiceLambdaFunctionQualifiedArn 输出。您缺少 value 属性。
  • 我其实并没有定义value属性,它已经在做了。

标签: amazon-web-services aws-lambda amazon-cloudformation serverless-framework


【解决方案1】:

这对我有用:

在具有唯一导出名称<stack>-<stage>-TransformDataLambdaArn 的第一个无服务器堆栈中导出:

service: first-service

provider:
  name: aws
  runtime: nodejs12.x
  region: eu-west-1
  stage: ${opt:stage, 'dev'}

functions:
  myLambda:
    handler: src/handlers/myLambda.handle

resources:
  Outputs:
    MyLambdaFunctionArn:
      Description: 'ARN will be imported by other stacks'
      Value: !GetAtt MyLambdaFunction.Arn
      Export:
        Name: ${self:service}-${self:provider.stage}-MyLambdaArn

并像这样在第二个堆栈中导入相同的阶段:

Fn::ImportValue: first-service-${self:custom.stage}-MyLambdaArn

【讨论】:

    【解决方案2】:

    2020 年 7 月更新

    这个问题仍然有效,并且接受的答案不适用于无服务器 1.74.1。我的用例是将自定义授权 lambda(作为单独的服务)导出到其他服务。

    这对我有用:

    resources:
      Outputs:
        ServiceLambdaFunctionQualifiedArn:
          Export:
            Name: MyServiceARN
    

    您不需要对值的引用,arn 应该仅使用名称导出。

    然后在另一个服务中使用导出:

    authorizer:
      name: MyServiceARN
      arn:
        Fn::ImportValue: MyServiceARN
    

    添加到此的“名称”最终是自定义授权方用例所必需的。

    【讨论】:

    • 不行,每个Export都需要Value成员
    【解决方案3】:

    不,只需在 serverless.yml 中添加 versionFunctions: false 在提供者内部

    喜欢这个

      name: aws
      region: eu-west-1
      runtime: nodejs10.x
      versionFunctions: false
      stage: ${opt:stage, 'dev'}
    

    【讨论】:

      【解决方案4】:

      简而言之:

      !GetAtt MyCreatedResource.Arn
      
      

      例如

      Outputs: 
        FluentBitVerifyRole:
          Description: ARN of the verification role
          Value: !GetAtt FluentBitVerifyRole.Arn
      

      【讨论】:

        【解决方案5】:

        试试

        resources:
          Outputs:
            ServiceLambdaFunctionQualifiedArn:
              Export:
                Name: MyServiceARN
              Value:
                Fn::GetAtt: ServiceLambdaFunction.Arn
        

        【讨论】:

        • 不适合我。 ` 模板格式错误:每个输出成员的值字段必须评估为字符串而不是映射。` 这一直显示。我已经变成和你差不多了。
        • 不适合我...我使用的 SLS 版本是 1.40.0 ` 模板格式错误:每个输出成员的值字段必须评估为字符串而不是映射。`
        • 尝试使用Value: Ref: ServiceLambdaFunction
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 2021-09-18
        • 1970-01-01
        • 2021-04-24
        • 2016-04-08
        • 2019-09-10
        • 2020-01-13
        相关资源
        最近更新 更多