読者です 読者をやめる 読者になる 読者になる

kzk-casino.com

一人前のITエンジニアを目指して

AWSのECSを使ってdockerを動かしてみたりDeployの挙動を見てみたりした ①全体イメージ

AWSのdockerコンテナ稼働のためのマネージドサービスである、ECSを使って色々試してみました。

基本知識

ECSを使用するにあたって必要な基本知識・用語は下記
(基本的にはAWSのホワイトペーパーみた方が早いと思います)

(1)EC2インスタンスの登録
・アプリケーションが実行されるEC2インスタンスコンテナーインスタンス)をECSに登録
コンテナーインスタンスではDockerエージェントとECSエージェントが動作している必要がある
・セットアップ済みのAMI(ECS-optimized AMI)も用意されている

(2)クラスターの作成
・複数のコンテナーインスタンスをグループ化して仮想化した「クラスター」を作成する
・アプリケーションのデプロイはクラスターに対して実行される
・どのコンテナーインスタンスコンテナーを配置するかはECSが決めて管理する

(3)コンテナーの作成
コンテナーの実態はDockerで扱われる形式でビルドしたイメージファイル
・アプリケーションのコードや実行環境、ライブラリからイメージファイルをビルドして
 ECSにコンテナーとして登録する

(4)タスクの定義
・複数のコンテナーをグループ化した、デプロイと実行の最小単位となる「タスク」を定義する
・タスクの定義には必要リソースも設定する
 タスクが実行されるコンテナーインスタンスでどの程度のリソースを確保するかという設定

(5)タスクの起動ポリシーの設定
・タスクをどの様に起動するかのポリシーである「スケジューラ」を設定する
・タイプには「Run Task」と「Service」がある
・「Run Task」はバッチの様に手動で一回だけ実行する
・「Service」は設定されたタスクの起動数を常時保つ様に動作し、停止した場合は自動復旧する
Webサービスを提供する場合は「Service」を選択する

(6)タスクの実行
・ECSはクラスター内の空きリソースを自動的に探して、実際にタスクを動作させる
 コンテナーインスタンスを、スケジューラで設定されている数まで確保できるよう探す
・そして、タスクを起動する


全体イメージ概要

作りたい環境は下記のようなイメージ

f:id:kzk_casino:20160924222714p:plain

  • 作業端末(Mac)でDockerfileを作成し、Dockerfileから作成されたImageをDockerHubにPushする
  • Application Codeも基本的にはMacで作成し、GithubにPushしておく
  • AWS上でECSを動かし、クラスタ内に2つのEC2インスタンスを稼働させる
  • 各EC2インスタンスにはそれぞれ2つのコンテナを稼働させる(合計4つのTaskを動かす)
  • 各コンテナにはELBv2であるALBを用いてロードバランシングを実施する


具体的な各作業については順次投稿・・