【问题标题】:How to have optional resources with Serverless framework on AWS如何在 AWS 上使用无服务器框架拥有可选资源
【发布时间】:2018-06-18 15:48:15
【问题描述】:

问题:在基于无服务器框架的 Lambda 上拥有可选资源的最佳方式是什么?

我想让 Serverless 关心 Lambda 在较低环境(开发、测试、暂存)上所需的资源,并为较高环境(如生产)提供独立的资源。

我正在考虑使用类似的东西

resources: 
    Resources: ${file(../${self:provider.stage}-resources.yml)}

我的资源 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}" ] ]  }

但它不起作用。关于实现这一目标的最佳实践有什么想法吗?

【问题讨论】:

  • 这似乎是对的,我正在做类似的事情。 cloudformation 堆栈 json 是否添加了您的变量?你能分享一下你的stage-resource.yml 的结构吗?
  • 你的*-resources.yml文件里面有什么?
  • @dege 我用更多信息更新了我的问题。问题是,当我尝试这样部署它时,它会卡住,做任何事情。
  • 抱歉@abierto 看不到问题,您是否试图访问路径错误的文件?您是否尝试在 serverless.yml 上设置自定义变量并在转到外部文件之前使用?
  • @dege 如我所见,如果我只加载队列并且主题一切都很好。当我尝试同时加载订阅时,它不起作用。

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


【解决方案1】:

替换这个:

TopicArn: { "Fn::Join" : ["", ["arn:aws:sns:${self:provider.region}:", { "Ref" : "AWS::AccountId" }, ":${self:resources.Resources.SNSTopic.Properties.TopicName}" ] ]  

用这个:

TopicArn: {"Ref" : "SNSTopic"}

解决了我的问题。

【讨论】:

  • 我很高兴找到了解决方案 :)
【解决方案2】:

问题中的描述侧重于在单个资源文件中获取所有资源,并在每个阶段使用不同的此类文件。这可行,但有一个限制,即您必须在每个阶段至少放置一个资源。并且还迫使您将资源组合在一起。

我在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), ''}

然后,您只需创建 optional-resource.prod.yml 来保存您的生产专用资源。在为 dev 阶段生成模板时,serverless 将可选引用解析为空元素,因为该文件不存在,然后忽略它。

请注意,我仅使用了阶段变量作为示例,但它可以是任何其他变量,例如区域或自定义变量。

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 2020-07-06
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    相关资源
    最近更新 更多