ECSでコンテナを動かしてみる

前回、ECRにコンテナを登録してみました。
ECRにdockerイメージを登録してみる - xdeveloper
今回はECRに登録したコンテナをECSで動かしてみたいと思います。

ECSとは

Amazon Elastic Container Service (ECS) はDockerコンテナの起動、停止、デプロイ、スケーリング、設定を自動化できるフルマネージドなコンテナオーケストレーションサービスです。
これまでコンテナを実行するホストマシン環境は自分で準備する必要がありましたが、ECSを利用するとホストマシン環境を簡単に作成することができます。 またコンテナの起動、停止、デプロイやこれらの自動化もECSより実施することができます。ECSを利用することでコンテナの管理を高品質で効率よく行うことができます。

起動タイプ

コンテナが動作するホストによって起動タイプは「EC2」と「Fargate」があります。
「EC2」はホストマシンがEC2上に作成されます。ホストマシンを複数台作成し冗長化することも可能です。
「Fargate」はホストマシンの管理を完全にAWSに移譲するものです。そのためホストマシンにアクセスすることはできません。 AWSに任せてしまうことでホストマシンに対するセキュリティやリソース状況などの管理を行う必要がなくなります。

f:id:d-akmts:20210225102309p:plain
起動タイプ

タスク/サービス/クラスタ

ECSを利用する上で少なくとも知っておく必要がある3つの用語です。

  • タスク
    コンテナの管理(1タスクに複数コンテナ可)
    コンテナのリソース、環境変数なども設定

  • サービス
    複数のタスクより成り立つ。タスクの起動数の設定。
    ELBやデプロイやオートスケールの方法の設定。

  • クラスタ
    ホストの設定。ホストの種類(EC2/Fargate)
    EC2の場合のインスタンスタイプやインスタンス数など

f:id:d-akmts:20210216135340p:plain
タスク/サービス/クラスタ

ECSでコンテナを起動させてみよう

実際にECSでコンテナを起動してみましょう。
今回は起動タイプをEC2、コンテナは前回作成したApacheのコンテナを利用します。

クラスターの作成

AWSマネジメントコンソールからECSを選択し、メニューのクラスターを選択、「クラスターの作成」ボタンをクリックします。
クラスターテンプレートの選択では「EC2 Linux + ネットワークイング」を選び、「次のステップ」をクリックします。

f:id:d-akmts:20210225104644p:plain
クラスターテンプレートの選択

  • クラスタ名・・・適当な名前を入力
  • EC2インスタンスタイプ・・・t3a.smallあたりを選択。あまりスペックが低いとコンテナが起動できないです。
  • インスタンス数・・・EC2を複数立ち上げたいので2

f:id:d-akmts:20210225110316p:plain
クラスターの作成1

  • キーペア・・・EC2にアクセスしたい場合は適切なものを指定。「なし」でもかまいません。
  • VPC・・・「新しいVPCの作成」を選択

f:id:d-akmts:20210225112643p:plain
クラスターの作成2

  • セキュリティグループ・・・「新しいセキュリティグループ」とし、インバウンドルールには Apacheにアクセスするアクセス元のIPアドレスを指定。
  • ポート・・・80。

画面下の「作成」ボタンをクリックします。

f:id:d-akmts:20210225112951p:plain
クラスターの作成3

タスクの作成

続いてタスクを作成します。
事前にECRでデプロイしたいリポジトリURIをECRで確認しメモしておきます。
 
ECSのメニューの「タスク定義」を選択、「新しいタスク定義の作成」ボタンをクリックします。
起動タイプでは「EC2」を選択します。

f:id:d-akmts:20210225113511p:plain
タスクの作成1

  • タスク定義名・・・適当な名前を入力
  • ネットワークモード・・・bridge

    f:id:d-akmts:20210225113541p:plain
    タスクの作成2

  • タスクメモリ・・・512

  • タスクCPU・・・512

f:id:d-akmts:20210225113608p:plain
タスクの作成3

「コンテナの追加」をクリックします。

  • コンテナ名・・・適当な名前を入力
  • イメージ・・・ECRで控えたURIを入力
  • ポートマッピング・・・ホストポート「80」、コンテナポート「80」とします  

「追加」ボタンで「コンテナの追加」を閉じます。
画面下の「作成」ボタンをクリックします。

f:id:d-akmts:20210225113754p:plain
タスクの作成4

サービスの作成

サービスを作成します。
 
ECSのメニューの「クラスタ」を選択、先ほど作成したクラスタを選択します。
サービスタブの「作成」ボタンをクリック。

  • 起動タイプ・・・EC2を選択
  • タスク定義名・・・先ほど作成したタスクを選択
  • クラスター・・・先ほど作成したクラスターを選択
  • サービス名・・・適当な名前を入力
  • タスクの数・・・2

画面下の「次のステップ」をクリックします。
以降はデフォルトのまま作成します。

f:id:d-akmts:20210225144348p:plain
サービスの作成

しばらく待つとコンテナインスタンスが2つ起動しているのが分かります。
コンテナインスタンスのリンクをクリックします。

f:id:d-akmts:20210225144234p:plain
タスク

コンテナインスタンスの詳細が分かります。
EC2インスタンスよりコンテナが実行されているEC2のインスタンスが分かります。
パブリックIPに記載されているIPアドレスにブラウザからアクセスしてみます。

f:id:d-akmts:20210225144302p:plain
コンテナインスタンス

コンテナ上で動作しているApacheの画面にアクセスできました。

f:id:d-akmts:20210225150301p:plain
ブラウザからアクセス