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を経由させる