LoginSignup
74
69

More than 3 years have passed since last update.

Amazon ECS 細かい箇所を整理してみた

Last updated at Posted at 2020-02-29

クラスター

ネットワーキングのみ

Fargate タスクに使用する新しい VPC でクラスターを起動できます。

クラスターの設定

image.png

クラスターの設定
クラスター名 クラスターの名称です。

ネットワーキング

image.png

ネットワーキング
VPCの設定 新しいVPCで起動する場合はチェックを入れ、以下の項目を入力します。デフォルト設定を使用する場合は不要です。
CIDRブロック 「VPCの設定」でチェックをいれた場合
サブネット1/2 「VPCの設定」でチェックをいれた場合 

CloudWatch Container Insights

image.png

CloudWatch Container Insights は、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集計、要約します。

EC2 Linux + ネットワーキング

※「ネットワーキングのみ」と異なる箇所のみ記載。

インスタンスの設定

image.png

インスタンスの設定
プロビジョニングモデル オンデマンドインスタンスまたはスポットから選択。
※以下はすべてオンデマンドインスタンスを選択した場合のみ 
EC2 インスタンスタイプ コンテナインスタンスに使用するインスタンスタイプ
インスタンス数 クラスターで起動するインスタンスの数
EC2 Ami Id コンテナインスタンスに使用する EC2 AMI ID
EBS ストレージ (GiB)  Amazon ECS-optimized AMI は 8 GiB および 22 GiB で起動します。
※22以上を指定する必要があります。
キーペア SSHで接続するキーペア

ネットワーキング

スクリーンショット 2020-02-15 15.56.27.png

ネットワーキング
セキュリティグループ コンテナインスタンスのセキュリティグループ

コンテナインスタンス IAM ロール

スクリーンショット 2020-02-15 15.59.37.png

ネットワーキング
コンテナインスタンスの IAM ロール ECSクラスターへ参加を行う際に必要となるIAMロール。
ecsInstanceRoleがない場合は自動で作成される。

EC2 Windows + ネットワーキング

※「ネットワーキング」「EC2 Linux + ネットワーキング」と異なる箇所のみ記載。

インスタンスの設定

スクリーンショット 2020-02-15 16.29.58.png

インスタンスの設定
EBS ストレージ (GiB) ECS-Optimized Windows Server AMI は 50 GiB ルートボリュームで起動します。

タスク定義

EC2

タスクとコンテナ定義の設定

image.png

タスクとコンテナ定義の設定
タスク定義名 タスクの定義の名前
タスクロール コンテナ単位でのIAMロール
ネットワークモード <デフォルト> は bridge
none はコンテナ定義にポートマッピングを指定することはできず、タスクのコンテナに外部接続できなくなる。
awsvpc の場合、タスクに ENI が割り当てられます。
host および awsvpc は、コンテナのネットワークパフォーマンスは最大限に高まる。bridge とは異なり、仮想化ネットワークではなく、EC2 ネットワークを使用するためです。ただし、公開されるコンテナポートは対応するホストポートに直接マッピングされるため、ポートマッピングが使用されている場合は、1 つのコンテナインスタンスで同じタスクの複数のインスタンスを実行することはできない。

タスクの実行 IAM ロール

image.png

タスクの実行 IAM ロール
タスク実行ロール ECSコンテナエージェント(=ECS-Agent)がECS APIを実行するために使用されるIAMロールとなります。

タスクサイズ

スクリーンショット 2020-02-22 19.23.30.png

タスクサイズ
タスクメモリ (MiB) タスクの固定サイズを指定。
※EC2 起動タイプはオプション。タスクサイズは Windows コンテナではサポートされない。
タスク CPU (単位) 同上

コンテナの定義

スタンダード

スクリーンショット 2020-02-18 19.07.38.png

スタンダード
コンテナ名 コンテナの名前
イメージ コンテナのイメージ
プライベートレジストリの認証 認証が必要なプライベートレジストリからコンテナイメージを取得する場合に指定します
AWS Secrets Manager を使用して有効になる。
メモリ制限 (MiB) ハード制限を指定した場合、コンテナはその制限を超えると強制終了される。
ソフト制限を指定した場合は、ECS によってコンテナ用にメモリの容量が予約されます。
ポートマッピング ホストポート→コンテナポートのポートマッピング

詳細コンテナ設定

ヘルスチェック

スクリーンショット 2020-02-20 20.43.14.png

ヘルスチェック   
コマンド ヘルスチェックに利用したいコマンド
間隔 実行間隔
タイムアウト 失敗と見なされるまでの時間
開始時間 失敗するまでのブートストラップまでの時間をコンテナに提供するオプションの猶予期間は、最大再試行回数にカウントされます。0~300 秒の間で指定できます。
再試行 異常と見なされるまでの回数 

環境

スクリーンショット 2020-02-22 18.25.50.png

