Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Server 无服务器条件函数部署_Server_Serverless Framework_Aws Serverless - Fatal编程技术网

Server 无服务器条件函数部署

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

以下配置是从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,则函数部分的最后一行将填充自定义变量部分中设置的文件,然后将部署测试代码