レミオロメンのECS

##概要

  • 日付:2018/03/09 22:30~23:30
  • 登壇者:@uturned さん
  • 議事録:@tenn_25

[※メモ]は、チャットやTwitterに皆さんが書いてくださったコメントです

内容

  1. コンテナ(docker hello-world)をECSで立ち上げる
  2. コンテナを殺しても勝手に復活することを確認
  3. ホストのインスタンスを殺しても復活することを確認
  4. ローカルで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の連携はできなさそう

クラスターの削除

  1. サービスのauto scaleをなしにする(最小が0、とか)
  2. サービスを消す
  3. クラスターを消す(EC2も一緒に消えます)

※メモ:タスク定義の変更削除はグループでは消せず、単体で削除すること。