環境   
CPU ユニット数 コンテナ用に予約する CPU ユニットの数
GPU コンテナ用に予約する GPU ユニットの数
基本 trueはそのコンテナが何らかの理由で失敗または停止すると、タスクに含まれる他のすべてのコンテナは停止される
falseは、その失敗はタスクに含まれる残りのコンテナに影響は与えない。
エントリポイント コンテナに渡すDocker エントリポイント
コマンド  コンテナに渡す Docker CMD
作業ディレクトリ  コンテナ内でバイナリを実行するための作業ディレクトリ
環境変数  コンテナに渡す環境変数 

コンテナタイムアウト

スクリーンショット 2020-02-22 18.35.23.png

コンテナタイムアウト   
タイムアウト開始 コンテナの依存関係解決の再試行を止めるまでの待機時間 
停止タイムアウト コンテナが正常に終了しなかった場合にコンテナが強制終了されるまでの待機時間

ネットワーク設定

スクリーンショット 2020-02-22 18.45.00.png

ネットワーク設定   
ネットワーキングの無効化 trueのとき、ネットワーキングはコンテナ内で無効となる。
リンク -linkパラメータを利用できる。ただし、Dockerでは非推奨とされている。
ホスト名 コンテナに使用するホスト名
DNS サーバー コンテナに渡すDNSサーバ
DNS 検索ドメイン コンテナに渡す DNS 検索ドメイン
追加ホスト コンテナ上の /etc/hosts ファイルに追加する、ホスト名と IP アドレスのマッピング

ストレージとログ

スクリーンショット 2020-02-22 19.09.09.png

ストレージとログ   
読み取り専用ルートファイルシステム trueのとき、コンテナには、ルートファイルシステムに対する読み取り専用アクセス権限が付与される
マウントポイント コンテナ内のデータボリュームのマウントポイント
ボリュームソース 別のコンテナのデータボリュームをマウント
ログ設定 コンテナのログ設定の仕様

セキュリティ

スクリーンショット 2020-02-22 19.09.39.png

セキュリティ   
特権付与 trueのとき、コンテナには、root ユーザーと同様の権限が付与される。
ユーザー コンテナ内で使用するユーザー名
Docker セキュリティオプション SELinux と AppArmor のマルチレベルセキュリティシステムのカスタムラベルになる文字列のリスト
※Fargate 起動タイプは無効

リソースの制限

リソースの制限   
ulimit コンテナ内で設定する ulimit

DOCKER ラベル

DOCKER ラベル   
キー/値ペア コンテナに追加するラベルのキー/値

(サービス統合)

AWS App Mesh は マイクロサービスを簡単に監視し制御することができるサービスです。

(プロキシ設定)

上記の App Mesh 統合オプションを適用した後に自動的に設定されます。それ以外の場合は、手動で設定する必要があります。

(ログルーターの統合)

FireLens for Amazon ECS では、ログ保存や分析のため、AWS サービスまたは AWS パートナーネットワーク (APN) の宛先にログをルーティングします。

ボリューム

image.png
↓「ボリュームの追加」
image.png

タスクサイズ
名前 ボリュームの名前
ボリュームタイプ Dockerは複数のコンテナにマウントすることもでき、複数のコンテナで共通のファイルを読み書きすることができる。
bind mountはホストが管理しているファイルやディレクトリをコンテナにマウントする。
EFSを利用すれば、ストレージ容量が伸縮自在になる。

Tags

image.png

ECSリソースにタグをつけることができる。

FARGATE

※「EC2」と異なる仕様の部分のみ記載。

タスクとコンテナ定義の設定

image.png

タスクとコンテナ定義の設定
ネットワークモード awsvpcのみでしか動作しません。

タスクサイズ

image.png

タスクサイズ
タスクメモリ (MiB) Fargate 起動タイプは必須。
タスク CPU (単位) 同上

サービス

EC2

サービスの設定

スクリーンショット 2020-02-24 17.05.09.png

サービスの設定
起動タイプ タスクを実行する起動タイプ
タスク定義 実行するタスク
クラスター サービスを実行するクラスター
サービス名 サービスの名称
サービスタイプ REPLICAはクラスター全体で必要な数のタスクの配置および維持を行う。
DAEMONは、各コンテナインスタンスにタスクのコピーを 1 つ配置し維持する。
タスクの数 起動するタスクの数。
DAEMONでは指定不可。
最小ヘルス率 最低でもタスク数を維持する値(ローリングアップデートのみ)
最大率 起動するタスク数の最大値(ローリングアップデートのみ)

デプロイメント

スクリーンショット 2020-02-24 17.22.25.png

