是否有人使用无服务器框架知道是否可以使用相同的无服务器部署文件部署到所有三个云提供程序,如果基础代码能够?
还是每个云提供商的无服务器文件?
谢谢
假设您的所有功能代码都是提供者不可知的...
每个提供商都有自己定义和配置事物的特定方式,因此您希望每个提供者的serverless.yml
文件的低级详细信息都不同。
话虽如此,serverless.yml
的高级属性对于大多数(如果不是全部(提供商几乎是常见的。
service:
provider:
plugins:
functions:
这将使您可以为所有提供商提供一个serverless.yml
,这些提供商仅根据环境变量引用其他YAML文件。假设您的serverless-aws.yml
,serverless-azure.yml
和serverless-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 [ "$1" != "" ]; then
echo "copying serverless-$1.yml to serverless.yml and running serverless deploy"
cp serverless-$1.yml serverless.yml && sls deploy
else
echo "Please append provider, like 'deploy.sh aws' or 'deploy.sh azure'"
fi
真的希望您可以将配置文件指定为部署选项,如下所示:https://github.com/serverless/serverless/serverless/issues/4485