LoginSignup
1
2

More than 3 years have passed since last update.

AWS SAM CLIの設定切替

Posted at

経緯

新規プロダクトサービスの一環で、AWS SAMでServerlessを使ったんですが、今後の開発環境どうしよう?となりまして。
基本的なテストはローカルでいいにしてもステージング的な環境は欲しいし、複数のリリース先ってどうやって管理するん?
sam deployの設定をお手軽に切り替える、そんな機能ないの?
ドキュメントやhelp(当時sam --version 1.2.0)見てもそれっぽいものは見つからなかったんですが、AWS SAMのissue探してみたらあっさりありまして。

Release 1.3.0 - Support for Multi Config
https://github.com/aws/aws-sam-cli/releases/tag/v1.3.0

ついこないだリリースされてた。
※気づいた時点でちょうど1週間前

しかしまだあんまり情報ないようなので、とりあえずざっくり情報書いておきます。
あんまり詳しいわけではないので、間違ってたらごめんね!(修正ツッコミいただけると助かります

前提

$ sam --version
SAM CLI, version 1.3.2

ファイル指定とセクション指定

実はドキュメント化されていなかっただけで、--config-envというsamconfig.tomlをセクションで切り替えるオプションはあったらしいです。(って前述のissueに書いてありました)
また、今回で--config-fileというsamconfig.tomlを直指定できるオプションができました。
ちなみにsam buildなど他のコマンドでも--config-envや--config-fileは有効のようです。

--config-file [Filename]

samconfig.tomlファイル自体を指定します。
例えば本番用にsamconfig_prod.toml、開発用にsamconfig_dev.tomlというファイルを作成しておいて、コマンドで使い分ける感じです。

# 本番用
sam deploy --config-file samconfig_prod.toml

# 開発用
sam deploy --config-file samconfig_dev.toml

なお、1.3.0でマルチ構成がサポートされたタイミングで、sam deploy --guideで書き込み先ファイル名を聞いてくれるようになりましたので、別設定も作りやすいですね。
(私はコピペしちゃいましたけど)

--config-env [section]

samconfig.toml内のセクションを指定します。
guideオプション使用時に--config-envでセクションを指定すると、そのセクションで設定を作ってくれます。

# devセクションで設定を作る
sam deploy --config-env dev --guide

--config-envの指定がない場合は従来通りdefaultセクションで作られます。

実行するときは前述のセクションを指定します。

# 本番用
sam deploy --config-env prod

# 開発用
sam deploy --config-env dev

また、他コマンド(buildなど)で設定を指定したい場合はsamconfig.tomlに追記して対応できます。
例えばsam buildのtemplate.yamlを指定したい場合、下記のような感じになります。

samconfig.toml
[dev]
[dev.build]
[dev.build.parameters]
template_file = "template_dev.yaml"

[dev.deploy]
[dev.deploy.parameters]
stack_name = "stackname-dev"
s3_bucket = "deploy-bucket"
s3_prefix = "deploy-dev"
region = "ap-northeast-1"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"

これでsam build実行時にtemplate_dev.yamlを適用してくれます。

# template_dev.yamlを適用してsam build実行
sam build --config-env dev

sam build --template-fileで指定していたものが--config-envで指定できるようになるので、構成によってはちょっと楽かも。

まとめ

この2種を組み合わせると、かなり複雑な設定でもできますね。
ただ、今回に関しては全く複雑な構成ではなく、むしろ本番と開発の2本のみ、開発者が私だけなので、シンプルに--config-envで指定する方向になりそうです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2