ロードバランサーを作ろう
タスクを停止してみよう
「タスク」タブから、停止したいタスクをチェックして「停止」をクリック
https://gyazo.com/83e368936690eeb7558d669bc54ea62f
当然だけど、落としたタスクは復活しないので
この時点でWEBサーバはダウン状態になる
https://gyazo.com/ca02159274f3c430b44e30f3d96bfc35
これからロードバランサーを使用するに当たり、ヘルスチェック用のルーティングをします。
llminatoll.iconヘルスチェックってなに?必須なの?
→なくても動くけど、実運用ではあったほうがいい。監視用。
ロードバランサー側からコンテナを見るときに、ちゃんとPHPが動いているかどうかを確認するもの。
このブログが詳しいです
リポジトリのsrcディレクトリ内にhealthcheck.phpというファイルを新規に作ります。
code:src/healthcheck.php
<?php
echo "health ok";
ビルドし直します。
$ docker build -t php .
Dockerを起動します。
$ docker run -d -p 80:80 --name php php:latest
https://gyazo.com/12b964b33e02daca18d19ca7dbf0d4ed
こうなっていればOKです。
※ docker run をした後にこんなエラーメッセージが出る場合
docker: Error response from daemon: Conflict. The container name "/php" is already in use by container "5c53f3fecd3d3375e6d112764850c6a889e49f287eefcf8f795b28417a76b456". You have to remove (or rename) that container to be able to reuse that name.
すでにphpという名前のコンテナがあるよと言われています。名前が重複しているので怒られているだけです。
$ docker stop php
$ docker rm php
してからもう一度 docker run し直しましょう。
※ Not foundになる場合
https://gyazo.com/b486ee1a50c20fb160cd04768479e427
healthcheck.phpのつづりが間違えている
healthcheck.phpを置く階層を間違えている
ビルドのし忘れ
といった可能性があります。
docker build を忘れていると、healthcheck.phpが含まれていないのでNot foundになります。
$ docker build -t php .
してからもう一度 docker run し直しましょう。
※サイトにアクセスできませんと表示される場合
Dockerが起動していない可能性があります。docker run しましょう。
https://gyazo.com/5725853a11ca81fa00c94289f21a0b2b
さて、ヘルスチェック用のファイルの動作確認ができました。
でもまだこれはローカル(あなたのパソコンの中)だけの話。
AWS上に変更を反映する必要があります。
変更の反映方法は簡単!さっきやったのと同じように再度ECRにpushすればいいのです。 ※ ECR・・・AWSのプライベートなDockerイメージのレジストリ。コンテナを定義するイメージはここに置いておくわけです。
ECRにpush
❶さっきと同じく、ターミナルからAWSにログインするよ!
$ aws ecr get-login --no-include-email --region ap-northeast-1
❷Docker イメージを構築します。
docker build -t php .
❸構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
タグ名はどんな名前でもつけられますが、特になければlatestでよいでしょう。
docker tag php:latest 101511069796.dkr.ecr.us-east-1.amazonaws.com/php:latest
(「101511069796」の部分の数字は、自分のものに変えてね)
❹以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします。
docker push 101511069796.dkr.ecr.us-east-1.amazonaws.com/php:latest
(「101511069796」の部分の数字は、自分のものに変えてね)
タスクを更新するよ
タスクはバージョン管理されている
タスクの更新は、正確には「新しいリビジョンを作る」ということになります。
↓リビジョンのイメージ 数字が大きいほど新しい版
https://gyazo.com/a444ec7dea1bc0a40bb0e1e3acebb219
例えば、今動いているリビジョンのタスクを新しいリビジョンのタスクに置き換えることで、サーバを更新したことと同じ状況にできますし、いざ新しいリビジョンが障害を起こすようなものであった場合は古いリビジョンに戻してロールバックすることもできます。
便利!
Amazon ECSのサイドメニューから「タスク定義」をクリック
既存のタスク(今回はphp)のチェックを入れて「新しいリビジョンの作成」ボタンをクリック
https://gyazo.com/1329af9fafb35b23617a1c5ca56b5404
https://gyazo.com/d3ea8007be62fcfb8f8176ff37a4161e
そのまま作成をおす
新しいリビジョンができた
https://gyazo.com/e7aef86186e8d797345e3b13ffb3cbe6
コンテナの調整はここまでです。
ロードバランサーを作ろう
ロードバランサーの設定に入ります
上部メニューの「サービス」から「EC2」をクリック
https://gyazo.com/e2d310a277a9044009bd9cd989b26a18
ロードバランサーをクリック
https://gyazo.com/27a4349a4e59377b30628acbd23e24e8
https://gyazo.com/70bbc2c09c5f1b568968dbe6b4bec82e
https://gyazo.com/2ff73be143a2710a74c3a080e7f2691b
Application Load Balancer(HTTP/HTTPS)を選びましょう。作成をクリック。
今回はデフォルトのVPCを使うので、名前以外は全部デフォルトで問題なし
サブネット(アベイラビリティーゾーン)も二つあると思うので、両方共チェックしておきましょう。
一応、プロトコルはHTTPにしておきましょう。
https://gyazo.com/c864b0337a3f9cf63b147b9f7ca26118
セキュリティの警告が出るが、今回は別に秘密通信でもないので、必要なし。次の手順へ進む。
https://gyazo.com/27f519597b61da4f7d85737e1a2aced7
セキュリティーグループの設定
「新しいセキュリティグループを作成する」にチェックを入れる
タイプはHTTPSにして次の手順へ
https://gyazo.com/998adf0c7434656dc6da87bdc004b570
ステップ4:ルーティングの設定
名前 phptest
ヘルスチェックのパス /healthcheck.php
https://gyazo.com/c6f715bcc766e8bca3103312ab58dbf3
ターゲットの登録画面になりますが、今はターゲットがないので、そのまま「次の手順」ボタンをクリックします。
https://gyazo.com/f886f38fe6e6f440682b64da43919206
確認画面が表示されます。作成をクリック。
https://gyazo.com/abb0a1f6a9f97e1422b48134c081a43d
これで、ロードバランサーの作成が完了しました。
https://gyazo.com/c458ddd922aefa8281083cd9448f4385
ロードバランサーとコンテナインスタンスの通信経路を確保する
最後に、ロードバランサーのセキュリティグループから、コンテナインスタンスのセキュリティグループへの通信経路を確保しておきます。
サイドメニューの「セキュリティグループ」をクリック。
コンテナインスタンスのセキュリティグループ( EC2ContainerService-*** )のチェックを入れて選択し
下方にある「インバウンド」タブ > 「編集」をクリックします。
https://gyazo.com/fae7e16ccbb77ea0def05b8debcd78e6
「ルールの追加」をクリックし「すべてのTCP」を選択します。
ダイナミックポートを使うと、開いているポートを使うのでどのポートが割り当てられるかわかりません。
ソースのところには先ほど作ったセキュリティグループ「load-balancer-wizard-1」のグループIDをコピペします。
https://gyazo.com/8e18e7006a8d0b4c7ce859a751c754b9
次