[アップデート]AWS SAM CLIに実行時に利用したオプションを自動的にsamconfigに保存する機能が追加されました

2023.10.05

初めに

昨日AWS SAM CLI v1.98.0がリリースされました。

今回のアップデートで追加された--save-paramsオプションをsamコマンド実行時に付与することで、samconfigファイルを別途編集することなく実行時に指定したオプションを書き込んでくれるようになりました。

samconfigとは

samconfigはAWS SAM CLIで利用される設定ファイルとなります。
tomlもしくはyamlフォーマットで記述します。

こちらに値を設定するとsamコマンド実行の際に別途オプションを指定せずともそのオプションが指定されているのと同等の振る舞いをします。

例として以下のsamconfigファイルを用意します。

samconfig.toml

version = 0.1

[default title="samconfig.toml"]
[default.global.parameters]
stack_name = "sam-app"
debug = true

[default.build.parameters]
cached = true
parallel = true

[default.validate.parameters]
lint = true

この時以下の2つの実行は同義となります。

sam build
sam build --debug --cached --parallel

個人的なイメージとしては常に指定しておきたいものはsamconfigに指定しておき、スポットで必要となるものは都度コマンドで指定という感覚ではあります。

上記の通りsamconfigは常々編集するようなファイルではないのですが、これまでちょっとあのパラメータ変更したいなと思った時にわざわざ開いて編集する必要があり手間だったのが今後は--save-paramsオプションを指定してsamコマンドを実行することで実行するだけで実行時に指定したオプションを自動的にsamconfigファイルに書き込んでくれるようになりより楽に作業ができるようになります。

試してみる

以下の内容のsamconfig.tomlを用意して比較用に複製を作っておきます。正確には記述内容後にデプロイ等他のパラメータも含まれていますが本検証には影響はありません。

samconfig.toml

version = 0.1

[default]
[default.global.parameters]
stack_name = "sam-app"

[default.build.parameters]
cached = true
parallel = true

[default.validate.parameters]
lint = true

通常時の実行では当然samconfig.tomlに変動はありません。

% sam build --no-cached --debug      
2023-10-05 13:43:28,703 | Config file location: /Users/xxxxx/git/sam-app/samconfig.toml                                                                                         
2023-10-05 13:43:28,704 | Loading configuration values from [default.['build'].parameters] (env.command_name.section) in config file at
...
% diff samconfig.toml samconfig.toml.bk | wc -l
       0

--save-paramesオプションを実行すると--no-cachedオプション相当の設定となるようにcached = falseが設定されていることが確認できます。

% sam build --no-cached --save-params --debug
2023-10-05 13:46:57,559 | Return available internal hook packages                                                                                                                      
Saved parameters to config file 'samconfig.toml' under environment 'default': {'cached': False}
...
# 気になる点があって上記の実行後もいくつか試してる関係で変更時刻が上記の実行と少しずれてます                              
% diff -uBb samconfig.toml samconfig.toml.bk 
--- samconfig.toml      2023-10-05 14:47:10
+++ samconfig.toml.bk   2023-10-05 13:42:01
@@ -7,7 +7,7 @@
 stack_name = "sam-app"
 
 [default.build.parameters]
-cached = false
+cached = true
 parallel = true

ここでdebug = trueが設定されていないぞ?と思ったのですが一部設定は書き込まれないように例外処理がされているようです。

ユニットテストを見る限り少なくとも- --save-params--config-fileは除外されていそうですが、そのほかにも--debug--config-envあたりは対象外となっていそうです。

また機能としてはあくまで指定されたパラメータを保存機能となるため--cached--no-cachedのように対になるパラメータが存在しているものは書き換えられますが--parallelのように対になるものが存在しないオプションは書き換えられなかったり、そもそものパラメータの削除自体が行えない点はご注意ください。

終わりに

細かい機能ではありますがリリース後の検証やってるとそのタイミングだけ常にしたいオプションがあったりするので実行タイミングでセットで書き換えられて地味にありがたいです。

これでエディタのタブに複数のプロジェクトのsamconfigを開きっぱなしにしてる時に別のプロジェクトのファイルを触ってハマるのに悩まされなくて済みます。