🎉
Serverless Framework - CLI のオプションを必須指定扱いにする Tips
要点
--stage
や --region
などのオプションは、無指定にした場合は "dev", "us-east-1" のようなデフォルト値を埋める挙動が標準になっている。
しかし、デプロイの安全性を考えると、これらのオプションは無指定だった場合その場でエラーを出して終了してほしい。
これを追加プラグインなしで実現する方法について、調査した
Serverless Framework のバージョンは以下
# npx sls --version
Framework Core: 2.31.0 (local)
Plugin: 4.5.2
SDK: 4.2.2
Components: 3.7.6
やり方
参考ドキュメント:
サンプル実装はこちら。
自前のリゾルバを書くことができ、そこでならオプションの無視定時の挙動を validate できそう。
# serverless.yml
variablesResolutionMode: 20210219
provider:
name: aws
runtime: nodejs12.x
region: ${file(./config.js):config.region}
// config.js
/**
* https://www.serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-in-javascript-files
*
* @param {*} serverless
* @returns
*/
module.exports = ({options, resolveConfigurationProperty}) => {
console.log(options);
if(!options.region) {
const errorMessage = 'CLI Option "region" not supplied';
console.log(errorMessage);
throw new Error(errorMessage);
}
return {
config: {
...options,
}
}
};
※とはいえ、普段のプロジェクトでは python を使っているで、このためだけに自前の js を書きたくない気持ちはある。個人的にも ${file(./path/to/module.js)}
を使った書き方はあまり好きではない(ユースケースの多くは環境変数で代用できるし、そうすべき、という見解)。
Discussion