无服务器部署到 AWS、Azure 或 GCP

Serverless deploying to AWS, Azure or GCP

使用无服务器框架的人是否知道如果底层代码可用,是否可以使用相同的无服务器部署文件部署到所有三个云提供商?

或者是每个云提供商特定的无服务器文件?

谢谢

假设您所有的函数代码都是提供者不可知的...

每个提供程序都有自己特定的定义和配置方式,因此您会期望每个提供程序的 serverless.yml 文件的 low-level 详细信息会有所不同。

话虽这么说,serverless.yml 的 high-level 属性对于大多数(如果不是全部)提供者来说非常普遍。

service:


provider:


plugins:


functions:

这将允许您为所有提供商提供一个 serverless.yml,这些提供商仅根据环境变量引用其他 YAML 文件。假设您的 provider-specific 配置有 serverless-aws.ymlserverless-azure.ymlserverless-google.yml,您应该可以在 serverless.yml

中使用它
service: ${file(serverless-${env:PROVIDER}.yml):service}


plugins: ${file(serverless-${env:PROVIDER}.yml):plugins}


provider: ${file(serverless-${env:PROVIDER}.yml):provider}


functions:
    getSomething: ${file(serverless-${env:PROVIDER}.yml):functions.getSomething}
    createSomething: ${file(serverless-${env:PROVIDER}.yml):functions.createSomething}
    updateSomething: ${file(serverless-${env:PROVIDER}.yml):functions.updateSomething}
    deleteSomething: ${file(serverless-${env:PROVIDER}.yml):functions.deleteSomething}

无论何时部署,您都可以通过指定 PROVIDER 环境变量来选择要使用的提供程序。

$ PROVIDER=aws sls deploy    # Deploys to AWS

$ PROVIDER=azure sls deploy    # Deploys to Azure

$ PROVIDER=google sls deploy    # Deploys to GCP

@dashmug 的回答应该有效但没有。如果您尝试包括整个提供者部分,它不会被评估——即 srs print 只是吐出未评估的表达式:

provider: ${file(serverless-${env:PROVIDER}.yml):provider}

尝试参数化每个键不起作用,因为它改变了顺序,这似乎导致部署失败:

//serverless.yml
...
provider:
  name: ${file(serverless-${env:PROVIDER}.yml):provider.name}
  runtime: ${file(serverless-${env:PROVIDER}.yml):provider.runtime}
  stage: ${file(serverless-${env:PROVIDER}.yml):provider.stage}
...

结果:

> sls print
service: my-crossplatform-service
provider:
  stage: prod
  name: aws
  runtime: nodejs8.10

我最终只是维护了单独的 serverless.yml 文件并使用一个小的 bash 脚本进行部署,该脚本首先复制了相应的文件:

#!/bin/bash
if [ "" != "" ]; then
  echo "copying serverless-.yml to serverless.yml and running serverless deploy"
  cp serverless-.yml serverless.yml && sls deploy
else
    echo "Please append provider, like 'deploy.sh aws' or 'deploy.sh azure'"
fi

真希望您可以按照此处的要求将配置文件指定为部署选项:https://github.com/serverless/serverless/issues/4485