1. はじめに
1.1 この記事の概要
former2をローカル環境に導入し、既存のAWS環境からCloudFormationの定義を作ろうというものです。
1.2 Former2をローカルに入れる動機
既存のAWS環境からCloudFormationの定義を作りたくてツールを探し、https://former2.com/というものを見つけました。
こちらのツール、会員登録等は不要なようで、AWSのアクセスキーを設定するとAWSにアクセスしてCloudFormationの設定を作ってくれる便利なサイトでした。
ただ、、、個人的に第三者が運営するサイトにアクセスキーを設定するのを躊躇してしまい、ローカルに導入できないかと調べたところ、Githubにformer2のソースを見つけたのでローカル環境に導入するものです。
2. 本編
2-1 Former2の導入
(1)前準備Ⅰ Docker環境の準備
以下の記事を参考にDockerの実行環境を用意します。
https://qiita.com/ka2taka/items/7889e9a0e01fc0824b66
(2)前準備Ⅱ AWSのアクセスキーの取得
事前にAWSのアクセスキーを作って控えておきます。
ユーザのポリシーに「arn:aws:iam::aws:policy/ReadOnlyAccess」を与えます。
①IAMにアクセスする。
https://console.aws.amazon.com/iam/
②[アクセス管理]-->[ユーザ]に移動してユーザを作る。
ユーザ名を入れる
ReadOnyAccessを選択する
Step5まで次へ次へで進む。
③アクセスキーを控える。
ユーザ作成のStep5で「アクセスキー ID」「シークレットアクセスキー」を控える。
(3)former2のダウンロード
- ダウンロード
以下のGithubからダウンロードします。
https://github.com/iann0036/former2
ZIPでダウンロードするなら以下のURL。
https://github.com/iann0036/former2/archive/master.zip
コマンドで実行するなら以下。
git clone https://github.com/iann0036/former2.git . - 保存先
手順上、以下に解凍して保存します。
C:\work\former2
(4)docker-composeで構築
C:\work\former2>docker-compose up -d
Creating network "former2_default" with the default driver
Pulling former2 (nginx:1.17.8-alpine)...
1.17.8-alpine: Pulling from library/nginx
4167d3e14976: Pull complete
db94a93dfca0: Pull complete
Digest: sha256:9e81b8f9cef5a095f892183688798a5b2c368663276aa0f2be4b1cd283ace53d
Status: Downloaded newer image for nginx:1.17.8-alpine
Creating former2_former2_1 ... done
ローカル環境の80番ポートを使うようにdocker-compose.ymlファイル内に定義されています。
既に80番ポートを使ってる場合は、ポート番号を変えてから実行してください。
修正例:「127.0.0.1:80:80」--->「127.0.0.1:8080:80」
「127.0.0.1:8080」の部分がWindowsホスト上のポート番号、後半の:80がdockerコンテナ内のポート番号です。この2つがマッピングされてます。
(5)Former2にアクセス
以下のアドレスをブラウザに入力して、ローカルで起動したformer2にアクセスします。
http://127.0.0.1/
(6)Former2を設定
①最初の画面にあるブラウザのプラグインを入れます。
画面は前述参照。
③左メニューから「セットアップ(Setup)-->資格情報(Credentials)」を選択
④IAM認証情報を入力(アクセスキーID、シークレットアクセスキー)
設定の保存ボタンは用意が無いようで、何かメニューを押すと自動で保持されます。
Former2の振る舞いを見ていると、資格情報(Credentials)はサーバサイドに保存されないようなので、忘れないように書き留めておいてください。
2-2. Former2の操作(EC2から設定を取得してみる)
(1) EC2の設定を読み込む操作をする。
① Compute-->EC2に移動。
② リソースを選択して「Add Select」ボタンを押す。
③ 画面上部の「Generate」ボタンを押す。
(2) 表示されたCloudFormationの定義を見てみる。
AWSTemplateFormatVersion: "2010-09-09"
Metadata:
Generator: "former2"
Description: ""
Resources:
EC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-#################"
InstanceType: "t2.micro"
KeyName: "#########################"
AvailabilityZone: !Sub "${AWS::Region}a"
Tenancy: "default"
SubnetId: "subnet-###################"
EbsOptimized: false
SecurityGroupIds:
- "sg-#################"
SourceDestCheck: true
BlockDeviceMappings:
-
DeviceName: "/dev/xvda"
Ebs:
Encrypted: false
VolumeSize: 8
SnapshotId: "snap-#####################"
VolumeType: "gp2"
DeleteOnTermination: true
Tags:
-
Key: "Name"
Value: "bastion################"
HibernationOptions:
Configured: false
EnclaveOptions:
Enabled: false
後始末
C:\>cd \work\former2
C:\>docker-compose down --rmi all --volumes --remove-orphans
最後に
まとめ
1からCloudFormationの設定を作るよりは楽なのではないでしょうか?