既存の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
をのぞいてみると以下のような感じでした。
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の学習にはとても役立ちそうだと感じました。
以上、参考になれば嬉しいです。