AWS ECSタスクの実行場所について理解する

AWS

ECS

コンテナのオーケストレーター的なサービス。
ECSそのものは無料。

タスク定義

  • 最大10のコンテナに対するイメージやポートといったパラメータを指定
  • Docker ComposeやK8sにおけるDeploymentに相当

タスクロール

コンテナインスタンスに紐づけるIAMロール
S3やDynamo DBへのアクセス権をコンテナインスタンスに付与するのはここ。

コンテナを動かす場所

インフラを事前調達しておくかどうか。

  • FARGATE(フルマネージド)
  • EC2(アンマネージド)

インターネット宛の経路

VPC、ルートの構成に従う

FARGATE

EC2管理不要。VPC,Security Groupを選ぶだけでタスク定義に応じたリソースがAWS側で割り当てられ
コンテナインスタンス(タスク or サービス)が起動する。

インスタンスサイズ

vCPU数に応じてサポートされるメモリ容量が決まっている。
メモリ1GBでいいけど4コア必要といった構成はできない。

vCPU メモリ
0.25 0.5GB,1GB,2GB
0.5 1GB-4GB(1GB単位)
1 2GB-8GB(1GB単位)
2 4GB-16GB(1GB単位)
4 8GB-30GB(1GB単位)
8 16GB-60GB(4GB単位)
16 32GB-120GB(8GB単位)

料金

  • 請求単位最低は1 分。
  • 請求対象はコンテナイメージのダウンロード (Docker pull) を開始した時刻からタスクが終了するまでの時間だからDockerイメージはなるべく小さい方がいい

0.5vCPU,1GBメモリのFargateタスクを延べ730時間動かす場合の料金は以下の通り。

Fargate Fargate Spot
vCPU(0.5コア) ¥2,664 ¥810
メモリ(1024GB) ¥291 ¥89
合計 ¥2,955 ¥898

ネットワークモード

awsvpc - コンテナごとにENIを持つ、FargateではコンテナインスタンスにパブリックIPを振れる。

VPC

Fargateはタスク起動時にサブネットを選択しデプロイする

EC2

AutoScalingグループを定義し、グループ内のインスタンスをECSインフラストラクチャとして登録

  • OS
    • 最適化AMIを使えばECSエージェントが入っておりすぐにECSインフラストラクチャとして登録できる。
    • OSパッケージの更新管理は必要
  • インスタンスサイズ変更、別のECSクラスタへの転用は推奨されない(インスタンス新規作成が必要)
  • インスタンスタイプによるENI上限=起動できるコンタなインスタンス上限
  • システムメモリフットプリント
    • ECS_RESERVED_MEMORY構成変数によりあらかじめインスタンスのメモリから差し引いた上でECSに登録
    • ECS最適化AMIでは256MB程度か?
  • EC2インスタンスプロファイルのIAMロールをコンテナインスタンスに適用しない方法
    • awsvpcモード : エージェントの設定ファイルでECS_AWSVPC_BLOCK_IMDS=trueとする
    • bridgeモード : EC2インスタンスのiptablesでdocker用ENIからメタデータサーバーへのアクセスをブロック

ネットワークモード

タイプ 特徴
awsvpc コンテナごとにENIを持つ。EC2におけるawscpiのENIにはパブリックIPは振れない。(*)awsvpcTrunking対応ホストは12ENI,非対応ホストは3ENIなので起動できるコンテナ数に制限がある(うち、1つはOSで利用)
host ホストのIP,ポートがコンテナにマップされる
故にポートがコンフリクトし同じタスクを2つ以上同一ホストで実行できない
bridge ランダムなポートとコンテナのポートをマップできる。
ロードバランサーで動的に追跡可能できる?

(*)EC2上のタスクからインターネットに出るにはNAT GWを経由させる

タイトルとURLをコピーしました