aws-lambda - 如何引用使用无服务器框架创建的 AWS lambda 函数的 Arn 和名称

标签 aws-lambda aws-cloudformation serverless-framework

我正在使用无服务器框架创建 lambda 函数,并希望能够在 serverless.yml 的其他部分交叉引用其 Arn 和名称。

我很惊讶我发现这有多困难,因为如果 lambda 是通过普通的 CloudFormation 创建的,那么 !GetAtt 和 !Ref 似乎无法像我预期的那样工作。 (AWS::Lambda::Function 返回 Ref 和 Fn::GetAtt 这将使这变得简单!)

我发现了一些帖子,其中提到了解决方案,但没有任何内容用简单的英语说明如何实现这一点。

设置

无服务器.yml

...
functions:
  - ${file(functions/sendEmail.yml)}
...

sendEmail.yml

sendEmail:
  handler: lambda-functions/send-email.handler
...

尝试引用

阿恩

在我尝试过的模板的另一部分:

...    
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

TestFunction:
  Type: AWS::Serverless::Function
  Properties:
    Handler: index.handler
    FunctionName: myFunction

引用时,

LambdaArn: !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:myFunction

关于aws-lambda - 如何引用使用无服务器框架创建的 AWS lambda 函数的 Arn 和名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60439849/

相关文章:

python - 如何从 AWS Lambda 中的 s3 存储桶读取 csv 文件?

node.js - 为什么简单的 SQL 查询会导致我的 Lambda 函数显着变慢?

amazon-web-services - 如何在 serverless.yml 中设置 AWS Lambda 的重试次数?

amazon-web-services - 无服务器框架 - 在 "self"源未找到值

mysql - 如何使用diesel和mysql调用/部署无服务器功能?

javascript - 从 S3 动态加载模块到 node.js AWS lambda

amazon-web-services - YAML 中的 CloudFormation 函数

amazon-web-services - 使用 Qa、Dev 和 Prod 作为 Cloudformation 中的环境

aws-cloudformation - 当 Elasticsearch 请求过高时设置 AWS cloudwatch 警报

npm - 是否有 serverless-cloudformation-changesets 的替代方案?对于无服务器版本 3