Server 无服务器条件函数部署
以下配置是从my serverless.yml中提取的 我只想在区域a中部署apiHandler和taskHandler函数 并在区域b、区域c和区域d部署alexaHandler 如果我执行sls deploy-region us-east-1命令,所有三个功能都将被部署,但我不需要。我只需要部署2个函数 使用sls部署功能不是一个选项,因为它只交换zip文件。 将alexaHandler与new serverless.yml放在子目录中不起作用,因为部署只打包子目录,不包含父目录中的代码。3个功能之间共享许多代码Server 无服务器条件函数部署,server,serverless-framework,aws-serverless,Server,Serverless Framework,Aws Serverless,以下配置是从my serverless.yml中提取的 我只想在区域a中部署apiHandler和taskHandler函数 并在区域b、区域c和区域d部署alexaHandler 如果我执行sls deploy-region us-east-1命令,所有三个功能都将被部署,但我不需要。我只需要部署2个函数 使用sls部署功能不是一个选项,因为它只交换zip文件。 将alexaHandler与new serverless.yml放在子目录中不起作用,因为部署只打包子目录,不包含父目录中的代码。3
有没有关于处理这一要求的建议 浏览完所有无服务器插件列表后,我发现上述要求可以通过 使用这个插件,我们可以根据stage或region值从serverless.yml选择只部署几个函数。在我的例子中,使用区域值 以下是修改后的serverless.yml。在每个函数中添加了插件部分和区域键
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
在浏览了所有无服务器插件列表后,我发现上述要求可以通过 使用这个插件,我们可以根据stage或region值从serverless.yml选择只部署几个函数。在我的例子中,使用区域值 以下是修改后的serverless.yml。在每个函数中添加了插件部分和区域键
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
通过将条件函数存储在自定义变量中,可以有条件地选择serverless.yml中的值,如
### 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时,函数部分的最后一行将为空,不会部署任何内容
如果传入-stage=testing,则函数部分的最后一行将填充自定义变量部分中设置的文件,然后将部署测试代码 通过将条件函数存储在自定义变量中,可以有条件地选择serverless.yml中的值,如
### 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时,函数部分的最后一行将为空,不会部署任何内容
如果传入-stage=testing,则函数部分的最后一行将填充自定义变量部分中设置的文件,然后将部署测试代码