最近は個人開発をはじめとした様々な案件でServerlessを利用しています。

簡単に言うとAWS LambdaやGoogle Cloud Functionsなどの FaaS と呼ばれる類のリソースの作成や更新といった操作を効率よくできるツールです。

ApexやAWSの提供するSAM CLIなども類似のツールと言えるかと思います。


背景

Serverlessはコマンド一発でデプロイが可能なので、コードや依存パッケージをまとめてからアップロードするなどの作業が不要です。
そのため手元から更新したり、CIから実行するのもとても容易です。

デプロイのフローが完全に一本化されていれば問題はないかもしれませんが、普段はCIからデプロイしてるけどちょっとした修正なので手元からデプロイしたい、または失敗したのでロールバックしたいとなることもあります。

このような時に「今どの状態になってるんだっけ?」となることがたまにあるので、バージョン情報を簡単に付与できたらなと思っていました。

そこで package.json の情報を読み込んでデプロイする時に追加するようにしてみました。


やったこと

追加の情報などを別のYAMLファイルで管理したりはしていましたが、JSONファイルも読み込めることを最近になって知りました。

serverless をnpmやyarnでプロジェクト配下にインストールしていれば package.json があるはずなのでこれの version を追加で読み込みます。

例としてディレクトリにソースコードと package.json, serverless.yml があるとします。

package.json1.0.0 というバージョン情報を持っています。

{
  ...
  "version": "1.0.0",
  ...
}

serverless.yml でこれを読み込むには以下のようにします。

custom:
  package: ${file(./package.json)} # package.jsonを読み込む

この状態であれば ${self:custom.package.version} とすることで 1.0.0 というバージョン情報をserverlessのデプロイ時に付与できるようになりますので VERSION という環境変数に渡してみました。

provider:
  ...
  environment:
    VERSION: ${self:custom.package.version} # 環境変数VERSIONにあてる

バージョン情報を適宜更新するという前提はありますが、これで現在どの状態でデプロイされているかを簡単に確認できるようになりました。