Former2で既存EC2のCloudFormationテンプレートを作成してみた

#はじめに
既存のAWSリソースをCloudFormationで管理したいケースがあると思います。
そんなユーザのニーズを満たすために、リソースからCloudFormationのテンプレートを作成するFormer2というツールがあります。

今回は手動で作成したEC2インスタンスをFormer2でCloudFormationのテンプレートにしてみました。

**「Former2の使い方を触りだけ知りたい」**という方に役立つ記事になると思います。

#Former2の導入手順
軽く導入手順をまとめました。

##IAMユーザの作成
Former2でAWSリソースを読み込むために、IAMユーザを追加してキーペアを作成します。
![スクリーンショット 2021-04-04 22.21.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/74581008-0a63-b00e-d5eb-b0f637fd75dc.png)

`ReadOnlyAccess`のポリシーをアタッチします。
![スクリーンショット 2021-04-04 22.24.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/f95940c5-5312-6c64-a962-5bcc82adc763.png)

キーペアが作成されます。
![スクリーンショット 2021-04-04 22.24.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/f4469593-5a50-2fe5-f020-a9a344282326.png)

##Former2のセットアップ
Setupタブから設定を行います。

まずは使用しているブラウザに対応した拡張機能をインストールします。
![スクリーンショット 2021-04-04 23.06.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/806cad55-59ce-1696-a168-e06e91845333.png)

作成したキーペア(Access Key IDとSecret Access Key)を入力します。
![スクリーンショット 2021-04-04 22.26.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/d19e6802-05cd-2009-033d-865f33833ee6.png)

`Enable Related Resources`のトグルをONにして、`Scan Again`をクリックします。
これで作成済のAWSリソースを読み込みます。
![スクリーンショット 2021-04-04 22.52.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/6a17169c-7953-5992-c4d0-8659fee723d2.png)

`Compute`タブのEC2を開くと、読み込んだEC2インスタンスを確認することができます。
![スクリーンショット 2021-04-04 22.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/13945aef-87e8-72dc-053b-dddbaadf3ee2.png)

`Add Selected`を押します。
![スクリーンショット 2021-04-04 22.54.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/34d49024-0b9d-3c8a-9ee0-67b7b0b41d91.png)

画面上部の`Generate`ボタンを押すと、作成されたCloudFormationのテンプレートを確認することができます。
![スクリーンショット 2021-04-04 22.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569054/75195891-93db-82da-95dd-3dd1b28a9e21.png)

テンプレートの中身

```yml
AWSTemplateFormatVersion: "2010-09-09"
Metadata:
    Generator: "former2"
Description: ""
Resources:
    EC2Instance:
        Type: "AWS::EC2::Instance"
        Properties:
            ImageId: "ami-0742b4e673072066f"
            InstanceType: "t2.micro"
            KeyName: "former2-demo"
            AvailabilityZone: !Sub "${AWS::Region}e"
            Tenancy: "default"
            SubnetId: "subnet-5a713864"
            EbsOptimized: false
            SecurityGroupIds: 
              - "sg-06b54882cf1e2f976"
            SourceDestCheck: true
            BlockDeviceMappings: 
              - 
                DeviceName: "/dev/xvda"
                Ebs: 
                    Encrypted: true
                    VolumeSize: 8
                    SnapshotId: "snap-097c45e6d3c6e1d1b"
                    VolumeType: "gp2"
                    DeleteOnTermination: true
            UserData: "IyEvYmluL2Jhc2gKZWNobyAiaGVsbG8gd29ybGQi"
            IamInstanceProfile: "AmazonEC2RoleforSSM"
            Tags: 
              - 
                Key: "Environment"
                Value: "Dev"
              - 
                Key: "Name"
                Value: "Former2 Demo"
            HibernationOptions: 
                Configured: false
            EnclaveOptions: 
                Enabled: false

```

なんとCloudFormationだけではなく、TerraformやTroposphereのテンプレートも出力することができます。

#おわりに
現場のインフラをこのツールでコード化したいな...

#参考資料

https://www.udemy.com/share/101Xko/