Former2を使って既存のAWSリソースからテンプレートを生成


既存のAWSリソースからCloudFormationやTerraformのテンプレートを生成できるツール「Former2」を試してみました。

環境構築

Former2はWebベースで動作するので、former2 にアクセスすれば利用できます。
自分のAWSリソースにアクセスするための認証情報を登録する必要がありますが、サードパーティのツールに機密情報を入力したくない場合はDockerを使ってローカルにサクッと環境構築できます。

git clone https://github.com/iann0036/former2.git
cd former2/
docker-compose up -d

docker-compose.ymlをのぞいてみると以下のような感じでした。

docker-compose.yml
version: '3'
services:
  former2:
    image: nginx:1.17.8-alpine
    ports:
      - "127.0.0.1:80:80"
    volumes:
    - .:/usr/share/nginx/html

IAMユーザーの作成

先にFormer2からAWSリソースにアクセスするためのIAMユーザーを作成します。
コンソール画面にアクセスする用途では使いませんので、ここでは「AWSマネジメントコンソールへのアクセス」のチェックは外しておきます。

アタッチするポリシーは「ReadOnlyAccess」を選択します。

初期セットアップ

Chromeで localhost(127.0.0.1) へアクセスすると初期セットアップのウィザードが表示されます。
ブラウザの拡張機能が必要になりますので、該当するブラウザのリンクをクリックしてインストールしてから次へ進みます。


続いて、クレデンシャルを入力します。
事前に作成したIAMユーザーのアクセスキーID / シークレットアクセスキーを入力して次へ。

次はパラメータです。
CloudFormationのパラメータを定義しておけるようですが、何も入力しないままで次へ。

最後の各種設定が表示されますが、とりあえずデフォルトのままで「Go to Dashboard」を押して完了させます。
ここで無理に「Scan Account」を押してリソースをスキャンしなくても良いみたいです。

コンソール画面とよく似たダッシュボードが表示されます。
リージョンが「バージニア北部」になっているので「東京」に変更します。

試しに、VPCを開いて既存のものにチェックを入れて「Add Selected」 → 「Generate」を押してみます。

YAML形式でCloudFormationのテンプレートが生成されました!

AWSTemplateFormatVersion: "2010-09-09"
Metadata:
    Generator: "former2"
Description: ""
Resources:
    EC2VPC:
        Type: "AWS::EC2::VPC"
        Properties:
            CidrBlock: "10.0.0.0/16"
            EnableDnsSupport: true
            EnableDnsHostnames: false
            InstanceTenancy: "default"
            Tags: 
              - 
                Key: "Name"
                Value: "cloud01-vpc"

左側メニューのOutputsから出力形式を変更できます。
Terraformにするとこんな感じ。

terraform {
    required_providers {
        aws = {
            source = "hashicorp/aws"
            version = "~> 3.0"
        }
    }
}

provider "aws" {
    region = "ap-northeast-1"
}

resource "aws_vpc" "EC2VPC" {
    cidr_block = "10.0.0.0/16"
    enable_dns_support = true
    enable_dns_hostnames = false
    instance_tenancy = "default"
    tags {
        Name = "cloud01-vpc"
    }
}

最後に、不要になったらDockerは停止しておきましょう

docker-compose down

まとめ

昔はCloudFormerというツールがあったんですが、かなり使いにくかったのを覚えています。
今回のFormer2はセットアップも簡単で、UIも非常にわかりやすくて使いやすそうですね!

リソースIDなどの固有情報はべた書きされるようなので、他リソースを参照するよう関数を利用したり、冗長な部分は変数化するなどの工夫は必要になってきますが、既存リソースからコード化できるのはIaCの学習にはとても役立ちそうだと感じました。

以上、参考になれば嬉しいです。

参考リンク