やーまんぶろぐ

気が向いた時にだけ書くブログ

CloudFormerを使ってAWS CloudFormationのテンプレートを自動作成する

CloudFormerとは自分で構築したAWSリソースから、AWS CloudFormationのテンプレートを自動作成してくれるツールになります。

自動で作成とは言ってもそのまま使いまわせるわけではないので注意が必要です。

また、EC2上にCloudFormerを構築してブラウザアクセスして使用するというところが、他のAWSのサービスとは違うところだと感じました。

EC2上にCloudFormerを構築する

まずはEC2上に構築します。公式で用意されているCloudFormationのサンプルテンプレートがあるのでそれを実行しましょう。
以下のリンクを見ながら作業しました。
kaotil.com

後でログインする時に使うユーザ名/パスワードを入力しておきます。

CloudFormerにブラウザアクセスする

CloudFormation実行が成功するとOutputsにURLが表示されるのでアクセスします。
構築時に指定したユーザ名/パスワードを入力してログインします。

念のためこの時点でSecurityGroupをコンンソールから触ってアクセスを制限しておきました。

リソースを選択してテンプレートを作成する

続いてテンプレート化したいリソースにアクセスしていきます。

以下の大項目から選択します。

  • DNS
  • VPC
  • VPC Network
  • VPC Security
  • Network
  • Managed Service
  • Managed Config
  • Compute
  • Storage
  • Storage Config
  • App Service
  • Security
  • Operational

以下のリンクにAWS CloudFormer がサポートしているリソース一覧がまとまっているので、こちらを参考にテンプレートにしたいリソースを選択していきましょう。
qiita.com

選択するとすぐにテンプレートが作成されます。
EC2の料金がかかってしますので、不要になったCloudFormerのCloudFormationスタックは削除しておきましょう。

JSONYAMLに変換する

JSONでの出力にしか対応していません。YAMLにしたい場合は別のツールで変換が必要です。

私は以下のリンクで変換を行いました。
phiary.me

注意する点

一回でうまくいくものではないので何回かトライ&エラーで頑張るしかないです。困ったらリファレンスを見ましょう。
docs.aws.amazon.com

以下に個人的に感じた注意点をまとめておきます。

  • subnetxxxxxxxxのように各種IDがそのまま出力される
    • PublicSubnetAのように汎用的な名前に変換する
  • PublicSubnetB, PrivateSubnetA, PrivateSubnetB, PublicSubnetAのように順番が綺麗じゃない
    • 順番を整理する
  • outputsが出力されない
    • 結果を確認したい値があるものや他のスタックで参照したいものは出力する
  • 対応していないリソースがある
    • リファレンスを見ながら追加する。CloudWatchLogsみたいにリソースそのものがないものや、AutoScalling::LaunchConfigurationのUSERDATAみたいにリソースはあるけど一部プロパティがないものもあったので注意。
  • アタッチはされているけど、作成されないリソースがある
    • IAM::InstanceProfileとかAWS::EC2::VPCEndpointはアタッチはされているけど、リソースがないのでエラーになってしまいます。事前に作成するかCloudFormationで一緒に作成するかしましょう。