无服务器条件函数部署

时间:2019-02-26 10:00:54

标签: server serverless-framework aws-serverless

以下配置是从我的serverless.yml中提取的

service: test-svc

provider:
  name: aws
  ...

functions:
  apiHandler:
    handler: index.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'
  taskHandler:
    handler: task.handler
    events:
      - sqs:
          ...
  alexaHandler:
    handler: alexa.handler
    events:
     - alexaSmartHome: ...

我只想在apiHandler中部署taskHandlerregion-a功能

并在alexaHandlerregion-bregion-c中部署region-d

如果我执行命令sls deploy --region us-east-1,则将部署所有三个功能,但我不需要。我只需要部署两个功能。

  1. 不能使用sls deploy function,因为它只交换zip文件。
  2. 使用新的serverless.yml将alexaHandler放入子目录中不起作用,因为部署仅打包子目录,并且不包括父目录中的代码。 (许多代码在3个功能之间共享)

有什么建议可以解决这个要求?

2 个答案:

答案 0 :(得分:0)

浏览完所有无服务器插件列表后,我发现可以通过serverless-plugin-select

实现上述要求

使用此插件,我们可以选择根据stageregion的值从serverless.yml中仅部署一些功能。就我而言,使用区域值。

以下被修改为serverless.yml。每个功能中添加了plugins部分,并添加了regions键。

service: test-svc


plugins:
  - serverless-plugin-select

provider:
  name: aws
  ...

functions:
  apiHandler:
    ...
    regions:
      - us-west-2
  taskHandler:
    ...
    regions:
      - us-west-2
  alexaHandler:
    ...
    regions:
      - eu-west-1
      - us-east-1
      - us-west-2

通过上述配置,我使用以下bash脚本针对所有区域进行部署。

#!/usr/bin/env bash

serverless deploy --region eu-west-1
serverless deploy --region us-east-1
serverless deploy --region us-west-2

答案 1 :(得分:0)

您可以通过将条件函数存储在自定义变量(例如)中来有条件地选择serverless.yml中的值

INDIRECT("Constants!F"&Input!$C$7&":F"&Input!$C$10)...

在部署无服务器服务器时,您应该传递命令行选项### serverless.yml provider: name: << aws or your provider >> runtime: << your runtime, eg nodejs8.10 >> region: << your aws region >> stage: ${opt:stage, 'dev'} custom: extraCode: dev: testing: ${file(testing_only/testing_endpoints.yml)} prod: ... ## and then at the functions section of serverless.yml functions: - ${file(functions/someFunctionsInAFile.yml)} - ${file(functions/someMoreFunctions.yml)} - ${self:custom.extraCode.${self:provider.stage}} ,以便在传递--stage=myStageName--stage=dev时,函数部分的最后一行将为空白,并且没有任何内容部署。

如果您通过--stage=prod,则函数部分的最后一行将填充自定义变量部分中设置的文件,然后将部署测试代码。

相关问题