レミオロメンのECS
##概要
- 日付:2018/03/09 22:30~23:30
- 登壇者:@uturned さん
- 議事録:@tenn_25
[※メモ]は、チャットやTwitterに皆さんが書いてくださったコメントです
内容
- コンテナ(docker hello-world)をECSで立ち上げる
- コンテナを殺しても勝手に復活することを確認
- ホストのインスタンスを殺しても復活することを確認
- ローカルでDockerイメージを作ってECS
用語
基本用語
- インスタンス:ホスト機。EC2のこと。
- コンテナー:ゲスト機。Dockerにより起動するプロセスのこと。
ECS用語(サッカーで例える)
- a. クラスター:日本代表
- b. サービス:ハリル監督、小久保監督
- c. タスク:ボランチ
- d. コンテナ:遠藤
監督が一番大事。
監督が居ないと何もできないが、
逆に監督が生きていれば、コンテナが死んでも自動で復活する。
※メモ:遠藤が負傷交代して中村憲剛に
ECSとFargateの違い
最近はFargateというのも出てきてAWSでコンテナを使うときの選択肢が増えた
- ECSを使うとEC2インスタンスが起動し自分で管理が必要
- Fargaateも裏ではEC2が動いているが、自分からは見えないので管理不要
※メモ:Fargateの方が安いというコメントもあったが、 時間当たりの料金はEC2の方が安い。
※メモ:Fargateはまだバージニア北部のみ!
ECSでコンテナを作ってみよう
マネジメントコンソールの[Elastic Container Service]を選択
※メモ:初めてクラスターを作成する時とそれ以降で作成するときで、設定画面や作成手順が違うようです。
デモで解説してたのは2回目以降作るときの画面でした。
以下は2回目以降作成の手順です。
初回は、タスク⇒サービス⇒クラスターの順にまとめて作成しないといけません。 設定項目も一部簡略化されています。
クラスターの作成
- EC2 Linux + ネットワーキング or EC2 Windows + ネットワーキング 選択
- クラスタ名:
- インスタンスサイズ:
- インスタンス数:
- ストレージ(GB):
- キーペア設定:
- ネットワーキング:
⇒作成
ECSクラスターが作成される(チーム作成完了)
裏はEC2なので起動に時間がかかる。
⇒クラスターを表示
インスタンスが立ち上がる(この時点で課金発生)
タスクの作成
- コンテナ名:my-conatainer
- イメージ:dockercloud/hello-world (dockerHubのコンテナ指定)
- メモリ制限(ハード制限):128
- ポートマッピング:ホスト80-コンテナ80 ※わすれずに
⇒追加
サービスの作成
-
起動タイプ:EC2(Fargateが使えるリージョンでは選択)
-
タスク定義:my-task:1
-
クラスター:my-cluster
-
サービス名:my-service
-
タスクの数:2つ爆発的に増えるなら大目に
-
最小ヘルス率:50
-
最大率:200
-
ステップ2 ELBタイプ:なし
-
ステップ3 AutoScailing:する場合は、最小、最大を選択
スケールするとお金がその分かかるよ
⇒作成(監督「試合開始!」)
EC2にsshしてプロセスを確認しよう
Q:IPはどこにあるか
A:クラスタータブ>タスク>外部リンク
My hostname is インスタンスID
Q:sshするには?
A:セキュリティグループでsshを開けよう(デフォルトで80はあいてる )
EC2にsshしてプロセスを確認すると2つある。
$ docker ps
・dockerイメージのプロセス
・amazon/amazon-ecs-agentというプロセス…こいつのお陰で監督が指示を出せる
コンテナ殺してみよう
Q:コンテナ落ちたらどうなるの?
A: 自動で再起動(新しいボランチに交代)
$ docker -rm -f コンテナID (IDが一意になるとこまで打てばOK)
メモ:ContainerID と My Hostname は一致する
ホストを殺してみよう
Q:インスタンスを消したらどうなるの?
A: 自動で新しく作られる
EC2の一覧から削除
⇒監督は死なないので、自動的に違うEC2が立ち上がる。
⇒IPが変わり、インスタンスID、コンテナIDも変わる
★親が死んでも子が死んでも、監督が生きてるから自動復帰する。それがECS!
ローカルでイメージを作って、ECRに上げる。
-
ECRとは:Elastic Container Registry
-
DockerHubだと全世界公開になってしまうので、クローズ環境で使うならECRを使おう!
-
アップロードまでの流れ
DockerFile⇒[Cretate COntainer image]⇒ContainerImage⇒[Publish Image]⇒Container Registry
※メモ:プライベートなコンテナレジストリにはAmazonの他に、Google Cloudだったり、Azureだったり、Gitlabだったりがあります。
ECRにリポジトリを作る
-
リポジトリ名:infra-study
-
リポジトリのURI:DockerHubのイメージをURIで指定するように、あとでこのURIを指定する。大事なのでメモる。
⇒リポジトリが作られる -
コマンドが表示されるので、説明に従って実行する
⇒ECS>リポジトリ>出来上がってる! -
あとは、コンテナ作るとこのイメージのテキストボックスに
さっきのイメージ別名をいれると作れるよ!
※メモ:AWSの営業の人が、 「ECS+Fargate+EFSで、kubernetesと同等なことができる」って言っていました
※メモ:現状、FargateとEFSの連携はできなさそう
クラスターの削除
- サービスのauto scaleをなしにする(最小が0、とか)
- サービスを消す
- クラスターを消す(EC2も一緒に消えます)
※メモ:タスク定義の変更削除はグループでは消せず、単体で削除すること。