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

#クラスター#

##ネットワーキングのみ##

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

###クラスターの設定###

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/577ad1ff-74e4-a4fc-6219-9931389c34d7.png)

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

###ネットワーキング###

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/d5e3946c-2d65-eb57-698d-f075f3be610b.png)

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

###CloudWatch Container Insights###

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/9da66164-e137-a656-b3c1-04986418bcbe.png)

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

##EC2 Linux + ネットワーキング##

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

###インスタンスの設定###
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/0bf48c72-c1de-b6ea-4d56-e007a87b21fb.png)

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

###ネットワーキング###

![スクリーンショット 2020-02-15 15.56.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/bb6d6054-d961-2df0-efa4-39f39985bdf3.png)

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

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

![スクリーンショット 2020-02-15 15.59.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/37d0c06a-53b1-5077-94b4-e53ebb290fc5.png)

|ネットワーキング | |
|-----|-----|
|[コンテナインスタンスの IAM ロール](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/instance_IAM_role.html)|ECSクラスターへ参加を行う際に必要となるIAMロール。<br>**ecsInstanceRole**がない場合は自動で作成される。|

##EC2 Windows + ネットワーキング##

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

###インスタンスの設定###

![スクリーンショット 2020-02-15 16.29.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/edeb53a1-4479-0d0b-cb1d-dccdf46a7c1e.png)


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





#タスク定義#

##EC2##

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/aa4f2dc9-b6dc-f286-2970-797e63cbf452.png)

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

###タスクの実行 IAM ロール###

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e89de96a-37c9-70db-cdea-88774fdbc40e.png)

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

###タスクサイズ###

![スクリーンショット 2020-02-22 19.23.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c5f6cb24-e7d1-e384-d64c-02bf6034057b.png)

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

###コンテナの定義###

**スタンダード**

![スクリーンショット 2020-02-18 19.07.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/3275308d-6163-0828-80f3-e3a95bcfa2bc.png)

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

**詳細コンテナ設定**

***ヘルスチェック***

![スクリーンショット 2020-02-20 20.43.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/129c569e-44bd-c21f-e552-df3fb21de8e3.png)

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

***環境***

![スクリーンショット 2020-02-22 18.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/c7b27310-be24-4f82-e932-de9ac253dfb7.png)

|環境　|　|
|--------|--------|
|CPU ユニット数|コンテナ用に予約する CPU ユニットの数|
|GPU|コンテナ用に予約する GPU ユニットの数|
|基本 |**true**はそのコンテナが何らかの理由で失敗または停止すると、タスクに含まれる他のすべてのコンテナは停止される<br>**false**は、その失敗はタスクに含まれる残りのコンテナに影響は与えない。|
|エントリポイント|コンテナに渡す[Docker エントリポイント](https://docs.docker.com/engine/reference/builder/#entrypoint)|
|コマンド　|コンテナに渡す [Docker CMD](https://docs.docker.com/engine/reference/builder/#cmd)|
|作業ディレクトリ　|コンテナ内でバイナリを実行するための作業ディレクトリ|
|環境変数　|コンテナに渡す環境変数　|

***コンテナタイムアウト***

![スクリーンショット 2020-02-22 18.35.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/0cfb5982-316d-e4d6-3cc7-6449048ee9b7.png)

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

***ネットワーク設定***

![スクリーンショット 2020-02-22 18.45.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/63c91701-0efb-e94f-e5d9-c934964f1ac5.png)

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

***ストレージとログ***

![スクリーンショット 2020-02-22 19.09.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/979737f0-c611-5ec2-46db-f2ef98e9d526.png)

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

***セキュリティ***

![スクリーンショット 2020-02-22 19.09.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/72e201c4-57f4-2a6e-2efd-0156e7218f4e.png)

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

***リソースの制限***

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

***DOCKER ラベル***

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

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

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

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

###ボリューム###
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/785f696f-1dbf-264c-8199-6fa75d029a9b.png)
↓「ボリュームの追加」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/b7d7f7f9-9304-11c9-01ff-71ee31bed4b1.png)

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

###Tags###

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/255dfe11-fb37-37fb-c63e-2465fc7c8a2a.png)

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

##FARGATE##

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e7140b6b-1f36-4346-5b29-b6149422d14c.png)

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

###タスクサイズ###


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/8817c524-4a5c-22e7-9143-6a4c81cb4cf7.png)


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


#サービス#

##EC2##

###サービスの設定###

![スクリーンショット 2020-02-24 17.05.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/772aecf2-2fce-fd76-2d8b-dc3c540f60ec.png)

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

###デプロイメント###

![スクリーンショット 2020-02-24 17.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ccc89590-456c-b86b-6c9b-d5e98cd55084.png)

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

###タスクの配置###

![スクリーンショット 2020-02-24 17.24.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/749c4def-f608-41f8-7a35-49570f5fe41f.png)

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

###ネットワーク構成###

![スクリーンショット 2020-02-24 17.29.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/ce1eb06a-913f-9c61-aa18-d61c69470213.png)

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

###ロードバランシング###

![スクリーンショット 2020-02-24 17.29.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/a4308572-579a-83c4-8cf6-63dcc0f56910.png)

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

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

![スクリーンショット 2020-02-26 20.55.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/f273bff7-9658-7bd3-8291-52587cf1e75b.png)

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

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

![スクリーンショット 2020-02-26 21.02.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e95e9d0d-79e5-f1b9-6e27-7c350de225a0.png)

|サービスの検出の DNS レコード||
|---|---|
|DNS レコード型|レコードセットの種類。<br>bridgeまたはhostでタスク定義を使用する場合、Service Discoveryでは **SRV DNS** レコードのみ。<br>awsvpc使用すると、**A** または **SRV DNS** レコードを設定できます。|
|ネットワークアドレス|SRV DNS レコードに関連付けるネットワークの詳細。<br>bridgeまたはhostでタスク定義を使用している場合は、タスク定義内の特定のポートマッピングを参照。<br>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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/339254aa-c0c7-6f27-12dd-70bb7e7b76c3.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/419a0a0e-5de8-5d09-2e17-027d0e82d63b.png)

|ロードバランシング||
|---|----|
|ロードバランサーの種類|**ALB**もしくは**NLB**、**CLB**を指定可能|



---
#リンク#
[Amazon ECSネットワークモードを検証してみる](https://qiita.com/leomaro7/private/41c5dfb88ca48e5a3962)
[AWS ECS ～ demo](https://qiita.com/leomaro7/items/7d6feb07e9b22b6e63e4)