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

f:id:wingfair:20210502184106p:plain

目次

はじめに

AWSでIaCをやる上で、CloudFormation(CFn)はとても便利ですよね。
一方で、ある程度のボリュームがある既存環境を持っており、CFnに移行したい場合、1からコード化するのは中々骨が折れるのではないでしょうか。
そこで、今回は既存環境のコード化をサポートしてくれるFormer2というツールを活用し、コード化してみたいと思います。

今回は失敗編ということで環境づくりでつまづいた話がメインです。
手こずってしまったので、実際に動くところは次回に持ち越しです。。泣

Former2とは?

ローカル環境にたてる

実はこのFormer2はWeb版があるため、そちらですぐに試すことが可能です。
しかしながら、商用利用などで大事な既存環境の情報を渡すのは抵抗があるという方も多いはずです。
そこで、今回はローカル環境にFormer2を稼働させてリソース情報を管理し、コード化する方法を試してみたいと思います。

環境

  • Windows10ローカル (仮想化環境上)
  • docker-composeで上記の本家のコンテナを起動

Former2のインストール (失敗)

former2をローカルにclone

Git Bash本家のソースをgit cloneします。

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

dockerをインストール

dockerが必要になるのでインストールします。
私の環境は下記のコマンドで確認したところ、既に入っていたので割愛。

$ docker version
Client: Docker Engine - Community
Version:           master-dockerproject-2019-12-11
API version:       1.41
Go version:        go1.12.12
Git commit:        08eaead2
Built:             Wed Dec 11 23:59:34 2019
OS/Arch:           windows/amd64
Experimental:      false 

Server: Docker Engine - Community
Engine:
  Version:          master-dockerproject-2019-12-11
  API version:      1.41 (minimum version 1.24)
  Go version:       go1.13.4
  Git commit:       1347481
  Built:            Thu Dec 12 00:07:10 2019
  OS/Arch:          windows/amd64
  Experimental:     false 

docker-composeをインストール

こちらを参考にインストールします。
Powershellでの実行となります。

が・・上手くダウンロードできません。

Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile$Env:ProgramFiles\docker\docker-compose.exe
Invoke-WebRequest : リモート サーバーに接続できません。
発生場所 行:1 文字:1
+ Invoke-WebRequest "https://github.com/docker/compose/releases/downloa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand 

TLSバージョンをかえてみる

こちらの記事を参考にTLSバージョンを1.2に指定してみます。

変更前

[Net.ServicePointManager]::SecurityProtocol
Ssl3, Tls 

設定

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

変更後

[Net.ServicePointManager]::SecurityProtocol 
Tls12

再びdocker-composeのダウンロードを実行

同じコマンドを実行するも上手くいかず。。

Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile$Env:ProgramFiles\docker\docker-compose.exe
Invoke-WebRequest : リモート サーバーに接続できません。
発生場所 行:1 文字:1
+ Invoke-WebRequest "https://github.com/docker/compose/releases/downloa ...
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand   

冷静になってエラーをみてみる

「リモートサーバに接続できない」と言っているので、そもそも繋げてなさそう。
ということでURLをブラウザで直たたきしたら、404 Not Foundというオチでした。
(エラー文言はちゃんと読みましょう)

この日本語のWindows版の手順は古いのかもしれませんね。

気をとりなおして、英語版のDocker Desktopの手順を試す

ということで、英語版の方の手順で仕切り直しです。
以下にアクセスして[Windows]タブを押すと見れます。
公式手順:Install Docker Compose | Docker Documentation

Docker Desktop on Windowsダウンロード

こちらからexeをダウンロードします。

Hyper-Vの機能の有効化

Hyper-Vを使うので、「Windows の機能の有効化または無効化」を開いてHyper-Vを有効化しておきます。

f:id:wingfair:20210502174637j:plain
Hyper-V有効化

Docker Desktop Installer.exe実行

先ほどダウンロードしたexeを実行します。

が・・・インストールに失敗。
どうやらWindows10のバージョンが要件を満たしてない模様。

 

f:id:wingfair:20210502175130j:plain
Docker Desktop Installer.exe
 

それならばとpipで直接入れる方法にシフト

こちらにあるpipの手順を試します。

Using pip
If your platform is not supported, you can download Docker Compose using pip:
pip install docker-compose
Note: Docker Compose requires Python 3.6 or later.

pipインストール

こちらからバージョン3.6以上のexeを落としてインストールします。
exeを実行したら、「Install Now」を選択して進み、完了したらclose。  

pipにパスを通す

最初はパスが通ってないはずなのでWindows環境変数を変更します。

[コントロール]->[システム]->[システムの詳細設定]->[環境変数]を開き、[システム環境変数]のPathに以下を足します。
(自分の環境に合わせて変更してください)

C:\Users\[Your User Name]\AppData\Local\Programs\Python\Python39\Scripts

変更したら、環境変数を読み直すためにGit Bashを上げなおしておきましょう。

pipでdocker-composeインストール

以下のコマンドでインストールします。
これでようやくdocker-composeを使える準備が整いました!

$ pip install docker-compose

docker-composeでformer2起動

以下のコマンドでFormer2のコンテナを起動します。
※実行前にあらかじめgit cloneしたフォルダ配下に移動しておいてください。

$ docker-compose up -d

起動失敗・・・

結局、苦労してdocker-composeをインストールしたものの以下のエラーが出て上手く起動しませんでした。
同じエラーが出ているこちらの記事などを参考にさせてもらったのですが、解決にはいたらずでした。
仮想化のネストが影響しているのかもしれません。

Creating network "former2_default" with the default driver
Pulling former2 (nginx:1.17.8-alpine)...
Docker Compose is now in the Docker CLI, try `docker compose up`
 
1.17.8-alpine: Pulling from library/nginx
no matching manifest for windows/amd64 10.0.14393 in the manifest list entries

おわりに

まさかのFormer2の実行環境を作るだけでかなり手こずってしまい、最終的に起動に失敗したというお話しでした。。
ということでWindows環境はあきらめて、真面目にLinux環境をつくって、そこで稼働させてみることにします。
ここまでかなり遠回りをして3時間近くかかってしまったので、いったん記事はここで一区切りとしたいと思います。

次回こそはFormer2をローカル環境で稼働させ、CFnのテンプレートを生成するお話を書きます。

以上。