导出Lambda ARN

时间:2018-12-21 01:08:42

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

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

我在我的serverless.yml文件中定义了Outputs and Export。

resources:
  Outputs:
    ServiceLambdaFunctionQualifiedArn:
      Export:
        Name: MyServiceARN

一切正常。

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

这引起了问题,因为该ARN被其他CF使用,因此无法更新。

“导出MyServiceArn不能更新,因为xyz正在使用它”

有没有没有版本号的ARN的方法吗?

感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

尝试

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

答案 1 :(得分:1)

简而言之:

!GetAtt MyCreatedResource.Arn

例如

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

答案 2 :(得分:1)

更新07-2020

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

这对我有用:

resources:
  Outputs:
    ServiceLambdaFunctionQualifiedArn:
      Export:
        Name: MyServiceARN

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

然后在其他服务中使用“导出”:

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

自定义授权者用例最终需要在此名称上添加“名称”。

答案 3 :(得分:0)

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

像这样

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

答案 4 :(得分:0)

这对我有用:

使用唯一的导出名称 <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