方法 1:通过默认值实现基于阶段的变量
这是使用级联值变量的相当简单的技巧。第一个值是您想要的值,第二个值是默认值或后备值。也称为级联变量。
// serverless.yml
provider:
stage: "dev"
custom:
provisionedConcurrency:
live: 100
staging: 50
other: 10
myLambda:
handler: src/lambdas
name: myLambda
provisionedConcurrency: ${self:custom.provisionedConcurrency.${self:provider.stage}, self:custom.provisionedConcurrency.other}
上面的阶段设置为 dev 将默认为“其他”值 10,但是如果您通过以下方式设置阶段serverless deploy --stage live
那么它将使用实时值 100。
请参阅此处了解更多详细信息:https://www.serverless.com/framework/docs/providers/aws/guide/variables#syntax https://www.serverless.com/framework/docs/providers/aws/guide/variables#syntax
方法 2:通过 Javascript 异步值
您可以使用 js include 并将条件逻辑放在那里。这称为“异步值支持”。基本上,这允许您将逻辑放入您包含的 JavaScript 文件中,并且它可以根据各种情况返回不同的值(例如,您所在的 AWS 账户,或者是否设置了某些变量,等等)。基本上,它允许你这样做......
provisionedConcurrency: ${file(./detect_env.js):get_provisioned_concurrency}
如果您在此文件夹中创建一个名为 detector_env.js 的 javascript 文件,并且它的内容类似于...
module.exports.get_provisioned_concurrency = () => {
if ("put logic to detect which env you are deploying to, eg for live") {
return Promise.resolve('100');
} else {
// Otherwise fallback to 10
return Promise.resolve('10');
}
}
欲了解更多信息,请参阅:https://www.serverless.com/framework/docs/providers/aws/guide/variables#with-a-new-variables-resolver https://www.serverless.com/framework/docs/providers/aws/guide/variables#with-a-new-variables-resolver
我觉得我必须在这里回复,尽管这是几个月前提出的,因为没有一个答案与正确答案相差甚远,我真的为作者或来到这里的任何人感到抱歉。