【AWSの呼吸 漆ノ型】Former2を使って既存環境をCFnのテンプレートに変換する~成功編~

f:id:wingfair:20210502185948p:plain

目次

はじめに

前回の記事ではWindows環境にFormer2を導入しようとして失敗に終わりました。
今回の記事ではAWS上にLinux環境を構築し、その上にFormer2を導入して使ってみたいと思います。

環境概要

  • AWS上にLinuxサーバx1台を構築
    • AMI:Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-06098fd00463352b6 (64 ビット x86) / ami-03888b30ba5826eed (64 ビット Arm)
  • スペック (デフォルトで動きましたが、自身の環境に合わせて適宜調整してください)

構成

  • とにかく動かしたいだけなので、EC2インスタンスはシングルの最小構成
  • EC2インスタンスにEIPを振って、パブリックサブネットに配置
  • SGはブラウザからのアクセス用に80ポートだけあけておく
    • Former2の管理画面はデフォルトで80ポートで待ち受けします
    • 自身の接続元のIPアドレスだけ許可するようにしておきましょう
  • Former2にシークレットアクセスキーを登録して構成情報を取得します
    f:id:wingfair:20210508002139p:plain
    構成

シークレットアクセスキー払い出し

事前にAWSマネジメントコンソールにてFormer2に利用させるIAMユーザを作成し、アクセスキーIDとシークレットアクセスキーを払い出しておきましょう。
あとでFormer2のWeb管理画面にて登録します。

Former2インストール

構築したLinuxサーバにログインして、インストール作業を行います。

gitインストール

以下のコマンドでインストールします。

# yum install git

dockerインストール

以下のコマンドでインストールします。
(今回は19.03.13-ceを利用)

# yum install docker

docker-composeインストール

こちらLinux版の手順を参考にdocker-composeをインストールします。

Docker Compose 最新版をダウンロード
(今回は1.29.0を利用)

# sudo curl -L https://github.com/docker/compose/releases/download/1.29.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

バイナリに対して実行権限を付与

# sudo chmod +x /usr/local/bin/docker-compose

実行権限がついているか確認

# ls -l
total 12452
-rwxr-xr-x 1 root root 12750072 Apr 14 01:10 docker-compose

former2のソースをgit clone

Linuxサーバのローカルの適当なフォルダにFormer2のソースを持ってきます。

# git clone https://github.com/iann0036/former2.git

former2のディレクトリに移動

# cd former2/

Former2設定

待ち受けIPアドレスの変更

デフォルトではローカルループバックで待ち受ける設定になっているため、パブリックIPで待ち受けるように変更します。
(今回の環境の場合は"10.17.112.85"に変更)

git cloneしたフォルダの配下にあるdocker-compose.ymlを以下のように変更します。

変更前:

ports:
  - "127.0.0.1:80:80"

変更後:

ports:
  - "10.17.112.85:80:80"

Former2起動

docker起動

dockerの起動状態を確認

# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://docs.docker.com

dockerが起動していない場合、サービスを起動

# systemctl start docker

Fomer2のコンテナ起動

以下のコマンドを実行して、エラーが出なければ起動成功!

# docker-compose up -d

80でリッスンしているか確認

# lsof -i -n -P
docker-pr 4807 root 4u IPv4 27824 0t0 TCP 10.17.112.85:80 (LISTEN)

Former2でCloudFormationのテンプレートを作成

Web管理画面にアクセスする

ブラウザを開いて、http://[Your EIP]/にアクセスし、以下のような画面が表示されたら上手く動いています。

f:id:wingfair:20210507233026p:plain
Web管理画面

ブラウザの拡張機能追加

利用しているブラウザに合わせて拡張機能のメニューを選択します。
今回はChromeウェブストア->Chromeから追加しました。

追加できたら[Continue to Credentials]を押します。

認証情報の登録

事前に払い出しておいたアクセスキーIDとシークレットアクセスキーを入力し、[Continue to Parameters]を押します。

f:id:wingfair:20210507234358p:plain
クレデンシャル

パラメータの指定

CloudFormationのStackから参照する変数をパラメータとして定義できますが、今回は入力なしで[Continue to Settings]を押します。

f:id:wingfair:20210507234646p:plain
パラメータ

各種設定

スペースの数や出力の形式など色々な設定ができますが、今回はデフォルト設定で[Continue to Dashboard]を押します。

f:id:wingfair:20210507234727p:plain
設定

ダッシュボード

一通り設定して上手くいったら、ダッシュボードが表示されます。

f:id:wingfair:20210508004104p:plain
ダッシュボード

構成情報のスキャン

ダッシュボードの右上の[Scan Account]を押して、構成情報をスキャンします。

f:id:wingfair:20210508004124p:plain
スキャンボタン

テンプレート化対象の選択

スキャンが無事に完了したら、各AWSサービスのメニューを開いて、読み込めているか確認してみます。
下図はEC2インスタンスの例です。

f:id:wingfair:20210508003836p:plain
EC2スキャン結果

テンプレート化したいリソースにチェックを入れて、[Add Selected]を押します。

f:id:wingfair:20210508003703p:plain
リソース選択

テンプレート作成

リソースを選択し終わったら、[Generate]ボタンを押すことでテンプレートを作成できます。
このように先ほど選択したEC2インスタンスがCloudFormationのテンプレートとして出力されています!

f:id:wingfair:20210508003451p:plain
CFnテンプレート

終わりに

前回は環境構築で遠回りしましたが、今回はFormer2をローカルで稼働させ、実際にテンプレート化するところまでできました。
既存環境をベースに別環境として複製したい場合は環境依存なパラメータの取り回しを考えるなど、利用者側でやらないといけない部分はもちろんありますが、それでも1から書くよりはだいぶ楽ができるのではないでしょうか。  
みなさんもぜひ試してみてみてください。

以上。