🎉

Serverless Framework - CLI のオプションを必須指定扱いにする Tips

2021/03/24に公開

要点

--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

やり方

参考ドキュメント:

https://serverless.com/framework/docs/providers/aws/guide/variables/#reference-variables-in-javascript-files

サンプル実装はこちら。

https://github.com/hassaku63/example-serverless-cli-option-validate

自前のリゾルバを書くことができ、そこでならオプションの無視定時の挙動を 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