ゼロからAmazon Elastic Container Service(ECS) を使ってみるの巻

#目的
Amazon Elastic Container Service(ECS) を使って、可搬性と集約性が高めれるか体験

#目標
可搬性の確認のため、Web アプリを日本からアメリカのリージョンへ移行がどのくらい時間がかかるか確認する
＞期待する効果：ハードウェア型仮想化と比べ、コンテナ型仮想化は、イメージが少量だから時間が半分で移行できる

集約性確認のため、python2系と3系のApp を安く簡単に使えるか確認する
＞期待する効果：異なるライブラリやミドルウェアver を同一VM で動かせるから、集約性が上がる
　　　　　　　　特に、昼用のapp と夜用のapp が、ライブラリver 違いで動かないって時に効果的か？

#前提
centos7 が動いている（私は、win PC で、VirtualBox 上にcentos7 を動かしている）
GitHub のユーザを持っている
　持ってない方は、下のサイトが分かりやすい
　https://tech-camp.in/note/programming/4756/

pip を使うため、利用できなければ、下のコマンドで実行
`sudo apt install python-pip`

yum を使うため、利用できなければ、下のコマンドを実行
`sudo apt install yum`


curl を使うため、利用できなければ、下のコマンドを実行
`sudo apt install curl`

#作業
Amazon CLI の導入
コンテナイメージを作成して、ECS にアップ
アップしたコンテナを別リージョンへする

##Virtual Box の設定変更（必要な人だけ）
事前準備として、作業ログを残したいので、Virtual Box のVM へssh ツールでログインできるようにする

VM を停止する

Virtual Box の該当VM を選択　＞　(右クリックから)設定
下の図のように、ネットワーク　＞　高度　＞　ポートフォワーディング
![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/3cbf5216-8b2a-c95e-0714-f966ed20ded9.jpeg)

下の図のように設定を追加
![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/184724/e4245097-0df7-b280-2d01-24145fb81285.jpeg)

OK > OK
で、設定終了

VM を起動する
Virtual Box のコンソール画面上で{
`ip addr show`
nic を確認する。私は、 enp0s3

nic の自動起動設定を行う
`nmcli connection modify enp0s3 connection.autoconnect yes`

サーバを再起動
`reboot`

nic が起動していることを確認する
`ip addr show`
nic にinet add などの情報があればok

}


ssh クライアント上で{
対象のvm へログインする
私の場合、
127.0.0.1:222
以降は、ssh クライアント上での操作を示す
}

##Ubuntu 等のLinux OS で作業する場合
ログを取るために下のように実行しましょう
sudo script /home/academy_usr/デスクトップ/today.log


##Amazon CLI の導入
下の公式サイト通り、実行
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/installing.html

インストール
`sudo pip install awscli`
`sudo aws --version`
バージョン情報が出力されればok






##Docker の導入
コンテナ管理を効率化してくれるナイスミドルなDcoker を導入する
下のサイトがとても分かりやすいので参照
http://docs.docker.jp/engine/getstarted/index.html

下のページを参照
http://docs.docker.jp/engine/getstarted/step_one.html


(Ubuntu の場合)
スクリプトでインストール
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
sudo docker version
バージョン情報が出力されればok


(Windows の場合)
下に実行したコマンドを抜粋
`which curl`
`sudo curl -fsSL https://get.docker.com/ | sh`
`sudo reboot`
`sudo systemctl start docker`
`sudo docker run hello-world`

Hello from Docker!
と出力されればok

作ったコンテナを一括削除する
docker rm -f `docker ps -a -q`
※Qiita 仕様で、変に見えますが、上のコードを一文でコピーして実行

##Docker-compose の導入
下のサイトを参照
https://github.com/docker/compose/releases/

qiita の特殊記号とかぶるので、変なコードっぽくなってますが、全文コピペして下さい
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

`sudo chmod +x /usr/local/bin/docker-compose`
`docker-compose --version`

##Compose ファイルの作成
手間な人は、下のコマンドで、compose ファイルを作っています。
`curl -LO https://raw.githubusercontent.com/HaHatake/wordpress/master/docker-compose.yml`

自作したい方は、下のサイトを参考に作ってみましょう。
https://github.com/HaHatake/wordpress/blob/master/docker-compose.yml

##コンテナ起動
先程ダウンロードした compose を実行
`docker-compose up -d`

15分程で、コンテナの起動が確認できる
`docker ps`


##コンテナのIP を確認する
docker ps
docker inspect <your contener ip>


##ESC を使ってみる
下のサイトを参照
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_GetStarted.html

ECS コンソールにログイン　＞　リージョンを　バージニア北部　に変更　＞



#Tips
イメージを作ろうとすると下のコードが出た
Dockerfile parse error line 1: unknown instruction: 400:
よく見ると、Dockerfile の中身が、404 になってた。
curl でアドレスを間違っていたようだ。修正済み。

##Docker イメージの作成(別の内容にしたため、トラシュー側へ){
簡単なweb appをGitHub へアップしているので、作るのが手間な人は下を参考
`mkdir -m 777 awstest`
`cd awstest`
`curl https://raw.githubusercontent.com/HaHatake/AWStest/master/app.py > app.py`
`curl https://raw.githubusercontent.com/HaHatake/AWStest/master/requirements.txt > requirements.txt`
`curl https://raw.githubusercontent.com/HaHatake/AWStest/master/Dockerfile > Dockerfile`
`curl https://raw.githubusercontent.com/HaHatake/AWStest/master/docker-compose.yml > docker-compose.yml`

Docker の勉強のため、下のサイトのコードを参考になればgood
https://github.com/HaHatake/AWStest

`sudo docker build ./ -t webtest`
uccessfully tagged webtest:latest のような出力がされればok

`sudo docker images`
下のように出力されればok
webtest             latest              400b99f177c0        16 minutes ago      687MB


##コンテナの起動
作成したイメージを走らせる
今回は、上で作成したwebtest イメージを起動してコンテナにする
`sudo docker run -d -it -p 50080:80 webtest`

下のコマンドで、webtest が稼働していることを確認する。
`sudo docker ps -a`
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS                   NAMES
abe086a9a514        webtest             "/bin/sh -c 'python …"   4 minutes ago       Up 4 minutes             0.0.0.0:50080->80/tcp   wizardly_bell

稼働したコンテナのip を確認する
##}Docker イメージの作成(別の内容にしたため、トラシュー側へ)