クラスターを作ろう
キーペアを作成しよう
クラスター作成時に必要なキーペアを作ります。
▼「サービス」からEC2をクリックします。
https://gyazo.com/8205117008659f870edb7d577d4da7eb
▼画面中央あたりの「キーペア」という青い文字をクリックし
https://gyazo.com/5a8758e26545f2e0eb500a41a4f0e0d6
▼「キーペアの作成」ボタンをクリックします。
名前はわかりやすいものならなんでもいいです。今回は「Practice」としました。
https://gyazo.com/a227c39212a5ee56ce2470731a3cbffa
▼フィンガープリントが生成されます。
また、 キーペア名.pem というファイルが自動ダウンロードされます。
ブラウザによっては、自動ダウンロードが拒否される設定になっていることがあります。
ダウンロードを許可し、ダウンロードされたことを確認しましょう。
https://gyazo.com/1bd47381e079f05f67b5e4c2db400207
このキーペアは、後述のクラスター作成時に使います。
クラスターを作っていくよ
サイドバーのAmazon ECSの「クラスター」「クラスターの作成」をクリック
llminatoll.icon紛らわしいけど「Amazon EKS」の「Clusters」ではないから注意してね💫
https://gyazo.com/ea4fa14f97f4ec33978611377e10cf97
「EC2 Linux + ネットワーキング」を選んで「次のステップへ」をクリック。
llminatoll.icon「ネットワーキングのみ」にしちゃうとあとで動かないよ💦
https://gyazo.com/453fbc0e87a1cff8495b09e097650df3
「クラスター名」にphp-clusterと入力
「EC2インスタンスタイプ」はプルダウンから t2.micro を選択
「インスタンス数」は2
https://gyazo.com/f539f643f65dd0b766a6efd2a07d436d
キーペアを設定します。
先ほど用意したEC2のキーペア名を選択します。
(今回の場合はPractice)
https://gyazo.com/d106a4a59bf499743a443aee78a065a6
下までスクロールし「作成」クリック
https://gyazo.com/29466f2001342b018e5694187d6e5bf1
クラスターが作られ、コンテナインスタンスの起動が始まります!
https://gyazo.com/9d1cebe58f0c51af428c6720a284ddc5
llminatoll.icon次々と「完了」になっていくのが力強さを感じてカッコイイ😲💪✨
▼起動が完了すると「クラスターの表示」ボタンが押せるようになるのでクリックします。
https://gyazo.com/c2aaf78bed45731c92d83bf5d95b09ea
▼クラスターができました!
https://gyazo.com/a6902ef04071356c3f49f455076c1c2f
先ほど作ったタスクを動かそう
▼タスク タブ→ 「新しいタスクの実行」ボタンをクリック
https://gyazo.com/e991053ba0f933842562ed475d97042a
起動タイプはEC2
タスク定義はconsole-sample-appを選択(番号はリビジョン番号)
タスクの数は2を指定
https://gyazo.com/72f2ddf52d977e228828709e0c4012ae
▼スクロールして、画面右下の「タスクの実行」をクリックします!
これで、先ほどタスク定義を作ろうで作ったタスク「console-sample-app」がインスタンス上で動き出します。 状態がRUNNINGであることを確認しましょう。
https://gyazo.com/67aedb1886f8a7edb0bd2a8f640015b1
エラーになる場合①
ECR上のDockerイメージを参照できていない可能性があります。
タスク定義のJSONを見直して、イメージのパスに間違いがないか確認し、タスク定義をpushしなおしましょう。
その後、タスク定義のプルダウンを最新版(一番数字が大きいもの)に変更してもう一度「タスクの実行」ボタンをクリックして見てください。
https://gyazo.com/c492421bcb7c5e2df330bf024930e952
$ aws ecs register-task-definition --cli-input-json file://simple-app-task-def.json
エラーになる場合② RESOURCE:MEMORY と表示される
https://gyazo.com/581a609f0febcc9354bfdf7a6b379a37
これはメモリが足りてないという意味です。
(t2.microインスタンスタイプはメモリが1GiBである(1GiB = 1024MiB)。1024MiBを超えるメモリを割くことができない。)
タスク定義をしているjsonが、"memory": 500, などになっていたら、"memory": 300, や "memory": 200, 程度に下げてpushし直しましょう。
$ aws ecs register-task-definition --cli-input-json file://simple-app-task-def.json
ブラウザ上でサンプルアプリを確認
▼「ECSインスタンス」タブをクリック。
コンテナインスタンス(コンテナのホストになっているインスタンス)をクリックします。
https://gyazo.com/28ad0699823bac62bba7d6352b0280ea
▼すると「詳細」タブにパブリックDNSが書いてあります。
↓パブリックDNSのURLとは、こういうものです
ec2-11-111-111-11.ap-northeast-1.compute.amazonaws.com
https://gyazo.com/aaf57e9f44a4cdcc45c3008c19b758f3
▼このURLをブラウザにはりつけます。
https://gyazo.com/5eadb29fbdb0b9bf3a1ebb00039a7102
このように表示されればPHPが動いている証拠です🎉
さらに、URLの末尾に「/my-vol/date」を追記しましょう。
現在の時刻が表示されているはずです。
(デフォルトでは協定世界時の現在時刻(UTC+0000)の設定なので、表示されるのは日本時間より9時間前の時刻になります)
↓URLの例:
ec2-11-111-111-11.ap-northeast-1.compute.amazonaws.com/my-vol/date
https://gyazo.com/31715bb9f9a34940e7cbf708732b3b66
なぜこのように表示できるかというと
タスク定義のときにsimple-app-task-def.jsonの中で指定したコンテナ「busybox」が
Shellで while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\ を繰り返していて
その結果がコンテナ「simple-app」の中の my-vol/date という階層に送られ続けているからです。
ブラウザを更新すると、秒数が更新されているのがわかると思います。
llminatoll.icon EC2上で動くWebアプリをDockerでデプロイできたね!
HTMLちゃん.icon でもまだこれだけでは、コンテナが止まってしまった時に、死んだままで自動復旧はしてくれないよ
llminatoll.icon なんでコンテナ死んだままなん……
HTMLちゃん.icon 次の工程で、コンテナが止まったとしても何度でも蘇るインフラを作ろう!
llminatoll.icon わくわく!早く「何度でも蘇るさ」したーい!
次