はじめに
AWSのECSを勉強するためにBlack Belt Online Seminerを視聴したので内容をまとめます。
背景
著者は転職活動中ですが、志望する企業でDevOpsの知識が必要となるため、第一歩としてECSについて学習します。
ECSとは
- クラウドでコンテナを本番番環境利用するためのオーケストレーター。
- 各種AWSサービスとの連携が可能。
主要要素
- タスク定義:タスクを構成するコンテナ群定義。
- クラスター:実行環境の境界
- タスク:タスク定義に基づき起動されるコンテナ群(実際の実行の単位)
- サービス:決められた数にタスクをコピーして維持する
起動タイプ
- EC2起動タイプ:インスタンスをクラスターに登録する。インスタンスの管理が必要。
- Fargate起動タイプ:EC2インスタンスのプロビジョン、スケール、管理が不要
タスク定義の詳細
- 最大10個のコンテナを定義するJSON形式のテキストファイル。
- アプリケーションを実行するときは、タスク定義をインスタンス化した「タスク」を実行する。
代表的なパラメータ
- 必須
- ファミリー:タスク定義の名前。リビジョン番号と合わせて一意に特定することが可能。
- コンテナ定義:タスク実行時にコンテナランタイムに渡されるコンテナ定義。コンテナの名前、イメージ、メモリーなどを定義。
- environment:環境変数を平文で設定
- secrets(AWS Secret Manager、AWS Systems Managerパラメータストア):機密データを設定
- dependsOn:実行順序の制御や依存関係を設定
- オプション
- タスクロール:コンテナが利用できるIAMロールを指定。(APIなど)
- タスク実行ロール:ECSコンテナエージェントが利用するIAMロールを指定。(コンテナのイメージをpullなど)
- ネットワークモード:タスクのコンテナが使用するDockerネットワークモードを指定
- ボリューム:利用するボリュームを指定。
- タスクサイズ:CPUとメモリのハード制限を設定。
コンテナの実行方法
- タスク:タスク定義に従って実行されるアプリケーションの実行単位。バッチなどで活用
- サービス:指定した数のタスクを維持する。Webアプリなどで活用。
ECSとIAMの関係
- クラスターパーミッション:誰がクラスター内でタスクを起動/参照できるのかを制御
- コンテナインスタンスロール:コンテナインスタンスのECSからAPIへのアクセス
- タスクロール:アプリケーションのコンテナからのアクセス
- ハウスキーピング:タスク周りの下働きの実行許可
- タスク実行ロール:コンテナエージェントが利用するIAMロール
- ECSのサービスにリンクされたロール:ENIの作成、ELBへのターゲットの登録/解除