Slide 1

Slide 1 text

Hibiya.Tech #5 異次元のCloudFormation 拡張コマンド~Rain~ 2024-05-24

Slide 2

Slide 2 text

自己紹介 渡邉 洋平(watany) ● NTTテクノクロス株式会社 ● JAWS-UG東京 運営 ● Japan AWS Top Engineer 2023

Slide 3

Slide 3 text

CloudFormation運用をめぐる状況は厳しく ● AWS CDKでラップして使う ● AWS SAM派の人はわかる ● 素で使うのは負け ※個人の見解です

Slide 4

Slide 4 text

Rainがいるぜ

Slide 5

Slide 5 text

Rain ● CloudFormation(以下CFn)のテンプレート、スタックを管理するCLIツール ● 公式RepositoryでOSSの形で提供されている ● 現状も開発が継続されている(重要) https://github.com/aws-cloudformation/rain

Slide 6

Slide 6 text

CFnそのままだと何が困るか CFnの見直し理由 1. Templateを書きづらい ● SupersetのCDKやSAMで解決する? ● とはいえ既存資材がCFnのことはある。 ● 生成AIの支援があれば、CFnで十分作れることも 2. Stackを運用しづらい ● CDKやSAMでもよいが、この点ならRainで解決できる つまり、CFn運用へのペインを解決したいだけならRainが役に立つ

Slide 7

Slide 7 text

Rainの実例 CFnテンプレートのCRUD操作を例に紹介します 1. Create 2. Read 3. Update 4. Delete

Slide 8

Slide 8 text

1. Create

Slide 9

Slide 9 text

1.Create with AWS CLI ● 作ったら非同期でStackIdだけが返却される。 ○ 今の状態は? 失敗したら?

Slide 10

Slide 10 text

1.Create with Rain ● 変更セットを表示し、y/nでデプロイ前確認がある ● デプロイ中の状況をコンソールに出力される ● 不正なテンプレートなら、ロールバックまでを表示

Slide 11

Slide 11 text

1.Create with Rain ● OKテイク

Slide 12

Slide 12 text

2. Read

Slide 13

Slide 13 text

2.Read with AWS CLI ● Stackの状況(StackName/StackStatus)を知りたい ○ CLIの場合はjqを組み合わせると便利

Slide 14

Slide 14 text

2.Read with Rain ● rainは同等の操作が簡単 ● 「rain ls 」でスタックの状況確認 ○ 「rain ls」でRegion内のスタック一覧、「rain ls -a」で全Region

Slide 15

Slide 15 text

2.Read with Rain ● 「rain cat 」でスタックの詳細確認

Slide 16

Slide 16 text

3. Update

Slide 17

Slide 17 text

3.Update with AWS CLI ● Createと別のコマンド、Createと同じ問題 ● > 作ったら非同期でStackIdだけが返却される。 ○ > 今の状態は? 失敗したら?

Slide 18

Slide 18 text

3.Update with Rain ● Createと同じ`rain deploy`でUpdate可能!(CDK相当)

Slide 19

Slide 19 text

4. Delete

Slide 20

Slide 20 text

4.Delete with AWS CLI ● Deleteすると結果が標準出力されない(?!) ○ 今の状態は? 失敗したら?

Slide 21

Slide 21 text

4.Delete with Rain ● rain rm で「スタックの状態」「削除状況」「削除成否」を表示 ○ 驚き最小限の挙動

Slide 22

Slide 22 text

いかがでしたか? ● ここまでのまとめ ○ CloudFormation APIの非同期性をRainが吸収してくれる ○ コマンドも直観的。Linuxユーザなら扱いやすい。 ● 想定問答 ○ これってAWS CDK CLIでも同様なのでは? ■ はい。ただ、他にも色々できます。 ■ CDKユーザも以降の機能のためにrainを入れた方がいいです。

Slide 23

Slide 23 text

5. CRUD以外にできること

Slide 24

Slide 24 text

Build

Slide 25

Slide 25 text

rain build ● CFnテンプレートのひな型を作るためのコマンド ● 例: うろ覚えでAPIDestinationを作る場合、 ○ 公式ドキュメント無しでも「--list」で探して……

Slide 26

Slide 26 text

rain build ● rain buildの引数に入れると、ひな型が出てくる!

Slide 27

Slide 27 text

rain build ● -b(bare)を指定すると、必要最小限のひな型に

Slide 28

Slide 28 text

Logs

Slide 29

Slide 29 text

rain logs ● Stackのイベントを人間が読みやすい形式にスッと出せる。 ○ 「aws cloudformation describe-stack-events」はevent毎に10行くらいあるので読みづ らい。 ○ マネジメントコンソールで見たい理由の半分 (私見)が解決

Slide 30

Slide 30 text

rain logs ● CREATE_FAILEDの経緯も抜粋して表示。 ○ logs –allで全表示できる

Slide 31

Slide 31 text

Tree

Slide 32

Slide 32 text

rain tree ● CFn Templateの構造を表示してくれる

Slide 33

Slide 33 text

rain tree ● dot形式も対応しているので、認知負荷をさらに減らせる

Slide 34

Slide 34 text

いかがでしたか? (2回目) ● ここまでのまとめ ○ RainはCRUD操作だけでなく、CFn Stackの運用に役立つ機能をCUIで提供。 ○ 慣れるとGUでの参照より、CloudShell+Rainが快適になる! ● この辺の詳しい解説はカックさんの Blogも詳しい https://kakakakakku.hatenablog.com/entry/2023/05/05/110658

Slide 35

Slide 35 text

6. も~っと!CRUD以外にできること

Slide 36

Slide 36 text

Stackset

Slide 37

Slide 37 text

rain stackset ● rain stackset でStackSetのCRUD操作が可能に! ○ こちらの素のAWS CLI叩くの不便なのでありがたい。。。

Slide 38

Slide 38 text

Forecast

Slide 39

Slide 39 text

rain forecast (Experimental) ● 実際のStack作成前に、失敗を予測する機能 ○ Not Linter (rain fmtはTemplateのFormatter) ● 例:作成するBucket名被りを事前にチェック

Slide 40

Slide 40 text

● 現状は開発中。ロードマップの例 ○ EIP制限のチェック ○ EC2 Instance Typeが指定したAZで利用可能か? ○ VPC FlowlogsのFormatエラー ○ etc… ● ロードマップはGithub ○ https://github.com/aws-cloudformation/rain/tree/main/internal/cmd/forecast rain forecast (Experimental)

Slide 41

Slide 41 text

Build + Claude3

Slide 42

Slide 42 text

● rain build…ひな型に値埋めてほしいな。 ● 生成AIってやつで何とかならんか? → なる。 ○ --model, --prompt で指定する。 rain build + Generative AI

Slide 43

Slide 43 text

● こういうのが作れる ○ ちなみにHaikuで作ると 上手く動かない … rain build + Generative AI

Slide 44

Slide 44 text

● Opusで解決だ! ○ わたしが追加しました rain build + Generative AI https://github.com/aws-cloudformation/rain/pull/374

Slide 45

Slide 45 text

まとめ ● RainはCFnユーザ(SAM/CDK含む) 必須のツールである ○ 悩んだら導入するくらいで良い ● いまだに機能開発されて、まだまだ成長している ● 2024年もRainを使ってこ ○ https://github.com/aws-cloudformation/rain