ロードバランサーを作ろう
タスクを停止してみよう
「タスク」タブから、今動いているタスクをチェックして「停止」ボタンをクリック。
https://gyazo.com/129725823221f3e831efbe6fa11dff58
HTMLちゃん.icon 当然だけど止めたタスクは復活しないので、この時点でWebアプリはダウン状態になるよ
https://gyazo.com/ca02159274f3c430b44e30f3d96bfc35
ヘルスチェック用のphpファイルを作ろう
これからロードバランサーを使用するに当たり、ヘルスチェック用のファイルを作ります。
llminatoll.iconヘルスチェックってなに?必須なの?
→なくても動くけど、実運用ではあったほうがいい。監視用。
ロードバランサー側からコンテナを見るときに、ちゃんとPHPが動いているかどうかを確認するもの。
ヘルスチェックについてはこれらのブログが詳しいです
リポジトリのsrcディレクトリ内にhealthcheck.phpというファイルを新規に作ります。
code:src/healthcheck.php
<?php
echo "health ok";
ビルドし直します。
$ docker build -t amazon-ecs-sample .
//ディレクトリ直下のDockerfileを使い「amazon-ecs-sample」という名前でイメージをビルドして
$ docker run -d -p 80:80 --name amazon-ecs-sample amazon-ecs-sample:latest
//「amazon-ecs-sample」という名前のコンテナを作成・起動
https://gyazo.com/12b964b33e02daca18d19ca7dbf0d4ed
こうなっていればOKです。
※ docker run をした後にこんなエラーメッセージが出る場合
docker: Error response from daemon: Conflict. The container name "/amazon-ecs-sample" is already in use by container "5c53f3fecd3d3375e6d112764850c6a889e49f287eefcf8f795b28417a76b456". You have to remove (or rename) that container to be able to reuse that name.
すでにamazon-ecs-sampleという名前のコンテナがあるよと言われています。名前が重複しているので怒られているだけです。
$ docker stop amazon-ecs-sample //コンテナの停止
$ docker rm amazon-ecs-sample //コンテナの削除
してからもう一度 docker run し直しましょう。
※ Not foundになる場合
https://gyazo.com/b486ee1a50c20fb160cd04768479e427
healthcheck.phpのつづりが間違えている
healthcheck.phpを置く階層を間違えている
ビルドのし忘れ
といった可能性があります。
docker build を忘れていると、healthcheck.phpが含まれていないのでNot foundになります。
$ docker build -t amazon-ecs-sample .
してからもう一度 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 amazon-ecs-sample .
❸構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
タグ名はどんな名前でもつけられますが、特になければlatestでよいでしょう。
$ docker tag amazon-ecs-sample:latest 101111111111.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-ecs-sample:latest
(「101111111111」の部分の数字は、自分のAWSアカウントIDに変えてね)
❹以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします。
$ docker push 101111111111.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-ecs-sample:latest
(「101111111111」の部分の数字は、自分のAWSアカウントIDに変えてね)
正常にpushが完了するとこうなります。
https://gyazo.com/c421ce24747fb5b620ad81d78fc31d73
llminatoll.iconもしno basic auth credentialsと表示されてプッシュできない場合
再度ターミナルからAWSにログインしてから試してみてね
llminatoll.icon コンテナの調整はここまでだよ
ロードバランサーを作成する
ではさっそく、ロードバランサーを作っていきましょう!
▼上部メニューの「サービス」から「EC2」をクリック
https://gyazo.com/e2d310a277a9044009bd9cd989b26a18
ロードバランサーをクリック
https://gyazo.com/27a4349a4e59377b30628acbd23e24e8
「ロードバランサーの作成」をクリック
https://gyazo.com/70bbc2c09c5f1b568968dbe6b4bec82e
https://gyazo.com/2ff73be143a2710a74c3a080e7f2691b
Application Load Balancer(HTTP/HTTPS)を選びましょう。作成をクリック。
ロードバランサーの名前は自分がわかりやすい名前をつけましょう。
それ以外は今回は全部デフォルトで問題ありません。
プロトコルはHTTP、ロードバランサーのポートは80のままで大丈夫です。
https://gyazo.com/30695b29739d4decd34939a469c0dd35
サブネット(アベイラビリティーゾーン)が2つあると思うので、両方共チェックしておきましょう。
https://gyazo.com/4cabac5dda5fc6994bf4c911563824a6
セキュリティの警告が出ますが、今回は秘密通信でもないので、そのまま次の手順へ進みましょう。
https://gyazo.com/27f519597b61da4f7d85737e1a2aced7
セキュリティーグループの設定をします。
「新しいセキュリティグループを作成する」にチェックを入れます。
タイプはHTTPSにして次の手順へ。
https://gyazo.com/75146fca51f1b71f9f39821f867f3d48
ステップ4:ルーティングの設定
名前 phptest
ヘルスチェックのパス /healthcheck.php
https://gyazo.com/00e7f4bbdf4271928938a08e2c9c708f
ステップ5:ターゲットの登録
ターゲットの登録画面になりますが、今はターゲットがないので、そのまま「次の手順」ボタンをクリックします。
https://gyazo.com/a4518024fc3617bc86cc0063bce78c97
確認画面が表示されますので、右下の「作成」ボタンをクリック。
これで、ロードバランサーの作成が完了しました。
ロードバランサーとコンテナインスタンスの通信経路を確保する
最後に、ロードバランサーのセキュリティグループから、コンテナインスタンスのセキュリティグループへの通信経路を確保しておきます。
EC2 サイドメニューの「セキュリティグループ」をクリック。
コンテナインスタンスのセキュリティグループ( EC2ContainerService-php-cluster-*** )のチェックを入れて選択し
下方にある「インバウンド」タブ > 「編集」をクリックします。
https://gyazo.com/0fdc3a7d82737a6bfae10f4daf70125b
「ルールの追加」をクリックし「すべてのTCP」を選択します。
ダイナミックポートを使うと、開いているポートを使うのでどのポートが割り当てられるかわかりません。
ソースのところには先ほど作ったセキュリティグループ「load-balancer-wizard-1」のグループID(sg-*******)をコピペします。
https://gyazo.com/cd660afb7204bb644ae32e7d71861207
次