Serverless Framework v3新機能のStage Parameters紹介

| 3 min read
Author: noboru-kudo noboru-kudoの画像

2022/1/27にServerless Frameworkのメジャーアップデート(v3)がありました。

CLIの改善以外にそれほど大きな変更はなさそうですが、v3でStage parametersという新たな機能が導入されました。
これをうまく活用することで、環境ごとに異なる設定を簡潔に記述できます。

今回はこのStage parametersを紹介したいと思います。

v2の書き方

#

いろんな方法がありますが、最もシンプルなやり方だと、環境ごとに異なる設定値はcustomセクションに記述します。
TypeScriptで記述すると以下のようになります。関連部分のみ抜粋しています。

const serverlessConfiguration: AWS = {
service: 'slsv2',
frameworkVersion: '2',
custom: {
// 環境ごとの設定値を用意しておく
dev: {
endpoint: 'https://dev-foo.example.com/api/v1',
},
staging: {
endpoint: 'https://staging-foo.example.com/api/v1',
},
prod: {
endpoint: 'https://foo.example.com/api/v1'
},
},
functions: {
hello: {
handler: "src/functions/hello/handler.main",
events: [
{
http: {
method: 'post',
path: 'hello',
},
},
],
environment: {
// 環境固有値。stageによって切替。存在しない場合はlocalhostにフォールバック
FOO_API_ENDPOINT: '${self:custom.${sls:stage}.endpoint, "https://localhost:8000/api/v1"}'
}
}
},
};

上記のように、customセクションに環境ごとに異なる値をそれぞれ記述しておきます。
これをLambdaの環境変数にバインドする際には、${self:custom.${sls:stage}.endpoint, ...}のように、ネストした構文で環境ごとの設定値を取得しています。
ここでは1つのみで、それほど複雑ではありませんが、多数の環境固有値を持つとかなり読みにくくなってきます。
また、customにはプラグインの設定なども記述するので、これが何の設定かをコメント等で補足する必要もありました。

これを軽減するには、各envファイルを作成して環境変数化するなど、ひと手間加える必要がありました。

v3からの書き方

#

v3からは、以下のように書き換えることができます。

const serverlessConfiguration: AWS = {
service: 'slsv3',
frameworkVersion: '3',
// v3から導入。ここに環境ごとの設定値を記述する
params: {
// どれにもマッチしない場合のデフォルト値
default: {
endpoint: "https://localhost:8000/api/v1"
},
dev: {
endpoint: 'https://dev-foo.example.com/api/v1',
},
staging: {
endpoint: 'https://staging-foo.example.com/api/v1',
},
prod: {
endpoint: 'https://foo.example.com/api/v1',
}
},
functions: {
hello: {
handler: "src/functions/hello/handler.main",
events: [
{
http: {
method: 'post',
path: 'hello',
},
},
],
environment: {
// paramsより取得。どれを取得するかはstageパラメータによってServerless Frameworkが考慮してくれる
FOO_API_ENDPOINT: '${param:endpoint}',
}
}
},
};

新しく追加されたparamsセクションに、環境ごとの設定値を記述します。
これを環境変数にバインドするときも、${param:endpoint}とv2よりもかなりシンプルになりました。
どの環境の値を設定するかは、stageパラメータ(sls:stage)からServerless Frameworkが判断してくれます。
優先順位ルールについては、以下を参照してください。

まとめ

#

環境(Stage)ごとに異なる値を新しく導入されたparamsセクションに記述することで、より簡潔に環境固有値を参照できました。
まだv3には移行していませんが、移行する際には積極的に活用していきたいですね。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  7. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  8. IoT を使ってみる(その6:MQTTブローカー Mosquitto編) (2022-10-08)
  9. Nuxt3入門(第3回) - ユニバーサルフェッチでデータを取得する (2022-10-06)
  10. 統計学で避けて通れない自由度の話 (2022-06-20)