デプロイメントタイプ
デプロイメントタイプ ローリングアップデートはサービス内の現在のバージョンを新しいバージョンに置き換えます。デプロイ面と中に実行中のタスクを維持するには、「サービスの設定」で最小ヘルス率と最大率を指定する。
Blue/Green デプロイメント (AWS CodeDeploy を使用)は新しいバージョンのデプロイは本番のトラフィックが流れていない方の環境に行い、その環境上で正しく動作していることを確認したら、トラフィックをその環境に切り替えることで新しいバージョンをリリースする。
CodeDeploy のサービスロール Blue/Green デプロイメント (AWS CodeDeploy を使用)のみ

タスクの配置

スクリーンショット 2020-02-24 17.24.25.png

タスクの配置
配置テンプレート randomはランダムに配置。
binpackはCPU またはメモリの最小利用可能量に基づいてタスクを配置
spreadは指定された値に基づいてタスクを均等に配置する。
※制約を利用することで、タスクの配置に使用されるコンテナインスタンスをフィルタできる。

ネットワーク構成

スクリーンショット 2020-02-24 17.29.09.png

ネットワーク構成
VPC とセキュリティグループ タスク定義のネットワークモードが awsvpc である時に設定可能。
ヘルスチェックの猶予期間 ECS サービススケジューラが、タスクが最初に開始された後で異常な ELB ターゲットのヘルスチェックを無視する猶予期間
以下、ロードバランシングを設定した場合のみ指定可能

ロードバランシング

スクリーンショット 2020-02-24 17.29.59.png

ロードバランシング
ロードバランサーの種類 ALBもしくはNLBを指定可能
サービス用の IAM ロールの選択 サービスおよびロードバランサーで使用する IAM ロール
ロードバランサー名 使用するロードバランサー

サービスの検出 (オプション)

スクリーンショット 2020-02-26 20.55.01.png

サービスの検出 (オプション)
サービスの検出の統合の有効化 Route 53 を使用してサービスの名前空間を作成。これにより、サービスはDNS を介して検出可能とする。
名前空間 既存の名前空間/新しいプライベート名前空間
例えば、back.example.comでアクセスしたい場合、名前空間名にはexample.comを指定
サービスの検出サービスの設定 新しい検出サービスを作成するか、既存の検出サービスを利用するかを指定する
サービスの検出名 このECSサービスに対する検出名を入力。これは、作成するDNSレコードのプレフィックスとして使用される。
上の例だと、backを指定します。
ECS タスク状態の伝達の有効化 ECS はタスク状態を Route 53 に伝え、異常なタスクを DNS から削除するためにかかる時間を減らす。
Docker ヘルスチェック Docker ヘルスチェックは、タスク定義で定義される。

サービスの検出の DNS レコード

スクリーンショット 2020-02-26 21.02.30.png

サービスの検出の DNS レコード
DNS レコード型 レコードセットの種類。
bridgeまたはhostでタスク定義を使用する場合、Service Discoveryでは SRV DNS レコードのみ。
awsvpc使用すると、A または SRV DNS レコードを設定できます。
ネットワークアドレス SRV DNS レコードに関連付けるネットワークの詳細。
bridgeまたはhostでタスク定義を使用している場合は、タスク定義内の特定のポートマッピングを参照。
awsvpcでタスク定義を使用している場合は、タスク定義で独自のポートまたは特定のポートマッピングのいずれかを選択できる。
TTL リソースレコードキャッシュの有効期限

Auto Scaling (オプション)

Auto Scaling (オプション)
Service Auto Scaling CloudWatch アラームに応じてサービスの必要数を指定範囲内で調整する
タスクの最小数/必要数/最大数 EC2のAuto Scalingと考え方は同じ。
Service Auto Scaling 用の IAM ロール ECS で Auto Scaling の使用を許可する IAM ロール。
自動タスクスケーリングポリシー ターゲットの追跡
ポリシー名 ポリシーの名称
ECS サービスメトリクス メトリクスタイプ
ターゲット値 メトリクスのターゲット値
スケールアウトクールダウン期間 スケールアウトアクティビティが完了してから別のスケールアウトアクティビティが開始されるまでの時間。
スケールインクールダウン期間 スケールインアクティビティが完了してから別のスケールインアクティビティが開始されるまでの時間。
スケールインの無効化 スケールインの無効化
自動タスクスケーリングポリシー ステップスケーリング
ポリシー名 ポリシーの名称
次の場合にポリシーを実行 必要数を増やすポリシー
スケーリングアクション 必要数を減らすポリシー

FARGATE

※「EC2」と異なる仕様の部分のみ記載。

ネットワーク構成

image.png

ネットワーク構成 ※awsvpcのみ
VPC とセキュリティグループ クラスターのコンテナインスタンスが存在する VPC を選択
サブネット サブネットを選択
セキュリティグループ セキュリティグループを指定
パブリック IP の自動割り当て パブリック IP の自動割り当ての有効/無効

image.png

ロードバランシング
ロードバランサーの種類 ALBもしくはNLBCLBを指定可能

リンク

Amazon ECSネットワークモードを検証してみる
AWS ECS ~ demo

74
69
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
69