以下配置是从我的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
中部署taskHandler
和region-a
功能
并在alexaHandler
,region-b
和region-c
中部署region-d
。
如果我执行命令sls deploy --region us-east-1
,则将部署所有三个功能,但我不需要。我只需要部署两个功能。
sls deploy function
,因为它只交换zip文件。serverless.yml
将alexaHandler放入子目录中不起作用,因为部署仅打包子目录,并且不包括父目录中的代码。 (许多代码在3个功能之间共享)有什么建议可以解决这个要求?
答案 0 :(得分:0)
浏览完所有无服务器插件列表后,我发现可以通过serverless-plugin-select
实现上述要求使用此插件,我们可以选择根据stage
或region
的值从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
,则函数部分的最后一行将填充自定义变量部分中设置的文件,然后将部署测试代码。