abi*_*rto 5 resources amazon-web-services aws-lambda serverless-framework serverless
问题:在基于无服务器框架的 Lambda 上拥有可选资源的最佳方式是什么?
我想让 Serverless 关心 Lambda 在较低环境(开发、测试、暂存)上需要的资源,并为更高的环境(如生产)提供独立的资源。
我正在考虑使用类似的东西
resources:
Resources: ${file(../${self:provider.stage}-resources.yml)}
Run Code Online (Sandbox Code Playgroud)
我的资源 yml 如下所示:
SQSQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: ${self:service}-${self:provider.stage}-queue
SNSTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: TEST SNS Topic
TopicName: ${self:service}-${self:provider.stage}-topic
SNSSubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: mail@email.com
Protocol: email
TopicArn: { "Fn::Join" : ["", ["arn:aws:sns:${self:provider.region}:", { "Ref" : "AWS::AccountId" }, ":${self:resources.Resources.SNSTopic.Properties.TopicName}" ] ] }
Run Code Online (Sandbox Code Playgroud)
但它不起作用。关于实现这一目标的最佳实践有什么想法吗?
问题中的描述侧重于在单个资源文件中获取所有资源,并在每个阶段使用不同的此类文件。这可行,但有一个限制,即您必须在每个阶段至少放置一个资源。并且还迫使您将资源组合在一起。
包含我使用的可选资源的另一种方法serverless.yml如下:
provider:
name: aws
stage: ${opt:stage, 'dev'}
resources:
- ${file(./sls-resources/mandatory-resource.yml)}
- ${file(./sls-resources/optional-resource.${self:provider.stage}.yml), ''}
Run Code Online (Sandbox Code Playgroud)
然后,您只需创建optional-resource.prod.yml以保存仅限生产的资源。在为 dev 阶段生成模板时,无服务器将可选引用解析为空元素,因为该文件不存在,然后将其忽略。
注意我仅将阶段变量用作示例,但它可以是任何其他变量,例如区域或自定义变量。
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |