Aws lambda 如何引用使用无服务器框架创建的AWS lambda函数的Arn和名称
我正在使用Serverless框架创建一个lambda函数,并希望能够在Serverless.yml的其他部分交叉引用它的Arn和名称 我很惊讶我发现这是多么困难!格塔特和!如果lambda是通过vanilla CloudFormation创建的,那么Ref似乎不像我预期的那样工作。AWS::Lambda::函数返回Ref和Fn::GetAtt,这将使操作变得简单 我发现有几篇文章提到了解决方案,但没有用通俗易懂的英语说明如何做到这一点 设置 serverless.yml sendmail.yml 试图引用 阿恩 在模板的另一部分中,我尝试了:Aws lambda 如何引用使用无服务器框架创建的AWS lambda函数的Arn和名称,aws-lambda,amazon-cloudformation,serverless-framework,Aws Lambda,Amazon Cloudformation,Serverless Framework,我正在使用Serverless框架创建一个lambda函数,并希望能够在Serverless.yml的其他部分交叉引用它的Arn和名称 我很惊讶我发现这是多么困难!格塔特和!如果lambda是通过vanilla CloudFormation创建的,那么Ref似乎不像我预期的那样工作。AWS::Lambda::函数返回Ref和Fn::GetAtt,这将使操作变得简单 我发现有几篇文章提到了解决方案,但没有用通俗易懂的英语说明如何做到这一点 设置 serverless.yml sendmail.ym
...
LambdaFunctionArn: !GetAtt sendEmail.Arn
但是,当我部署时,我得到:
Error: The CloudFormation template is invalid: Template error: instance of Fn::GetAtt references undefined resource sendEmail
我注意到最终的CloudFormation模板已将sendEmail转换为sendEmailLambdaFunction,因此我尝试:
LambdaFunctionArn: !GetAtt sendEmailLambdaFunction.Arn
但是收到了一个类似的错误
名称
我也希望能够引用这个名字,但很遗憾
!Ref sendEmail
导致错误的原因:
Error: The CloudFormation template is invalid: Template format error: Unresolved resource dependencies [sendEmail] in the Resources block of the template
对于我需要做出的任何精确更改的帮助,以获得lambda的Arn和名称,将不胜感激
提前谢谢!
我我不确定最佳实践,但下面的内容对我很有用 在无服务器函数中提供functionName,当您需要arn时,可以形成它 test.yaml 引用时
LambdaArn: !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:myFunction
我不确定最佳实践,但下面的内容对我很有用 在无服务器函数中提供functionName,当您需要arn时,可以形成它 test.yaml 引用时
LambdaArn: !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:myFunction
好的,感谢您让我走上正轨,我实现了如下功能解决方案:
serverless.yml
注:符号为:
#{AWS::AccountId}
需要plugin:serverless伪参数
sendmail.yml
在别处
如果lambda是通过普通的CloudFormation、AWS::lambda::Function、resource创建的,那么我不能简单地使用Ref和Fn::GetAtt,这仍然是一件很遗憾的事情,但这目前还有效
希望这对其他人有帮助。再次感谢你为我安排了这门课程 好的,多亏了让我走上正轨,我实现了如下功能解决方案:
serverless.yml
注:符号为:
#{AWS::AccountId}
需要plugin:serverless伪参数
sendmail.yml
在别处
如果lambda是通过普通的CloudFormation、AWS::lambda::Function、resource创建的,那么我不能简单地使用Ref和Fn::GetAtt,这仍然是一件很遗憾的事情,但这目前还有效
希望这对其他人有帮助。再次感谢你为我安排了这门课程 这就是为什么我不建议使用那个框架,SAM好得多。这就是为什么我不建议使用那个框架,SAM好得多。
custom:
...
myEnvironment:
assetPreName: ${self:service.name}-${self:provider.stage}
arnRegionAndAccount: ${self:provider.region}:#{AWS::AccountId}
...
myContact:
...
lambdaFuncName: ${self:custom.myEnvironment.assetPreName}-sendEmail
lambdaFuncArn: arn:aws:lambda:${self:custom.myEnvironment.arnRegionAndAccount}:function:${self:custom.myContact.lambdaFuncName}
#{AWS::AccountId}
sendEmail:
...
name: ${self:custom.myContact.lambdaFuncName}
...
LambdaFunctionArn: ${self:custom.myContact.lambdaFuncArn}