导出 Lambda ARN

Export the Lambda ARN

我想导出使用无服务器框架创建的 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 cannot be updated as it is in use by xyz"

有没有办法获取没有版本号的 ARN?

感谢您的帮助。

尝试

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

简而言之:

!GetAtt MyCreatedResource.Arn

例如

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

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

像这样

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

更新 07-2020

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

以下是对我有用的方法:

resources:
  Outputs:
    ServiceLambdaFunctionQualifiedArn:
      Export:
        Name: MyServiceARN

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

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

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

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

这对我有用:

在第一个无服务器堆栈中以唯一的导出名称导出 <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