CloudFormationをゼロから勉強する。（番外編：Former2）

# はじめに
仕事でAWSに`WordPress`のサイトを立ち上げる作業を行ったのですが、手作業で作ったということもあり、コード化されていなかったので、せっかくなので「[AWS Black Belt Online Seminar AWS CloudFormation deep dive](https://www.slideshare.net/AmazonWebServicesJapan/20201006-aws-black-belt-online-seminar-aws-cloudformation-deep-dive)」でも紹介されていた`Former2`を使ってコード化してみました。

-【前】[CloudFormationをゼロから勉強する。（その８：スタックのネスト）](https://qiita.com/sakai00kou/items/553aba6cc924aff3c9b8)

# Former2とは
AWSの自アカウントにあるリソースを検索し、選択したリソースを`CloudFormation`や`Terraform`などの形式でコード化してくれる**ブラウザベース**のサービスです。

- [Former2](https://former2.com/)

`Former2`は**サードパーティー製**のツールとなり、AWS公式としては[CloudFormer](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html)が同様のコンセプトのツールですが、[ここ](https://dev.classmethod.jp/articles/cloud-formation-dop408/)の記事を見ると「`CloudFormer`は今後アップデートされないので、出来がいい`Former2`を使ってね」だそうです。

中の人がそんなこと言っちゃうんですね（笑）

# 前準備
`Former2`を使うだけなら自分のアカウントでもできますが、使用するためには`Former2`のサイトに`アクセスキー`と`シークレットアクセスキー`を渡す必要があります。

権限ある鍵情報を渡すのはさすがに気が引けるので、`Former2`用のアカウントを作成する方法で進めていきます。

## Former2用アカウント作成
`IAM`から新規でIAMユーザを作成します。

リソース取得用に使うだけなので**マネジメントコンソールアクセス**にチェックは不要です。

![former2_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/6cd57f15-dc30-7b45-3670-b8ee3261dab0.jpeg)

「**既存のポリシーを直接アタッチ**」を選択し、`ReadOnlyAccess`のみチェックを行います。

タグなどは任意で設定して`credentials`のCSVをダウンロードしたら完了です。

![former2_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/30760d63-26d9-5db5-321d-ab6300ec97ab.jpeg)

## プラグインのインストール
[Former2](https://former2.com/)のWebページにアクセスし、`Setup`→`Introduction`を選択すると使用ブラウザ用のプラグインをインストールする旨の内容が表示されるため、プラグインをインストールします。

![former2_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2ef952c9-114b-908c-a6c6-7aabb488e4ff.jpeg)

## Credentials情報の入力
`Setup`→`Credentials`を選択して、先ほど作成した`Former2`ユーザの`Credentials`情報を入力します。

`Session Token`、`Assumed Role ARN`は空欄のままでOKです。

![former2_04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/bc89d6c8-ca7e-edf2-a3ee-cd3667a3a19e.jpeg)

## スキャンの実行
`Parameters`は今回は何も入力せずに次へ進むと`Settings`画面が表示されるため、画面右上のリージョンをスキャンしたいリージョンに合わせて`Scan Account`をクリックします。

![former2_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/dfbff063-f401-be29-5388-5d88e89b9a4b.jpeg)

# コード化したいリソースの選択
`Scan Account`を行うことで、指定のIAMアカウントでリソース情報の取得が始まります。

左ペインの`CATEGORIES`からリソースを選ぶとAWS上に構築されているリソースが表示されるため、コード化したいリソースを選択し、`Add Selected`を選択→リソースを選択→`Add Selected`を選択を繰り返します。

![former2_06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/a0a73725-4a96-e17c-c943-b77799418a4c.jpeg)

# リソースのコード化
リソースを選択し終わったら、画面上の`Generate`ボタンをクリックすることで、以下の画面のようにコード化されます。

今回は`Output`設定を`CloudFormation`として生成したため、`CloudFormation`の形式で出力されましたが、`Terraform`など他の出力方式にすれば、指定の出力方式で出力されます。

![former2_07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/eb09db71-0e8e-3cb8-ffce-ce964abb923e.jpeg)

# 終わりに
実際に触ってみましたが、これは確かにAWSの中の人が勧めてしまうのもわかります。

良いと感じたところを羅列。

- 事前に準備することが少ない（取得用アカウントを作る程度）
- ログイン等必要なく、ブラウザで直感的に操作できる
- 対応リソース数が多いため、一般的な運用で困ることはなさそう
- 一度Former2用IAMアカウントを作っておけば、すぐにスキャンできるので、手動作成したリソースを後からコード化するのも簡単
- リソース等も`!Ref`や`!GetAtt`等の組み込み関数で指定されるので、使いまわししやすい

「[AWS Black Belt Online Seminar AWS CloudFormation deep dive](https://www.slideshare.net/AmazonWebServicesJapan/20201006-aws-black-belt-online-seminar-aws-cloudformation-deep-dive)」でも紹介されていた通り、既存リソースとの紐付けなどは手動で行う必要がありますが、使ったことが無いサービスで、先にGUIで作ったけどコードとして残したい場合に便利です！

AWSを使って運用している方は、ぜひ利用してみてください。