以前 AWSで作業する時は今後はずっとCloudFormationだけ使っていこうと思った - でこてっくろぐ ねお というエントリを書きましたが、最近はAWS SAMを使って色々作っており、これはめっちゃ便利だな、しかも思ってたよりも柔軟性が高い、という気持ちになったのでこのエントリを書いている。
(と思ったけど、DynamoDBは細かい制御が効かなかったので、以下は主にLambda + IAMについて書いていると考えてください)
めっちゃ便利
- CloudFormationと比較してとにかく記述量が圧倒的に少ない、圧倒的に読みやすい
- CloudFormationと比較して、IAM Role周りの設定がある程度隠蔽されていて嬉しい。IAM Role周りはいつも何を付与すればいいかが難しいし、後から見ても難しい
- AWS SAM Localが使えて簡単に手元で動作確認ができる
柔軟性も高い
- IAM Roleの設定がSAMに隠蔽されていると言っても、リソースはCloudFormation同様に見られるので、後から細かい設定を知りたくなったときも問題ない
- IAM Roleの細かい設定をしたくなった際は細かい設定を行うための方法もある
- https://github.com/dekokun/twittermap/blob/master/template.yml#L37-L48 のあたりで、細かいIAMロールの指定をしている
- 同じテンプレートにCloudFormationもSAMも両方書ける
- まぁこれは好き不好きあると思うんだけど、分けたかったら分ければ良い
- 混在している例: https://github.com/dekokun/twittermap/blob/master/template.yml ではLambdaの設定はSAMで行い、step functionやcloudfrontの設定はCloudFormationでやっている
AWS SAMを使って色々作ったもの
- https://github.com/dekokun/twittermap/blob/master/template.yml
- 最近土日で東海道を歩いた時に使ったやつ(日本橋から東戸塚まで歩いた - でこらいふろぐ)。サイトは -> https://twittermap.dekokun.info/2018-03-17/
- SAM + CloudFormationを同じテンプレートに書いてる。SAMではIAMロールの細かい指定もしている
- https://github.com/dekokun/kibela-ifttt-gateway/blob/master/template.yml
追記
- DynamoDBとかは細かい制御が効かないため