こんにちは。伊藤です。
IaCといえば最近はほとんどTerraformしか触っておりません…
「一番好きなAWSサービスはCloudFormationです!」
と息巻いていたあの頃を取り戻すため、久しぶりにCloudFormationを触ってみました。
8/22のアップデート記事にIaCジェネレーターについての機能強化が追加されています。
せっかくなのでIaCジェネレーターを使ってみましょう。
該当の記事はこちら
・IaCジェネレーターにおけるスキャン結果の見やすさの向上
・AWS Application Composerにおけるテンプレートプレビューの見やすさの向上
嚙み砕くと、これら2点が挙げられております。
(アップデート前のサービスを詳しく使っていなかったため比較できないことが悔やまれます)
事前準備
実際にIaCジェネレーターを使う前に、手動でいくつかのリソースを作成しておきます。
・S3バケット
・EBSボリューム
・RDSパラメーターグループ
の3つを作成しました。
これらのリソースには「IaC-managed : false」のタグを付けています。
その他にも私用で作成したCloudFormationテンプレートから生成されたリソースなどが存在しています。
概要
IaCジェネレーターについてのドキュメントはこちらになります
Generate templates from existing resources with IaC generator - AWS CloudFormation
手動作成したリソースをテンプレートに落とし込むことができ、
そのままCloudFormation管理下へのインポートまで可能です。
今回はドキュメントに記載の手順に沿う形で以下のように進めていきます。
- リソースのスキャン
- テンプレートを作成する
(新しいテンプレートを最初から作成し、スキャンしたリソースと関連リソースを追加します) - テンプレートレビュー
- リソースのインポート
- インポートしたリソースのタグ設定をCloudFormation経由で変更
1日あたりのスキャン数など制限がありますのでドキュメントの考慮事項もご確認ください。
IaCジェネレーターの料金についてはドキュメント上で明記されておりませんでしたが、
CloudFormationの利用と同様の扱いになっている、という認識をしております。
AWS Application Composerはドキュメントに記載があり、同じようにそれ自体には追加料金が発生しません。
Visually Compose Modern Applications - AWS Application Composer FAQs - AWS
IaCジェネレーターを使ってみる
それではIaCジェネレーターを使ってみましょう。
CloudFormationのサービスにIaCジェネレーターとApplication Composerが追加されています。
IaCジェネレーターのページに移動して「新しいスキャンを開始」を選択します。
ボタン押下後すぐに開始されました。
スキャン完了後の画面です。リソース数が少なかったためか数分で完了しました。
スキャンされたリソースの内訳や詳細などが確認できます。
内訳はフィルタリングすることもできます。
スキャンの結果を確認したら[テンプレート]タブに移動し「テンプレートを作成」を選択します。
「新しいテンプレートから開始」を選択し、テンプレート名、削除ポリシー、置換ポリシーの設定を行います。
今回は検証のため、削除ポリシーと置換ポリシーのどちらも「削除」にしました。
「次へ」を押下すると先ほど実施したスキャンの内容が表示されました。
「スキャンしたリソースを追加」部分では今回の検証用に手動作成したリソースを指定します。
タグキーでフィルタリングすることができたので「IaC-managed」で検索します。
残念なことに事前作成したRDSパラメーターグループは検索結果に出ませんでした。
CloudFormationのドキュメントに追加されているIaCジェネレーターの対象リソース一覧を確認します。
Resource type support - AWS CloudFormation
AWS::RDS::DBParameterGroupは対象外のようです…事前に確認しておくべきでした…
RDSパラメーターグループのテンプレート作成は過去に苦戦した記憶があるので、今後のアップデートに期待です。
今回はS3バケットとEBSボリュームを対象としてテンプレートを作成します。
作成前の内容確認を行い「テンプレートを作成」を押下します。
テンプレートが作成されました!
論理IDにはランダムな文字列が含まれていることがわかります。
「YAML⇔JSON」の切り替えやテンプレートファイルのダウンロード、コピー、スタックへのインポートなどが可能です。
このテンプレートを使って設定値を変更するためダウンロードしておきます。
キャンバス表示に切り替えるとアイコンベースのビジュアルエディターになります。
「スタックにインポート」を選択してCloudFormationスタックの作成に進みます。
テンプレートソースが「生成されたテンプレート」になっています。
スタック名を入力して進みます。
「変更を確認」では2つのリソースがImportアクションとして検出されています。
「リソースをインポート」を押下して進みます。
問題無くスタックの作成が完了し、手動作成したリソースをインポートすることができました。
インポートしたリソースの設定を変更してみる
CloudFormationを介してタグの値を更新してみましょう。
先ほどダウンロードしたテンプレートを編集して変更セットを作成します。
変更セットでは次のように変更内容を確認することができます。
4/16にアップデートが入っており差分が分かりやすくなりました。
該当の記事はこちら
aws.amazon.com
変更セットを実行し、無事に完了しました。
タグエディターで確認すると対象リソースのタグ設定が「IaC-managed : CloudFormation」になっていることがわかります。
まとめ
RDSパラメーターグループを除けば、当初の予定通りインポートから設定変更まで実施することができました。
IaCジェネレーターを使用する際には扱おうとしているリソースが対象になっているかどうかを確認しましょう。
CloudFormationに関して個人的な意見ではありますが、
IaCとしての環境を構築する必要が無く、適切なユーザ権限とテンプレートファイルがあれば使用することができるという特徴は
初学者からすれば特に大きなメリットだと考えています。
IaCに慣れたベテランエンジニアの方にとっては手が届かずもどかしく感じるような部分であっても、
視点を変えればその分シンプルな仕様であると言えます。
今回のアップデートで提示されたIaCジェネレーターやApplication Composerも含め、さらに良くなっていくCloudFormationを使って、
皆様もぜひ、気軽にIaCに入門してみましょう!