Amazon ECS - AWS Fargate 用ユーザーガイド...Amazon ECS AWS Fargate 用ユーザーガイド...

380
Amazon ECS AWS Fargate 用ユーザーガイド API バージョン 2014-11-13

Transcript of Amazon ECS - AWS Fargate 用ユーザーガイド...Amazon ECS AWS Fargate 用ユーザーガイド...

Amazon ECSAWS Fargate 用ユーザーガイド

API バージョン 2014-11-13

Amazon ECS AWS Fargate 用ユーザーガイド

Amazon ECS: AWS Fargate 用ユーザーガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Amazon ECS AWS Fargate 用ユーザーガイド

Table of ContentsAWS Fargate とは .............................................................................................................................. 1セットアップ ..................................................................................................................................... 3

AWS にサインアップする ............................................................................................................ 3IAM ユーザーを作成する .............................................................................................................. 3Virtual Private Cloud の作成 ......................................................................................................... 5AWS CLI をインストールする ...................................................................................................... 5

Docker の基本 .................................................................................................................................... 7Amazon Linux2 に Docker をインストールする ............................................................................... 7Docker イメージの作成 ............................................................................................................... 8イメージを Amazon Elastic Container Registry にプッシュする ......................................................... 9クリーンアップ ......................................................................................................................... 11

AWS Fargate での Amazon ECS の開始方法 ........................................................................................ 12前提条件 .................................................................................................................................. 12ステップ 1: タスク定義を作成する .............................................................................................. 12ステップ 2: サービスを設定する ................................................................................................. 13ステップ 3: クラスターを設定する .............................................................................................. 14ステップ 4: 確認 ....................................................................................................................... 14ステップ 5: (オプション) サービスを表示する ............................................................................... 14ステップ 6: クリーンアップ ....................................................................................................... 15

プラットフォームのバージョン ........................................................................................................... 16プラットフォームのバージョンに関する考慮事項 ........................................................................... 16使用できるプラットフォームのバージョン .................................................................................... 16

クラスター ....................................................................................................................................... 19クラスターの概念 ...................................................................................................................... 19クラスターの作成 ...................................................................................................................... 20クラスターキャパシティープロバイダー ....................................................................................... 21

クラスターキャパシティープロバイダーの概念 ...................................................................... 21クラスターキャパシティープロバイダーの考慮事項 ................................................................ 22

AWS Fargate キャパシティープロバイダーの使用 ......................................................................... 22Fargate キャパシティープロバイダーに関する考慮事項 .......................................................... 22Fargate Spot 終了通知の処理 ............................................................................................. 23Fargate キャパシティープロバイダーを使用する新しいクラスターの作成 .................................. 24既存のクラスターへの Fargate キャパシティープロバイダーの追加 .......................................... 24Fargate キャパシティープロバイダーを使用したタスクの実行 ................................................. 25

クラスター設定の更新 ............................................................................................................... 26クラスターの削除 ...................................................................................................................... 26

タスク定義 ....................................................................................................................................... 28タスク定義の考慮事項 ............................................................................................................... 28

ネットワークモード .......................................................................................................... 29タスク CPU とメモリ ........................................................................................................ 29ログ記録 .......................................................................................................................... 30Amazon ECS タスク実行 IAM ロール .................................................................................. 30タスク定義の例 ................................................................................................................. 30タスクストレージ .............................................................................................................. 31

アプリケーションのアーキテクチャ ............................................................................................. 32Fargate 起動タイプを使用する場合 ...................................................................................... 32

タスク定義の作成 ...................................................................................................................... 33タスク定義テンプレート .................................................................................................... 35

タスク定義パラメータ ............................................................................................................... 38ファミリー ....................................................................................................................... 39タスク実行ロール .............................................................................................................. 39ネットワークモード .......................................................................................................... 39コンテナ定義 .................................................................................................................... 39ボリューム ....................................................................................................................... 58

API バージョン 2014-11-13iii

Amazon ECS AWS Fargate 用ユーザーガイド

起動タイプ ....................................................................................................................... 60タスクサイズ .................................................................................................................... 60プロキシ設定 .................................................................................................................... 62その他のタスク定義パラメータ ........................................................................................... 63

起動タイプ ............................................................................................................................... 64Fargate 起動タイプ ........................................................................................................... 65EC2 起動タイプ ................................................................................................................ 66

タスクでのデータボリュームの使用 ............................................................................................. 67Amazon EFS ボリューム ................................................................................................... 69

Fargate タスクネットワーキング ................................................................................................. 72Fargate タスクネットワーキングに関する考慮事項 ................................................................ 73

awslogs ログドライバーを使用する ............................................................................................. 74コンテナで awslogs ログドライバーを有効にする .................................................................. 74ロググループを作成する .................................................................................................... 74使用できる awslogs ログドライバーのオプション .................................................................. 75タスク定義でログ設定を指定する ........................................................................................ 76CloudWatch Logs で awslogs コンテナログを表示する ........................................................... 77

カスタムログルーティング ......................................................................................................... 79考慮事項 .......................................................................................................................... 79必要な IAM アクセス権限 ................................................................................................... 80AWS for Fluent Bit イメージの使用 ..................................................................................... 81FireLens 設定を使用するタスク定義の作成 ........................................................................... 83Fluent ロガーライブラリの使用 ........................................................................................... 86正規表現を使用したログのフィルタリング ............................................................................ 86タスク定義の例 ................................................................................................................. 87

タスクのプライベートレジストリの認証 ....................................................................................... 89プライベートレジストリの認証には IAM アクセス許可が必須 .................................................. 90プライベートレジストリの認証の有効化 ............................................................................... 90

機密データの指定 ...................................................................................................................... 92Secrets Manager を使用する .............................................................................................. 92Systems Manager パラメータストアの使用 .......................................................................... 98

タスク定義の例 ....................................................................................................................... 102例: ウェブサーバー .......................................................................................................... 102例: splunk ログドライバー .............................................................................................. 103例: fluentd ログドライバー ............................................................................................ 103例: gelf ログドライバー ................................................................................................. 104例: コンテナの依存関係 .................................................................................................... 104

タスク定義の更新 .................................................................................................................... 106タスク定義リビジョンの登録解除 .............................................................................................. 106

アカウント設定 ............................................................................................................................... 108Amazon リソースネーム (ARN) と ID ......................................................................................... 109アカウント設定の表示 .............................................................................................................. 110アカウント設定の変更 .............................................................................................................. 111

タスクのスケジューリング ................................................................................................................ 113タスクの実行 .......................................................................................................................... 114

Fargate 起動タイプを使用してタスクを実行する .................................................................. 114タスクのスケジューリング (cron) ............................................................................................. 116タスクのリタイア .................................................................................................................... 119

リタイアが予定されているタスクの操作 ............................................................................. 119Fargate タスクリサイクル ........................................................................................................ 120

サービス ........................................................................................................................................ 122サービススケジューラの概念 ..................................................................................................... 122

レプリカ ........................................................................................................................ 123その他のサービスの概念 ........................................................................................................... 123サービス定義パラメーター ........................................................................................................ 123

起動タイプ ..................................................................................................................... 123キャパシティープロバイダー戦略 ...................................................................................... 124

API バージョン 2014-11-13iv

Amazon ECS AWS Fargate 用ユーザーガイド

タスク定義 ..................................................................................................................... 125プラットフォームのバージョン ......................................................................................... 125クラスター ..................................................................................................................... 125サービス名 ..................................................................................................................... 125スケジュール戦略 ............................................................................................................ 126必要数 ........................................................................................................................... 126デプロイ設定 .................................................................................................................. 126デプロイメントコントローラー ......................................................................................... 128タスクの配置 .................................................................................................................. 129Tags .............................................................................................................................. 129ネットワーク構成 ............................................................................................................ 130クライアントトークン ...................................................................................................... 134サービス定義テンプレート ................................................................................................ 134

サービスの作成 ....................................................................................................................... 135ステップ 1: 基本的なサービスパラメータの設定 .................................................................. 136ステップ 2: ネットワークの設定 ........................................................................................ 137ステップ 3: ロードバランサーを使用するようにサービスを設定する ....................................... 138ステップ 4: サービス検出 を使用するようにサービスを設定する ............................................ 143ステップ 5: サービスの Auto Scaling を使用するようにサービスを設定する ............................. 144ステップ 6: サービスを確認して作成する ............................................................................ 146

サービスの更新 ....................................................................................................................... 147サービスの削除 ....................................................................................................................... 149デプロイタイプ ....................................................................................................................... 150

ローリング更新 ............................................................................................................... 150CodeDeploy を使用した Blue/Green デプロイ ..................................................................... 150外部デプロイ .................................................................................................................. 155

サービスロードバランシング ..................................................................................................... 160サービス負荷分散に関する考慮事項 ................................................................................... 160ロードバランサーの種類 ................................................................................................... 162ロードバランサーの作成 ................................................................................................... 164サービスに複数のターゲットグループを登録する ................................................................. 171

サービスの Auto Scaling .......................................................................................................... 173サービスの Auto Scaling に必要な IAM アクセス許可 ........................................................... 174ターゲット追跡スケーリングポリシー ................................................................................ 175ステップスケーリングポリシー ......................................................................................... 180

サービス検出 .......................................................................................................................... 181サービス検出 の概念 ........................................................................................................ 182サービス検出 に関する考慮事項 ........................................................................................ 183Amazon ECS コンソールの操作 ........................................................................................ 184サービス検出 料金表 ........................................................................................................ 184

サービスの調整ロジック ........................................................................................................... 184リソースとタグ ............................................................................................................................... 186

リソースにタグを付ける ........................................................................................................... 186タグの基本 ..................................................................................................................... 186リソースにタグを付ける ................................................................................................... 186タグの制限 ..................................................................................................................... 187請求用のリソースにタグを付ける ...................................................................................... 188コンソールでのタグの処理 ................................................................................................ 188CLI または API でのタグの操作 ......................................................................................... 189

使用状況レポート .................................................................................................................... 191モニタリング .................................................................................................................................. 192

モニタリングツール ................................................................................................................. 192自動化ツール .................................................................................................................. 192手動ツール ..................................................................................................................... 193

CloudWatch メトリクス ........................................................................................................... 193CloudWatch メトリクスを有効にする ................................................................................. 194使用できるメトリクスとディメンション ............................................................................. 194

API バージョン 2014-11-13v

Amazon ECS AWS Fargate 用ユーザーガイド

サービス使用率 ............................................................................................................... 196サービスの RUNNING タスク数 .......................................................................................... 197Amazon ECS メトリクスの表示 ........................................................................................ 197

イベントと EventBridge ........................................................................................................... 198Amazon ECS イベント .................................................................................................... 199イベントの処理 ............................................................................................................... 205

CloudWatch Container Insights .................................................................................................. 207Container Insights に関する考慮事項 .................................................................................. 207Container Insights が有効なクラスターの操作 ...................................................................... 207

AWS CloudTrail を使用した Amazon ECS API コールのログ作成 ................................................... 209CloudTrail 内の Amazon ECS 情報 .................................................................................... 209Amazon ECS ログファイルエントリの概要 ......................................................................... 210

セキュリティ .................................................................................................................................. 212Identity and Access Management .............................................................................................. 212

対象者 ........................................................................................................................... 213アイデンティティを使用した認証 ...................................................................................... 213ポリシーを使用したアクセスの管理 ................................................................................... 215Amazon Elastic Container Service と IAM の連携 ................................................................. 216アイデンティティベースのポリシーの例 ............................................................................. 221サポートされるリソースレベルのアクセス許可 .................................................................... 230管理ポリシーと信頼関係 ................................................................................................... 231サービスにリンクされたロール ......................................................................................... 238タスク実行 IAM ロール .................................................................................................... 247タスク用の IAM ロール .................................................................................................... 251CodeDeploy IAM ロール ................................................................................................... 255CloudWatch イベント IAM ロール ..................................................................................... 258トラブルシューティング ................................................................................................... 261

ログ記録とモニタリング ........................................................................................................... 263コンプライアンス検証 .............................................................................................................. 264インフラストラクチャセキュリティ ........................................................................................... 264

インターフェイス VPC エンドポイント (AWS PrivateLink) .................................................... 265Amazon ECS CLI の使用 ................................................................................................................. 267

Amazon ECS CLI のインストール ............................................................................................. 267ステップ 1: Amazon ECS CLI をダウンロードする .............................................................. 267ステップ 2: Amazon ECS CLI を検証する .......................................................................... 267ステップ 3: 実行アクセス権限をバイナリに適用する ............................................................ 272ステップ 4: インストールを完了させる ............................................................................... 272

Amazon ECS CLI の設定 ......................................................................................................... 273プロファイル .................................................................................................................. 273クラスター設定 ............................................................................................................... 273優先順位 ........................................................................................................................ 274

設定ファイルの移行 ................................................................................................................. 274古い設定ファイルの v1.0.0 以降の形式への移行 ................................................................... 275

チュートリアル: Amazon ECS CLI を使用して Fargate タスクのクラスターを作成する ..................... 275前提条件 ........................................................................................................................ 275ステップ 1: タスク実行 IAM ロールを作成する .................................................................... 276ステップ 2: Amazon ECS CLI; の設定 ................................................................................ 276ステップ 3: クラスターを作成してセキュリティグループを設定する ....................................... 277ステップ 4: 構成ファイルを作成する .................................................................................. 277ステップ 5: クラスターに設定ファイルをデプロイする ......................................................... 278ステップ 6: クラスターの実行中のコンテナを確認する ......................................................... 278ステップ 7: コンテナログを表示する .................................................................................. 279ステップ 8: クラスターのタスクをスケーリングする ............................................................ 279ステップ 9: ウェブアプリケーションを表示する .................................................................. 279ステップ 10: クリーンアップ ............................................................................................ 280

チュートリアル : Amazon ECS CLI を使用して サービス検出 を使用する Amazon ECS サービスを作成する ................................................................................................................................... 280

API バージョン 2014-11-13vi

Amazon ECS AWS Fargate 用ユーザーガイド

前提条件 ........................................................................................................................ 280Amazon ECS CLI を設定する ........................................................................................... 280サービス検出 を使用するように設定された Amazon ECS サービスを作成する ......................... 281

タスクメタデータエンドポイント ...................................................................................................... 284タスクメタデータエンドポイントバージョン 4 ............................................................................ 284

タスクメタデータの有効化 ................................................................................................ 285タスクメタデータエンドポイントバージョン 4 のパス .......................................................... 285タスクメタデータ JSON レスポンス .................................................................................. 285例 ................................................................................................................................. 287

タスクメタデータエンドポイントバージョン 3 ............................................................................ 292タスクメタデータの有効化 ................................................................................................ 292タスクメタデータエンドポイントのパス ............................................................................. 292タスクメタデータ JSON レスポンス .................................................................................. 293タスクメタデータレスポンスの例 ...................................................................................... 295

サービスクォータ ............................................................................................................................ 297サービスクォータ を使用する ................................................................................................... 298

Savings Plans ................................................................................................................................. 299AWS App Mesh .............................................................................................................................. 300

シナリオ ................................................................................................................................ 300前提条件 ................................................................................................................................ 300ステップ 1: メッシュと仮想サービスを作成する .......................................................................... 300ステップ 2: 仮想ノードの作成 ................................................................................................... 301ステップ 3: 仮想ルーターとルートを作成する ............................................................................. 302ステップ 4: 確認と作成 ............................................................................................................ 303ステップ 5: 追加のリソースを作成する ....................................................................................... 304ステップ 6: サービスを更新する ................................................................................................ 308

チュートリアル ............................................................................................................................... 309チュートリアル: VPC の作成 .................................................................................................... 309

ステップ 1: NAT ゲートウェイの Elastic IP アドレスを選択する ............................................. 309ステップ 2: VPC ウィザードを実行する ............................................................................. 310ステップ 3: 追加のサブネットを作成する ............................................................................ 310次のステップ .................................................................................................................. 311

チュートリアル: AWS CLI を使用して Fargate タスクのクラスターを作成する ................................. 311前提条件 ........................................................................................................................ 312ステップ 1: クラスターを作成する ..................................................................................... 312ステップ 2: タスク定義を登録する ..................................................................................... 313ステップ 3: タスク定義をリスト表示する ............................................................................ 314ステップ 4: サービスを作成する ........................................................................................ 314ステップ 5: サービスをリスト表示する ............................................................................... 314ステップ 6: 実行中のサービスを記述する ............................................................................ 315ステップ 7: クリーンアップ .............................................................................................. 316

チュートリアル: Secrets Manager シークレットを使用した機密データの指定 .................................. 316前提条件 ........................................................................................................................ 317ステップ 1: Secrets Manager シークレットを作成する ......................................................... 317ステップ 2: タスク実行 IAM ロールを更新する .................................................................... 317ステップ 3: Amazon ECS タスク定義を作成する ................................................................. 318ステップ 4: Amazon ECS クラスターを作成する ................................................................. 319ステップ 5: Amazon ECS タスクを実行する ....................................................................... 320ステップ 6: 確認する ....................................................................................................... 320ステップ 7: クリーンアップ .............................................................................................. 321

チュートリアル: サービス検出 を使用したサービスの作成 ............................................................. 322前提条件 ........................................................................................................................ 322ステップ 1: サービス検出 リソースを作成する .................................................................... 323ステップ 2: Amazon ECS リソースを作成する .................................................................... 324ステップ 3: サービス検出 を確認する ................................................................................ 327ステップ 4: クリーンアップ .............................................................................................. 329

チュートリアル: Blue/Green デプロイを使用するサービスの作成 ................................................... 331

API バージョン 2014-11-13vii

Amazon ECS AWS Fargate 用ユーザーガイド

前提条件 ........................................................................................................................ 331ステップ 1: Application Load Balancer を作成する ............................................................... 331ステップ 2: Amazon ECS クラスターを作成する ................................................................. 332ステップ 3: タスク定義を登録する ..................................................................................... 333ステップ 4: Amazon ECS サービスを作成する .................................................................... 334ステップ 5: AWS CodeDeploy リソースを作成する .............................................................. 334ステップ 6: CodeDeploy デプロイを作成およびモニタリングする ........................................... 336ステップ 7: クリーンアップ .............................................................................................. 339

チュートリアル: CodePipeline を使用した継続的なデプロイ .......................................................... 340前提条件 ........................................................................................................................ 340ステップ 1: ビルド仕様ファイルをソースリポジトリに追加する ............................................. 340ステップ 2: 継続的デプロイパイプラインを作成する ............................................................ 342ステップ 3: Amazon ECR アクセス権限を CodeBuild ロールに追加する .................................. 343ステップ 4: パイプラインのテスト ..................................................................................... 344

チュートリアル: Amazon ECS CloudWatch イベント のリッスン ................................................... 345前提条件: テスト用クラスターを設定する ........................................................................... 345ステップ 1: Lambda 関数を作成する .................................................................................. 345ステップ 2: イベントルールを登録する ............................................................................... 345ステップ 3: ルールをテストする ........................................................................................ 346

チュートリアル: タスク停止時のイベントに関する Amazon Simple Notification Service アラートを送信する ................................................................................................................................... 346

前提条件: テスト用クラスターを設定する ........................................................................... 347ステップ 1: Amazon SNS トピックを作成してサブスクライブする ......................................... 347ステップ 2: イベントルールを登録する ............................................................................... 347ステップ 3: ルールをテストする ........................................................................................ 348

トラブルシューティング ................................................................................................................... 350停止されたタスクでのエラーの確認 ........................................................................................... 350停止したタスクのエラーコード ................................................................................................. 355CannotPullContainer task errors ................................................................................................ 357サービスイベントメッセージ ..................................................................................................... 359

サービスイベントメッセージ ............................................................................................. 359指定された CPU またはメモリの値が無効 ................................................................................... 360サービスロードバランサーのトラブルシューティング ................................................................... 360

ドキュメント履歴 ............................................................................................................................ 362AWS の用語集 ................................................................................................................................ 372

API バージョン 2014-11-13viii

Amazon ECS AWS Fargate 用ユーザーガイド

AWS Fargate とはAWS Fargate は、Amazon ECS とともに使用して Amazon EC2 インスタンスでサーバーまたはクラスターを管理する必要なくコンテナを実行できるテクノロジーです。Fargate を使用すると、コンテナを実行するために仮想マシンのクラスターをプロビジョニング、設定、スケールする必要がありません。これにより、サーバータイプの選択、クラスターをスケールするタイミングの決定、クラスターのパッキングの最適化を行う必要がなくなります。

Fargate 起動タイプや Fargate キャパィティープロバイダーを使用して Amazon ECS タスクやサービスを実行する場合、アプリケーションをコンテナにパッケージ化し、CPU およびメモリ要件を指定して、ネットワーキングおよび IAM ポリシーを定義してから、アプリケーションを起動します。各 Fargate タスクは、独自の分離境界を持ち、基本となるカーネル、CPU リソース、メモリリソース、Elastic NetworkInterface を別のタスクと共有しません。

このトピックでは、Fargate タスクおよびサービスのさまざまなコンポーネントを説明し、Amazon ECSで Fargate を使用する際の特別な考慮事項について喚起します。

AWS Fargate での Amazon ECS は、現在以下のリージョンでのみ利用可能です。

リージョン名 リージョン

米国東部(バージニア北部) us-east-1

米国東部 (オハイオ) us-east-2

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

アジアパシフィック (ムンバイ) ap-south-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (フランクフルト) eu-central-1

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール) ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

以下のチュートリアルは、Fargate での Amazon ECS の使用開始に役立ちます。

• AWS Fargate での Amazon ECS の開始方法 (p. 12)• the section called “チュートリアル: AWS CLI を使用して Fargate タスクのクラスターを作成す

る” (p. 311)• the section called “チュートリアル: Amazon ECS CLI を使用して Fargate タスクのクラスターを作成す

る” (p. 275)

API バージョン 2014-11-131

Amazon ECS AWS Fargate 用ユーザーガイド

Amazon Elastic Container Service の詳細については、「Amazon ECS とは」を参照してください。

API バージョン 2014-11-132

Amazon ECS AWS Fargate 用ユーザーガイドAWS にサインアップする

Amazon ECS でのセットアップすでにアマゾン ウェブ サービス (AWS) にサインアップしていて、Amazon Elastic Compute Cloud(Amazon EC2) を使用している場合は、すぐに Amazon ECS を使用し始めることができます。2 つのサービスのセットアッププロセスは似ています。以下のガイドでは、Amazon ECS 初回実行ウィザードまたはAmazon ECS コマンドラインインターフェイス (CLI) を使用して、最初のクラスターを起動する準備をします。

Amazon ECS のセットアップを行うには、以下のタスクを完了します。これらのいずれかの手順をすでに完了している場合、それらをスキップして、カスタム AWS CLI のインストールに進むことができます。

AWS にサインアップするAWS にサインアップすると、Amazon EC2 および Amazon ECS を含むすべてのサービスに対して AWSアカウントが自動的にサインアップされます。料金が発生するのは、実際に使用したサービスの分のみです。

既に AWS アカウントをお持ちの場合は、次のタスクに進んでください。AWS アカウントをお持ちでない場合は、次に説明する手順にしたがってアカウントを作成してください。

AWS アカウントを作成するには

1. https://portal.aws.amazon.com/billing/signup を開きます。2. オンラインの手順に従います。

サインアップ手順の一環として、通話呼び出しを受け取り、電話のキーパッドを用いて確認コードを入力することが求められます。

次のタスクで AWS アカウント番号が必要となるので、メモしておいてください。

IAM ユーザーを作成するAWS のサービス (Amazon EC2、Amazon ECS など) では、サービスにアクセスする際に認証情報を提供する必要があります。このため、サービスのリソースにアクセスする権限があるかどうかがサービスによって判定されます。コンソールを使用するにはパスワードが必要です。AWS アカウントのアクセスキーを作成して、コマンドラインインターフェイスまたは API にアクセスすることができます。ただし、AWSアカウントの認証情報を使って AWS にアクセスすることはお勧めしません。代わりに AWS Identity andAccess Management (IAM) を使用することをお勧めします。IAM ユーザーを作成して、管理権限を使ってこのユーザーを IAM グループに追加するか、管理権限を付与します。これで、特殊な URL と IAM ユーザーの認証情報を使って、AWS にアクセスできます。

AWS にサインアップしたけれど、自身の IAM ユーザーをまだ作成していない場合は、IAM コンソールを使用して作成できます。

自分用の管理者ユーザーを作成し、そのユーザーを管理者グループに追加するには (コンソール)

1. AWS アカウント E メールアドレスとパスワードを使用して https://console.aws.amazon.com/iam/ でAWS アカウントのルートユーザー として IAM コンソールにサインインします。

API バージョン 2014-11-133

Amazon ECS AWS Fargate 用ユーザーガイドIAM ユーザーを作成する

Note

以下のAdministratorIAMユーザーの使用に関するベストプラクティスに従い、ルートユーザー認証情報を安全な場所に保管しておくことを強くお勧めします。ルートユーザーとしてサインインして、少数のアカウントおよびサービス管理タスクのみを実行します。

2. ナビゲーションペインで [Users]、[Add user] の順に選択します。3. [ユーザー名] に「Administrator」と入力します。4. [AWS マネジメントコンソール access (アクセス)] の横にあるチェックボックスをオンにします。

[Custom password (カスタムパスワード)] を選択し、その後テキストボックスに新しいパスワードを入力します。

5. (オプション) AWS では、デフォルトで、新しいユーザーに対して初回のサインイン時に新しいパスワードを作成することが必要です。必要に応じて [User must create a new password at next sign-in(ユーザーは次回のサインイン時に新しいパスワードを作成する必要がある)] のチェックボックスをオフにして、新しいユーザーがサインインしてからパスワードをリセットできるようにできます。

6. [Next: Permissions (次へ: アクセス許可)] を選択します。7. [Set permissions (アクセス許可の設定)] で、[Add user to group (ユーザーをグループに追加)] を選択し

ます。8. [Create group] を選択します。9. [グループの作成] ダイアログボックスで、[グループ名] に「Administrators」と入力します。10. [Filter policies (フィルタポリシー)] を選択し、その後 [AWS managed -job function (AWS 管理ジョブ

の機能] を選択してテーブルのコンテンツをフィルタリングします。11. ポリシーリストで、[AdministratorAccess] のチェックボックスをオンにします。次に、[Create group]

を選択します。

Note

AdministratorAccess アクセス許可を使用して、AWS Billing and Cost Management コンソールを使用する前に、IAM ユーザーおよびロールの請求へのアクセスをアクティブ化する必要があります。これを行うには、請求コンソールへのアクセスの委任に関するチュートリアルのステップ 1 の手順に従ってください。

12. グループのリストに戻り、新しいグループのチェックボックスをオンにします。必要に応じて[Refresh] を選択し、リスト内のグループを表示します。

13. [次へ: タグ] を選択します。14. (オプション) タグをキー - 値のペアとしてアタッチして、メタデータをユーザーに追加します。IAM

でのタグの使用の詳細については、『IAM ユーザーガイド』の「IAM エンティティのタグ付け」を参照してください。

15. [Next: Review] を選択して、新しいユーザーに追加するグループメンバーシップのリストを表示します。続行する準備ができたら、[Create user] を選択します。

この同じプロセスを繰り返して新しいグループとユーザーを作成し、AWS アカウントのリソースへのアクセス権をユーザーに付与できます。ポリシーを使用して特定の AWS リソースに対するユーザーのアクセス許可を制限する方法については、「アクセス管理」と「ポリシーの例」を参照してください。

新規の IAM ユーザーとしてサインインするには、AWS コンソールからサインアウトし、次の URL を使用します。このとき、your_aws_account_id はハイフンを除いた AWS アカウント番号です (たとえば AWSアカウント番号が 1234-5678-9012 であれば、AWS アカウント ID は 123456789012 となります)。

https://your_aws_account_id.signin.aws.amazon.com/console/

作成した IAM ユーザー名とパスワードを入力します。サインインすると、ナビゲーションバーに「your_user_name @ your_aws_account_id」が表示されます。

API バージョン 2014-11-134

Amazon ECS AWS Fargate 用ユーザーガイドVirtual Private Cloud の作成

サインページの URL に AWS アカウント ID を含めない場合は、アカウントのエイリアスを作成します。IAM ダッシュボードから [アカウントの別名を作成] を選択し、エイリアス (会社名など) を入力します。アカウントエイリアスを作成した後、サインインするには、次の URL を使用します。

https://your_account_alias.signin.aws.amazon.com/console/

アカウントの IAM ユーザーのサインインリンクを確認するには、IAM コンソールを開き、ダッシュボードの [IAM ユーザーサインインリンク] の下を確認します。

IAM の詳細については、「AWS Identity and Access Management ユーザーガイド」を参照してください。

Virtual Private Cloud の作成Amazon Virtual Private Cloud (Amazon VPC) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。

Note

Amazon ECS コンソールの初回実行時にクラスター用の VPC が作成されるため、Amazon ECSコンソールを使用する予定の場合は次のセクションに進むことができます。

デフォルトの VPC がある場合は、このセクションもスキップして、次のタスク「AWS CLI をインストールする (p. 5)」に移動できます。デフォルトの VPC があるかどうかを判断するには、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Amazon EC2 コンソールでサポートされるプラットフォーム」を参照してください。また、次の手順を使用して、アカウントにデフォルト以外の VPC を作成することもできます。

Important

アカウントがリージョン内で Amazon EC2 Classic をサポートしている場合、そのリージョンにはデフォルトの VPC はありません。

デフォルト以外の VPC を作成するには

1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。2. ナビゲーションバーで、VPC のリージョンを選択します。VPC はリージョンに固有であるため、

キーペアを作成したリージョンと同じリージョンを選択してください。3. VPC ダッシュボードで、[Launch VPC Wizard (VPC ウィザードの起動)] を選択します。4. [Step 1: Select a VPC Configuration] ページで、[VPC with a Single Public Subnet] が選択されている

ことを確認したら、[Select] を選択します。5. [Step 2: VPC with a Single Public Subnet] ページで、[VPC name] フィールドに、わかりやすい VPC

名を入力します。他のデフォルトの設定はそのままにしておき、[Create VPC] を選択します。確認ページで、[OK] を選択します。

Amazon VPC の詳細については、Amazon VPC ユーザーガイドの「Amazon VPC とは」を参照してください。

AWS CLI をインストールするAWS マネジメントコンソール を使用すると、Amazon ECS でのすべてのオペレーションを手動で管理できます。ただし、ローカルのデスクトップまたは開発者の環境に AWS CLI をインストールすると、Amazon ECS で共通の管理タスクを自動化できるスクリプトを作成できるようになります。

API バージョン 2014-11-135

Amazon ECS AWS Fargate 用ユーザーガイドAWS CLI をインストールする

Amazon ECS で AWS CLI を使用するには、最新バージョンの AWS CLI をインストールします。AWSCLI のインストールまたは最新バージョンへのアップグレードについては、AWS Command Line Interfaceユーザーガイドの「AWS コマンドラインインターフェイスのインストール」を参照してください。

API バージョン 2014-11-136

Amazon ECS AWS Fargate 用ユーザーガイドAmazon Linux2 に Docker をインストールする

Amazon ECS における Docker の基本

Docker は、Linux コンテナに基づいて分散アプリケーションの構築、実行、テスト、およびデプロイを許可するテクノロジーです。Amazon ECS は、タスク定義の Docker イメージを使用して、クラスター内のAmazon EC2 インスタンスでコンテナを起動します。Amazon ECS 製品の詳細、主な導入事例、よくある質問については、Amazon Elastic Container Service 製品の詳細ページを参照してください。

このガイドのドキュメントは、読者が Docker の概念と機能を基本的に理解していることを前提としています。Docker の詳細については、「Docker とは」、「Docker の概要」を参照してください。

Amazon Linux2 に Docker をインストールするNote

Docker をインストール済みの場合は、この手順をスキップして「Docker イメージの作成 (p. 8)」に進んでください。

Docker は、Ubuntu のような最新の Linux ディストリビューションから Mac OSX や Windows まで、さまざまなオペレーティングシステムで使用できます。特定のオペレーティングシステムに Docker をインストールする方法の詳細については、Docker インストールガイド を参照してください。

Docker を使用するには、ローカルの開発システムすら必要ありません。Amazon EC2 をすでに使用している場合は、Amazon Linux 2 インスタンスを起動し、Docker をインストールして開始できます。

Amazon EC2 インスタンスに Docker をインストールするには

1. Amazon Linux 2 AMI でインスタンスを起動します。詳細については、Linux インスタンス用 AmazonEC2 ユーザーガイド の「インスタンスの起動」を参照してください。

2. インスタンスに接続します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Linux インスタンスへの接続」を参照してください。

3. インスタンスでインストールされているパッケージとパッケージキャッシュを更新します。

sudo yum update -y

4. 最新の Docker Community Edition パッケージをインストールします。

sudo amazon-linux-extras install docker

5. Docker サービスを開始します。

sudo service docker start

6. ec2-user を docker グループに追加すると、sudo を使用せずに Docker コマンドを実行できます。

sudo usermod -a -G docker ec2-user

7. ログアウトし、再びログインして、新しい docker グループアクセス権限を取得します。これは、現在の SSH ターミナルウィンドウを閉じて、新しいウィンドウでインスタンスに再接続することで達成できます。新しい SSH セッションには適切な docker グループ権限があります。

API バージョン 2014-11-137

Amazon ECS AWS Fargate 用ユーザーガイドDocker イメージの作成

8. ec2-user が sudo を使用せずに Docker コマンドを実行できることを確認します。

docker info

Note

場合によっては、Docker デーモンにアクセスするための ec2-user に対するアクセス権限を提供するため、インスタンスを再起動する必要があります。次のエラーが表示された場合は、インスタンスを再起動してください。

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Docker イメージの作成Amazon ECS のタスク定義では、Docker イメージを使用してクラスター内のコンテナインスタンスでコンテナを起動します。このセクションでは、シンプルなウェブアプリケーションの Docker イメージを作成し、これをローカルシステムまたは Amazon EC2 インスタンスでテストします。次に、イメージをコンテナレジストリ (Amazon ECR や Docker Hub など) にプッシュして、Amazon ECS タスク定義で使用できるようにします。

シンプルなウェブアプリケーションの Docker イメージを作成するには

1. Dockerfile という名前のファイルを作成します。Dockerfile は、Docker イメージに使用する基本イメージと、そのイメージにインストールして実行するものを記述するマニフェストです。Dockerfileの詳細については、「Dockerfile リファレンス」を参照してください。

touch Dockerfile

2. 前の手順で作成した Dockerfile を編集し、以下のコンテンツを追加します。

FROM ubuntu:18.04

# Install dependenciesRUN apt-get update && \ apt-get -y install apache2

# Install apache and write hello world messageRUN echo 'Hello World!' > /var/www/html/index.html

# Configure apacheRUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

この Dockerfile は Ubuntu 18.04 イメージを使用します。RUN の手順により、パッケージキャッシュが更新され、ウェブサーバー用のいくつかのソフトウェアパッケージがインストールされてから、「Hello World!」のコンテンツがウェブサーバーのドキュメントルートに書き込まれます。EXPOSE 命令はコンテナ上のポート 80 を公開し、CMD 命令はウェブサーバーを起動します。

3. Dockerfile から Docker イメージを作成します。API バージョン 2014-11-13

8

Amazon ECS AWS Fargate 用ユーザーガイドイメージを Amazon Elastic

Container Registry にプッシュする

Note

Docker の一部のバージョンでは、下に示す相対パスの代わりに、次のコマンドで Dockerfileへの完全パスが必要になる場合があります。

docker build -t hello-world .

4. docker images を実行して、イメージが正しく作成されたことを確認します。

docker images --filter reference=hello-world

出力:

REPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest e9ffedc8c286 4 minutes ago 241MB

5. 新しく構築されたイメージを実行します。-p 80:80 オプションは、コンテナ上の公開されたポート80 をホストシステム上のポート 80 にマッピングします。docker run の詳細については、「Dockerrun reference」を参照してください。

docker run -t -i -p 80:80 hello-world

Note

Apache ウェブサーバーからの出力はターミナルウィンドウに表示されます。"Could notreliably determine the server's fully qualified domain name" メッセージは無視できます。

6. ブラウザーを開き、Docker を実行している、コンテナのホストサーバーを参照します。

• EC2 インスタンスを使用している場合、これはサーバーの [Public DNS] 値であり、SSH でインスタンスに接続するときに使用するアドレスと同じです。インスタンスのセキュリティグループでポート 80 上の受信トラフィックを許可していることを確認します。

• Docker をローカルに実行している場合は、ブラウザで http://localhost/ を参照します。• Windows または Mac コンピューターで docker-machine を使用している場合は、docker-machine ip

コマンドを使用して Docker のホスト VirtualBox VM の IP アドレスを見つけ、machine-name を、使用中の Docker マシンの名前に置き換えます。

docker-machine ip machine-name

ウェブページに「Hello, World!」が表示されます。7. [Ctrl + C] キーを押して、Docker コンテナを停止します。

イメージを Amazon Elastic Container Registry にプッシュする

Amazon ECR はマネージド型 AWS Docker レジストリサービスです。お客様は一般的な Docker CLI を使用してイメージをプッシュ、プル、管理できます。Amazon ECR 製品の詳細、主なお客様導入事例、FAQについては、Amazon Elastic Container Registry 製品の詳細ページを参照してください。

このセクションでは以下が必要になります。

API バージョン 2014-11-139

Amazon ECS AWS Fargate 用ユーザーガイドイメージを Amazon Elastic

Container Registry にプッシュする

• AWS CLI がインストールされ、設定されている。AWS CLI がシステムにインストールされていない場合は、『AWS Command Line Interface ユーザーガイド』の「AWS Command Line Interface のインストール」を参照してください。

• ユーザーには Amazon ECR サービスにアクセスするために必要な IAM アクセス許可があります。詳細については、「Amazon ECR マネージドポリシー」を参照してください。

イメージにタグを付け、Amazon ECR にプッシュするには

1. hello-world イメージを保存する Amazon ECR リポジトリを作成します。出力の repositoryUriに注目してください。

aws ecr create-repository --repository-name hello-repository --region region

出力:

{ "repository": { "registryId": "aws_account_id", "repositoryName": "hello-repository", "repositoryArn": "arn:aws:ecr:region:aws_account_id:repository/hello-repository", "createdAt": 1505337806.0, "repositoryUri": "aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository" }}

2. 前のステップの repositoryUri の値で hello-world イメージにタグを付けます。

docker tag hello-world aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository

3. aws ecr get-login-password コマンドを実行します。認証先のレジストリ URI を指定します。詳細については、Amazon Elastic Container Registry ユーザーガイドの「レジストリの認証」を参照してください。

aws ecr get-login-password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.us-east-1.amazonaws.com

出力:

Login Succeeded

Important

エラーが発生した場合は、AWS CLI の最新バージョンをインストールまたはアップグレードします。詳細については、AWS Command Line Interface ユーザーガイドの「AWS コマンドラインインターフェイスのインストール」を参照してください。

4. 前のステップの値 repositoryUri を使用して、Amazon ECR にイメージをプッシュします。

docker push aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository

API バージョン 2014-11-1310

Amazon ECS AWS Fargate 用ユーザーガイドクリーンアップ

クリーンアップAmazon ECR イメージの試用を終了したら、レポジトリを削除し、イメージストレージに対して課金されないようにします。

aws ecr delete-repository --repository-name hello-repository --region region --force

API バージョン 2014-11-1311

Amazon ECS AWS Fargate 用ユーザーガイド前提条件

AWS Fargate での Amazon ECS の開始方法

Amazon Elastic Container Service (Amazon ECS) は、コンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。Amazon ECS 管理のサーバーレスインフラストラクチャにあるクラスターをホストするには、AWS Fargate でサービスやタスクを起動します。AWS Fargate の概要については、「AWS Fargate とは (p. 1)」を参照してください。

タスクに Fargate 起動タイプを使用して、AWS Fargate で Amazon ECS を開始します。Amazon ECS がAWS Fargate をサポートするリージョンでは、Amazon ECS 初回実行ウィザードによって示されるプロセスに従って、Fargate 起動タイプを使用して Amazon ECS を開始できます。ウィザードはクラスター作成のオプションを提供し、サンプルのウェブアプリケーションを起動します。Amazon ECS で起動するDocker イメージがすでにある場合は、代わりにそのイメージを使用してタスク定義を作成し、クラスターで使用することもできます。

Important

EC2 タスクの Amazon ECS 初回実行ウィザードの詳細については、「Amazon ECS の開始方法」を参照してください。

Amazon ECS の使用を開始するには、AWS Fargate で以下の手順を実行します。

前提条件開始する前に、Amazon ECS でのセットアップ (p. 3) のステップを完了したこと、および AWS ユーザーに AdministratorAccess または Amazon ECS 初回実行ウィザードのアクセス許可 (p. 222) の IAMポリシー例で指定されている必要なアクセス権限があることを確認します。

初回実行ウィザードは、Fargate タスクに必要なタスク実行 IAM ロールを自動的に作成しようとします。初回実行のエクスペリエンスがこの IAM ロールを作成できるようにするには、次のいずれかの条件を満たす必要があります。

• ユーザーが管理者権限を持っていることが必要です。詳細については、「Amazon ECS でのセットアップ (p. 3)」を参照してください。

• ユーザーがサービスロールを作成するための IAM 権限を持っていることが必要です。詳細については、「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。

• 管理者権限を持つユーザーは、タスク実行ロールを手動で作成することにより、使用するアカウントで有効にできます。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

ステップ 1: タスク定義を作成するタスク定義はアプリケーションの設計図のようなものです。Amazon ECS でタスクを起動するたびに、タスク定義を指定します。サービスは、コンテナに使用する Docker イメージ、タスクで使用するコンテナの数、各コンテナのリソース割り当てを認識します。

1. Amazon ECS コンソールの初回実行ウィザード (https://console.aws.amazon.com/ecs/home#/firstRun)を開きます。

2. ナビゲーションバーから、米国東部(バージニア北部) リージョンを選択します。

API バージョン 2014-11-1312

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: サービスを設定する

Note

この初回実行ウィザードは、Fargate を使用して Amazon ECS をサポートするすべてのリージョンでこれらの手順を使用して完了できます。詳細については、「Fargate 起動タイプ (p. 65)」を参照してください。

3. コンテナ定義パラメータを設定します。

[Container definition (コンテナの定義)] で、初回実行ウィザードがコンソールの sample-app、nginx および tomcat-webserver のコンテナの定義とともに事前ロードされます。オプションで、コンテナの名前を変更するか、コンテナで使用されるリソース (CPU ユニットやメモリ制限) を確認して編集できます。そのためには、[Edit] を選択し、表示される値を編集します。詳細については、「コンテナ定義 (p. 39)」を参照してください。

Note

コンテナの定義に Amazon ECR イメージを使用している場合、Amazon ECR イメージには完全な registry/repository:tag 名前付けを使用してください。たとえば、aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest と指定します。

4. [Task definition (タスク定義)] で、初回実行ウィザードが、事前ロードされたコンテナの定義とともに使用するタスク定義を定義します。オプションで、タスク定義を変更し、タスクで使用されるリソース ([Task memory] や [Task CPU] の値) を編集できます。そのためには、[Edit] を選択し、表示される値を編集します。詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

初回実行ウィザードで作成されるタスク定義は、単純化のために単一コンテナに限定されています。後で Amazon ECS コンソールで複数コンテナタスク定義を作成できます。

5. [次] を選択します。

ステップ 2: サービスを設定するウィザードのこのセクションでは、タスク定義から作成された Amazon ECS サービスを設定する方法を選択します。サービスはクラスターのタスク定義のコピーを指定数分起動し、維持します。[Amazon ECS サンプル] アプリケーションは、ウェブベースの Hello World– スタイルのアプリケーションで、無限に実行されます。これをサービスとして実行すると、タスクに異常があったり予期せずに停止した場合は再起動します。

初回実行ウィザードがサービス定義とともに事前ロードされ、コンソールに定義された sample-app-service サービスが表示されます。オプションで、サービスの名前を変更するか、詳細を確認して編集できます。そのためには、[Edit] を選択し、次の手順を実行します。

1. [Service name] フィールドで、サービスの名前を選択します。2. [Number of desired tasks (必要なタスクの数)] フィールドに、指定したタスク定義で起動するタスクの

数を入力します。3. [セキュリティグループ] フィールドで、許可するインバウンドトラフィックの IPv4 アドレスの範囲

を、CIDR ブロック表記で指定します。たとえば、203.0.113.0/24 と指定します。4. (オプション) サービスで Application Load Balancer を使用するように選択できます。ロードバラン

サーを使用するように設定されたサービスからタスクを起動すると、タスクがロードバランサーに登録されます。ロードバランサーからのトラフィックがロードバランサー内のインスタンス間で分散されます。詳細については、「Application Load Balancer の概要」を参照してください。

Important

Application Load Balancer が AWS リソースに存在する間、コストが発生します。詳細については、「Application Load Balancer 料金表」を参照してください。

次のステップを完了して、サービスでロードバランサーを使用します。

API バージョン 2014-11-1313

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: クラスターを設定する

• [Container to load balance (負荷分散用のコンテナ)] セクションで、[Load balancer listener port(ロードバランサーリスナーポート)] を選択します。ここでのデフォルト値は、サンプルアプリケーション用にセットアップされていますが、ロードバランサー用に異なるリスナーオプションを設定できます。詳細については、「サービスロードバランシング (p. 160)」を参照してください。

5. サービスの設定を確認し、[Save]、[Next] の順にクリックします。

ステップ 3: クラスターを設定するウィザードのこのセクションでは、クラスターに名前を付けます。それにより、Amazon ECS がネットワークおよび IAM 設定を自動的に行います。

1. [Cluster name] フィールドで、クラスターの名前を選択します。2. [Next] をクリックして次に進みます。

ステップ 4: 確認1. タスク定義、タスク設定、およびクラスター設定を確認して、[作成] をクリックすると完了です。[作

成ステータス] ページに進みます。このページでは、起動ステータスが示されます。プロセスの各ステップについて説明します (Auto Scaling グループの作成および入力が完了するまでには数分かかることがあります)。

2. 起動が完了したら、[View service (サービスの表示)] を選択します。

ステップ 5: (オプション) サービスを表示するサービスがウェブベースのアプリケーションである場合 (Amazon ECS サンプル アプリケーションなど)、ウェブブラウザでそのコンテナを表示できます。

1. [Service: service-name] ページで、[Tasks] タブを選択します。2. サービスで、タスクの一覧からタスクを選択します。3. [Network] セクションで、タスクの [ENI Id] を選択します。Amazon EC2 コンソールに移動し、[IPv4

パブリック IP] アドレスを含む、タスクに関連付けられたネットワークインターフェイスの詳細を表示できます。

4. ウェブブラウザに [IPv4 パブリック IP] アドレスを入力すると、[Amazon ECS サンプル] アプリケーションを表示するウェブページが表示されます。

API バージョン 2014-11-1314

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: クリーンアップ

ステップ 6: クリーンアップAmazon ECS クラスターの使用が終了したら、使用していないリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

タスク、サービス、クラスター、コンテナインスタンスなど、一部の Amazon ECS リソースは、AmazonECS コンソールを使用してクリーンアップします。Amazon EC2 インスタンス、Elastic Load Balancingロードバランサー、Auto Scaling グループなど他のリソースは、Amazon EC2 コンソールで手動でクリーンアップするか、それを作成した AWS CloudFormation スタックを削除することでクリーンアップする必要があります。

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで [クラスター] を選択します。3. [Clusters] ページで、削除するクラスターを選択します。4. [Delete Cluster] を選択します。確認プロンプトで、[delete me (削除)] と入力し、 [Delete (削除)]を

選択します。クラスターを削除すると、クラスターで作成された関連リソース Auto Scaling グループ、VPC、ロードバランサーなどがクリーンアップされます。

API バージョン 2014-11-1315

Amazon ECS AWS Fargate 用ユーザーガイドプラットフォームのバージョンに関する考慮事項

AWS Fargate プラットフォームのバージョン

AWS Fargate プラットフォームのバージョンを使って、Fargate タスクインフラストラクチャの特定のランタイム環境を参照できます。これは、カーネルとコンテナのランタイムバージョンの組み合わせです。

ランタイム環境が進化するにつれて新しいプラットフォームバージョンがリリースされます。たとえば、カーネルやオペレーティングシステムの更新、新機能、バグ修正、セキュリティの更新があったときなどです。セキュリティの更新やパッチは、Fargate タスクに自動的にデプロイされます。プラットフォームのバージョンに影響を与えるセキュリティ上の問題が見つかった場合、AWS はそのプラットフォームバージョンにパッチを適用します。場合によっては、Fargate タスクがリタイア予定であることを通知されることがあります。詳細については、「タスクのリタイア (p. 119)」を参照してください。

トピック• プラットフォームのバージョンに関する考慮事項 (p. 16)• 使用できる AWS Fargate プラットフォームのバージョン (p. 16)

プラットフォームのバージョンに関する考慮事項プラットフォームのバージョンを指定する際には、次の点に注意する必要があります。

• プラットフォームのバージョンを指定する場合、(1.3.0 プラットフォームのバージョンを使用する)1.4.0 または LATEST などのいずれかの特定のバージョン番号を使用できます。

• 特定のプラットフォームバージョンを使用するには、サービスを作成または更新するときに、バージョン番号を指定します。LATEST を指定すると、タスクはプラットフォームバージョン 1.3.0 を使用します。

• 中国 (北京) リージョンと 中国 (寧夏) リージョンでサポートされているプラットフォームバージョンは1.4.0 と 1.3.0 のみです。AWS マネジメントコンソールには古いプラットフォームバージョンも表示されますが、選択するとエラーが返されます。LATEST プラットフォームバージョンは、1.3.0 プラットフォームバージョンが使用されるため、サポートされます。

• 実行中のタスクがあるサービスのプラットフォームバージョンを更新するには、サービスを更新して新しいプラットフォームバージョンを指定し、[新しいデプロイの強制] を選択します。タスクには新しいプラットフォームバージョンが再デプロイされます。詳細については、「サービスの更新 (p. 147)」を参照してください。

• サービスがプラットフォームバージョンを更新しないでスケールアップされた場合、これらのタスクには、サービスの最新のデプロイで指定されたプラットフォームのバージョンが提供されます。

使用できる AWS Fargate プラットフォームのバージョン

以下は、現在使用可能なプラットフォームバージョンのリストです。

Fargate プラットフォームバージョン ‐ 1.4.0• 永続的なタスクストレージとして Amazon EFS ファイルシステムボリュームを使用するサポートを

追加しました。詳細については、「Amazon EFS ボリューム (p. 69)」を参照してください。• エフェメラルタスクストレージを 20 GB に増加しました。詳細については、「タスクでのデータボ

リュームの使用 (p. 67)」を参照してください。

API バージョン 2014-11-1316

Amazon ECS AWS Fargate 用ユーザーガイド使用できるプラットフォームのバージョン

• タスクとの間のネットワークトラフィック動作を更新しました。プラットフォームバージョン 1.4以降、すべての Fargate タスクは単一の Elastic Network Interface (タスク ENI と呼ばれる) を受け取り、すべてのネットワークトラフィックは VPC 内でこの ENI を通過し、VPC フローログを通じて表示されます。詳細については、「Fargate タスクネットワーキング (p. 72)) を参照してください。

• タスク ENI は、ジャンボフレームのサポートを追加しています。ネットワークインターフェイスは、最大転送単位 (MTU) で設定されます。MTU は、1 つのフレームに収まるペイロードの最大サイズです。MTU が大きいほど、1 つのフレーム内に収まるアプリケーションのペイロードが増えるため、フレームあたりのオーバーヘッドが減少し、効率が向上します。ジャンボフレームをサポートすると、オーバーヘッドが減ります。タスクと転送先とのネットワークパスでジャンボフレームをサポートすると、VPC 内に残っているすべてのトラフィックなどのオーバーヘッドが軽減されます。

• CloudWatch Container Insights には、Fargate タスクのネットワークパフォーマンスメトリクスが含まれます。詳細については、「Amazon ECS CloudWatch Container Insights (p. 207)」を参照してください。

• タスクメタデータエンドポイント v4 のサポートを追加しました。これにより、タスクのネットワーク統計情報や、タスクが実行されているアベイラビリティーゾーンなど、Fargate タスクに関する追加情報が提供されます。詳細については、「タスクメタデータエンドポイントバージョン4 (p. 284)」を参照してください。

• コンテナの定義に SYS_PTRACE Linux パラメータのサポートを追加しました。詳細については、「Linux パラメータ (p. 54)」を参照してください。

• Fargate コンテナエージェントは、すべての Fargate タスクで Amazon ECS コンテナエージェントの代わりに使用されます。この変更は、タスクの実行方法には影響しません。

• コンテナランタイムは Docker の代わりに Containerd を使用するようになりました。この変更は、タスクの実行方法には影響しません。コンテナランタイムで発生するいくつかのエラーメッセージは、より一般的な内容になり、Docker には言及されなくなります。詳細については、AWS Fargate用 Amazon Elastic Container Service ユーザーガイドの「停止したタスクのエラーコード」を参照してください。

Fargate プラットフォームのバージョン ‐ 1.3.0• 2019 年 9 月 30 日以降、開始される新しい Fargate タスクでは、awsfirelens ログドライバーが

サポートされます。Amazon ECS 対応 FireLens では、タスク定義パラメータを使用して AWS のサービスや AWS パートナーネットワーク (APN ) の宛先にログをルーティングし、ログを保存および分析できます。詳細については、「カスタムログルーティング (p. 79)」を参照してください。

• Fargate タスクのタスクリサイクルが追加されました。これは、Amazon ECS サービスの一部であるタスクを更新するプロセスです。詳細については、「Fargate タスクリサイクル (p. 120)」を参照してください。

• 2019 年 3 月 27 日以降、開始される新しい Fargate タスクでは、プロキシ設定、コンテナの起動およびシャットダウンの依存関係、コンテナ別の起動および停止のタイムアウト値を定義できる、追加タスク定義パラメータを使用できます。詳細については、「プロキシ設定 (p. 62)」、「コンテナの依存関係 (p. 55)」、および「コンテナのタイムアウト (p. 56)」を参照してください。

• 2019 年 4 月 2 日以降、開始される新しい Fargate タスクでは、AWS Secrets Manager シークレットまたは AWS Systems Manager パラメータストアのパラメータに機密データを保存してコンテナの定義でそれを参照することにより、コンテナに機密データを挿入できます。詳細については、「機密データの指定 (p. 92)」を参照してください。

• 2019 年 5 月 1 日以降、開始される新しい Fargate タスクでは、secretOptions コンテナ定義パラメータを使用してコンテナのログ設定内の機密データを参照できます。詳細については、「機密データの指定 (p. 92)」を参照してください。

• 2019 年 5 月 1 日以降、開始される新しい Fargate タスクでは、awslogs ログドライバーに加えて splunk ログドライバーがサポートされます。詳細については、「ストレージとログ記録 (p. 48)」を参照してください。

• 2019 年 7 月 9 日以降に新しく開始された CloudWatch タスクでは、Fargate ContainerInsights がサポートされています。詳細については、「Amazon ECS CloudWatch ContainerInsights (p. 207)」を参照してください。

API バージョン 2014-11-1317

Amazon ECS AWS Fargate 用ユーザーガイド使用できるプラットフォームのバージョン

• 2019 年 12 月 3 日より、Fargate Spot キャパシティープロバイダーがサポートされます。詳細については、「AWS Fargate キャパシティープロバイダーの使用 (p. 22)」を参照してください。

Fargate プラットフォームのバージョン ‐ 1.2.0• AWS Secrets Manager を使用したプライベートレジストリ認証のサポートが追加されました。詳細

については、「タスクのプライベートレジストリの認証 (p. 89)」を参照してください。Fargate プラットフォームのバージョン ‐ 1.1.0

• Amazon ECS タスクメタデータエンドポイントのサポートを追加しました。詳細については、「Amazon ECS タスクメタデータエンドポイント (p. 284)」を参照してください。

• コンテナ定義に追加された Docker ヘルスチェックのサポート。詳細については、「ヘルスチェック (p. 43)」を参照してください。

• Amazon ECS サービスの検出のサポートを追加しました。詳細については、「サービス検出 (p. 181)」を参照してください。

Fargate プラットフォームのバージョン ‐ 1.0.0• Amazon Linux 2017.09 に基づきます。• 初回リリース.

API バージョン 2014-11-1318

Amazon ECS AWS Fargate 用ユーザーガイドクラスターの概念

Amazon ECS クラスターAmazon ECS クラスターは、タスクまたはサービスの論理グループです。 キャパシティープロバイダーを使用している場合、クラスターはキャパシティープロバイダーの論理的なグループでもあります。Amazon ECS の初回使用時には、デフォルトのクラスターが作成されますが、アカウントに複数のクラスターを作成して、クラスター別にリソースを分けることができます。

トピック• クラスターの概念 (p. 19)• クラスターの作成 (p. 20)• Amazon ECS クラスターキャパシティープロバイダー (p. 21)• AWS Fargate キャパシティープロバイダーの使用 (p. 22)• クラスター設定の更新 (p. 26)• クラスターの削除 (p. 26)

クラスターの概念Amazon ECS クラスターに関する全般的な概念を以下に示します。

• クラスターはリージョンに固有のものです。• クラスターの考えられる状態を以下に示します。

ACTIVE

クラスターはタスクを受け入れる準備ができており、該当する場合はコンテナインスタンスをクラスターに登録できます。

PROVISIONING

クラスターには、キャパティープロバイダーが関連付けられており、キャパシティープロバイダーに必要なリソースが作成されています。

DEPROVISIONING

クラスターには、キャパティープロバイダーが関連付けられており、キャパシティープロバイダーに必要なリソースが削除されています。

FAILED

クラスターには、キャパティープロバイダーが関連付けられており、キャパシティープロバイダーに必要なリソースを作成できませんでした。

INACTIVE

クラスターが削除されています。INACTIVE ステータスのクラスターは、一定期間アカウント内で検出可能なままになる場合があります。ただし、この動作は将来変更される可能性があるため、INACTIVE クラスターの永続化に頼るべきではありません。

• クラスターには、Fargate 起動タイプまたは EC2 の起動タイプを使用するタスクが混在する場合があります。起動タイプの詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

• クラスターには、Auto Scaling グループキャパシティープロバイダーと Fargate キャパシティープロバイダーの両方が混在している場合がありますが、キャパシティープロバイダー戦略を指定する場合は、

API バージョン 2014-11-1319

Amazon ECS AWS Fargate 用ユーザーガイドクラスターの作成

どちらか一方のみを含めることができ、両方を含めることはできません。詳細については、「AmazonECS クラスターキャパシティープロバイダー (p. 21)」を参照してください。

• カスタム IAM ポリシーを作成して、特定のクラスターへのユーザーアクセスを許可または制限できます。詳細については、「クラスターの例 (p. 226)」の「Amazon Elastic Container Service アイデンティティベースのポリシーの例 (p. 221)」セクションを参照してください。

• Fargate タスクを持つクラスターは サービスの Auto Scaling を使用してスケーリングできます。詳細については、「サービスの Auto Scaling (p. 173)」を参照してください。

クラスターの作成このトピックで説明しているように、AWS マネジメントコンソール を使用して Amazon ECS クラスターを作成できます。開始する前に、必ず「Amazon ECS でのセットアップ (p. 3)」の手順を完了してください。

このコンソールクラスター作成ウィザードでは、AWS CloudFormation スタックを作成することでAmazon ECS クラスターに必要なリソースを簡単に作成できます。また、いくつかの一般的なクラスター設定オプションをカスタマイズできます。ただし、このウィザードでは、一部のリソースオプションをカスタマイズすることはできません。 このウィザードでサポートされない要件がある場合には、https://github.com/awslabs/ecs-refarch-cloudformation のリファレンスアーキテクチャの使用を検討します。

基になるクラスターリソースをウィザードで作成した後に直接追加または変更すると、クラスターを削除しようとしたときにエラーが発生することがあります。AWS CloudFormation はこれをスタックドリフトと呼んでいます。既存の AWS CloudFormation スタックでのドリフトの検出の詳細については、AWSCloudFormation ユーザーガイド の「CloudFormation スタック全体のドリフトの検出」を参照してください 。

クラスターを作成するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーから、使用するリージョンを選択します。3. ナビゲーションペインで [Clusters] を選択します。4. [Clusters] ページで、[Create Cluster] を選択します。5. [Select cluster compatibility] で [ネットワークのみ] を選択し、[Next Step] を選択します。

Important

FARGATE および FARGATE_SPOT キャパシティープロバイダーは、クラスターに自動的に関連付けられます。詳細については、「AWS Fargate キャパシティープロバイダーの使用 (p. 22)」を参照してください。

6. [Configure cluster (クラスターの設定)] ページで、[クラスター名] に入力します。最大 255 文字の英字(大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

7. [Networking (ネットワーク)] セクションで、クラスター用の VPC を設定します。デフォルト設定をそのまま使用するか、以下の手順に従ってこれらの設定を変更することもできます。

a. (オプション) 新しい VPC を作成することを選択した場合は、[CIDR ブロック] で VPC の CIDRブロックを選択します。詳細については、Amazon VPC ユーザーガイド の「VPC とサブネット」を参照してください。

b. [Subnets] で、VPC に使用するサブネットを選択します。デフォルト設定をそのまま使用するか、またはニーズを満たすように変更できます。

8. [CloudWatch Container Insights] セクションで、クラスターの Container Insights を有効にするかどうかを選択します。詳細については、「Amazon ECS CloudWatch Container Insights (p. 207)」を参照してください。

9. [作成] を選択します。

API バージョン 2014-11-1320

Amazon ECS AWS Fargate 用ユーザーガイドクラスターキャパシティープロバイダー

EC2 Linux + ネットワーク または EC2 Windows + ネットワークテンプレートの使用

Amazon ECS クラスターキャパシティープロバイダー

Amazon ECS クラスターキャパシティープロバイダーは、タスクに使用するインフラストラクチャを決定します。各クラスターには、1 つ以上のキャパシティープロバイダーと、オプションのデフォルトのキャパシティープロバイダー戦略があります。キャパシティープロバイダー戦略は、タスクをキャパシティープロバイダーに分散する方法を決定します。タスクを実行するか、サービスを作成するときは、クラスターのデフォルトのキャパシティープロバイダー戦略を使用するか、クラスターのデフォルト戦略をオーバーライドするキャパシティープロバイダー戦略を指定できます。

クラスターキャパシティープロバイダーの概念クラスターキャパシティープロバイダーは、次のコンポーネントで構成されます。

キャパシティープロバイダー

キャパシティープロバイダーは、タスクが実行されるインフラストラクチャを決定するために、クラスターに関連して使用されます。

AWS Fargate ユーザーの Amazon ECS の場合、FARGATE および FARGATE_SPOT キャパシティープロバイダーが自動的に提供されます。詳細については、「AWS Fargate キャパシティープロバイダーの使用 (p. 22)」を参照してください。

キャパシティープロバイダー戦略で 1 つ以上のキャパシティープロバイダーが指定され、クラスターに関連付けられます。

キャパシティープロバイダー戦略

キャパシティープロバイダー戦略では、タスクで 1 つ以上のキャパシティープロバイダーを使用する方法を制御できます。

タスクを実行するか、サービスを作成するときは、キャパシティープロバイダー戦略を指定します。キャパシティープロバイダー戦略は、1 つ以上のキャパシティープロバイダーで構成され、各プロバイダーに対してオプションのベースとウエイトが指定されます。

ベース値は、指定されたキャパシティープロバイダーで実行するタスクの最小限の数を指定します。キャパシティープロバイダー戦略では、ベースを定義できるキャパシティープロバイダーは 1 つだけです。

ウエイト値は、指定したキャパシティープロバイダーを使用する起動済みタスクの総数に対する相対的な割合を示します。たとえば、2 つのキャパシティープロバイダーを含む戦略があり、両方のウェイトが 1 である場合、ベースが満たされると、タスクは 2 つのキャパシティープロバイダー間で均等に分割されます。同じロジックを使用して、キャパシティープロバイダー capacityProviderA に 1 のウエイトを指定し、capacityProviderB に 4 のウエイトを指定すると、capacityProviderA を使用して実行されるタスクごとに、4 つのタスクが capacityProviderB を使用します。

デフォルトのキャパシティープロバイダー戦略

デフォルトのキャパシティープロバイダー戦略は、各 Amazon ECS クラスターに関連付けられています。これにより、タスクの実行時またはサービスの作成時に他のキャパシティープロバイダー戦略または起動タイプが指定されていない場合に、クラスターが使用するキャパシティープロバイダー戦略が決まります。

API バージョン 2014-11-1321

Amazon ECS AWS Fargate 用ユーザーガイドクラスターキャパシティープロバイダーの考慮事項

クラスターキャパシティープロバイダーの考慮事項クラスターキャパシティープロバイダーを使用する場合は、次の点を考慮する必要があります。

• キャパシティープロバイダー戦略を指定する場合、指定できるキャパシティープロバイダーの数は 6 に制限されます。

• クラスターには、Auto Scaling グループキャパシティープロバイダーと Fargate キャパシティープロバイダーの両方が混在している場合がありますが、キャパシティープロバイダー戦略を指定する場合は、どちらか一方のみを含めることができ、両方を含めることはできません。

• クラスターには、キャパシティープロバイダーと起動タイプの両方を使用するタスクとサービスが混在する場合があります。起動タイプではなくキャパシティープロバイダー戦略を使用するようにサービスを更新することもできますが、その場合は新しいデプロイを強制する必要があります。

• キャパシティープロバイダー戦略を指定する場合、base 値はタスクの実行時にのみサポートされます。サービスを作成する場合、キャパシティープロバイダー戦略 base パラメータはサポートされていません。

• マネージド終了保護を使用する場合は、マネージドスケーリングも使用する必要があります。そうしないと、マネージド終了保護は機能しません。

• サービスに Blue/Green デプロイタイプを使用する場合、クラスターキャパシティープロバイダーの使用はサポートされません。

• サービスに Classic Load Balancer を使用する場合、クラスターキャパシティープロバイダーの使用はサポートされません。

AWS Fargate キャパシティープロバイダーの使用Amazon ECS クラスターキャパシティープロバイダーを使用すると、Amazon ECS タスクで Fargate とFargate Spot キャパシティーの両方を使用できます。クラスターキャパシティープロバイダーの詳細については、「Amazon ECS クラスターキャパシティープロバイダー (p. 21)」を参照してください。

Fargate Spot を使用すると、割り込み許容 Amazon ECS タスクを、Fargate 価格と比較して割引レートで実行できます。Fargate Spot は予備のコンピュート能力でタスクを実行します。AWS がキャパシティーを戻す必要がある場合、タスクは中断され、2 分間の警告が表示されます。これについては、以下で詳しく説明します。

トピック• Fargate キャパシティープロバイダーに関する考慮事項 (p. 22)• Fargate Spot 終了通知の処理 (p. 23)• Fargate キャパシティープロバイダーを使用する新しいクラスターの作成 (p. 24)• 既存のクラスターへの Fargate キャパシティープロバイダーの追加 (p. 24)• Fargate キャパシティープロバイダーを使用したタスクの実行 (p. 25)

Fargate キャパシティープロバイダーに関する考慮事項Fargate キャパシティープロバイダーを使用する場合は、次の点を考慮する必要があります。

• Fargate および Fargate Spot キャパシティープロバイダーを作成する必要はありません。これらのアカウントはすべてのアカウントで使用でき、クラスターに関連付けるだけで使用できるようになります。

• ネットワークのみ クラスターテンプレートとともに Amazon ECS コンソールを使用して新しいクラスターを作成すると、FARGATE および FARGATE_SPOT キャパシティープロバイダーが自動的に新しいクラスターに関連付けられます。

API バージョン 2014-11-1322

Amazon ECS AWS Fargate 用ユーザーガイドFargate Spot 終了通知の処理

• 既存のクラスターに FARGATE および FARGATE_SPOT キャパシティープロバイダーを追加するには、AWS CLI または API を使用する必要があります。詳細については、「既存のクラスターへのFargate キャパシティープロバイダーの追加 (p. 24)」を参照してください。

• Fargate Spot を使用するには、タスクでプラットフォームバージョン 1.3.0 以降を使用している必要があります。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

• Fargate および Fargate Spot キャパシティープロバイダーを使用するタスクが停止すると、タスク状態変更イベントが Amazon EventBridge に送信されます。停止した理由は原因を説明しています。詳細については、「タスク状態変更イベント (p. 200)」を参照してください。

• クラスターには、Fargate グループキャパシティープロバイダー と Auto Scaling グループキャパシティープロバイダーが混在している場合があります。ただし、キャパシティープロバイダー戦略には、Fargate または Auto Scaling グループキャパシティープロバイダーのいずれかのみを含めることができますが、両方を含めることはできません。詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Auto Scaling Group Capacity Providers」を参照してください。

Fargate Spot 終了通知の処理スポットの中断により Fargate Spot キャパシティーを使用するタスクが停止すると、タスクが停止する前に 2 分間の警告が送信されます。警告は、タスク状態変更イベントとして Amazon EventBridge に送信され、実行中のタスクに SIGTERM シグナルが送信されます。サービスの一部として Fargate Spot を使用する場合、サービススケジューラは中断信号を受信し、キャパシティーが利用可能な場合に Fargate Spot で追加のタスクを起動しようとします。

タスクが停止する前にコンテナが正常に終了するように、以下を設定できます。

• タスクが使用しているコンテナ定義には、120 秒以下の stopTimeout 値を指定できます。stopTimeout 値を指定すると、タスク状態変更イベントが受信されてから、コンテナが強制的に停止するまでの時間が与えられます。詳細については、「コンテナのタイムアウト (p. 56)」を参照してください。

• クリーンアップアクションを実行するには、コンテナ内から SIGTERM シグナルを受信する必要があります。

以下は、Fargate Spot 中断の停止理由と停止コードを表示するタスク状態変更イベントのスニペットです。

{ "version": "0", "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "resources": [ "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef" ], "detail": { "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default", "createdAt": "2016-12-06T16:41:05.702Z", "desiredStatus": "STOPPED", "lastStatus": "RUNNING", "stoppedReason": "Your Spot Task was interrupted.", "stopCode": "TerminationNotice", "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE", ... }}

API バージョン 2014-11-1323

Amazon ECS AWS Fargate 用ユーザーガイドFargate キャパシティープロバイダーを使用する新しいクラスターの作成

以下は、Amazon ECS タスク状態変更イベントの EventBridge ルールを作成するために使用されるイベントパターンです。オプションで、タスク状態変更イベントを受信するクラスターを detail フィールドで指定できます。詳細については、Amazon EventBridge ユーザーガイド の「AWS リソースからのイベントでトリガーする EventBridge ルールの作成」を参照してください。

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] }}

Fargate キャパシティープロバイダーを使用する新しいクラスターの作成新しい Amazon ECS クラスターが作成されたら、クラスターに関連付ける 1 つ以上のキャパシティープロバイダーを指定します。関連するキャパシティープロバイダーは、タスクを実行するインフラストラクチャを決定します。

AWS マネジメントコンソール コンソールを使用して ネットワークのみ クラスターテンプレートを使用すると、FARGATE および FARGATE_SPOT キャパシティープロバイダーが自動的にクラスターに関連付けられます。詳細については、「クラスターの作成 (p. 20)」を参照してください。

Fargate キャパシティープロバイダーを使用して Amazon ECSクラスターを作成するには (AWS CLI)次のコマンドを使用して、新しいクラスターを作成し、Fargate と Fargate Spot キャパシティープロバイダーの両方を関連付けます。

• create-cluster (AWS CLI)

aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-west-2

既存のクラスターへの Fargate キャパシティープロバイダーの追加PutClusterCapacityProviders API を使用して、既存の Amazon ECS クラスターの使用可能なキャパシティープロバイダーのプールを更新できます。

既存のクラスターへの Fargate または Fargate Spot キャパシティープロバイダーの追加は、AWS マネジメントコンソール ではサポートされていません。コンソールで新しい Fargate クラスターを作成するか、Amazon ECS API または AWS CLI を使用して既存のクラスターに Fargate または Fargate Spot キャパシティープロバイダーを追加する必要があります。

API バージョン 2014-11-1324

Amazon ECS AWS Fargate 用ユーザーガイドFargate キャパシティープロバイダーを使用したタスクの実行

Fargate キャパシティープロバイダーを既存のクラスターに追加するには (AWS CLI)既存のクラスターに Fargate および Fargate Spot キャパシティープロバイダーを追加するには、次のコマンドを使用します。指定したクラスターに既存のキャパシティープロバイダーが関連付けられている場合は、追加する新しいキャパシティープロバイダーに加えて、既存のキャパシティープロバイダーをすべて指定する必要があります。PutClusterCapacityProviders API コールから除外されたクラスターに関連付けられている既存のキャパシティープロバイダーは、クラスターとの関連付けが解除されます。既存のキャパシティープロバイダーをクラスターから関連付け解除できるのは、既存のタスクで使用されていない場合のみです。これらの同じ規則は、クラスターのデフォルトのキャパシティープロバイダー戦略にも適用されます。クラスターに既存のデフォルトのキャパシティープロバイダー戦略が定義されている場合は、PutClusterCapacityProviders API コールに含める必要があります。それ以外の場合は、上書きされます。

• put-cluster-capacity-providers (AWS CLI)

aws ecs put-cluster-capacity-providers \ --cluster FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT existing_capacity_provider1 existing_capacity_provider2 \ --default-capacity-provider-strategy existing_default_capacity_provider_strategy \ --region us-west-2

Fargate キャパシティープロバイダーを使用したタスクの実行キャパシティープロバイダー戦略を指定して、Fargate または Fargate Spot キャパシティープロバイダーのいずれかを使用してタスクを実行したり、サービスを作成したりできます。キャパシティープロバイダー戦略が指定されていない場合は、クラスターのデフォルトのキャパシティープロバイダー戦略が使用されます。

Fargate または Fargate Spot キャパシティープロバイダーを使用したタスクの実行は、AWS マネジメントコンソール でサポートされています。AWS マネジメントコンソール を使用する場合は、クラスターのデフォルトのキャパシティープロバイダー戦略に Fargate または Fargate Spot キャパシティプロバイダーを追加する必要があります。Amazon ECS API または AWS CLI を使用する場合、キャパシティープロバイダー戦略を指定するか、クラスターのデフォルトのキャパシティープロバイダー戦略を使用できます。

Fargate キャパシティープロバイダーを使用してタスクを実行するには (AWS CLI)Fargate と Fargate Spot キャパシティープロバイダーを使用してタスクを実行するには、次のコマンドを使用します。

• run-task (AWS CLI)

aws ecs run-task \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count integer \

API バージョン 2014-11-1325

Amazon ECS AWS Fargate 用ユーザーガイドクラスター設定の更新

--region us-west-2

Fargate キャパシティープロバイダーを使用したサービスの作成(AWS CLI)Fargate と Fargate Spot キャパシティープロバイダーを使用してサービスを作成するには、次のコマンドを使用します。

• create-service (AWS CLI)

aws ecs create-service \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --service-name FargateService \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count integer \ --region us-west-2

クラスター設定の更新クラスター設定を使用すると、既存の Amazon ECS クラスターのパラメータを設定できます。クラスター設定は、Amazon ECS API、AWS CLI または SDK を使用して更新できます。現在、サポートされている唯一のクラスター設定は containerInsights です。これにより、既存のクラスターの CloudWatchContainer Insights を有効または無効にできます。新しいクラスターの CloudWatch Container Insights を有効にするには、AWS マネジメントコンソール クラスターの作成時に有効にできます。詳細については、「クラスターの作成 (p. 20)」を参照してください。

Important

現在、Container Insights が有効になっていない既存のクラスターを削除し、Container Insights を有効にして同じ名前の新しいクラスターを作成した場合、Container Insights は実際には有効になりません。既存のクラスターに同じ名前を保持し、Container Insights を有効化する場合は、7 日間待ってから再作成する必要があります。

コマンドラインを使用してクラスターの設定を更新するには

クラスターの設定を更新するには、次のいずれかのコマンドを使用します。

• update-cluster-settings (AWS CLI)

aws ecs update-cluster-settings --cluster cluster_name_or_arn --settings name=containerInsights,value=enabled|disabled --region us-east-1

クラスターの削除クラスターの使用を終了する場合は、クラスターを削除できます。削除されると、クラスターはINACTIVE 状態に移行します。INACTIVE ステータスのクラスターは、一定期間アカウント内で検出可能なままになる場合があります。ただし、この動作は将来変更される可能性があるため、INACTIVE クラスターの永続化に頼るべきではありません。

API バージョン 2014-11-1326

Amazon ECS AWS Fargate 用ユーザーガイドクラスターの削除

Amazon ECS コンソールでクラスターを削除すると同時に削除される関連付けられたリソースは、クラスターの作成方法によって異なります。以下の手順の Step 5 (p. 27) はその条件に基づいて変わります。

クラスターが AWS マネジメントコンソール を使用して作成された場合は、クラスターの削除時にクラスター用に作成された AWS CloudFormation スタックも削除されます。基になるクラスターリソースを追加または変更すると、クラスターを削除する際にエラーが発生することがあります。AWS CloudFormationは、これをスタックドリフトと呼んでいます。既存の AWS CloudFormation スタックでのドリフトの検出の詳細については、AWS CloudFormation ユーザーガイド の「CloudFormation スタック全体のドリフトの検出」を参照してください 。

クラスターを削除するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーから、使用するリージョンを選択します。3. ナビゲーションペインで [Clusters] を選択します。4. [Clusters] ページで、削除するクラスターを選択します。5. [Delete Cluster] を選択します。確認プロンプトが表示されます。

API バージョン 2014-11-1327

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の考慮事項

Amazon ECS タスク定義Amazon ECS で Docker コンテナを実行するには、タスク定義が必要です。以下に示しているのは、タスク定義で指定できるパラメータです。

• タスクの各コンテナで使用する Docker イメージ• 各タスクで使用する CPU とメモリの量• 使用する起動タイプ。この起動タイプにより、タスクをホストするインフラストラクチャが決定される• タスクのコンテナで使用する Docker ネットワーキングモード• タスクで使用するログ記録設定• コンテナが終了または失敗した場合にタスクを実行し続けるかどうか• コンテナの開始時に実行するコマンド• タスクのコンテナで使用するデータボリューム• タスクが使用する IAM ロール

アプリケーションスタック全体は 1 つのタスク定義に存在する必要はなく、ほとんどの場合、そのようにはなりません。アプリケーションは、関連するコンテナをそれらに固有のタスク定義に結び付けることで、複数のタスク定義にまたがって存在できます。詳細については、「アプリケーションのアーキテクチャ (p. 32)」を参照してください。

トピック• タスク定義の考慮事項 (p. 28)• アプリケーションのアーキテクチャ (p. 32)• タスク定義の作成 (p. 33)• タスク定義パラメータ (p. 38)• Amazon ECS 起動タイプ (p. 64)• タスクでのデータボリュームの使用 (p. 67)• Fargate タスクネットワーキング (p. 72)• awslogs ログドライバーを使用する (p. 74)• カスタムログルーティング (p. 79)• タスクのプライベートレジストリの認証 (p. 89)• 機密データの指定 (p. 92)• タスク定義の例 (p. 102)• タスク定義の更新 (p. 106)• タスク定義リビジョンの登録解除 (p. 106)

タスク定義の考慮事項Fargate 起動タイプを使用するタスクは利用可能な Amazon ECS タスク定義パラメータのすべてをサポートしているわけではありません。一部のパラメータはサポートされていません。また、Fargate タスクでは動作が異なるパラメータがあります。

次のタスク定義パラメータは Fargate 起動タイプでは無効です。

• devices

• disableNetworking

• dnsSearchDomains

API バージョン 2014-11-1328

Amazon ECS AWS Fargate 用ユーザーガイドネットワークモード

• dnsServers

• dockerSecurityOptions

• dockerVolumeConfiguration

• extraHosts

• host

• hostname

• links

• placementConstraints — デフォルトでは、Fargate タスクはアベイラビリティーゾーンにまたがって分散されています。

• privileged

• sharedMemorySize

• tmpfs

Important

すべてのタスク定義パラメータがサポートされていない場合、そのパラメータのサブフラグもサポートされていないと仮定されます。

次のタスク定義パラメータでは動作が異なる Fargate タスクを実行します。

• logConfiguration を使用する場合、Fargate タスクでサポートされるログドライバーはawslogs、splunk、および awsfirelens ログドライバーです。

• linuxParameters を使用する場合、capabilities で drop パラメータは使用できますが、add パラメータはサポートされていません。

• healthCheck パラメータはプラットフォームのバージョン 1.1.0 以降を使用して Fargate タスクでのみサポートされます。

• portMappings パラメータを使用する場合は、containerPort のみを指定する必要があります。hostPort は、空白のままにするか、containerPort と同じ値に設定する必要があります。

タスク定義が Fargate 起動タイプで使用できることを検証するために、タスク定義を登録する際に以下を指定できます。

• AWS マネジメントコンソール の [Requires Compatibilities (互換性が必要)] フィールドで、[FARGATE]を指定します。

• AWS CLI の --requires-compatibilities オプションで、FARGATE を指定します。• API で、requiresCompatibilities フラグを指定します。

ネットワークモードFargate タスク定義では、ネットワークモードが awsvpc に設定されている必要があります。awsvpcネットワークモードでは、各タスクに独自の Elastic Network Interface を提供します。ネットワーク設定は、サービスを作成する場合、またはタスクを手動で実行する場合にも必要です。詳細については、AWSFargate 用 Amazon Elastic Container Service ユーザーガイドの「Fargate タスクネットワーキング」を参照してください。

タスク CPU とメモリFargate タスク定義では、CPU とメモリをタスクレベルで指定する必要があります。Fargate タスクのコンテナレベルで CPU とメモリを指定することもできますが、これはオプションです。ほとんどのユースケースでは、タスクレベルでこれらのリソースを指定するだけで十分です。以下の表に、タスクレベルCPU とメモリの有効な組み合わせを示します。

API バージョン 2014-11-1329

Amazon ECS AWS Fargate 用ユーザーガイドログ記録

CPU の値 メモリの値

256 (.25 vCPU) 0.5 GB、1 GB、2 GB

512 (.5 vCPU) 1 GB、2 GB、3 GB、4 GB

1024 (1 vCPU) 2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB

2048 (2 vCPU) 4 GB ~ 16 GB (1 GB のインクリメント)

4096 (4 vCPU) 8 GB ~ 30 GB (1 GB のインクリメント)

ログ記録Fargate タスク定義はログ設定の awslogs、splunk、および awsfirelens ログドライバーのみをサポートします。以下に、awslogs ログドライバーが設定されているタスク定義のスニペットを示します。

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs"}

タスク定義で awslogs ログドライバーを使用してコンテナログを CloudWatch Logs に送信する方法の詳細については、「awslogs ログドライバーを使用する (p. 74)」を参照してください。

タスク定義での awsfirelens ログドライバーの使用の詳細については、「カスタムログルーティング (p. 79)」を参照してください。

Amazon ECS タスク実行 IAM ロールオプションのタスク実行 IAM ロールがあり、これを Fargate に指定することで Fargate タスクが AmazonECR に対して API コールを実行できます。API コールは、コンテナアプリケーションを保存するためにCloudWatch を呼び出すとともに、コンテナイメージをプルします。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

タスク定義の例以下は、ウェブサーバーをセットアップする Fargate 起動タイプを使用するタスク定義の例です。

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true,

API バージョン 2014-11-1330

Amazon ECS AWS Fargate 用ユーザーガイドタスクストレージ

"image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ]}

タスクストレージFargate タスクでは、次のデータボリューム形式がサポートされています。

• 永続的ストレージの場合 Amazon EFS ボリューム。詳細については、「Amazon EFS ボリューム (p. 69)」を参照してください。

• 非永続ストレージの場合エフェメラルストレージ。

各 Fargate タスクはプロビジョニング時に次のエフェメラルストレージを受け取ります。ストレージ設定は、タスクで使用しているプラットフォームバージョンによって異なります。Fargate タスクが停止すると、ストレージは削除されます。

プラットフォームバージョン 1.4.0 以降を使用しているタスクは、タスクごとに次のストレージを受け取ります。

• 20 GB のストレージ

プラットフォームバージョン 1.3.0 以前を使用しているタスクは、タスクごとに次のストレージを受け取ります。

• 10 GB の Docker Layer ストレージ• ボリュームマウント用の追加 4 GB。これはタスク定義内のvolumes、mountPoints およびvolumesFrom パラメータを使用してマウントしコンテナ間で共有できます。

Note

host および sourcePath パラメータは、Fargate タスクでサポートされていません。

Amazon ECS のデフォルトのサービス制限の詳細については、「Amazon ECS サービスクォータ (p. 297)」を参照してください。

API バージョン 2014-11-1331

Amazon ECS AWS Fargate 用ユーザーガイドアプリケーションのアーキテクチャ

Fargate タスクでコンテナの空の非永続ストレージを提供するには

この例では、タスクの実行中に同じスクラッチファイルの保存場所にアクセスする必要のある 2 つのデータベースコンテナがあるとします。

1. タスク定義の volumes セクションで、名前を database_scratch としてボリュームを定義します。

"volumes": [ { "name": "database_scratch", "host": {} } ]

2. containerDefinitions セクションで、非永続ストレージをマウントするようにデータベースのコンテナの定義を作成します。

"containerDefinitions": [ { "name": "database1", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] }, { "name": "database2", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] } ]

アプリケーションのアーキテクチャAmazon ECS でアプリケーションを設計する方法は複数の要因に応じて変化しますが、主な違いをもたらしているのは、使用している起動タイプです。設計プロセスでは、以下のガイダンスを参考にしてください。

Fargate 起動タイプを使用する場合タスクで Fargate 起動タイプを使用してアプリケーションを設計する場合、複数のコンテナを同じタスク定義に配置するか、複数のコンテナを複数のタスク定義に個別にデプロイするか、というのが主な問題となります。

API バージョン 2014-11-1332

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の作成

以下の場合は、複数のコンテナを同じタスク定義に配置する必要があります。

• コンテナが同じライフサイクルを共有している (同時に起動および終了する必要がある).• 実行基盤となるホストが同じになるようにコンテナを実行する (つまり、あるコンテナが、localhost

ポート上の別のコンテナを参照する) 必要がある。• コンテナにリソースを共有させる必要がある.• コンテナでデータボリュームを共有している。

上記以外の場合は、個別のタスク定義でコンテナを定義することで、コンテナを個別にスケーリング、プロビジョニング、プロビジョニング解除できるようになります。

タスク定義の作成Docker コンテナを Amazon ECS で実行するには、タスク定義を作成する必要があります。1 つのタスク定義に複数のコンテナとデータボリュームを定義できます。タスク定義で使用できるパラメータの詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

新しいタスク定義を作成するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク

定義の作成)] の順に選択します。3. [Select launch type compatibilities (起動タイプの互換性の選択)] ページで、[FARGATE]、[次のステッ

プ] の順に選択します。Note

Fargate は Windows コンテナと互換性がありません。4. (オプション) JSON 形式のタスク定義の場合は、以下の手順を実行します。

a. [Configure task and container definitions] ページで、ページの下部までスクロールし、[Configurevia JSON] を選択します。

b. JSON 形式のタスク定義をテキスト領域に貼り付け、[Save] を選択します。c. 情報を確認し、[Create] を選択します。

ページの末尾までスクロールし、[Configure via JSON] を選択します。5. [タスク定義名] に、タスク定義の名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、

ハイフン、アンダースコアを使用できます。6. [Task execution IAM ロール] で、タスク実行ロールを選択するか、[新しいロールの作成] を選択

してコンソールで自動的に作成します。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

7. [Task size] で、[Task memory (GB)] および [Task CPU (vCPU)] の値を選択します。次の表では、有効な組み合わせを示しています。

CPU の値 メモリの値

256 (.25 vCPU) 512 MB、1 GB、2 GB

512 (.5 vCPU) 1 GB、2 GB、3 GB、4 GB

1024 (1 vCPU) 2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8GB

API バージョン 2014-11-1333

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の作成

CPU の値 メモリの値

2048 (2 vCPU) 4 GB ~ 16 GB (1 GB のインクリメント)

4096 (4 vCPU) 8 GB~30 GB (1 GB のインクリメント)

8. タスク定義内のコンテナごとに、以下の手順を実行します。

a. [コンテナの追加] を選択します。b. コンテナの定義で使用するために、それぞれの必須のフィールドと任意のオプションフィールド

に入力します。その他のコンテナの定義パラメータは、[詳細コンテナ設定] メニューより設定できます。詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

c. [追加] を選択して、タスク定義にコンテナを追加します。9. (オプション) サービス統合の場合、App Mesh 統合のパラメータを構成するには、[Enable App Mesh

integration (App Mesh 統合を有効にする)] を選択してから、次の手順を実行します。

a. [Application container name (アプリケーションコンテナ名)] で、App Mesh アプリケーションに使用するコンテナ名を選択します。このコンテナは、タスク定義内ですでに定義されている必要があります。

b. [Envoy image (Envoy イメージ)] で、「840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.3.0-prod」を入力します。

c. [Mesh name (メッシュ名)] に、App Mesh サービスメッシュの名前を指定します。これを表示するには、事前に作成しておく必要があります。詳細については、AWS App Mesh ユーザーガイドの「サービスメッシュ」を参照してください。

d. [Virtual node name (仮想ノード名)] で App Mesh 仮想ノードの名前を選択します。これを表示するには、事前に作成しておく必要があります。詳細については、AWS App Mesh ユーザーガイドの「仮想ノード」を参照してください。

e. [Virtual node por (仮想ノードポート)] には、仮想ノードで設定されたリスナーポートが事前に入力されます。

f. [Apply (適用)]、Confirm (確認)] を順に選択します。これにより、タスク定義に対する新しいEnvoy プロキシコンテナと、それをサポートする設定が作成されます。次に、次のステップのために App Mesh プロキシ設定が事前に入力されます。

10. (オプション) [プロキシ設定] に事前に入力されたすべての値を確認します。これらのフィールドの詳細については、「更新サービス」の JSON タブを参照してください。

11. (オプション) [Log Router Integration (ログルーター統合)] の場合、カスタムログルーティング設定を追加できます。[Enable FireLens integration (FireLens 統合を有効にする)] を選択し、以下を実行します。

a. [Type (タイプ)] で、使用するログルーターのタイプを選択します。b. [Image (イメージ)] で、ログルーターコンテナのイメージ URI を入力します。fluentbit ログ

ルータータイプを選択した場合は、[Image (イメージ)] フィールドに AWS for Fluent Bit イメージが事前入力されています。詳細については、「AWS for Fluent Bit イメージの使用 (p. 81)」を参照してください。

c. [Apply] を選択します。これにより、log_router という名前のタスク定義に新しいログルーターコンテナが作成され、それをサポートする設定が適用されます。ログルーター統合フィールドを変更した場合は、もう一度、[Apply (適用)] を選択して FireLens コンテナを更新します。

12. (オプション) タスクのデータボリュームを定義するには、[ボリュームの追加] を選択します。詳細については、「タスクでのデータボリュームの使用 (p. 67)」を参照してください。

• [名前] に、ボリュームの名前を入力します。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

13. [Tags (タグ)] セクションで、タスク定義に関連付ける各タグのキーと値を指定します。詳細については、「Amazon ECS リソースにタグを付ける」を参照してください。

14. [Create] を選択します。API バージョン 2014-11-13

34

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義テンプレート

タスク定義テンプレート以下に示しているのは、空のタスク定義テンプレートです。このテンプレートを使用してタスク定義を作成します。これにより、コンソールの JSON 入力領域に貼り付けるか、ファイルに保存して AWS CLI の--cli-input-json オプションで使用できるようになります。詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

{ "family": "", "taskRoleArn": "", "executionRoleArn": "", "networkMode": "host", "containerDefinitions": [ { "name": "", "image": "", "repositoryCredentials": { "credentialsParameter": "" }, "cpu": 0, "memory": 0, "memoryReservation": 0, "links": [ "" ], "portMappings": [ { "containerPort": 0, "hostPort": 0, "protocol": "udp" } ], "essential": true, "entryPoint": [ "" ], "command": [ "" ], "environment": [ { "name": "", "value": "" } ], "mountPoints": [ { "sourceVolume": "", "containerPath": "", "readOnly": true } ], "volumesFrom": [ { "sourceContainer": "", "readOnly": true } ], "linuxParameters": { "capabilities": { "add": [ "" ], "drop": [

API バージョン 2014-11-1335

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義テンプレート

"" ] }, "devices": [ { "hostPath": "", "containerPath": "", "permissions": [ "read" ] } ], "initProcessEnabled": true, "sharedMemorySize": 0, "tmpfs": [ { "containerPath": "", "size": 0, "mountOptions": [ "" ] } ], "maxSwap": 0, "swappiness": 0 }, "secrets": [ { "name": "", "valueFrom": "" } ], "dependsOn": [ { "containerName": "", "condition": "COMPLETE" } ], "startTimeout": 0, "stopTimeout": 0, "hostname": "", "user": "", "workingDirectory": "", "disableNetworking": true, "privileged": true, "readonlyRootFilesystem": true, "dnsServers": [ "" ], "dnsSearchDomains": [ "" ], "extraHosts": [ { "hostname": "", "ipAddress": "" } ], "dockerSecurityOptions": [ "" ], "interactive": true, "pseudoTerminal": true, "dockerLabels": { "KeyName": "" },

API バージョン 2014-11-1336

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義テンプレート

"ulimits": [ { "name": "rtprio", "softLimit": 0, "hardLimit": 0 } ], "logConfiguration": { "logDriver": "gelf", "options": { "KeyName": "" }, "secretOptions": [ { "name": "", "valueFrom": "" } ] }, "healthCheck": { "command": [ "" ], "interval": 0, "timeout": 0, "retries": 0, "startPeriod": 0 }, "systemControls": [ { "namespace": "", "value": "" } ], "resourceRequirements": [ { "value": "", "type": "GPU" } ], "firelensConfiguration": { "type": "fluentd", "options": { "KeyName": "" } } } ], "volumes": [ { "name": "", "host": { "sourcePath": "" }, "dockerVolumeConfiguration": { "scope": "task", "autoprovision": true, "driver": "", "driverOpts": { "KeyName": "" }, "labels": { "KeyName": "" } }, "efsVolumeConfiguration": {

API バージョン 2014-11-1337

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義パラメータ

"fileSystemId": "", "rootDirectory": "", "transitEncryption": "DISABLED", "transitEncryptionPort": 0, "authorizationConfig": { "accessPointId": "", "iam": "ENABLED" } } } ], "placementConstraints": [ { "type": "memberOf", "expression": "" } ], "requiresCompatibilities": [ "EC2" ], "cpu": "", "memory": "", "tags": [ { "key": "", "value": "" } ], "pidMode": "task", "ipcMode": "none", "proxyConfiguration": { "type": "APPMESH", "containerName": "", "properties": [ { "name": "", "value": "" } ] }, "inferenceAccelerators": [ { "deviceName": "", "deviceType": "" } ]}

このタスク定義テンプレートは、以下の AWS CLI コマンドを使用して生成できます。

aws ecs register-task-definition --generate-cli-skeleton

タスク定義パラメータタスク定義は、タスクファミリー、IAM タスクロール、ネットワークモード、コンテナ定義、ボリューム、タスク配置の制約事項、起動タイプの各部分に分かれています。ファミリーとコンテナ定義はタスク定義に必須ですが、タスクロール、ネットワークモード、ボリューム、タスク配置の制約事項、起動タイプはオプションです。

以下に示すのは、各タスク定義パラメータのより詳細な説明です。

API バージョン 2014-11-1338

Amazon ECS AWS Fargate 用ユーザーガイドファミリー

ファミリーfamily

タイプ: 文字列

必須: はい

タスク定義を登録するときに、ファミリー (複数バージョンのタスク定義の名前のようなもの) を指定する必要があります。登録したタスク定義には、リビジョン番号が与えられます。特定のファミリーに登録した最初のタスク定義には、リビジョン 1 が与えられ、その後に登録したタスク定義には、リビジョン 2 というように続きます。

タスク実行ロールexecutionRoleArn

タイプ: 文字列

必須: いいえ

タスク定義を登録するとき、タスクのコンテナがユーザーに代わってコンテナイメージを取得して、CloudWatch にコンテナログを発行するためのタスク実行ロールを提供することができます。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

ネットワークモードnetworkMode

タイプ: 文字列

必須: いいえ

タスクのコンテナで使用する Docker ネットワーキングモード。Fargate 起動タイプを使用している場合、awsvpc ネットワークモードが必要です。

ネットワークモードが awsvpc の場合は、タスクに Elastic Network Interface が割り当てられるため、タスク定義を使用したサービスの作成時またはタスクの実行時に NetworkConfiguration を指定する必要があります。詳細については、AWS Fargate 用 Amazon Elastic Container Service ユーザーガイドの「Fargate タスクネットワーキング」を参照してください。

awsvpc ネットワークモードでは、コンテナのネットワークパフォーマンスは最大限になります。Amazon EC2 ネットワークスタックを使用するためです。公開されたコンテナのポートは、アタッチされた Elastic Network Interface ポートに直接マッピングされるため、動的ホストポートマッピングは利用できません。

コンテナ定義タスク定義を登録するときは、コンテナインスタンスの Docker デーモンに渡されるコンテナ定義のリストを指定する必要があります。以下のパラメータをコンテナ定義で使用できます。

トピック• 標準のコンテナ定義のパラメータ (p. 40)• 詳細コンテナ定義パラメータ (p. 43)

API バージョン 2014-11-1339

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

• その他のコンテナ定義のパラメータ (p. 53)

標準のコンテナ定義のパラメータ以下のタスク定義のパラメータは必須であるか、ほとんどのコンテナ定義で使用されます。

トピック• 名前 (p. 40)• イメージ (p. 40)• メモリ (p. 41)• ポートマッピング (p. 41)

名前

name

タイプ: 文字列

必須: はい

コンテナの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。 タスク定義で複数のコンテナをリンクする場合、あるコンテナの name を別のコンテナのlinks に入力してコンテナを接続できます。

イメージ

image

タイプ: 文字列

必須: はい

コンテナの開始に使用するイメージ。この文字列は Docker デーモンに直接渡されます。DockerHub レジストリのイメージはデフォルトで使用できます。repository-url/image:tag またはrepository-url/image@digest で他のリポジトリを指定することもできます。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコア、コロン、ピリオド、スラッシュ、シャープ記号を使用できます。 このパラメータは、Docker Remote API の コンテナを作成する セクションの Image と docker run の IMAGE パラメータにマッピングします。• 新しいタスクが開始されると、Amazon ECS コンテナエージェントは、指定されたイメージおよび

タグの最新バージョンをプルしてコンテナで使用します。ただし、リポジトリイメージの後続の更新がすでに実行されているタスクに反映されることはありません。

• プライベートレジストリのイメージがサポートされています。詳細については、「タスクのプライベートレジストリの認証 (p. 89)」を参照してください。

• Amazon ECR リポジトリのイメージは、registry/repository:tag またはregistry/repository@digest の完全な命名規則を使用して指定できます。たとえば、aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest または aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app@sha256:94afd1f2e64d908bc90dbca0035a5b567EXAMPLE

• Docker ハブの公式リポジトリのイメージでは、1 つの名前 (例: ubuntu、mongo) を使用します。• Docker ハブの他のリポジトリのイメージは、組織名で修飾されます (例: amazon/amazon-ecs-agent)。

• 他のオンラインリポジトリのイメージは、さらにドメイン名で修飾されます (例: quay.io/assemblyline/ubuntu)。

API バージョン 2014-11-1340

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

メモリ

memory

タイプ: 整数

必須: いいえ

コンテナに適用されるメモリの量 (MiB 単位)。コンテナは、ここで指定したメモリを超えようとすると、強制終了されます。タスク内のすべてのコンテナ用に予約されるメモリの合計量は、タスクの memory 値より小さくする必要があります (指定されている場合)。このパラメータは、DockerRemote API の コンテナを作成する セクションの Memory にマッピングし、--memory オプションをdocker run にマッピングします。

Fargate 起動タイプを使用する場合、このパラメータはオプションです。

Docker デーモンによってコンテナ用に 4 MiB 以上のメモリが予約されるため、コンテナ用に 4 MiB未満のメモリを指定しないでください。

memoryReservation

タイプ: 整数

必須: いいえ

コンテナ用に予約するメモリのソフト制限 (MiB 単位)。システムメモリが競合している場合、Dockerはコンテナメモリをこのソフト制限に維持しようとします。ただし、コンテナは必要に応じて、memory パラメータで指定したハード制限 (該当する場合)、またはコンテナインスタンスの使用可能なメモリの、いずれか先に達するまで、追加のメモリを消費できます。このパラメータは、Docker Remote API の コンテナを作成する セクションの MemoryReservation にマッピングし、--memory-reservation オプションを docker run にマッピングします。

タスクレベルのメモリ値を指定しない場合、コンテナ定義で memory または memoryReservationの一方または両方に 0 以外の整数を指定する必要があります。両方を指定する場合、memory はmemoryReservation より大きいことが必要です。memoryReservation を指定する場合、コンテナが配置されているコンテナインスタンスの使用可能なメモリリソースからその値が減算されます。それ以外の場合は、memory の値が使用されます。

たとえば、コンテナが通常 128 MiB のメモリを使用しているが、短期間に 256 MiB のメモリにバーストする場合は、memoryReservation を 128 MiB に、memory ハード制限を 300 MiB に設定できます。この設定により、コンテナは、コンテナインスタンスの残りのリソースから 128 MiB のメモリのみを確保できますが、必要に応じて追加のメモリリソースを消費できるようにもなります。

Docker デーモンによってコンテナ用に 4 MiB 以上のメモリが予約されるため、コンテナ用に 4 MiB未満のメモリを指定しないでください。

ポートマッピング

portMappings

タイプ: オブジェクト配列

必須: いいえ

ポートマッピングにより、コンテナはホストコンテナインスタンス上のポートにアクセスしてトラフィックを送受信できるようになります。

awsvpc ネットワークモードを使用するタスク定義では、containerPort のみを指定する必要があります。hostPort は、空白のままにするか、containerPort と同じ値にする必要があります。

API バージョン 2014-11-1341

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

このパラメータは、Docker Remote API の コンテナを作成する セクションの PortBindings にマッピングし、--publish オプションを docker run にマッピングします。タスク定義のネットワークモードを host に設定している場合、ホストポートは未定義であるか、ポートマッピングのコンテナポートと一致する必要があります。

Note

タスクが RUNNING ステータスに達すると、手動および自動で割り当てられたホストとコンテナポートが次の場所で表示されます。• コンソール: 指定されたタスクのコンテナ詳細の [Network Bindings] セクション。• AWS CLI: describe-tasks コマンド出力の networkBindings セクション。• API: DescribeTasks レスポンス。

containerPort

タイプ: 整数

必須: はい (portMappings を使用する場合)

ユーザーが指定したホストポートまたは自動的に割り当てられたホストポートにバインドされるコンテナポートの番号。

Fargate 起動タイプを使用するタスク内のコンテナを使う場合、containerPort を使用して公開ポートを指定する必要があります。

EC2 起動タイプを使用するタスク内のコンテナを使用し、ホストポートではなくコンテナポートを指定した場合、コンテナには一時ポート範囲内のホストポートが自動的に割り当てられます。詳細については、「hostPort」を参照してください。この方法で自動的にマッピングされるポートは、コンテナインスタンスの 100 個の予約済みポート制限にはカウントされません。

Important

複数のプロトコルに対して同じコンテナポートを公開することはできません。この操作を試みた場合は、エラーが返されます。

hostPort

タイプ: 整数

必須: いいえ

コンテナ用に予約するコンテナインスタンスのポート番号。

Fargate 起動タイプを使用するタスク内のコンテナを使う場合、hostPort は、空白のままにするか、containerPort と同じ値にする必要があります。

EC2 起動タイプを使用するタスク内のコンテナを使う場合、予約されていないホストポートをコンテナポートマッピングに指定できます (これは静的ホストポートマッピングと呼ばれます)。または、containerPort の指定時に hostPort を省略することもできます (または 0 に設定)。後者の場合、コンテナインスタンスのオペレーティングシステムと Docker バージョンに、一時ポート範囲のポートが自動的に割り当てられます (これは動的ホストポートマッピングと呼ばれる)。

Docker バージョン 1.6.0 以降のデフォルトの一時ポート範囲は、インスタンスの /proc/sys/net/ipv4/ip_local_port_range にリストされています。このカーネルパラメータが使用できない場合、49153–65535 から始まるデフォルトのエフェメラルポート範囲が使用されます。一時ポート範囲は自動割り当て用に予約されているため、この範囲にはホストポートを指定しないでください。一般的に、32768 より小さい番号のポートは一時ポート範囲に含まれません。

デフォルトの予約済みポートは、SSH 用の 22、Docker ポートの 2375 および 2376、AmazonECS コンテナエージェントポートの 51678-51680 です。実行中のタスク用にユーザーが以前

API バージョン 2014-11-1342

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

に指定したホストポートもそのタスクの実行中は予約されます (タスクが停止すると、そのホストポートは解放されます)。現在予約されているポートは、describe-container-instances 出力のremainingResources に表示されます。コンテナインスタンスには、デフォルトの予約済みポートを含めて、一度に最大 100 個の予約済みポートを割り当てることができます。自動的に割り当てられるポートは、この 100 個の予約済みポート制限にはカウントされません。

protocol

タイプ: 文字列

必須: いいえ

ポートマッピングに使用されるプロトコル。有効な値は、tcp および udp です。デフォルト:tcp。

ホストポートを指定する場合は、以下の構文を使用します。

"portMappings": [ { "containerPort": integer, "hostPort": integer } ...]

自動的に割り当てられるホストポートが必要な場合は、以下の構文を使用します。

"portMappings": [ { "containerPort": integer } ...]

詳細コンテナ定義パラメータ以下の詳細コンテナ定義パラメータにより、Amazon ECS コンテナインスタンスでのコンテナの起動に使用する docker run コマンドに拡張機能が追加されます。

トピック• ヘルスチェック (p. 43)• 環境 (p. 45)• ネットワーク設定 (p. 48)• ストレージとログ記録 (p. 48)• セキュリティ (p. 51)• リソースの制限 (p. 52)• Docker のラベル (p. 53)

ヘルスチェック

healthCheck

コンテナヘルスチェックのコマンドおよびコンテナの関連する設定パラメータです。このパラメータは、Docker Remote API の コンテナを作成する セクションにある HealthCheck にマッピングされ、HEALTHCHECK パラメータは docker run にマッピングされます。

API バージョン 2014-11-1343

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

Note

Amazon ECS コンテナエージェントは、タスク定義で指定されたヘルスチェックのみをモニターし報告します。Amazon ECS は Docker コンテナイメージに埋め込まれ、コンテナ定義で指定されていない Docker ヘルスチェックを監視しません。コンテナ定義で指定されているヘルスチェックのパラメータは、コンテナイメージ内に存在する Docker ヘルスチェックを上書きします。

DescribeTasks API オペレーションを使用するか、コンソールでタスクの詳細を表示するときに、個々のコンテナとタスクの両方のヘルスステータスを表示できます。

以下に、コンテナに使用される healthStatus 値を示します。• HEALTHY—コンテナのヘルスチェックが合格になりました。• UNHEALTHY—コンテナのヘルスチェックが不合格になりました。• UNKNOWN—コンテナのヘルスチェックが評価中か、コンテナのヘルスチェックが定義されていませ

ん。

以下に、タスクで使用できる healthStatus 値を示します。必須でないコンテナのコンテナヘルスチェックステータスは、タスクのヘルスステータスには影響しません。• HEALTHY—タスク内のすべての必須コンテナがヘルスチェックに合格しました。• UNHEALTHY—1 つ以上の必須コンテナのヘルスチェックが不合格になりました。• UNKNOWN—タスク内の必須コンテナのヘルスチェックがまだ評価中か、コンテナヘルスチェックが

定義されていません。

タスクがサービスの一部ではなく手動で実行された場合、タスクのヘルスステータスに関係なく、タスクのライフサイクルが継続されます。サービスの一部であるタスクでは、タスクが異常であると報告された場合、タスクは停止し、サービススケジューラがそれを置き換えます。

コンテナのヘルスチェックのサポートに関する内容を以下に示します。• バージョン 1.1.0 以降のプラットフォームバージョンを使用している場合、コンテナヘルスチェッ

クは、Fargate タスクでサポートされます。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

• コンテナヘルスチェックは、Classic Load Balancer を使用するように設定されたサービスの一部であるタスクではサポートされていません。

command

ヘルスかどうかを決定するためにコンテナが実行するコマンドを表す文字列配列。文字列配列は、コマンド引数を直接実行するための CMD、またはコンテナのデフォルトシェルのコマンドを実行するための CMD-SHELL で始めることができます。いずれも指定しない場合は、デフォルトで CMD が使用されます。

タスク定義を AWS マネジメントコンソール に登録するときは、コマンドのカンマ区切りリストを使用します。このリストは、タスク定義の作成後に自動的に文字列に変換されます。ヘルスチェックの入力例は以下のとおりです。

CMD-SHELL, curl -f http://localhost/ || exit 1

AWS マネジメントコンソール JSON パネル、AWS CLI、または API を使用してタスク定義を登録するときは、コマンドのリストを角かっこで囲む必要があります。ヘルスチェックの入力例は以下のとおりです。

[ "CMD-SHELL", "curl -f http://localhost/ || exit 1" ]

終了コードの 0 は成功を示し、ゼロ以外の終了コードは失敗を示します。詳細については、Docker Remote API の コンテナを作成する セクションの HealthCheck を参照してください。

API バージョン 2014-11-1344

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

interval

各ヘルスチェックの実行間の秒単位の間隔です。5〜300 秒を指定できます。デフォルト値は 30秒です。

timeout

失敗と見なされる前にヘルスチェックが成功するまでに待機する期間 (秒単位) です。2〜60 秒を指定できます。デフォルト値は 5 秒です。

retries

コンテナが異常と見なされるまでに、失敗したヘルスチェックを再試行する回数です。1〜10 回を指定できます。デフォルト値は 3 回の再試行です。

startPeriod

再試行の最大回数でヘルスチェックが失敗とカウントされる前に、コンテナにブートストラップする時間を提供する猶予期間のオプションです。0〜300 秒を指定できます。デフォルトではstartPeriod は無効となっています。

環境

cpu

タイプ: 整数

必須: いいえ

Amazon ECS コンテナエージェントがコンテナ用に予約した cpu ユニットの数です。このパラメータは、Docker Remote API の コンテナを作成する セクションの CpuShares にマッピングし、--cpu-shares オプションを docker run にマッピングします。

Fargate 起動タイプを使用するタスクでは、このフィールドはオプションです。その場合、タスク内のすべてのコンテナ用に予約される CPU の合計量が、タスクレベルの cpu の値を下回ることが唯一の要件となります。

Note

Amazon EC2 Instances 詳細ページのインスタンスタイプに一覧表示されている vCPU 数に1,024 を乗算して、Amazon EC2 インスタンスタイプごとに使用可能な CPU ユニットの数を判断できます。

Linux コンテナは、割り当てられた CPU ユニットと同じ比率を使用して、割り当てられていないCPU ユニットをコンテナインスタンス上の他コンテナと共有します。たとえば、単一コンテナタスクを単一コアインスタンスタイプで実行する場合、そのコンテナ用に 512 個の CPU ユニットを指定しており、そのタスクがコンテナインスタンスで実行される唯一のタスクであると、そのコンテナは1,024 個の CPU ユニット配分すべてをいつでも使用できます。ただし、そのコンテナインスタンスで同じタスクの別のコピーを起動した場合、必要に応じてタスクごとに最低 512 個の CPU ユニットが確保され、各コンテナは最大 CPU ユニット配分を使用できますが (他方のコンテナが使用していない限り)、両方のタスクが常に 100% アクティブであれば、使用できるのは 512 個の CPU ユニットに制限されます。

Linux コンテナインスタンスでは、コンテナインスタンス上の Docker デーモンは、CPU 値を使用して、実行中のコンテナに対する相対 CPU 配分比率を計算します。詳細については、Docker ドキュメントの「CPU 配分の制約」を参照してください。Linux kernel が許可する CPU の有効な最小共有値は 2 です。ただし、CPU のパラメータは必要なく、コンテナ定義で 2 以下の CPU 値を使用できます。CPU 値が 2 未満の場合 (null を含む)、動作は Amazon ECS コンテナエージェントのバージョンによって異なります。• Agent versions <= 1.1.0: Null と 0 の CPU 値は Docker に 0 として渡され、Docker はそれを 1,024

個の CPU 配分に変換します。1 の CPU 値は Docker に 1 として渡され、Linux カーネルはそれを 2個の CPU 配分に変換します。

API バージョン 2014-11-1345

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

• Agent versions >= 1.2.0: Null、0、1 の CPU 値は Docker に 2 個の CPU 配分として渡されます。

Windows コンテナインスタンスでは、CPU 制限は絶対制限またはクォータとして適用されます。Windows コンテナはタスク定義で指定された一定量の CPU にのみアクセスします。

essential

型: ブール値

必須: いいえ

コンテナの essential パラメータが true とマークされている場合、そのコンテナが何らかの理由で失敗または停止すると、タスクに含まれる他のすべてのコンテナは停止されます。コンテナのessential パラメータが false とマークされている場合、その失敗はタスクに含まれる残りのコンテナに影響を与えません。このパラメータを省略した場合、コンテナは必須と見なされます。

すべてのタスクには少なくとも 1 つの必須のコンテナが必要です。アプリケーションが複数のコンテナで構成される場合は、用途が共通するコンテナをコンポーネントにグループ化し、それらのコンポーネントを複数のタスク定義に分ける必要があります。詳細については、「アプリケーションのアーキテクチャ (p. 32)」を参照してください。

"essential": true|false

entryPoint

Important

初期のバージョンの Amazon ECS コンテナエージェントは、entryPoint パラメータを正しく処理しません。entryPoint の使用時に問題が発生する場合は、コンテナエージェントを更新するか、代わりに command 配列項目としてコマンドと引数を入力します。

タイプ: 文字列配列

必須: いいえ

コンテナに渡されるエントリポイント。このパラメータは、Docker Remote API の コンテナを作成する セクションの Entrypoint にマッピングし、--entrypoint オプションを docker run にマッピングします。Docker ENTRYPOINT パラメータの詳細については、https://docs.docker.com/engine/reference/builder/#entrypoint を参照してください。

"entryPoint": ["string", ...]

command

タイプ: 文字列配列

必須: いいえ

コンテナに渡すコマンド。このパラメータは、Docker Remote API の コンテナを作成する セクションの Cmd にマッピングし、 COMMAND パラメータを docker run にマッピングします。Docker CMD パラメータの詳細については、https://docs.docker.com/engine/reference/builder/#cmd を参照してください。複数の引数がある場合、各引数は配列において区切られた文字列である必要があります。

"command": ["string", ...]

workingDirectory

タイプ: 文字列

必須: いいえ

API バージョン 2014-11-1346

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

コンテナ内でコマンドを実行する作業ディレクトリ。このパラメータは、Docker Remote API の コンテナを作成する セクションの WorkingDir にマッピングし、--workdir オプションを docker runにマッピングします。

"workingDirectory": "string"

environment

タイプ: オブジェクト配列

必須: いいえ

コンテナに渡す環境変数。このパラメータは、Docker Remote API の コンテナを作成する セクションの Env にマッピングし、--env オプションを docker run にマッピングします。

Important

認証情報データなどの機密情報にプレーンテキストの環境変数を使用することはお勧めしません。

name

タイプ: 文字列

必須: はい (environment を使用する場合)

環境変数の名前。value

タイプ: 文字列

必須: はい (environment を使用する場合)

環境変数の値。

"environment" : [ { "name" : "string", "value" : "string" }, { "name" : "string", "value" : "string" }]

secrets

型: オブジェクト配列

必須: いいえ

コンテナに公開するシークレットを表すオブジェクトです。詳細については、「機密データの指定 (p. 92)」を参照してください。name

型: 文字列

必須: はい

コンテナの環境変数として設定する値。valueFrom

型: 文字列

必須: はい

API バージョン 2014-11-1347

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

コンテナに公開するシークレットです。サポートされている値は、AWS Secrets Manager シークレットの完全な ARN または AWS Systems Manager パラメータストア内のパラメータの完全なARN のいずれかです。

Note

起動しているタスクと同じリージョンに Systems Manager パラメータストアパラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。別のリージョンにパラメータが存在する場合は、完全な ARN を指定する必要があります。

"secrets": [ { "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }]

ネットワーク設定

dnsServers

タイプ: 文字列配列

必須: いいえ

コンテナに渡す DNS サーバーのリスト。このパラメータは Docker Remote API の コンテナを作成する セクションの Dns にマッピングされ、--dns オプションは docker run にマッピングされます。

Note

このパラメータは、awsvpc ネットワークモードを使用するタスクや Windows コンテナではサポートされていません。

"dnsServers": ["string", ...]

ストレージとログ記録

readonlyRootFilesystem

型: ブール値

必須: いいえ

このパラメータが true のとき、コンテナはそのルートファイルシステムへの読み取り専用アクセスを許可されます。このパラメータは、Docker Remote API の コンテナを作成する セクションのReadonlyRootfs にマッピングし、--read-only オプションを docker run にマッピングします。

Note

このパラメータは Windows コンテナではサポートされません。

"readonlyRootFilesystem": true|false

mountPoints

Type: Object Array

Required: No

API バージョン 2014-11-1348

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

The mount points for data volumes in your container.

This parameter maps to Volumes in the コンテナを作成する section of the Docker Remote API andthe --volume option to docker run.

Windows containers can mount whole directories on the same drive as $env:ProgramData.Windows containers cannot mount directories on a different drive, and mount point cannot be acrossdrives.sourceVolume

Type: String

Required: Yes, when mountPoints are used

The name of the volume to mount.containerPath

Type: String

Required: Yes, when mountPoints are used

The path on the container to mount the volume at.readOnly

Type: Boolean

Required: No

If this value is true, the container has read-only access to the volume. If this value is false, thenthe container can write to the volume. The default value is false.

volumesFrom

タイプ: オブジェクト配列

必須: いいえ

別コンテナからマウントするデータボリューム。このパラメータは、Docker Remote API の コンテナを作成する セクションの VolumesFrom にマッピングし、--volumes-from オプションを dockerrun にマッピングします。sourceContainer

タイプ: 文字列

必須: はい (volumesFrom を使用する場合)

ボリュームのマウント元のコンテナの名前。readOnly

型: ブール値

必須: いいえ

この値が true の場合、コンテナはボリュームへの読み取り専用アクセスを許可されます。この値が false の場合、コンテナはボリュームに書き込むことができます。デフォルト値は falseです。

"volumesFrom": [ { "sourceContainer": "string",

API バージョン 2014-11-1349

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

"readOnly": true|false } ]

logConfiguration

タイプ: LogConfiguration オブジェクト

必須: いいえ

コンテナのログ設定の仕様。

ログ設定を使用したタスク定義の例については、「タスク定義の例 (p. 102)」を参照してください。

このパラメータは Docker Remote API の コンテナを作成する セクションの LogConfig にマッピングされ、--log-driver オプションは docker run にマッピングされます。デフォルトでは、コンテナは Docker デーモンと同じロギングドライバーを使用します。ただし、コンテナ定義でこのパラメータを使用してロギングドライバーを指定することで、コンテナは Docker デーモンとは異なるロギングドライバーを使用できます。コンテナに異なるロギングドライバーを使用するには、コンテナインスタンス (またはリモートログ記録オプションの別のログサーバー) でログシステムを適切に設定する必要があります。サポートされているさまざまなログドライバーのオプションの詳細については、Docker ドキュメントの「ログドライバーの設定」を参照してください。

コンテナのログ設定を指定するときは、以下の点に注意してください。• Amazon ECS では現在、Docker デーモンに使用可能なログドライバーがいくつかサポートされて

います (以下の有効な値を参照)。Amazon ECS コンテナエージェントの今後のリリースで他のログドライバーが追加される可能性があります。

• このパラメータには、コンテナインスタンス内の Docker Remote API バージョン 1.18 以上を指定する必要があります。

• Fargate 起動タイプを使用するタスクの場合、そのタスクをホストする基盤となるインフラストラクチャにアクセスできないため、必要な追加のソフトウェアはタスクの外でインストールする必要があります。たとえば、Fluentd 出力アグリゲータであるか、Gelf ログの送信先として Logstash を実行しているリモートホストです。

"logConfiguration": { "logDriver": "awslogs","fluentd","gelf","json-file","journald","logentries","splunk","syslog","awsfirelens", "options": {"string": "string" ...}, "secretOptions": [{ "name": "string", "valueFrom": "string" }]}

logDriver

タイプ: 文字列

有効な値: "awslogs","fluentd","gelf","json-file","journald","logentries","splunk","syslog","awsfirelens

必須: はい (logConfiguration を使用する場合)

コンテナに使用するログドライバー。上記の有効な値は、Amazon ECS コンテナエージェントがデフォルトで通信できるログドライバーです。

Fargate 起動タイプを使用するタスクの場合、サポートされるログドライバーはawslogs、splunk、awsfirelens です。

API バージョン 2014-11-1350

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

タスク定義で awslogs ログドライバーを使用してコンテナログを CloudWatch Logs に送信する方法の詳細については、「awslogs ログドライバーを使用する (p. 74)」を参照してください。

awsfirelens ログドライバーの使用の詳細については、「カスタムログのルーティング」を参照してください。

このパラメータは、コンテナインスタンスで Docker Remote API バージョン 1.18 以上を使用する必要があります。

options

タイプ: 文字列間のマッピング

必須: いいえ

ログドライバーに送信する設定オプション。

このパラメータは、コンテナインスタンスで Docker Remote API バージョン 1.19 以上を使用する必要があります。

secretOptions

タイプ: オブジェクト配列

必須: いいえ

ログ設定に渡すシークレットを表すオブジェクト。詳細については、「機密データの指定 (p. 92)」を参照してください。name

型: 文字列

必須: はい

コンテナの環境変数として設定する値。valueFrom

型: 文字列

必須: はい

コンテナのログ設定に公開するシークレット。

"logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080", "splunk-token": "...", "tag": "...", ... }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "/ecs/logconfig/splunkcred" }]}

セキュリティ

user

タイプ: 文字列

API バージョン 2014-11-1351

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

必須: いいえ

コンテナ内で使用するユーザー名。このパラメータは、Docker Remote API の コンテナを作成するセクションの User にマッピングし、--user オプションを docker run にマッピングします。

以下のフォーマットを使用できます。UID または GID を指定する場合は、正の整数として指定する必要があります。• user

• user:group

• uid

• uid:gid

• user:gid

• uid:group

Note

このパラメータは Windows コンテナではサポートされません。

"user": "string"

リソースの制限

ulimits

タイプ: オブジェクト配列

必須: いいえ

コンテナで設定する ulimits のリスト。このパラメータは、Docker Remote API の コンテナを作成する セクションの Ulimits にマッピングし、--ulimit オプションを docker run にマッピングします。

Fargate タスクは、デフォルトのリソース制限値を使用します。ただし、Fargate がオーバーライドする nofile リソース制限パラメータを除きます。nofile リソース制限は、コンテナが使用できるオープンファイルの数の制限を設定します。デフォルトの nofile ソフト制限は 1024、ハード制限は Fargate タスク用で 4096 です。これらの制限は、タスクでより多くのファイルを処理する必要がある場合は、タスク定義で調整できます。

このパラメータは、コンテナインスタンスで Docker Remote API バージョン 1.18 以上を使用する必要があります。

Note

このパラメータは Windows コンテナではサポートされません。

"ulimits": [ { "name": "core"|"cpu"|"data"|"fsize"|"locks"|"memlock"|"msgqueue"|"nice"|"nofile"|"nproc"|"rss"|"rtprio"|"rttime"|"sigpending"|"stack", "softLimit": integer, "hardLimit": integer } ... ]

name

タイプ: 文字列

API バージョン 2014-11-1352

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

有効な値: "core" | "cpu" | "data" | "fsize" | "locks" | "memlock" |"msgqueue" | "nice" | "nofile" | "nproc" | "rss" | "rtprio" | "rttime" |"sigpending" | "stack"

必須: はい (ulimits を使用する場合)

ulimit の type。hardLimit

タイプ: 整数

必須: はい (ulimits を使用する場合)

ulimit タイプのハード制限。softLimit

タイプ: 整数

必須: はい (ulimits を使用する場合)

ulimit タイプのソフト制限。

Docker のラベル

dockerLabels

タイプ: 文字列間のマッピング

必須: いいえ

コンテナに追加するラベルのキー/値マップ。このパラメータは、Docker Remote API の コンテナを作成する セクションの Labels にマッピングし、--label オプションを docker run にマッピングします。

このパラメータは、コンテナインスタンスで Docker Remote API バージョン 1.18 以上を使用する必要があります。

"dockerLabels": {"string": "string" ...}

その他のコンテナ定義のパラメータ以下のコンテナ定義パラメータは、[Configure via JSON (JSON による設定)] オプションを使用して、Amazon ECS コンソールでタスク定義を登録するときに使用できます。詳細については、「タスク定義の作成 (p. 33)」を参照してください。

トピック• Linux パラメータ (p. 54)• コンテナの依存関係 (p. 55)• コンテナのタイムアウト (p. 56)• システムコントロール (p. 56)• インタラクティブ (p. 57)• 擬似ターミナル (p. 58)

API バージョン 2014-11-1353

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

Linux パラメータ

linuxParameters

型: LinuxParameters オブジェクト

必須: いいえ

KernelCapabilities など、コンテナに適用される Linux 固有のオプション。

Note

このパラメータは Windows コンテナではサポートされません。

"linuxParameters": { "capabilities": { "add": ["string", ...], "drop": ["string", ...] } }

capabilities

型: KernelCapabilities オブジェクト

必須: いいえ

Docker によって提供されているデフォルト設定に対して削除する、コンテナ用の Linux 機能。デフォルトの機能およびデフォルト以外の使用可能な機能の詳細については、Docker run referenceの「Runtime privilege and Linux capabilities」を参照してください。これらの Linux 機能の詳細については、Linux マニュアルページの「機能(7)」を参照してください。add

タイプ: 文字列配列

有効な値: "SYS_PTRACE"

必須: いいえ

Docker によって提供されているデフォルト設定に追加する、コンテナ用の Linux 機能。このパラメータは、Docker Remote API の コンテナを作成する セクションにある CapAdd にマッピングされ、--cap-add オプションは docker run にマッピングされます。

Note

Fargate 起動タイプを使用するタスクの場合、add パラメータはプラットフォームバージョン 1.4.0 以降を使用している場合にのみサポートされます。

drop

タイプ: 文字列配列

有効な値: "ALL" | "AUDIT_CONTROL" | "AUDIT_WRITE" | "BLOCK_SUSPEND" |"CHOWN" | "DAC_OVERRIDE" | "DAC_READ_SEARCH" | "FOWNER" | "FSETID"| "IPC_LOCK" | "IPC_OWNER" | "KILL" | "LEASE" | "LINUX_IMMUTABLE"| "MAC_ADMIN" | "MAC_OVERRIDE" | "MKNOD" | "NET_ADMIN" |"NET_BIND_SERVICE" | "NET_BROADCAST" | "NET_RAW" | "SETFCAP"| "SETGID" | "SETPCAP" | "SETUID" | "SYS_ADMIN" | "SYS_BOOT" |"SYS_CHROOT" | "SYS_MODULE" | "SYS_NICE" | "SYS_PACCT" | "SYS_PTRACE"

API バージョン 2014-11-1354

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

| "SYS_RAWIO" | "SYS_RESOURCE" | "SYS_TIME" | "SYS_TTY_CONFIG" |"SYSLOG" | "WAKE_ALARM"

必須: いいえ

Docker によって提供されているデフォルト設定から削除する、コンテナ用の Linux 機能。このパラメータは、Docker Remote API の コンテナを作成する セクションにある CapDrop にマッピングされ、--cap-drop オプションは docker run にマッピングされます。

initProcessEnabled

信号を転送しプロセスを利用するコンテナ内で、init を実行。このパラメータは、docker run の--init オプションにマッピングされます。

このパラメータは、コンテナインスタンスで Docker Remote API バージョン 1.25 以上を使用する必要があります。

コンテナの依存関係

dependsOn

型: ContainerDependency オブジェクトの配列

必須: いいえ

コンテナの起動と停止に定義されている依存関係。コンテナには複数の依存関係を含めることができます。依存関係がコンテナの起動に対して定義されている場合、コンテナの停止の場合、依存関係は逆になります。例については、「例: コンテナの依存関係 (p. 104)」を参照してください。

Fargate の起動タイプを使用するタスクの場合、このパラメータにはタスクまたはサービスでプラットフォームバージョン 1.3.0 以降を使用する必要があります。

"dependsOn": [ { "containerName": "string", "condition": "string" }]

containerName

型: 文字列

必須: はい

コンテナ名が指定された条件を満たしている必要があります。condition

型: 文字列

必須: はい

コンテナの依存関係の条件です。使用可能な条件とその動作を以下に示します。• START – この条件は、すぐに現在のリンクとボリュームの動作をエミュレートします。他のコ

ンテナの開始を許可する前に、依存コンテナが開始されていることを検証します。• COMPLETE – この条件は、他のコンテナの開始を許可する前に、依存コンテナの実行が完了 (終

了) することを検証します。これは、スクリプトを実行して終了する不要なコンテナに役立ちます。

API バージョン 2014-11-1355

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

• SUCCESS – この条件は COMPLETE と同じですが、コンテナが zero ステータスで終了していることも必要です。

• HEALTHY – この条件は、他のコンテナの開始を許可する前に、依存コンテナが Docker ヘルスチェックに合格したことを検証します。これには、依存コンテナにヘルスチェックが設定されている必要があります。タスクの起動時にのみ、この条件が確認されます。

コンテナのタイムアウト

startTimeout

タイプ: 整数

必須: いいえ

値の例: 120

コンテナの依存関係解決の再試行を止めるまでの待機時間 (秒)。たとえば、タスク定義内に 2 つのコンテナを指定するとします。containerA は、COMPLETE、SUCCESS、または HEALTHY のいずれかのステータスに到達する containerB に依存関係を持ちます。startTimeout の値が containerB に指定されていて、時間内に目標のステータスを達成しない場合、containerA は再試行を開始しません。これにより、タスクは STOPPED ステータスに移行します。

Fargate の起動タイプを使用するタスクの場合、このパラメータにはタスクまたはサービスでプラットフォームバージョン 1.3.0 以降を使用する必要があります。このパラメータを指定しない場合、デフォルト値の 3 分が使用されます。

stopTimeout

タイプ: 整数

必須: いいえ

値の例: 120

コンテナが正常に終了しなかった場合にコンテナが強制終了されるまでの待機時間 (秒)。

Fargate 起動タイプを使用するタスクの場合、タスクまたはサービスにはプラットフォームバージョン 1.3.0 以降が必要です。最大停止タイムアウト値は 120 秒です。パラメータを指定しない場合は、デフォルト値の 30 秒が使用されます。

システムコントロール

systemControls

型: SystemControl オブジェクト

必須: いいえ

コンテナ内で設定する名前空間カーネルパラメータのリスト。このパラメータは、Docker RemoteAPI の コンテナを作成する セクションの Sysctls にマッピングし、--sysctl オプションを dockerrun にマッピングします。

awsvpc または host ネットワークモードのいずれかを使用する単一のタスクで複数のコンテナに対してネットワーク関連の systemControls パラメータを指定することが推奨されない理由は次のとおりです。• awsvpc ネットワークモードを使用するタスクの場合、systemControls をコンテナ用に設

定した場合、タスク内のすべてのコンテナに適用されます。単一のタスクの複数のコンテナに

API バージョン 2014-11-1356

Amazon ECS AWS Fargate 用ユーザーガイドコンテナ定義

対して異なる systemControls を設定すると、最後に開始されたコンテナにより有効になるsystemControls が決定します。

• host ネットワークモードを使用するタスクでは、ネットワーク名前空間 systemControls はサポートされていません。

タスクのコンテナに使用するため IPC リソース名前空間を設定している場合は、次のようにシステムコントロールに適用されます。詳細については、「IPC モード (p. 63)」を参照してください。• host IPC モードを使用するタスクの場合、IPC 名前空間の systemControls はサポートされてい

ません。• task IPC モードを使用するタスクでは、IPC 名前空間の systemControls 値はタスク内のすべて

のコンテナに適用されます。

Note

このパラメータは、Fargate 起動タイプを使用する Windows コンテナまたはタスクではサポートされていません。

"systemControls": [ { "namespace":"string", "value":"string" }]

namespace

型: 文字列

必須: いいえ

value を設定する名前空間カーネルパラメータ。

有効な IPC 名前空間値: 、"kernel.msgmax" | "kernel.msgmnb" | "kernel.msgmni"| "kernel.sem" | "kernel.shmall" | "kernel.shmmax" | "kernel.shmmni" |"kernel.shm_rmid_forced" および "fs.mqueue.*" で始まる Sysctls

有効なネットワーク名前空間値: "net.*" で始まる Sysctlsvalue

型: 文字列

必須: いいえ

namespace 指定された名前空間カーネルパラメータの値。

インタラクティブ

interactive

型: ブール値

必須: いいえ

このパラメータは true で、コンテナ化されたアプリケーションをデプロイすることができます。これには stdin または tty を割り当てる必要があります。このパラメータは、Docker Remote API の コンテナを作成する セクションの OpenStdin にマッピングし、--interactive オプションを dockerrun にマッピングします。

API バージョン 2014-11-1357

Amazon ECS AWS Fargate 用ユーザーガイドボリューム

擬似ターミナル

pseudoTerminal

型: ブール値

必須: いいえ

このパラメータが true の場合、TTY が割り当てられます。このパラメータは、Docker Remote APIの コンテナを作成する セクションの Tty にマッピングし、--tty オプションを docker run にマッピングします。

ボリュームタスク定義を登録する際、コンテナインスタンスの Docker デーモンに渡されるボリュームのリストをオプションで指定することができます。これにより、同じコンテナインスタンス上の他のコンテナで使用できるようになります。

詳細については、「タスクでのデータボリュームの使用 (p. 67)」を参照してください。

以下のパラメータをコンテナ定義で使用できます。

name

型: 文字列

必須: いいえ

ボリュームの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。この名前は、コンテナ定義 sourceVolume の mountPoints パラメータで参照されます。

host

必須: いいえ

バインドマウントを使用する場合、このパラメータが指定されます。Docker ボリュームを使用するには、代わりに dockerVolumeConfiguration を指定します。host パラメータの内容により、バインドマウントのデータボリュームがホストコンテナインスタンスで保持されるかどうかと、その保存場所が決まります。host パラメーターが空の場合、Docker デーモンはデータボリュームのホストパスを割り当てますが、関連付けられたコンテナの実行が停止した後にデータが保持されるとは限りません。

バインドマウントのホストボリュームは、EC2 起動タイプ、または Fargate 起動タイプ使用時にサポートされています。

Windows コンテナは $env:ProgramData と同じドライブに全部のディレクトリをマウントできます。sourcePath

型: 文字列

必須: いいえ

host パラメータを使用する場合は、sourcePath を指定して、コンテナに表示されるホストコンテナインスタンスのパスを宣言します。このパラメータが空の場合は、Docker デーモンによってホストパスが割り当てられています。host パラメータに sourcePath の場所が含まれている

API バージョン 2014-11-1358

Amazon ECS AWS Fargate 用ユーザーガイドボリューム

場合、データボリュームは手動で削除するまでホストコンテナインスタンスの指定された場所に保持されます。sourcePath の場所がホストコンテナインスタンスに存在しない場は、Dockerデーモンによって作成されます。その場所が存在する場合は、ソースパスフォルダーの内容がエクスポートされます。

efsVolumeConfiguration

型: オブジェクト

必須: いいえ

このパラメータは、Amazon EFS ボリュームを使用する場合に指定します。fileSystemId

型: 文字列

必須: はい

使用する Amazon EFS ファイルシステム ID。rootDirectory

型: 文字列

必須: いいえ

ホスト内にルートディレクトリとしてマウントする Amazon EFS ファイルシステム内のディレクトリ。このパラメータを省略すると、Amazon EFS ボリュームのルートが使用されます。/ を指定すると、このパラメータを省略した場合と同じ結果になります。

transitEncryption

型: 文字列

有効な値: ENABLED | DISABLED

必須: いいえ

Amazon ECS ホストと Amazon EFS サーバーの間で転送される Amazon EFS データの暗号化を有効にするかどうかを指定します。Amazon EFS IAM 認証を使用する場合は、転送中の暗号化を有効にする必要があります。このパラメータを省略すると、DISABLED のデフォルト値が使用されます。詳細については、Amazon Elastic File System ユーザーガイドの「転送中のデータの暗号化」を参照してください。

transitEncryptionPort

タイプ: 整数

必須: いいえ

Amazon ECS ホストと Amazon EFS サーバーの間で暗号化されたデータを送信するときに使用するポート。転送中の暗号化ポートを指定しないと、Amazon EFS マウントヘルパーが使用するポート選択方法が使用されます。詳細については、Amazon Elastic File System ユーザーガイドの「EFS マウントヘルパー」を参照してください。

authorizationConfig

型: オブジェクト

必須: いいえ

Amazon EFS ファイルシステムの認証設定の詳細。

API バージョン 2014-11-1359

Amazon ECS AWS Fargate 用ユーザーガイド起動タイプ

accessPointId

型: 文字列

必須: いいえ

使用するアクセスポイント ID。アクセスポイントを指定した場合、ルートディレクトリの値は、アクセスポイントとして設定したディレクトリからの相対値になります。指定した場合は、EFSVolumeConfiguration で転送中の暗号化を有効にする必要があります。詳細については、Amazon Elastic File System ユーザーガイドの「Amazon EFS アクセスポイントの使用」を参照してください。

iam

型: 文字列

有効な値: ENABLED | DISABLED

必須: いいえ

Amazon EFS ファイルシステムのマウント時に定義した Amazon ECS タスクの IAM ロールを使用するかどうかを指定します。使用する場合は、EFSVolumeConfiguration で転送中の暗号化を有効にする必要があります。このパラメータを省略すると、DISABLED のデフォルト値が使用されます。詳細については、「タスク用の IAM ロール」を参照してください。

起動タイプタスク定義を登録する際、タスクで使用する起動タイプを指定します。詳細については、「Amazon ECS起動タイプ (p. 64)」を参照してください。

以下のパラメータをタスク定義で使用できます。

requiresCompatibilities

タイプ: 文字列配列

必須: いいえ

有効な値: EC2 | FARGATE

タスクが使用している起動タイプ。これにより、タスク定義で使用されているすべてのパラメータが、起動タイプの要件を満たしていることを確認できます。

有効な値は、FARGATE および EC2 です。起動タイプの詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

タスクサイズタスク定義の登録時に、タスクに使用される CPU とメモリの合計量を指定できます。これは、コンテナ定義レベルの cpu および memory の値とは異なります。EC2 起動タイプを使用する場合、これらのフィールドはオプションです。Fargate 起動タイプを使用する場合、これらのフィールドは必須であり、サポートされている cpu および memory の両方に特定の値があります。

Note

タスクレベル CPU およびメモリのパラメータは Windows コンテナでは無視されます。Windowsコンテナではコンテナレベルリソースを指定することをお勧めします。

API バージョン 2014-11-1360

Amazon ECS AWS Fargate 用ユーザーガイドタスクサイズ

以下のパラメータをタスク定義で使用できます。

cpu

タイプ: 文字列

必須: いいえNote

このパラメータは Windows コンテナではサポートされません。

タスクに適用される CPU ユニットのハード制限。タスク定義では、CPU ユニットを使用して整数(例: 1024) で表すか、vCPU を使用して文字列 (例: 1 vCPU または 1 vcpu) で表すことができます。タスク定義が登録されると、vCPU 値は、CPU ユニットを示す整数に変換されます。

Fargate 起動タイプを使用している場合、このフィールドは必須であり、次のいずれかの値を使用する必要があります。この値により memory パラメータのサポートされる値の範囲が決まります。

CPU の値 メモリの値 (MiB)

256 (.25 vCPU) 512 (0.5 GB)、1024 (1 GB)、2048 (2 GB)

512 (.5 vCPU) 1024 (1 GB)、2048 (2 GB)、3072 (3 GB)、4096(4 GB)

1024 (1 vCPU) 2048 (2 GB)、3072 (3 GB)、4096 (4 GB)、5120(5 GB)、6144 (6 GB)、7168 (7 GB)、8192 (8GB)

2048 (2 vCPU) 4096 (4 GB)~16384 (16 GB) (1024 (1 GB) のインクリメント)

4096 (4 vCPU) 8192 (8 GB)~30720 (30 GB) (1024 (1 GB) のインクリメント)

memory

タイプ: 文字列

必須: いいえNote

このパラメータは Windows コンテナではサポートされません。

タスクに適用されるメモリのハード制限 (MiB 単位)。タスク定義では、MiB を使用した整数 (例:1024) で表すか、GB を使用した文字列 (例: 1GB または 1 GB) で表すことができます。タスク定義が登録されると、GB 値は、MiB を示す整数に変換されます。

Fargate 起動タイプを使用している場合、このフィールドは必須であり、次のいずれかの値を使用する必要があります。この値により cpu パラメータのサポートされる値の範囲が決まります。

メモリの値 (MiB) CPU の値

512 (0.5 GB)、1024 (1 GB)、2048 (2 GB) 256 (.25 vCPU)

1024 (1 GB)、2048 (2 GB)、3072 (3 GB)、4096(4 GB)

512 (.5 vCPU)

API バージョン 2014-11-1361

Amazon ECS AWS Fargate 用ユーザーガイドプロキシ設定

メモリの値 (MiB) CPU の値

2048 (2 GB)、3072 (3 GB)、4096 (4 GB)、5120(5 GB)、6144 (6 GB)、7168 (7 GB)、8192 (8GB)

1024 (1 vCPU)

4096 (4 GB)~16384 (16 GB) (1024 (1 GB) のインクリメント)

2048 (2 vCPU)

8192 (8 GB)~30720 (30 GB) (1024 (1 GB) のインクリメント)

4096 (4 vCPU)

プロキシ設定proxyConfiguration

タイプ: ProxyConfiguration オブジェクト

必須: いいえ

App Mesh プロキシの設定詳細。

Fargate の起動タイプを使用するタスクの場合、この機能にはタスクまたはサービスでプラットフォームバージョン 1.3.0 以降を使用する必要があります。

Note

このパラメータは Windows コンテナではサポートされません。

"proxyConfiguration": { "type": "APPMESH", "containerName": "string", "properties": [ { "name": "string", "value": "string" } ]}

type

タイプ: 文字列

重要な値: APPMESH

必須: いいえ

プロキシタイプ。APPMESH はサポートされる唯一の値です。containerName

型: 文字列

必須: はい

App Mesh プロキシとして機能するコンテナの名前です。properties

タイプ: パラメータオブジェクトの配列

API バージョン 2014-11-1362

Amazon ECS AWS Fargate 用ユーザーガイドその他のタスク定義パラメータ

必須: いいえ

Container Network Interface(CNI) プラグインを提供するネットワーク設定パラメータのセットで、キーと値のペアとして指定されます。• IgnoredUID – (必須) コンテナ定義の user パラメータで定義されるプロキシコンテナのユー

ザー ID (UID)。これは、プロキシがそれ自体のトラフィックを無視するようにするために使用されます。IgnoredGID を指定した場合は、このフィールドは空にできます。

• IgnoredGID – (必須) コンテナ定義の user パラメータで定義されるプロキシコンテナのグループ ID (GID)。これは、プロキシがそれ自体のトラフィックを無視するようにするために使用されます。IgnoredUID を指定した場合は、このフィールドは空にできます。

• AppPorts – (必須) アプリケーションが使用するポートのリスト。これらのポートへのネットワークトラフィックは ProxyIngressPort および ProxyEgressPort に転送されます。

• ProxyIngressPort – (必須) AppPorts への着信トラフィックが誘導されるポートを指定します。

• ProxyEgressPort – (必須) AppPorts からの発信トラフィックが誘導されるポートを指定します。

• EgressIgnoredPorts – (必須) これらの指定されたポートに向かうアウトバウンドトラフィックは無視され、ProxyEgressPort にリダイレクトされません。空のリストを指定できます。

• EgressIgnoredIPs – (必須) これらの指定された IP アドレスに向かうアウトバウンドトラフィックは無視され、ProxyEgressPort にリダイレクトされません。空のリストを指定できます。

name

型: 文字列

必須: いいえ

キーと値のペアの名前。value

型: 文字列

必須: いいえ

キーと値のペアの値。

その他のタスク定義パラメータ以下のタスク定義パラメータは、[Configure via JSON (JSON による設定)] オプションを使用して、Amazon ECS コンソールでタスク定義を登録するときに使用できます。詳細については、「タスク定義の作成 (p. 33)」を参照してください。

トピック• IPC モード (p. 63)• PID モード (p. 64)

IPC モードipcMode

型: 文字列

API バージョン 2014-11-1363

Amazon ECS AWS Fargate 用ユーザーガイド起動タイプ

必須: いいえ

タスクのコンテナで使用する IPC リソースの名前空間。有効な値は host、task または none です。host が指定されている場合、同じコンテナインスタンスで host IPC モードを指定したタスク内のすべてのコンテナは、ホスト Amazon EC2 インスタンスと同じ IPC リソースを共有します。task が指定されている場合、指定したタスク内のすべてのコンテナは同じ IPC リソースを共有します。none が指定されている場合、タスクのコンテナ内の IPC リソースはプライベートです。タスク内またはコンテナインスタンスの他のコンテナと共有されることはありません。値を指定しない場合、IPC リソース名前空間の共有はコンテナインスタンスの Docker デーモンの設定によって異なります。詳細については、Docker run reference の「IPC settings」を参照してください。

host IPC モードを使用する場合は、意図せず IPC 名前空間が公開されるリスクが高いことに注意してください。詳細については、「Docker security」を参照してください。

タスクのコンテナに systemControls を使用して名前空間のカーネルパラメータを設定している場合は、次のように IPC リソース名前空間に適用されます。詳細については、「システムコントロール (p. 56)」を参照してください。• host IPC モードを使用するタスクの場合、systemControls に関連する IPC 名前空間はサポート

されていません。• task IPC モードを使用するタスクでは、systemControls に関連する IPC 名前空間はタスク内の

すべてのコンテナに適用されます。

Note

このパラメータは、Fargate 起動タイプを使用する Windows コンテナまたはタスクではサポートされていません。

PID モードpidMode

型: 文字列

必須: いいえ

タスクのコンテナで使用するプロセス名前空間。有効な値は host または task です。host が指定されている場合、同じコンテナインスタンスで host PID モードを指定したタスク内のすべてのコンテナは、ホスト Amazon EC2 インスタンスと同じプロセス名前空間を共有します。task が指定されている場合、指定したタスク内のすべてのコンテナは同じプロセス名前空間を共有します。値が指定されていない場合、デフォルトはプライベート名前空間です。詳細については、Docker run referenceの「PID settings」を参照してください。

host PID モードを使用する場合は、意図せずプロセス名前空間が公開されるリスクが高いことに注意してください。詳細については、「Docker security」を参照してください。

Note

このパラメータは、Fargate 起動タイプを使用する Windows コンテナまたはタスクではサポートされていません。

Amazon ECS 起動タイプAmazon ECS 起動タイプにより、タスクとサービスがホストされるインフラストラクチャのタイプが決まります。

API バージョン 2014-11-1364

Amazon ECS AWS Fargate 用ユーザーガイドFargate 起動タイプ

Fargate 起動タイプFargate 起動タイプにより、バックエンドインフラストラクチャをプロビジョニングおよび管理することなく、コンテナ化されたアプリケーションを実行できます。タスク定義を登録するだけで、Fargate によりコンテナが起動されます。

AWS Fargate 起動タイプは現在、以下のリージョンで利用できます。

リージョン名 リージョン

米国東部 (オハイオ) us-east-2

米国東部(バージニア北部) us-east-1

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

アジアパシフィック (香港) ap-east-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール) ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

中国 (北京) cn-north-1

中国 (寧夏) cn-northwest-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

欧州 (ストックホルム) eu-north-1

南米 (サンパウロ) sa-east-1

中東 (バーレーン) me-south-1

AWS GovCloud (米国東部) us-gov-east-1

AWS GovCloud (US-West) us-gov-west-1

この図は、一般的なアーキテクチャを示しています。

API バージョン 2014-11-1365

Amazon ECS AWS Fargate 用ユーザーガイドEC2 起動タイプ

EC2 起動タイプEC2 起動タイプでは、管理している Amazon EC2 インスタンスのクラスターで、コンテナ化されたアプリケーションを実行できます。

この図は、一般的なアーキテクチャを示しています。

API バージョン 2014-11-1366

Amazon ECS AWS Fargate 用ユーザーガイドタスクでのデータボリュームの使用

タスクでのデータボリュームの使用Fargate タスクでは、次のデータボリューム形式がサポートされています。

• 永続的ストレージの場合 Amazon EFS ボリューム。詳細については、「Amazon EFS ボリューム (p. 69)」を参照してください。

• 非永続ストレージの場合エフェメラルストレージ。

API バージョン 2014-11-1367

Amazon ECS AWS Fargate 用ユーザーガイドタスクでのデータボリュームの使用

各 Fargate タスクはプロビジョニング時に次のエフェメラルストレージを受け取ります。ストレージ設定は、タスクで使用しているプラットフォームバージョンによって異なります。Fargate タスクが停止すると、ストレージは削除されます。

プラットフォームバージョン 1.4.0 以降を使用しているタスクは、タスクごとに次のストレージを受け取ります。

• 20 GB のストレージ

プラットフォームバージョン 1.3.0 以前を使用しているタスクは、タスクごとに次のストレージを受け取ります。

• 10 GB の Docker Layer ストレージ• ボリュームマウント用の追加 4 GB。これはタスク定義内のvolumes、mountPoints およびvolumesFrom パラメータを使用してマウントしコンテナ間で共有できます。

Note

host および sourcePath パラメータは、Fargate タスクでサポートされていません。

Amazon ECS のデフォルトのサービス制限の詳細については、「Amazon ECS サービスクォータ (p. 297)」を参照してください。

Fargate タスクでコンテナの空の非永続ストレージを提供するには

この例では、タスクの実行中に同じスクラッチファイルの保存場所にアクセスする必要のある 2 つのデータベースコンテナがあるとします。

1. タスク定義の volumes セクションで、名前を database_scratch としてボリュームを定義します。

"volumes": [ { "name": "database_scratch", "host": {} } ]

2. containerDefinitions セクションで、非永続ストレージをマウントするようにデータベースのコンテナの定義を作成します。

"containerDefinitions": [ { "name": "database1", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] }, { "name": "database2", "image": "my-repo/database", "cpu": 100, "memory": 100,

API バージョン 2014-11-1368

Amazon ECS AWS Fargate 用ユーザーガイドAmazon EFS ボリューム

"essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] } ]

Amazon EFS ボリュームAmazon Elastic File System (Amazon EFS) では、Amazon EC2 インスタンスで使用するためのシンプルでスケーラブルなファイルストレージを提供します。Amazon EFS を使用すると、ストレージ容量が伸縮自在になり、ファイルの追加および削除時に自動的に伸縮されるようになります。アプリケーションでは、必要なときに必要なストレージを確保できます。

Amazon EFS ファイルシステムを Amazon ECS で使用して、コンテナインスタンスのフリート全体のファイルシステムデータをエクスポートできます。これにより、タスクは、配置されているインスタンスにかかわらず、同じ永続的ストレージにアクセスできます。ただし、Docker デーモンが開始する前に、Amazon EFS ファイルシステムをマウントするようにコンテナインスタンス AMI を設定する必要があります。また、ファイルシステムを使用するには、タスク定義でコンテナインスタンスのボリュームマウントを参照する必要があります。以下のセクションでは、Amazon EFS を Amazon ECS で使用し始めるのに役立ちます。

Amazon EFS ボリュームに関する考慮事項Amazon EFS ボリュームを使用する際には、以下の点を考慮する必要があります。

• 起動タイプ Fargate を使用するタスクの場合、プラットフォームバージョン 1.4.0 以降で、AmazonEFS ファイルシステムのサポートが追加されました。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

• Fargate 起動タイプを使用するタスクに Amazon EFS ボリュームを指定すると、Fargate は AmazonEFS ボリュームの管理を担当するスーパーバイザーコンテナを作成します。スーパーバイザーコンテナは、タスクのメモリを少しだけ使用します。スーパーバイザーコンテナは、タスクメタデータバージョン 4 エンドポイントにクエリを実行するときに表示されますが、CloudWatch Container Insights では表示されません。詳細については、「タスクメタデータエンドポイントバージョン 4 (p. 284)」を参照してください。

Amazon EFS アクセスポイントの使用Amazon EFS アクセスポイントは、EFS ファイルシステムへのアプリケーション固有のエントリポイントです。これにより、共有データセットへのアプリケーションアクセスが管理しやすくなります。AmazonEFS アクセスポイントの詳細およびアクセス制御方法については、Amazon Elastic File System ユーザーガイドの「Amazon EFS アクセスポイントの使用」を参照してください。

アクセスポイントを使用すると、アクセスポイントを介したすべてのファイルシステム要求に対してユーザー ID (ユーザーの POSIX グループなど) を適用できます。また、ファイルシステムに対して別のルートディレクトリを適用し、このディレクトリまたはそのサブディレクトリ内のデータに対してのみ、クライアントにアクセスを許可することもできます。

Amazon ECS タスクの IAM ロールを使用して、特定のアプリケーションで使用するアクセスポイントを限定できます。IAM ポリシーとアクセスポイントを組み合わせると、アプリケーションから特定のデータセットへのアクセスを簡単に保護できます。タスクの IAM ロールの詳しい使用方法については、「タスク用の IAM ロール (p. 251)」を参照してください。

API バージョン 2014-11-1369

Amazon ECS AWS Fargate 用ユーザーガイドAmazon EFS ボリューム

タスク定義での Amazon EFS ファイルシステムの指定コンテナに Amazon EFS ファイルシステムボリュームを使用するには、タスク定義でボリュームとマウントポイントの構成を指定する必要があります。次のタスク定義の JSON スニペットは、コンテナのvolumes と mountPoints オブジェクトの構文を示します。

{ "containerDefinitions": [ { "name": "container-using-efs", "image": "amazonlinux:2", "entryPoint": [ "sh", "-c" ], "command": [ "ls -la /mount/efs" ], "mountPoints": [ { "sourceVolume": "myEfsVolume", "containerPath": "/mount/efs", "readOnly": true } ] } ], "volumes": [ { "name": "myEfsVolume", "efsVolumeConfiguration": { "fileSystemId": "fs-1234", "rootDirectory": "/path/to/my/data", "transitEncryption": "ENABLED", "transitEncryptionPort": integer, "authorizationConfig": { "accessPointId": "fsap-1234", "iam": "ENABLED" } } } ]}

efsVolumeConfiguration

型: オブジェクト

必須: いいえ

このパラメータは、Amazon EFS ボリュームを使用する場合に指定します。fileSystemId

型: 文字列

必須: はい

使用する Amazon EFS ファイルシステム ID。rootDirectory

型: 文字列

API バージョン 2014-11-1370

Amazon ECS AWS Fargate 用ユーザーガイドAmazon EFS ボリューム

必須: いいえ

ホスト内にルートディレクトリとしてマウントする Amazon EFS ファイルシステム内のディレクトリ。このパラメータを省略すると、Amazon EFS ボリュームのルートが使用されます。/ を指定すると、このパラメータを省略した場合と同じ結果になります。

transitEncryption

型: 文字列

有効な値: ENABLED | DISABLED

必須: いいえ

Amazon ECS ホストと Amazon EFS サーバーの間で転送される Amazon EFS データの暗号化を有効にするかどうかを指定します。Amazon EFS IAM 認証を使用する場合は、転送中の暗号化を有効にする必要があります。このパラメータを省略すると、DISABLED のデフォルト値が使用されます。詳細については、Amazon Elastic File System ユーザーガイドの「転送中のデータの暗号化」を参照してください。

transitEncryptionPort

タイプ: 整数

必須: いいえ

Amazon ECS ホストと Amazon EFS サーバーの間で暗号化されたデータを送信するときに使用するポート。転送中の暗号化ポートを指定しないと、Amazon EFS マウントヘルパーが使用するポート選択方法が使用されます。詳細については、Amazon Elastic File System ユーザーガイドの「EFS マウントヘルパー」を参照してください。

authorizationConfig

型: オブジェクト

必須: いいえ

Amazon EFS ファイルシステムの認証設定の詳細。accessPointId

型: 文字列

必須: いいえ

使用するアクセスポイント ID。アクセスポイントを指定した場合、ルートディレクトリの値は、アクセスポイントとして設定したディレクトリからの相対値になります。指定した場合は、EFSVolumeConfiguration で転送中の暗号化を有効にする必要があります。詳細については、Amazon Elastic File System ユーザーガイドの「Amazon EFS アクセスポイントの使用」を参照してください。

iam

型: 文字列

有効な値: ENABLED | DISABLED

必須: いいえ

Amazon EFS ファイルシステムのマウント時に定義した Amazon ECS タスクの IAM ロールを使用するかどうかを指定します。使用する場合は、EFSVolumeConfiguration で転送中

API バージョン 2014-11-1371

Amazon ECS AWS Fargate 用ユーザーガイドFargate タスクネットワーキング

の暗号化を有効にする必要があります。このパラメータを省略すると、DISABLED のデフォルト値が使用されます。詳細については、「タスク用の IAM ロール」を参照してください。

Fargate タスクネットワーキングFargate を使用する Amazon ECS タスクは、awsvpc ネットワークモードを必要とします。このネットワークモードは、各タスクに Elastic Network Interface (EN) とプライマリプライベート IP アドレスを提供します。このネットワークモードを使用してタスクを実行したり、サービスを作成したりする場合は、ネットワークインターフェイスをアタッチする先のサブネットを 1 つ以上と、ネットワークインターフェイスに適用するセキュリティグループを 1 つ以上指定する必要があります。各タスクにはそれぞれ独自の ENI が提供されるため、VPC フローログなど Amazon EC2 のその他のネットワーキング機能を活用して、タスクとの間で送受信されるトラフィックをモニタリングできるようになります。さらに、同じタスクに属するコンテナが、localhost インターフェイス経由で通信できるようになります。ある時点でタスクに関連付けられている ENI は 1 つだけです。

パブリックサブネットを使用している場合は、ネットワークインターフェイスにパブリック IP アドレスを指定するかどうかを決定します。パブリックサブネットの Fargate タスクを使用してコンテナイメージをプルするには、タスクの Elastic Network Interface に、インターネットへのルートまたはリクエストをインターネットにルーティングできる NAT ゲートウェイを持つパブリック IP アドレスが割り当てられている必要があります。プライベートサブネット内の Fargate タスクでコンテナイメージをプルするには、リクエストをインターネットにルーティングするためにプライベートサブネットに NAT ゲートウェイがアタッチされている必要があります。

Fargate タスクまたはサービスの networkConfiguration セクションの例を次に示します。

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-12345678" ], "subnets": [ "subnet-12345678" ] }}

Fargate 起動タイプを使用するタスクを含むサービスは、Application Load Balancer と Network LoadBalancer のみをサポートします。Classic Load Balancer はサポートされません。また、ターゲットグループを作成する場合は、ターゲットタイプとして instance ではなく、ip を選択する必要があります。詳細については、「サービスロードバランシング (p. 160)」を参照してください。

作成したネットワークインターフェイスは、AWS Fargate によって完全に管理されます。また、Fargateへのアクセス許可を付与するために使用される IAM ポリシーが関連付けられます。Fargate プラットフォームバージョン 1.4 以降を使用するタスクの場合、タスクは単一の ENI (タスク ENI と呼ばれる) を受け取ります。すべてのネットワークトラフィックは、VPC 内でこの ENI を通過し、VPC フローログを通じて表示されます。Fargate プラットフォームバージョン 1.3 以前を使用するタスクの場合、タスクは、タスク ENI に加えて Fargate が所有する ENI も別に受け取ります。この ENI は、VPC フローログに表示されない一部のネットワークトラフィックに使用されます。ネットワークトラフィックの動作と、プラットフォームバージョンごとに必要な IAM ポリシーについて次に説明します。

アクション プラットフォームバージョン 1.3 以前でのトラフィックフロー

プラットフォームバージョン 1.4 でのトラフィックフロー

IAM アクセス許可

Amazon ECR ログイン認証情報の取得

Fargate が所有する ENI タスク ENI タスク実行 IAM ロール

イメージプル タスク ENI タスク ENI タスク実行 IAM ロール

API バージョン 2014-11-1372

Amazon ECS AWS Fargate 用ユーザーガイドFargate タスクネットワーキングに関する考慮事項

アクション プラットフォームバージョン 1.3 以前でのトラフィックフロー

プラットフォームバージョン 1.4 でのトラフィックフロー

IAM アクセス許可

ログドライバーによるログの送信

タスク ENI タスク ENI タスク実行 IAM ロール

FireLens for AmazonECS によるログの送信

タスク ENI タスク ENI タスク IAM ロール

Secrets Manager またはSystems Managerからのシークレットの取得

Fargate が所有する ENI タスク ENI タスク実行 IAM ロール

Amazon EFS ファイルシステムのトラフィック

利用不可 タスク ENI タスク IAM ロール

アプリケーションのトラフィック

タスク ENI タスク ENI タスク IAM ロール

Fargate タスクネットワーキングに関する考慮事項タスクネットワーキングを使用する場合の考慮事項を紹介します。

• Amazon ECS のサービスにリンクされたロールは、ユーザーに代わって他の AWS のサービスを呼び出すためのアクセス許可を Amazon ECS に付与します。このロールは、クラスターを作成する際、またはAWS マネジメントコンソール でサービスを作成または更新すると、自動的に作成されます。詳細については、「Amazon ECS 用のサービスにリンクされたロール (p. 238)」を参照してください。サービスにリンクされたロールは、次の AWS CLI コマンドを使用して作成することもできます。

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

• enableDnsHostnames と enableDnsSupport オプションの両方が VPC で有効になっている場合、Amazon ECS はタスクネットワーキングを使用して Amazon が提供する (内部) DNS ホスト名でタスクのホスト名を設定します。これらのオプションが有効になっていない場合、タスクの DNS ホスト名はランダムなホスト名になります。VPC の DNS 設定の詳細については、Amazon VPC ユーザーガイド の「VPC での DNS の使用」を参照してください。

• awsvpcConfiguration で指定できるサブネットは 16 個まで、セキュリティグループは 5 個までに制限されています。詳細については、Amazon Elastic Container Service API Referenceの「AwsVpcConfiguration」を参照してください。

• Fargate によって作成およびアタッチされた ENI は、手動でデタッチしたり、アカウントによって変更したりできません。これは、実行中のタスクに関連付けられている ENI が誤って削除されないようにするためです。タスクの ENI を解放するには、タスクを停止します。

• たとえば、使用する DHCP オプションセットを変更するために VPC が更新され、その変更を VPC を使用しているタスクに反映させる場合は、それらのタスクを停止して新しいタスクを開始する必要があります。

• プラットフォームバージョン 1.4 以降を使用するタスクの場合、タスク ENI はジャンボフレームをサポートします。ネットワークインターフェイスは、最大転送単位 (MTU) で設定されます。MTU は、1つのフレームに収まるペイロードの最大サイズです。MTU が大きいほど、1 つのフレーム内に収まるアプリケーションのペイロードが増えるため、フレームあたりのオーバーヘッドが減少し、効率が向上します。ジャンボフレームをサポートすると、オーバーヘッドが減ります。タスクと転送先とのネットワークパスでジャンボフレームをサポートすると、VPC 内に残っているすべてのトラフィックなどのオーバーヘッドが軽減されます。

API バージョン 2014-11-1373

Amazon ECS AWS Fargate 用ユーザーガイドawslogs ログドライバーを使用する

awslogs ログドライバーを使用するタスクのコンテナを設定して CloudWatch Logs にログ情報を送信できます。これにより Fargate タスクのコンテナからログを表示できます。このトピックでは、タスク定義で awslogs ログドライバーの使用を開始する方法について説明します。

Note

タスクのコンテナによってログ記録される情報のタイプは、ENTRYPOINT コマンドによって大きく異なります。デフォルトでは、キャプチャされるログは、コンテナをローカルに実行した場合にインタラクティブターミナルに表示されるコマンド出力 (STDOUT および STDERR I/O ストリーム) を示します。awslogs ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。Docker ログの処理方法 (ファイルデータやストリームをキャプチャする別の方法) の詳細については、Docker ドキュメントの「コンテナまたはサービスのログを表示する」を参照してください。

コンテナで awslogs ログドライバーを有効にするタスクで Fargate 起動タイプを使用する場合、タスク定義に必要な logConfiguration パラメータを追加するだけで、awslogs ログドライバーを有効にできます。詳細については、「タスク定義でログ設定を指定する (p. 76)」を参照してください。

ロググループを作成するawslogs ログドライバーは、CloudWatch Logs の既存のロググループにログストリームを送信することも、ユーザーに代わって新しいロググループを作成することもできます。AWS マネジメントコンソールには、タスク定義ファミリー名を ecs でプレフィックスとして使用して、自動的にロググループを作成する自動設定オプションが用意されています。または、手動でログ設定オプションを指定し、値 true でawslogs-create-group オプションを指定することもできます。これにより、ロググループが自動的に作成されます。

Note

awslogs-create-group オプションを使用してロググループを作成するには、IAM ポリシーにlogs:CreateLogGroup アクセス許可が含まれている必要があります。

自動設定機能を使用してロググループを作成するAmazon ECS コンソールでタスク定義を登録する際、Amazon ECS で CloudWatch ログを自動設定することができます。このオプションでは、ecs をプレフィックスとして指定し、タスク定義ファミリー名を使用して自動的にロググループが作成されます。

Amazon ECS コンソールでロググループの自動設定オプションを使用するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. 左のナビゲーションペインで、[Task Definitions]、[Create new Task Definition] の順に選択します。3. 互換性オプションを選択し、[次のステップ] を選択します。4. [Add container] を選択します。5. [Storage and Logging (ストレージとログ記録)] の [Log configuration (ログ設定)] で、[Auto-configure

CloudWatch Logs (CloudWatch Logs の自動設定)] を選択します。6. awslogs ログドライバーのオプションを入力します。詳細については、「タスク定義でログ設定を指

定する (p. 76)」を参照してください。7. タスク定義ウィザードの残りの手順を完了します。

API バージョン 2014-11-1374

Amazon ECS AWS Fargate 用ユーザーガイド使用できる awslogs ログドライバーのオプション

使用できる awslogs ログドライバーのオプションawslogs ログドライバーは、Amazon ECS タスク定義で以下のオプションをサポートします。詳細については、「CloudWatch Logs logging driver」を参照してください。

awslogs-create-group

必須: いいえ

自動的に作成されたロググループが必要かどうかを指定します。このオプションを指定しない場合、デフォルトは false です。

Note

awslogs-create-group を使用しようとする前に、IAM ポリシーにはlogs:CreateLogGroup アクセス権限が含まれている必要があります。

awslogs-region

必須: はい

awslogs ログドライバーが Docker ログを送信するリージョンを指定します。異なるリージョンのクラスターからのログをすべて CloudWatch Logs の単一のリージョンに送信する選択もできます。そうすることで、1 か所ですべてを表示できます。あるいは、詳細に確認するためにリージョン別にすることもできます。このオプションで指定するリージョンに、指定されたロググループが存在することを確認してください。

awslogs-group

必須: はい

awslogs ログドライバーでログストリームを送信するロググループを指定する必要があります。詳細については、「ロググループを作成する (p. 74)」を参照してください。

awslogs-stream-prefix

必須: Fargate 起動タイプを使用する場合は必須。

awslogs-stream-prefix オプションを使用して、指定したプレフィックス、コンテナ名、コンテナの所属先の Amazon ECS タスクの ID に、ログストリームを関連付けることができます。このオプションでプレフィックスを指定した場合、ログストリームの形式は以下のようになります。

prefix-name/container-name/ecs-task-id

Amazon ECS サービスの場合は、サービス名をプレフィックスとして使用できます。こうすることで、コンテナが所属するサービスへのログストリームと、それを送信したコンテナの名前、およびそのコンテナが所属するタスクの ID を追跡できます。

awslogs-datetime-format

必須: いいえ

このオプションは、Python strftime 形式で複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。したがって、一致した行はログメッセージ間の区切り文字です。

この形式を使用する場合のユースケースの例としては、スタックダンプなどの解析された出力があり、これを使用しなければ、複数のエントリに記録されることになります。適切なパターンにより、単一のエントリにキャプチャさせます。

詳細については、「awslogs-datetime-format」を参照してください。

awslogs-datetime-format と awslogs-multiline-pattern の両方が設定されている場合、このオプションは常に優先されます。

API バージョン 2014-11-1375

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義でログ設定を指定する

Note

複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これにより、ログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

awslogs-multiline-pattern

必須: いいえ

このオプションでは、正規表現を使用して複数行起動パターンを定義します。ログメッセージは、パターンに一致する 1 行と、それに続くパターンに一致しない行で構成されます。したがって、一致した行はログメッセージ間の区切り文字です。

詳細については、「awslogs-multiline-pattern」を参照してください。

awslogs-datetime-format も設定されている場合は、このオプションは無視されます。Note

複数行のログ記録は、すべてのログメッセージの正規表現の解析とマッチングを実行します。これによりログ記録のパフォーマンスに悪影響が及ぶ可能性があります。

タスク定義でログ設定を指定するコンテナがログを CloudWatch に送信する前に、タスク定義でコンテナの awslogs ログドライバーを指定する必要があります。このセクションでは、コンテナが awslogs ログドライバーを使用するためのログ設定について説明します。詳細については、「タスク定義の作成 (p. 33)」を参照してください。

次のタスク定義 JSON には、各コンテナに対して指定された logConfiguration オブジェクトがあります。1 つは awslogs-wordpress というロググループにログを送信する WordPress コンテナ、1 つは awslogs-mysql というロググループにログを送信する MySQL コンテナです。どちらのコンテナもawslogs-example ログストリームプレフィックスを使用します。

{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-wordpress", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } }, "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD",

API バージョン 2014-11-1376

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch Logs で awslogs コンテナログを表示する

"value": "password" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-mysql", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } } } ], "family": "awslogs-example"}

Amazon ECS コンソールで、wordpress コンテナのログ設定は次の図のように指定されています。

CloudWatch Logs で awslogs コンテナログを表示するawslogs ログドライバーを使用する Fargate タスクを起動した後、設定済みコンテナはログデータをCloudWatch Logs に送信する必要があります。これらのログはコンソールで表示および検索できます。

Amazon ECS コンソールからコンテナの CloudWatch Logs データを表示するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. [Clusters] ページで、表示するタスクを含むクラスターを選択します。3. [Cluster: cluster_name] ページで、[Tasks] を選択して表示するタスクを選択します。4. [Task: task_id] ページで、コンテナ名の左にある矢印を選択してコンテナビューを展開します。

API バージョン 2014-11-1377

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch Logs で awslogs コンテナログを表示する

5. [Log Configuration (ログ設定)] セクションで、[CloudWatch のログを表示] を選択します。CloudWatch コンソールに関連ログストリームが開きます。

CloudWatch コンソールで CloudWatch Logs データを表示するには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. 左のナビゲーションペインで [Logs] を選択します。3. 表示するロググループを選択します。「ロググループを作成する (p. 74)」で作成したロググループ

が表示されます。

4. 表示するログストリームを選択します。

API バージョン 2014-11-1378

Amazon ECS AWS Fargate 用ユーザーガイドカスタムログルーティング

カスタムログルーティングAmazon ECS 対応 FireLens では、タスク定義パラメータを使用して AWS のサービスや AWS パートナーネットワーク (APN ) の宛先にログをルーティングし、ログを保存および分析できます。FireLens はFluentd および Fluent Bitで動作します。提供されている AWS for Fluent Bit イメージを使用することも、独自の Fluentd または Fluent Bit イメージを使用することもできます。

FireLens 設定を使用した Amazon ECS タスク定義の作成は、AWS SDK、AWS CLI、および AWS マネジメントコンソール でサポートされています。

考慮事項Amazon ECS 対応 FireLens を使用する際は、以下の点を考慮してください。

• Amazon ECS 対応 FireLens は、Fargate および EC2 の両方の起動タイプを使用するタスクでサポートされています。

• Amazon ECS の FireLensは、AWS CloudFormation テンプレートでサポートされています。詳細については、AWS CloudFormation ユーザーガイド の「AWS:: ECS::TaskDefinition FirelensConfiguration」を参照してください。

• bridge ネットワークモードを使用するタスクの場合、FireLens 設定のコンテナは、それに依存するアプリケーションコンテナが開始する前に開始する必要があります。コンテナの開始順序を制御するには、タスク定義の依存関係条件を使用します。詳細については、「コンテナの依存関係 (p. 55)」を参照してください。

API バージョン 2014-11-1379

Amazon ECS AWS Fargate 用ユーザーガイド必要な IAM アクセス権限

Note

FireLens 設定のコンテナ定義で依存関係条件パラメータを使用する場合は、各コンテナにSTART または HEALTHY 条件要件があることを確認してください。

必要な IAM アクセス権限この機能を使用するには、タスク用の IAM ロールを作成し、AWS のサービスを使用するために必要なアクセス許可をタスクに付与する必要があります。たとえば、コンテナから Kinesis Data Firehose にログをルーティングする場合、タスクには firehose:PutRecordBatch API を呼び出すためのアクセス許可が必要です。詳細については、IAM ユーザーガイドの「IAM ID アクセス許可の追加と削除」を参照してください。

次の IAM ポリシー例では、ログを Kinesis Data Firehose にルーティングするために必要なアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ]}

以下の場合は、タスクに Amazon ECS タスク実行ロールが必要になることもあります。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

• タスクで Fargate 起動タイプを使用していて、Amazon ECR からコンテナイメージをプルしたり、ログ設定で AWS Secrets Manager の機密データを参照したりする場合は、タスク実行 IAM ロールを含める必要があります。

• Amazon S3 でホストされるカスタム設定ファイルを指定する場合、タスク実行 IAM ロールには、設定ファイル用の s3:GetObject アクセス許可と、ファイルが格納されている Amazon S3 バケットに対する s3:GetBucketLocation アクセス許可を含める必要があります。詳細については、Amazon SimpleStorage Service コンソールユーザーガイドの「ポリシーでのアクセス許可の指定」を参照してください。

次の IAM ポリシー例では、Amazon S3 からファイルを取得するために必要なアクセス許可を追加します。Amazon S3 バケットの名前と設定ファイル名を指定します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] },

API バージョン 2014-11-1380

Amazon ECS AWS Fargate 用ユーザーガイドAWS for Fluent Bit イメージの使用

{ "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ]}

AWS for Fluent Bit イメージの使用AWS には、CloudWatch Logs 用と Kinesis Data Firehose 用の両方のプラグインを持つ Fluent Bit イメージが用意されています。Fluent Bit は、リソース使用率が Fluentd よりも低いため、ログルーターとして使用することをお勧めします。詳細については、「 CloudWatch Logs for Fluent Bit 」および「 AmazonKinesis Firehose for Fluent Bit」を参照してください。

AWS for Fluent Bit イメージは Docker Hub で利用できます。ただし、Amazon ECR では、以下のイメージを使用することをお勧めします。これらのイメージにより、可用性が向上します。

リージョン名 リージョン イメージ URI

米国東部(バージニア北部) us-east-1 906394416424.dkr.ecr.us-east-1.amazonaws.com/aws-for-fluent-bit:latest

米国東部 (オハイオ) us-east-2 906394416424.dkr.ecr.us-east-2.amazonaws.com/aws-for-fluent-bit:latest

米国西部 (北カリフォルニア) us-west-1 906394416424.dkr.ecr.us-west-1.amazonaws.com/aws-for-fluent-bit:latest

米国西部 (オレゴン) us-west-2 906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest

アジアパシフィック (香港) ap-east-1 449074385750.dkr.ecr.ap-east-1.amazonaws.com/aws-for-fluent-bit:latest

アジアパシフィック (ムンバイ) ap-south-1 906394416424.dkr.ecr.ap-south-1.amazonaws.com/aws-for-fluent-bit:latest

アジアパシフィック (ソウル) ap-northeast-2 906394416424.dkr.ecr.ap-northeast-2.amazonaws.com/aws-for-fluent-bit:latest

API バージョン 2014-11-1381

Amazon ECS AWS Fargate 用ユーザーガイドAWS for Fluent Bit イメージの使用

リージョン名 リージョン イメージ URI

アジアパシフィック (シンガポール)

ap-southeast-1 906394416424.dkr.ecr.ap-southeast-1.amazonaws.com/aws-for-fluent-bit:latest

アジアパシフィック (シドニー) ap-southeast-2 906394416424.dkr.ecr.ap-southeast-2.amazonaws.com/aws-for-fluent-bit:latest

アジアパシフィック (東京) ap-northeast-1 906394416424.dkr.ecr.ap-northeast-1.amazonaws.com/aws-for-fluent-bit:latest

カナダ (中部) ca-central-1 906394416424.dkr.ecr.ca-central-1.amazonaws.com/aws-for-fluent-bit:latest

欧州 (フランクフルト) eu-central-1 906394416424.dkr.ecr.eu-central-1.amazonaws.com/aws-for-fluent-bit:latest

欧州 (アイルランド) eu-west-1 906394416424.dkr.ecr.eu-west-1.amazonaws.com/aws-for-fluent-bit:latest

欧州 (ロンドン) eu-west-2 906394416424.dkr.ecr.eu-west-2.amazonaws.com/aws-for-fluent-bit:latest

欧州 (パリ) eu-west-3 906394416424.dkr.ecr.eu-west-3.amazonaws.com/aws-for-fluent-bit:latest

欧州 (ストックホルム) eu-north-1 906394416424.dkr.ecr.eu-north-1.amazonaws.com/aws-for-fluent-bit:latest

中東 (バーレーン) me-south-1 741863432321.dkr.ecr.me-south-1.amazonaws.com/aws-for-fluent-bit:latest

南米 (サンパウロ) sa-east-1 906394416424.dkr.ecr.sa-east-1.amazonaws.com/aws-for-fluent-bit:latest

API バージョン 2014-11-1382

Amazon ECS AWS Fargate 用ユーザーガイドFireLens 設定を使用するタスク定義の作成

リージョン名 リージョン イメージ URI

AWS GovCloud (米国東部) us-gov-east-1 161423150738.dkr.ecr.us-gov-east-1.amazonaws.com/aws-for-fluent-bit:latest

AWS GovCloud (US-West) us-gov-west-1 161423150738.dkr.ecr.us-gov-west-1.amazonaws.com/aws-for-fluent-bit:latest

中国 (北京) cn-north-1 128054284489.dkr.ecr.cn-north-1.amazonaws.com.cn/aws-for-fluent-bit:latest

中国 (寧夏) cn-northwest-1 128054284489.dkr.ecr.cn-northwest-1.amazonaws.com.cn/aws-for-fluent-bit:latest

FireLens 設定を使用するタスク定義の作成FireLens でカスタムログルーティングを使用するには、タスク定義で以下を指定する必要があります。

• FireLens 設定を含むログルーターコンテナ。このコンテナは必須としてマークする必要があります。• awsfirelens ログドライバーを指定するログ設定を含む 1 つ以上のアプリケーションコンテナ。• タスクでログをルーティングするために必要なアクセス許可を含むタスク IAM ロール ARN。

AWS マネジメントコンソール を使用して新しいタスク定義を作成する場合、ログルーターコンテナを簡単に追加できる FireLens 統合セクションがあります。詳細については、「タスク定義の作成 (p. 33)」を参照してください。

Amazon ECS はログ設定を変換し、Fluentd または Fluent Bit 出力設定を生成します。出力設定は、/fluent-bit/etc/fluent-bit.conf (Fluent Bit) および /fluentd/etc/fluent.conf (Fluentd) のログルーティングコンテナにマウントされます。

これがどのように機能するかの例として、Fluent Bit を使用してログを CloudWatch Logs にルーティングするログルーターコンテナと、ログ設定を使用してログを Amazon Kinesis Data Firehose にルーティングするアプリケーションコンテナを含むタスク定義を次に示します。

{ "family": "firelens-example-firehose", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": {

API バージョン 2014-11-1383

Amazon ECS AWS Fargate 用ユーザーガイドFireLens 設定を使用するタスク定義の作成

"logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream" } }, "memoryReservation": 100 } ]}

logConfiguration オブジェクトのオプションとして指定されたキーと値のペアは、Fluentd またはFluent Bit 出力設定の生成に使用されます。Fluent Bit 出力定義のコード例は次のとおりです。

[OUTPUT] Name firehose Match app-firelens* region us-west-2 delivery_stream my-stream

Note

FireLens は match 設定を管理します。この設定は、タスク定義で指定されません。

ECS メタデータの使用タスク定義で FireLens 設定を指定する場合、必要に応じて enable-ecs-log-metadata の値を切り替えることができます。デフォルトでは、Amazon ECS は、ログのソースを識別するのに役立つ追加のフィールドをログエントリに追加します。このアクションを無効にするには、enable-ecs-log-metadata を false に設定します。

• ecs_cluster – タスクが所属するクラスターの名前。• ecs_task_arn – コンテナが所属するタスクの完全な ARN。• ecs_task_definition – タスクが使用しているタスク定義名とリビジョン。

Amazon ECS ログメタデータ設定値を指定するときに必要な構文を次に示します。

{ "containerDefinitions":[ { "essential":true, "image":"906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest", "name":"log_router",

API バージョン 2014-11-1384

Amazon ECS AWS Fargate 用ユーザーガイドFireLens 設定を使用するタスク定義の作成

"firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"true | false" } } } ]}

カスタム設定ファイルの指定FireLens で自動的に生成される設定ファイルに加えて、自分でカスタム設定ファイルを指定することもできます。設定ファイル形式は、使用しているログルーターのネイティブ形式です。詳細については、「Fluentd 設定ファイルの構文」および「Fluent Bit 設定スキーマ」を参照してください。

カスタム設定ファイルの場合、bridge または awsvpc ネットワークモードを使用するタスクでは、TCP経由で Fluentd または Fluent Bit 転送入力を設定しないでください (FireLens ではそれが入力設定に追加されます)。

カスタム設定ファイルを指定するには、FireLens 設定に次のオプションを含める必要があります。

config-file-type

カスタム設定ファイルのソースの場所。使用できるオプションは、s3 または file です。config-file-value

カスタム設定ファイルのソース。s3 設定ファイルタイプを使用する場合、設定ファイルの値はAmazon S3 バケットとファイルの完全な ARN です。file 設定ファイルタイプを使用する場合、設定ファイルの値は、コンテナイメージ内またはコンテナにマウントされているボリューム上に存在する設定ファイルの完全パスです。

Important

カスタム設定ファイルを使用する場合は、FireLens が使用するパスとは異なるパスを指定する必要があります。Amazon ECS では /fluent-bit/etc/fluent-bit.conf (Fluent Bit)と /fluentd/etc/fluent.conf (Fluentd) のファイルパスは予約されています。

次の例は、カスタム設定を指定するときに必要な構文を示しています。

Important

Amazon S3 でホストされるカスタム設定ファイルを指定するには、適切なアクセス許可を持つタスク実行 IAM ロールが作成済みであることを確認します。詳細については、「必要な IAM アクセス権限 (p. 80)」を参照してください。

カスタム設定を指定するときに必要な構文を次に示します。

{ "containerDefinitions":[ { "essential":true, "image":"906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest", "name":"log_router", "firelensConfiguration":{ "type":"fluentbit", "options":{ "config-file-type":"s3 | file",

API バージョン 2014-11-1385

Amazon ECS AWS Fargate 用ユーザーガイドFluent ロガーライブラリの使用

"config-file-value":"arn:aws:s3:::mybucket/fluent.conf | filepath" } } } ]}

Note

Fargate 起動タイプを使用するタスクの場合、サポートされる config-file-type の値は fileのみです。

Fluent ロガーライブラリの使用awsfirelens ログドライバーがタスク定義で指定されている場合、ECS エージェントは次の環境変数をコンテナに挿入します。

FLUENT_HOST

FireLens コンテナに割り当てられた IP アドレス。FLUENT_PORT

Fluent Forward プロトコルがリッスンしているポート。

FLUENT_HOST 環境変数および FLUENT_PORT 環境変数を使用すると、stdout を介することなく、コードからログルーターに直接ログを記録できます。詳細については、GitHub の「flluent-logger-golang」 を参照してください。

正規表現を使用したログのフィルタリングFluentd と Fluent Bit はどちらも、ログの内容に応じたログのフィルタリングをサポートしています。FireLens には、このフィルタリングを有効にするための簡単な方法があります。コンテナ定義のログ設定 options では、正規表現を値として受け取る特殊なキー include-pattern および exclude-pattern を指定できます。exclude-pattern キーでは、正規表現に一致するすべてのログが削除されます。include-pattern では、正規表現に一致するログのみが送信されます。これらのキーは一緒に使用できます。

次の例は、このフィルタの使用方法を示しています。

{ "containerDefinitions":[ { "logConfiguration":{ "logDriver":"awsfirelens", "options":{ "@type":"cloudwatch_logs", "log_group_name":"firelens-testing", "auto_create_stream":"true", "use_tag_as_stream":"true", "region":"us-west-2", "exclude-pattern":"^[a-z][aeiou].*$", "include-pattern":"^.*[aeiou]$" } } } ]}

API バージョン 2014-11-1386

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の例

タスク定義の例次に示すのは、一般的なログルーティングオプションを示すタスク定義の例です。その他の例については、GitHub の「Amazon ECS FireLens の例」を参照してください。

トピック• CloudWatch Logs へのログの転送 (p. 87)• Amazon Kinesis Data Firehose 配信ストリームへのログの転送 (p. 88)• 外部の Fluentd または Fluent Bit への転送 (p. 88)

CloudWatch Logs へのログの転送次のタスク定義の例は、CloudWatch Logs ロググループにログを転送するログ設定を指定する方法を示しています。詳細については、Amazon CloudWatch Logs User Guideの「Amazon CloudWatch Logs とは」を参照してください。

ログ設定オプションで、ロググループ名とロググループが存在するリージョンを指定します。Fluent Bit で自動的にロググループを作成するには、"auto_create_group":"true" を指定します。フィルタリングに役立つログストリームプレフィックスを指定することもできます。詳細については、「CloudWatchLogs 用の Fluent Bit プラグイン」を参照してください。

{ "family": "firelens-example-cloudwatch", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "nginx", "name": "app", "logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "cloudwatch", "region": "us-west-2", "log_group_name": "firelens-testing-fluent-bit", "auto_create_group": "true", "log_stream_prefix": "from-fluent-bit" } }, "memoryReservation": 100 } ]

API バージョン 2014-11-1387

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の例

}

Amazon Kinesis Data Firehose 配信ストリームへのログの転送次のタスク定義の例は、Amazon Kinesis Data Firehose 配信ストリームにログを転送するログ設定を指定する方法を示しています。Kinesis Data Firehose 配信ストリームはすでに存在している必要があります。詳細については、Amazon Kinesis Data Firehose 開発者ガイドの「Amazon Kinesis Data Firehose 配信ストリームの作成」を参照してください。

ログ設定オプションで、配信ストリーム名と配信ストリームが存在するリージョンを指定します。詳細については、「 Amazon Kinesis Firehose 用の Fluent Bit プラグイン」を参照してください。

{ "family": "firelens-example-firehose", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream" } }, "memoryReservation": 100 } ]}

外部の Fluentd または Fluent Bit への転送次のタスク定義の例は、外部の Fluentd または Fluent Bit ホストにログを転送するログ設定を指定する方法を示しています。環境の host と port を指定します。

{ "family": "firelens-example-forward", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ {

API バージョン 2014-11-1388

Amazon ECS AWS Fargate 用ユーザーガイドタスクのプライベートレジストリの認証

"essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:latest", "name": "log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver":"awsfirelens", "options": { "Name": "forward", "Host": "fluentdhost", "Port": "24224" } }, "memoryReservation": 100 } ]}

タスクのプライベートレジストリの認証AWS Secrets Manager を使用したタスクのプライベートレジストリ認証では、認証情報を安全に保存し、コンテナの定義で参照することができます。これにより、プライベートリポジトリのイメージをタスクで使用できるようになります。この機能は、Fargate または EC2 のどちらの起動タイプを使用するタスクでもサポートされています。

Important

タスク定義で、Amazon ECR に保存されたイメージを参照している場合、このトピックは適用されません。詳細については、Amazon Elastic Container Registry ユーザーガイドの「AmazonECS で Amazon ECR イメージを使用する」を参照してください。

Fargate の起動タイプを使用するタスクの場合、この機能にはプラットフォームバージョン 1.2.0 以降が必要です。詳細については、AWS Fargate プラットフォームのバージョン (p. 16) を参照してください。

コンテナの定義内で、作成したシークレットの完全な ARN で repositoryCredentials を指定します。シークレットを使用するタスクのリージョンと異なるリージョンのシークレットを参照できますが、同じアカウント内にある必要があります。

Note

Amazon ECS API、AWS CLI、または AWS SDK を使用する場合、起動するタスクと同じリージョンにシークレットが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。AWS マネジメントコンソール を使用する場合は、シークレットの完全な ARN を指定する必要があります。

API バージョン 2014-11-1389

Amazon ECS AWS Fargate 用ユーザーガイドプライベートレジストリの認

証には IAM アクセス許可が必須

必要なパラメータを示すタスク定義のスニペットを以下に示します。

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } }]

プライベートレジストリの認証には IAM アクセス許可が必須この機能を使用するには、Amazon ECS タスクの実行ロールが必要です。このロールを使用して、コンテナエージェントでコンテナイメージをプルできます。詳細については、「Amazon ECS タスク実行 IAMロール (p. 247)」を参照してください。

作成したシークレットにアクセスできるように、インラインポリシーとして以下のアクセス許可をタスクの実行ロールに手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。

• secretsmanager:GetSecretValue

• kms:Decrypt— カスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。そのカスタムキーの ARN はリソースとして追加されている必要があります。

アクセス許可を追加するインラインポリシーの例を以下に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ]}

プライベートレジストリの認証の有効化基本的なシークレットを作成するには

プライベートレジストリ認証情報のシークレットを作成するには、AWS Secrets Manager を使用します。

1. AWS Secrets Manager コンソール (https://console.aws.amazon.com/secretsmanager/) を開きます。2. [新しいシークレットの保存] を選択します。3. [Select secret type (シークレットタイプの選択)] で、[Other type of secrets (他の種類のシークレット)]

を選択します。

API バージョン 2014-11-1390

Amazon ECS AWS Fargate 用ユーザーガイドプライベートレジストリの認証の有効化

4. [プレーンテキスト] を選択し、次の形式でプライベートレジストリ認証情報を入力します。

{ "username" : "privateRegistryUsername", "password" : "privateRegistryPassword"}

5. [次] を選択します。6. [Secret name (シークレット名)] に、オプションのパスと名前 (例: production/

MyAwesomeAppSecret または development/TestSecret) を入力し、[次] を選択します。オプションで説明を追加することもできます。後でこのシークレットを思い出すのに役立ちます。

シークレット名に使用できるのは、ASCII 文字、数字、または次の記号のみです: /_+=.@-7. (オプション) この時点で、シークレットのローテーションを設定することができます。この手順で

は、[Disable automatic rotation (自動ローテーションを無効化)] は無効のままにし、[次] を選択します。

新規または既存のシークレットでローテーションを設定する方法については、「AWS SecretsManager シークレットの更新」を参照してください。

8. 設定を確認し、次に [Store secret (シークレットの保存)] を選択して入力した内容すべてを SecretsManager の新しいシークレットとして保存します。

プライベートレジストリ認証を使用するタスク定義を作成するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで、[Task Definitions] を選択します。3. [Task Definitions] ページで、[Create new Task Definition] を選択します。4. [Select launch type compatibility (起動タイプの互換性の選択)] ページで、タスクで使用する起動タイ

プを選択し、[次のステップ] を選択します。5. [Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。 最大 255 文字の英字 (大

文字と小文字)、数字、ハイフン、アンダースコアを使用できます。6. [Task execution role (タスク実行ロール)] で、既存のタスク実行ロールを選択するか、[Create new

role (新しいロールの作成)] を選択して作成します。このロールを使用して、タスクのプライベートイメージをプルする Amazon ECS を認証することができます。詳細については、「プライベートレジストリの認証には IAM アクセス許可が必須 (p. 90)」を参照してください。

Important

[Task execution role (実行ロール)] フィールドが表示されない場合は、[Configure via JSON(JSON による設定)] を選択し、[executionRoleArn] フィールドを手動で追加して、タスク実行ロールを指定します。その構文を以下に示します。

"executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"

7. タスク定義で作成するコンテナごとに、以下のステップを実行します。

a. [Container Definitions (コンテナの定義)] セクションで、[Add container (コンテナの定義)] を選択します。

b. [Container name (コンテナ名)] に、コンテナの名前を入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

c. [イメージ] に、イメージ名、またはプライベートイメージのパスを入力します。 最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。

d. [Private repository authentication (プライベートレポジトリの認証)] オプションを選択します。e. [Secrets manager ARN (シークレットマネージャー ARN)] に、以前作成したシークレットの完全

な Amazon リソースネーム (ARN) を入力します。値は、20~2048 文字で指定します。

API バージョン 2014-11-1391

Amazon ECS AWS Fargate 用ユーザーガイド機密データの指定

f. コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration (詳細コンテナ設定)] メニューより設定できます。詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

g. [Add] を選択します。8. コンテナが追加されたら、[作成] を選択します。

機密データの指定Amazon ECS を使用すると、AWS Secrets Manager シークレットまたは AWS Systems Manager パラメータストアのパラメータに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。

以下の方法でシークレットをコンテナに公開できます。

• 機密データを環境変数としてコンテナに挿入するには、secrets コンテナ定義パラメータを使用します。

• コンテナのログ設定内の機密情報を参照するには、secretOptions コンテナ定義パラメータを使用します。

トピック• Secrets Manager を使用した機密データの指定 (p. 92)• Systems Manager パラメータストアを使用した機密データの指定 (p. 98)

Secrets Manager を使用した機密データの指定Amazon ECS を使用すると、AWS Secrets Manager シークレットに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。Secrets Manager シークレットに保存された機密データは、環境変数として、またはログ設定の一部としてコンテナに公開できます。

シークレットを環境変数として挿入する場合は、挿入するシークレットの JSON キーまたはバージョンを指定できます。このプロセスは、コンテナに公開される機密データの制御に役立ちます。シークレットのバージョニングの詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Manager の主な用語と概念」を参照してください。

トピック• Secrets Manager を使用した機密データの指定に関する考慮事項 (p. 92)• Amazon ECS シークレットで必須の IAM アクセス許可 (p. 93)• 環境変数としての機密データの挿入 (p. 93)• ログ設定への機密データの挿入 (p. 96)• 機密データを参照するタスク定義の作成 (p. 97)

Secrets Manager を使用した機密データの指定に関する考慮事項Secrets Manager を使用してコンテナの機密データを指定する場合は、以下を考慮する必要があります。

• Fargate 起動タイプを使用するタスクでは、以下を考慮する必要があります。• シークレットの内容全体を環境変数として挿入することのみがサポートされています。現時点では、

特定の JSON キーやバージョンの指定はサポートされていません。

API バージョン 2014-11-1392

Amazon ECS AWS Fargate 用ユーザーガイドSecrets Manager を使用する

• シークレットの内容全体を環境変数として挿入したり、ログ設定にシークレットを挿入したりするには、プラットフォームバージョン 1.3.0 以降を使用する必要があります。詳細については、AWSFargate プラットフォームのバージョン (p. 16) を参照してください。

• 重要なデータは、コンテナが最初に開始されたときにコンテナに挿入されます。シークレットを後で更新またはローテーションすると、コンテナには更新された値が自動的に送信されなくなります。この場合は、新しいタスクを起動する必要があります。または、タスクがサービスの一部である場合は、サービスを更新し、[新しいデプロイの強制] オプションを使用して、新しいタスクの起動をサービスに強制できます。

Amazon ECS シークレットで必須の IAM アクセス許可この機能を使用するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。このロールにより、必要な Secrets Manager リソースをコンテナエージェントがプルできます。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

作成した Secrets Manager シークレットへのアクセスを許可するには、以下のアクセス許可をインラインポリシーとしてタスクの実行ロールに手動で追加します。詳細については、「IAM ポリシーの追加と削除」を参照してください。

• secretsmanager:GetSecretValue – Secrets Manager シークレットを参照する場合に必須です。• kms:Decrypt – シークレットでカスタムの KMS キーを使用し、デフォルトのキーを使用しない場合に

のみ必須です。そのカスタムキーの ARN はリソースとして追加されている必要があります。

次の例のインラインポリシーでは必須のアクセス許可を追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ]}

環境変数としての機密データの挿入コンテナの定義内では、以下を指定できます。

• コンテナに設定する環境変数の名前が含まれている secrets オブジェクト• Secrets Manager シークレットの Amazon リソースネーム (ARN)• コンテナに渡す機密データが含まれている追加のパラメータ

次の例は、Secrets Manager シークレットに指定する必要がある完全な構文を示しています。

arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id

API バージョン 2014-11-1393

Amazon ECS AWS Fargate 用ユーザーガイドSecrets Manager を使用する

Important

AWS Fargate を使用している場合、タスク定義でシークレットの完全な ARN を指定することのみがサポートされます。現時点では、特定の JSON キーやバージョンの指定はサポートされていません。

次のセクションでは、追加のパラメータについて説明します。追加のパラメータはオプションですが、これらを使用しないでデフォルト値を使用する場合は、コロン (:) を含める必要があります。以下の例でより詳細なコンテキストを示します。

json-key

キーと値のペアのキーの名前を指定します。値は設定する環境変数の値です。JSON 形式の値のみがサポートされます。JSON キーを指定しないと、シークレットの内容全体が使用されます。

version-stage

使用するシークレットのバージョンのステージングラベルを指定します。バージョンのステージングラベルを指定した場合、バージョン ID は指定できません。バージョンのステージを指定しないと、デフォルトの動作として、AWSCURRENT ステージングラベルのシークレットが取得されます。

ステージングラベルは、シークレットが更新またはローティションされたときに、シークレットのさまざまなバージョンを追跡するために使用します。シークレットの各バージョンには、1 つ以上のステージングラベルと 1 つの ID があります。詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Manager の主な用語と概念」を参照してください。

version-id

使用するシークレットのバージョンの固有 ID を指定します。バージョン ID を指定した場合、バージョンのステージングラベルは指定できません。バージョン ID を指定しないと、デフォルトの動作として、AWSCURRENT ステージングラベルのシークレットが取得されます。

バージョン ID は、シークレットが更新またはローティションされたときに、シークレットのさまざまなバージョンを追跡するために使用します。シークレットの各バージョンには ID があります。詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Manager の主な用語と概念」を参照してください。

Secrets Manager シークレットを作成し、それを環境変数としてコンテナに挿入するための詳細なチュートリアルについては、「チュートリアル: Secrets Manager シークレットを使用した機密データの指定 (p. 316)」を参照してください。

コンテナの定義の例

以下の例では、コンテナの定義で Secrets Manager シークレットを参照する方法を示します。

Example シークレット全体を参照する

次に示すのは、Secrets Manager シークレットのテキスト全体を参照するときの形式を示すタスク定義のスニペットです。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }]}

API バージョン 2014-11-1394

Amazon ECS AWS Fargate 用ユーザーガイドSecrets Manager を使用する

Example シークレット内の特定のキーを参照する

次に示すのは、シークレットの内容と、シークレットに関連付けられているバージョンのステージングラベルおよびバージョン ID を表示する get-secret-value コマンドの出力例です。

{ "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf", "Name": "appauthexample", "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c", "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}", "VersionStages": [ "AWSCURRENT" ], "CreatedDate": 1581968848.921}

前のコンテナの定義の出力で特定のキーを参照するには、ARN の最後にキー名を指定します。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }]}

Example 特定のシークレットバージョンを参照する

次に示すのは、シークレットの暗号化されていない内容と、シークレットのすべてのバージョンのメタデータを表示する describe-secret コマンドの出力例です。

{ "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf", "Name": "appauthexample", "Description": "Example of a secret containing application authorization data.", "RotationEnabled": false, "LastChangedDate": 1581968848.926, "LastAccessedDate": 1581897600.0, "Tags": [], "VersionIdsToStages": { "871d9eca-18aa-46a9-8785-981dd39ab30c": [ "AWSCURRENT" ], "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [ "AWSPREVIOUS" ] }}

前のコンテナの定義の出力で特定のバージョンのステージングラベルを参照するには、ARN の最後にキー名を指定します。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:"

API バージョン 2014-11-1395

Amazon ECS AWS Fargate 用ユーザーガイドSecrets Manager を使用する

}] }]}

前のコンテナの定義の出力で特定のバージョン ID を参照するには、ARN の最後にキー名を指定します。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }]}

Example シークレットの特定のキーおよびバージョンのステージングラベルを参照する

シークレット内の特定のキーと特定のバージョンのステージングラベルの両方を参照する方法は次のとおりです。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:" }] }]}

特定のキーとバージョン ID を指定するには、次の構文を使用します。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }]}

ログ設定への機密データの挿入コンテナの定義内で logConfiguration を指定するときに、コンテナに設定するログドライバーオプションの名前と、コンテナに渡す機密データが含まれている Secrets Manager シークレットの ARN 全体を使用して secretOptions を指定できます。

以下に示すのは、Secrets Manager シークレットを参照するときの形式を示すタスク定義のスニペットです。

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{

API バージョン 2014-11-1396

Amazon ECS AWS Fargate 用ユーザーガイドSecrets Manager を使用する

"name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }]}

機密データを参照するタスク定義の作成Amazon ECS コンソールを使用して、Secrets Manager シークレットを参照するタスク定義を作成できます。

シークレットを指定するタスク定義を作成するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク

定義の作成)] の順に選択します。3. [Select launch type compatibility (起動タイプの互換性の選択)] ページで、タスクの起動タイプを選択

してから [Next step (次の手順)] を選択します。4. [Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。 最大 255 文字の英字 (大

文字と小文字)、数字、ハイフン、アンダースコアを使用できます。5. [Task execution role (タスク実行ロール)] で、既存のタスク実行ロールを選択するか、[Create new

role (新しいロールの作成)] を選択して作成します。このロールを使用して、タスクのプライベートイメージをプルする Amazon ECS を認証することができます。詳細については、「プライベートレジストリの認証には IAM アクセス許可が必須 (p. 90)」を参照してください。

Important

[Task execution role (実行ロール)] フィールドが表示されない場合は、[Configure via JSON(JSON による設定)] を選択し、[executionRoleArn] フィールドを手動で追加して、タスク実行ロールを指定します。次のコードは構文を示しています。

"executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"

6. タスク定義で作成するコンテナごとに、以下のステップを実行します。

a. [Container Definitions (コンテナの定義)] で [Add container (コンテナの追加)] を選択します。b. [Container name (コンテナ名)] に、コンテナの名前を入力します。 最大 255 文字の英字 (大文字

と小文字)、数字、ハイフン、アンダースコアを使用できます。c. [イメージ] に、イメージ名、またはプライベートイメージのパスを入力します。 最大 255 文字の

英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。d. [Advanced container configuration (詳細コンテナ設定)] を展開します。e. 環境変数として挿入する機密データの場合は、[環境] の [環境変数] で、以下のフィールドに入力

します。

i. [Key (キー)] に、コンテナ内で設定する環境変数の名前を入力します。これは、コンテナの定義の secrets セクションの name フィールドに相当します。

ii. [Value (値)] で、[ValueFrom] を選択します。[Add value (値の追加)] に、環境変数としてコンテナに渡すデータが含まれている Secrets Manager シークレットの ARN を入力します。

f. コンテナのログ設定で参照される機密データの場合は、[Storage and Logging (ストレージとログ記録)] の [Log configuration (ログ設定)] で、以下のフィールドに入力します。

i. [Auto-configure CloudWatch Logs (CloudWatch Logs の自動設定)] オプションをオフにします。

ii. [ログオプション] の [Key (キー)] に、設定するログ設定オプションの名前を入力します。

API バージョン 2014-11-1397

Amazon ECS AWS Fargate 用ユーザーガイドSystems Manager パラメータストアの使用

iii. [Value (値)] で、[ValueFrom] を選択します。[Add value (値の追加)] に、ログオプションとしてログ設定に渡すデータが含まれている Secrets Manager シークレットの ARN 全体を入力します。

g. コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration (詳細コンテナ設定)] メニューより設定できます。詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

h. [Add] を選択します。7. コンテナが追加されたら、[作成] を選択します。

Systems Manager パラメータストアを使用した機密データの指定Amazon ECS を使用すると、AWS Systems Manager パラメータストア パラメータに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。

トピック• Systems Manager パラメータストアを使用した機密データの指定に関する考慮事項 (p. 98)• Amazon ECS シークレットで必須の IAM アクセス許可 (p. 98)• 環境変数としての機密データの挿入 (p. 99)• ログ設定への機密データの挿入 (p. 99)• AWS Systems Manager パラメータストア パラメータの作成 (p. 100)• 機密データを参照するタスク定義の作成 (p. 101)

Systems Manager パラメータストアを使用した機密データの指定に関する考慮事項Systems Manager パラメータストアのパラメータを使用してコンテナの機密データを指定する場合は、以下を考慮する必要があります。

• Fargate 起動タイプを使用するタスクの場合、この機能にはタスクでプラットフォームバージョン 1.3.0以降を使用する必要があります。詳細については、AWS Fargate プラットフォームのバージョン (p. 16)を参照してください。

• 重要なデータは、コンテナが最初に開始されたときにコンテナに挿入されます。シークレットまたはParameter Store パラメータが後で更新またはローテーションされたときに、コンテナは更新された値を自動的に受け取りません。この場合は、新しいタスクを起動する必要があります。または、タスクがサービスの一部である場合は、サービスを更新し、[新しいデプロイの強制] オプションを使用して、新しいタスクの起動をサービスに強制できます。

Amazon ECS シークレットで必須の IAM アクセス許可この機能を使用するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。これにより、コンテナエージェントは必要な AWS Systems Manager リソースをプルすることを許可されます。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

作成した AWS Systems Manager パラメータストア パラメータにアクセスできるように、タスク実行ロールに以下のアクセス許可をインラインポリシーとして手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。

API バージョン 2014-11-1398

Amazon ECS AWS Fargate 用ユーザーガイドSystems Manager パラメータストアの使用

• ssm:GetParameters — Systems Manager パラメータストアのパラメータをタスク定義で参照する場合は必須です。

• secretsmanager:GetSecretValue — Secrets Manager シークレットを直接参照するか、SystemsManager パラメータストアのパラメータがタスク定義で Secrets Manager シークレットを参照している場合は必須です。

• kms:Decrypt— シークレットでカスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須です。そのカスタムキーの ARN はリソースとして追加されている必要があります。

次の例のインラインポリシーでは必須アクセス許可を追加しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter_name>", "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ]}

環境変数としての機密データの挿入コンテナの定義内で、コンテナに設定する環境変数の名前と、コンテナに渡す機密データが含まれているSystems Manager パラメータストアのパラメータの ARN 全体を使用して secrets を指定できます。

以下に示すのは、Systems Manager パラメータストアのパラメータを参照するときの形式を示すタスク定義のスニペットです。起動するタスクと同じリージョンに Systems Manager パラメータストアのパラメータが存在する場合は、パラメータの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }]}

ログ設定への機密データの挿入コンテナの定義内で logConfiguration を指定するときに、コンテナに設定するログドライバーオプションの名前と、コンテナに渡す機密データが含まれている Systems Manager パラメータストアのパラメータの ARN 全体を使用して secretOptions を指定できます。

Important

起動するタスクと同じリージョンに Systems Manager パラメータストアのパラメータが存在する場合は、パラメータの完全な ARN または名前のどちらも使用できます。別のリージョンにパラメータが存在する場合は、完全な ARN を指定する必要があります。

API バージョン 2014-11-1399

Amazon ECS AWS Fargate 用ユーザーガイドSystems Manager パラメータストアの使用

以下に示すのは、Systems Manager パラメータストアのパラメータを参照するときの形式を示すタスク定義のスニペットです。

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter:parameter_name" }] }] }]}

AWS Systems Manager パラメータストア パラメータの作成AWS Systems Manager コンソールを使用して、機密データ用の Systems Manager パラメータストア パラメータを作成できます。詳細については、AWS Systems Manager ユーザーガイドの「チュートリアル:コマンドでパラメータを作成して使用する (コンソール)」を参照してください。

パラメータストア パラメータを作成するには

1. AWS Systems Manager コンソール (https://console.aws.amazon.com/systems-manager/) を開きます。

2. ナビゲーションペインで [Parameter Store (パラメータストア)]、[Create parameter (パラメータの作成)] の順に選択します。

3. [Name (名前)] に、階層とパラメータ名を入力します。たとえば、test/database_password と入力します。

4. [Description (説明)] に説明を入力します (省略可能)。5. [Type] として、[String]、[StringList]、[SecureString] のいずれかを選択します。

Note

• [SecureString] を選択すると [KMS Key ID (KMS キー ID)] フィールドが表示されます。KMS CMK ID、KMS CMK ARN、エイリアス名、またはエイリアス ARN が指定されていない場合、システムでは Systems Manager のデフォルト KMS CMK である alias/aws/ssm が使用されます。このキーを使用しない場合は、カスタムキーを選択します。詳細については、AWS Systems Manager ユーザーガイド の「Secure String パラメータを使用する」を参照してください。

• コンソールで key-id パラメータにカスタム KMS CMK エイリアス名またはエイリアスARN のいずれかを指定して Secure String パラメータを作成する場合は、そのエイリアスの前にプレフィックス alias/ を指定する必要があります。ARN の例を次に示します。

arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

エイリアス名の例を次に示します。

alias/MyAliasName

6. [Value (値)] に値を入力します。たとえば、MyFirstParameter と指定します。[SecureString] を選択している場合、入力した値はマスクされます。

7. [Create parameter] を選択します。

API バージョン 2014-11-13100

Amazon ECS AWS Fargate 用ユーザーガイドSystems Manager パラメータストアの使用

機密データを参照するタスク定義の作成Amazon ECS コンソールを使用して、Systems Manager パラメータストア パラメータを参照するタスク定義を作成できます。

シークレットを指定するタスク定義を作成するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク

定義の作成)] の順に選択します。3. [Select launch type compatibility (起動タイプの互換性の選択)] ページで、タスクの起動タイプを選択

してから [Next step (次の手順)] を選択します。4. [Task Definition Name (タスク定義名)] に、タスク定義の名前を入力します。 最大 255 文字の英字 (大

文字と小文字)、数字、ハイフン、アンダースコアを使用できます。5. [Task execution role (タスク実行ロール)] で、既存のタスク実行ロールを選択するか、[Create new

role (新しいロールの作成)] を選択して作成します。このロールを使用して、タスクのプライベートイメージをプルする Amazon ECS を認証することができます。詳細については、「プライベートレジストリの認証には IAM アクセス許可が必須 (p. 90)」を参照してください。

Important

[Task execution role (実行ロール)] フィールドが表示されない場合は、[Configure via JSON(JSON による設定)] を選択し、[executionRoleArn] フィールドを手動で追加して、タスク実行ロールを指定します。次のコードは構文を示しています。

"executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"

6. タスク定義で作成するコンテナごとに、以下のステップを実行します。

a. [Container Definitions (コンテナの定義)] で [Add container (コンテナの追加)] を選択します。b. [Container name (コンテナ名)] に、コンテナの名前を入力します。 最大 255 文字の英字 (大文字

と小文字)、数字、ハイフン、アンダースコアを使用できます。c. [イメージ] に、イメージ名、またはプライベートイメージのパスを入力します。 最大 255 文字の

英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。d. [Advanced container configuration (詳細コンテナ設定)] を展開します。e. 環境変数として挿入する機密データの場合は、[環境] の [環境変数] で、以下のフィールドに入力

します。

i. [Key (キー)] に、コンテナ内で設定する環境変数の名前を入力します。これは、コンテナの定義の secrets セクションの name フィールドに相当します。

ii. [Value (値)] で、[ValueFrom] を選択します。[Add value (値の追加)] に、環境変数としてコンテナに渡すデータが含まれている AWS Systems Manager パラメータストアのパラメータのARN 全体を入力します。

Note

起動しているタスクと同じリージョンに Systems Manager パラメータストアのパラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

f. シークレットをコンテナのログ設定で参照する場合は、[Storage and Logging (ストレージとログ記録)] の [Log configuration (ログ設定)] で、以下のフィールドに入力します。

i. [Auto-configure CloudWatch Logs (CloudWatch Logs の自動設定)] オプションをオフにします。

ii. [ログオプション] の [Key (キー)] に、設定するログ設定オプションの名前を入力します。

API バージョン 2014-11-13101

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の例

iii. [Value (値)] で、[ValueFrom] を選択します。[Add value (値の追加)] に、ログオプションとしてログ設定に渡すデータが含まれている AWS Systems Manager パラメータストアのパラメータの名前または ARN 全体を入力します。

Note

起動しているタスクと同じリージョンに Systems Manager パラメータストアのパラメータが存在する場合は、シークレットの完全な ARN または名前のどちらも使用できます。パラメータが別のリージョンに存在する場合は、完全な ARN を指定する必要があります。

g. コンテナの定義で使用するために、残りの必須のフィールドとオプションのフィールドに入力します。その他のコンテナの定義パラメータは、[Advanced container configuration (詳細コンテナ設定)] メニューより設定できます。詳細については、「タスク定義パラメータ (p. 38)」を参照してください。

h. [Add] を選択します。7. コンテナが追加されたら、[作成] を選択します。

タスク定義の例このセクションでは、独自のタスク定義の作成を開始するために使用できるタスク定義の例を提供します。詳細については、「タスク定義パラメータ (p. 38)」および「タスク定義の作成 (p. 33)」を参照してください。

その他のタスク定義の例については、GitHub の AWS サンプルタスク定義を参照してください。

トピック• 例: ウェブサーバー (p. 102)• 例: splunk ログドライバー (p. 103)• 例: fluentd ログドライバー (p. 103)• 例: gelf ログドライバー (p. 104)• 例: コンテナの依存関係 (p. 104)

例: ウェブサーバー以下は、ウェブサーバーをセットアップする Fargate 起動タイプを使用するタスク定義の例です。

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs",

API バージョン 2014-11-13102

Amazon ECS AWS Fargate 用ユーザーガイド例: splunk ログドライバー

"options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ]}

例: splunk ログドライバー以下の例では、タスク定義で、リモートサービスにログを送信する splunk ログドライバーを使用する方法を示しています。Splunk トークンパラメータは、機密データとして扱われる可能性があるため、シークレットのオプションとして指定しています。詳細については、「機密データの指定 (p. 92)」を参照してください。

"containerDefinitions": [{ "logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080", "tag": "tag_name", }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:splunk-token-KnrBkD"}],

例: fluentd ログドライバー以下の例では、タスク定義で、リモートサービスにログを送信する fluentd ログドライバーを使用する方法を示しています。fluentd-address 値は機密データとして扱われる可能性があるため、シークレットのオプションとして指定しています。詳細については、「機密データの指定 (p. 92)」を参照してください。

"containerDefinitions": [{ "logConfiguration": { "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address",

API バージョン 2014-11-13103

Amazon ECS AWS Fargate 用ユーザーガイド例: gelf ログドライバー

"valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:fluentd-address-KnrBkD" }] }, "entryPoint": [], "portMappings": [{ "hostPort": 80, "protocol": "tcp", "containerPort": 80 }, { "hostPort": 24224, "protocol": "tcp", "containerPort": 24224 }]}],

例: gelf ログドライバー以下の例では、タスク定義で、Gelf ログを入力として受け取る Logstash を実行しているリモートホストにログを送信する gelf ログドライバーを使用する方法を示しています。詳細については、「logConfiguration (p. 50)」を参照してください。

"containerDefinitions": [{ "logConfiguration": { "logDriver": "gelf", "options": { "gelf-address": "udp://logstash-service-address:5000", "tag": "gelf task demo" } }, "entryPoint": [], "portMappings": [{ "hostPort": 5000, "protocol": "udp", "containerPort": 5000 }, { "hostPort": 5000, "protocol": "tcp", "containerPort": 5000 } ]}],

例: コンテナの依存関係この例では、コンテナの依存関係が指定されている複数のコンテナを含むタスク定義の構文を示しています。次のタスク定義では、envoy コンテナは app コンテナ が開始される前に必要なコンテナのヘルスチェックパラメータにより決定されている正常なステータスに到達する必要があります。詳細については、「コンテナの依存関係 (p. 55)」を参照してください。

{ "family": "appmesh-gateway", "proxyConfiguration":{ "type": "APPMESH", "containerName": "envoy", "properties": [ { "name": "IgnoredUID",

API バージョン 2014-11-13104

Amazon ECS AWS Fargate 用ユーザーガイド例: コンテナの依存関係

"value": "1337" }, { "name": "ProxyIngressPort", "value": "15000" }, { "name": "ProxyEgressPort", "value": "15001" }, { "name": "AppPorts", "value": "9080" }, { "name": "EgressIgnoredIPs", "value": "169.254.170.2,169.254.169.254" } ] }, "containerDefinitions": [ { "name": "app", "image": "application_image", "portMappings": [ { "containerPort": 9080, "hostPort": 9080, "protocol": "tcp" } ], "essential": true, "dependsOn": [ { "containerName": "envoy", "condition": "HEALTHY" } ] }, { "name": "envoy", "image": "840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.3.0-prod", "essential": true, "environment": [ { "name": "APPMESH_VIRTUAL_NODE_NAME", "value": "mesh/meshName/virtualNode/virtualNodeName" }, { "name": "ENVOY_LOG_LEVEL", "value": "info" } ], "healthCheck": { "command": [ "CMD-SHELL", "echo hello" ], "interval": 5, "timeout": 2, "retries": 3 } } ], "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",

API バージョン 2014-11-13105

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義の更新

"networkMode": "awsvpc"}

タスク定義の更新タスク定義を更新するには、タスク定義リビジョンを作成します。サービスでタスク定義を使用する場合、更新されたタスク定義を使用するようサービスを更新する必要があります。

タスク定義リビジョンを作成するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーから、タスク定義を含むリージョンを選択します。3. ナビゲーションペインで、[Task Definitions] を選択します。4. [Task Definitions] ページで、変更するタスク定義の左側にあるボックスをオンにし、[Create new

revision] を選択します。5. [Create new revision of Task Definition] ページで変更を加えます。たとえば、既存のコンテナ定義 (コ

ンテナイメージ、メモリ制限、ポートマッピングなど) を変更する場合は、コンテナを選択して変更を加えてから、[Update] を選択します。

6. 情報を確認し、[Create] を選択します。7. サービスでタスク定義を使用する場合、更新されたタスク定義でサービスを更新します。詳細につい

ては、「サービスの更新 (p. 147)」を参照してください。

タスク定義リビジョンの登録解除Amazon ECS で特定のタスク定義が不要になった場合は、そのタスク定義リビジョンを登録解除すると、タスクの実行やサービスの更新時、タスク定義リビジョンは ListTaskDefinition API コールやコンソールに表示されなくなります。

タスク定義リビジョンは登録解除されると、すぐに INACTIVE とマークされます。INACTIVE のタスク定義リビジョンを参照する既存のタスクとサービスは、中断することなく実行され続けます。また、INACTIVE のタスク定義リビジョンを参照する既存のサービスは、サービスの必要数を変更することで、引き続きスケールアップ/ダウンできます。

INACTIVE のタスク定義リビジョンを使用して新しいタスクを実行したり、新しいサービスを作成したりすることはできません。また、INACTIVE タスク定義リビジョンを参照するように既存のサービスを更新することはできません (登録解除後 10 分経過するまでは、これらの制限が有効にならないことがあります)。

Note

現時点では、INACTIVE タスク定義リビジョンはアカウント内で無期限に検出可能な状態で残されます。ただし、この動作は今後変更される場合があるため、関連付けられたタスクとサービスのライフサイクルを超えて保持される INACTIVE タスク定義リビジョンに依存しないようにしてください。

以下の手順を使用して、タスク定義リビジョンを登録解除します。

タスク定義リビジョンを登録解除するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーから、タスク定義を含むリージョンを選択します。3. ナビゲーションペインで、[Task Definitions] を選択します。

API バージョン 2014-11-13106

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義リビジョンの登録解除

4. [Task Definitions] ページで、登録解除する 1 つ以上のタスク定義リビジョンを含むタスク定義ファミリーを選択します。

5. [Task Definition Name] ページで、登録解除する各タスク定義リビジョンの左側にあるボックスを選択します。

6. [Actions]、[Deregister] の順に選択します。7. [Deregister Task Definition] ウィンドウの情報を確認し、[Deregister] を選択して終了します。

API バージョン 2014-11-13107

Amazon ECS AWS Fargate 用ユーザーガイド

アカウント設定Amazon ECS は、次のアカウント設定を提供します。これにより、特定の機能をオプトインまたはオプトアウトできます。

Amazon リソースネーム (ARN) と ID

リソース名:serviceLongArnFormat、taskLongArnFormat、containerInstanceLongArnFormat

Amazon ECS で、Amazon リソースネーム (ARN) の新しいフォーマットと、Amazon ECS サービス、タスク、コンテナインスタンスのリソース ID が導入されました。このリソースタイプのリソースへのタグ付けなどの機能を使用するには、各リソースタイプの新しいフォーマットをオプトインする必要があります。詳細については、「Amazon リソースネーム (ARN) と ID (p. 109)」を参照してください。

CloudWatch Container Insights

リソース名: containerInsights

CloudWatch Container Insights は、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集計、要約します。このメトリクスには、CPU、メモリ、ディスク、ネットワークなどのリソース使用率が含まれます。Container Insights では、問題の迅速な特定と解決に役立つ、コンテナの再起動失敗などの診断情報も提供されます。また、Container Insights が収集するメトリクスには CloudWatch アラームを設定できます。詳細については、「Amazon ECS CloudWatchContainer Insights (p. 207)」を参照してください。

containerInsights アカウント設定をオプトインすると、クラスターの作成時に無効にしない限り、オプトイン後に作成されたすべての新しいクラスターで Container Insights が有効になります。個々のクラスターは、作成時に、または UpdateClusterSettings API を使用して有効または無効にすることができます。

各リージョンで、アカウントレベルまたは特定の IAM ユーザーまたはロールで、各アカウント設定をオプトインまたはオプトアウトすることができます。オプトインまたはオプトアウトが利用できるアカウント設定には、新しい ARN とリソース ID 形式、および awsvpc トランキング機能が含まれます。

サポートされているシナリオは以下のとおりです。

• IAM ユーザーまたはロールは個々のアカウントに対してオプトインまたはオプトアウトが可能である。• IAM ユーザーまたはロールはアカウントのすべてのユーザーに対してデフォルトのオプトインまたはオ

プトアウト設定を定義できる。• ルートユーザーは、アカウントのいずれの IAM ロールまたはユーザーについても、オプトインまたはオ

プトアウトすることができます。ルートユーザーのアカウント設定が変更されると、個別にアカウント設定が選択されていなかったすべての IAM ユーザーとロールに対してデフォルト値が設定されます。

オプトインおよびオプトアウトオプションは、アカウント設定ごとに選択する必要があります。リソースの ARN とリソース ID の形式は、そのリソースを作成した IAM ユーザーまたはロールのオプトインステータスによって定義されます。

オプトインした後に起動されたリソースだけが、新形式の ARN とリソース ID、を受け取ります。既存のリソースは、いずれも影響を受けません。Amazon ECS のサービスおよびタスクを新形式の ARN とリソース ID に移行するためには、そのサービスまたはタスクを作成し直す必要があります。コンテナインス

API バージョン 2014-11-13108

Amazon ECS AWS Fargate 用ユーザーガイドAmazon リソースネーム (ARN) と ID

タンスを新形式の ARN およびリソース ID に移行するには、そのコンテナインスタンスを空にしてから、新規コンテナインスタンスをクラスターに登録する必要があります。

Note

Amazon ECS サービスが 2018 年 11 月 16 日以降に作成されていて、そのサービスを作成したIAM ユーザーまたはロールがタスクの新形式をオプトインしている場合、そのサービスによって起動されたタスクだけが新形式の ARN とリソース ID になります。

トピック• Amazon リソースネーム (ARN) と ID (p. 109)• アカウント設定の表示 (p. 110)• アカウント設定の変更 (p. 111)

Amazon リソースネーム (ARN) と IDAmazon ECS リソースの作成時に、各リソースには一意の Amazon リソースネーム (ARN) と一意のリソース識別子 (ID) が割り当てられます。コマンドラインツールまたは Amazon ECS API を使用してAmazon ECS を操作する場合に、特定のコマンドではリソースの ARN または ID が必要です。たとえば、タスクを停止するために stop-task AWS CLI コマンドを使用する場合は、そのコマンドでタスクの ARNまたは ID を指定する必要があります。

新しい Amazon リソースネーム (ARN) およびリソース ID のオプトインおよびオプトアウト機能は、リージョンごとに提供されます。新規作成されたアカウントでは、デフォルトでオプトアウトされます。

新形式の Amazon リソースネーム (ARN) およびリソース ID はいつでもオプトインまたはオプトアウトできます。新形式をオプトインした後は、新規作成するすべてのリソースは新形式で作成されます。

Note

リソース ID が作成後に変更することはありません。したがって、新形式をオプトインまたはオプトアウトしても、既存のリソース ID には影響しません。

以下のセクションでは、ARN およびリソース ID 形式がどのように変更されているかについて説明します。新しい形式への移行の詳細については、「Amazon Elastic Container Service のよくある質問」を参照してください。

Amazon リソースネーム (ARN) 形式

一部のリソースにはわかりやすい名前があります (production という名前のサービスなど)。それ以外の場合は、Amazon リソースネーム (ARN) 形式を使用してリソースを指定する必要があります。AmazonECS のタスク、サービス、およびコンテナインスタンスの新しい ARN 形式には、クラスター名が含まれます。新しい ARN 形式をオプトインする方法の詳細については、「アカウント設定の変更 (p. 111)」を参照してください。

各リソースタイプでの現在の (旧) 形式と新しい形式を次の表に示しています。

リソースタイプ ARN

コンテナインスタンス

旧: arn:aws:ecs:region:aws_account_id:container-instance/container-instance-id

新: arn:aws:ecs:region:aws_account_id:container-instance/cluster-name/container-instance-id

API バージョン 2014-11-13109

Amazon ECS AWS Fargate 用ユーザーガイドアカウント設定の表示

リソースタイプ ARN

Amazon ECSサービス

旧: arn:aws:ecs:region:aws_account_id:service/service-name

新: arn:aws:ecs:region:aws_account_id:service/cluster-name/service-name

Amazon ECS タスク

旧: arn:aws:ecs:region:aws_account_id:task/task-id

新: arn:aws:ecs:region:aws_account_id:task/cluster-name/task-id

リソース ID の長さ

リソース ID は文字と数字の一意の組み合わせです。新しいリソース ID 形式には、Amazon ECS タスクおよびコンテナインスタンス用の短い ID が含まれます。古いリソース ID 形式の長さは 36 文字でした。新しい ID は 32 文字の形式で、ハイフンは含まれません。新しい リソース ID 形式をオプトインする方法の詳細については、「アカウント設定の変更 (p. 111)」を参照してください。

アカウント設定の表示AWS マネジメントコンソール および AWS CLI ツールを使用して、新形式の ARN と ID、をサポートしているリソースタイプを表示できます。

コンソールを使用してアカウント設定を表示するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. 画面上部にあるナビゲーションバーで、アカウント設定を表示するリージョンを選択します。3. ダッシュボードで、[アカウント設定] を選択します。4. [Amazon ECS ARN とリソース ID の設定] および [CloudWatch Container Insights] セクションで、認

証された IAM ユーザーとロールの各アカウント設定のオプトインステータスを表示できます。

コマンドラインを使用して自分のアカウント設定を表示するには

自分のアカウント設定を表示するには、以下のいずれかのコマンドを使用します。

• list-account-settings (AWS CLI)

aws ecs list-account-settings --effective-settings --region us-east-1

• Get-ECSAccountSetting (AWS Tools for Windows PowerShell)

Get-ECSAccountSetting -EffectiveSetting true -Region us-east-1

コマンドラインを使用して特定の IAM ユーザーまたは IAM ロールのアカウント設定を表示するには

IAM ユーザー、IAM ロール、または root アカウントユーザーのアカウント設定を表示するには、以下のいずれかのコマンドで、その ARN を指定します。

• list-account-settings (AWS CLI)

aws ecs list-account-settings --principal-arn arn:aws:iam::aws_account_id:user/principalName --effective-settings --region us-east-1

API バージョン 2014-11-13110

Amazon ECS AWS Fargate 用ユーザーガイドアカウント設定の変更

• Get-ECSAccountSetting (AWS Tools for Windows PowerShell)

Get-ECSAccountSetting -PrincipalArn arn:aws:iam::aws_account_id:user/principalName -EffectiveSetting true -Region us-east-1

アカウント設定の変更AWS マネジメントコンソール と AWS CLI を使用して、アカウント設定を変更できます。

コンソールを使用してアカウント設定を変更するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. 画面上部にあるナビゲーションバーで、アカウント設定を変更するリージョンを選択します。3. ダッシュボードで、[アカウント設定] を選択します。4. [Amazon ECS ARN とリソース ID の設定]および [CloudWatch Container Insights] セクションで、認

証された IAM ユーザーとロールの各アカウント設定のチェックボックスをオンまたはオフにできます。終了したら、[保存] を選択します。

Important

IAM ユーザーと IAM ロールでこのアクションを実行するには ecs:PutAccountSetting アクセス許可が必要です。

5. 確認画面で [Confirm (確認)] を選択すると、選択内容が保存されます。

コマンドラインを使用してアカウントのすべての IAM ユーザーまたはロールのデフォルトアカウント設定を変更するには

アカウントのすべての IAM ユーザーまたはロールのデフォルトアカウント設定を変更するには、以下のいずれかのコマンドを使用します。これらの変更は、IAM ユーザーまたはロールがこれらの設定を明示的に上書きしない限り、AWS アカウント全体に適用されます。

• put-account-setting-default (AWS CLI)

aws ecs put-account-setting-default --name serviceLongArnFormat --value enabled --region us-east-2

また、このコマンドを使用して、すべてのタスク (taskLongArnFormat)、コンテナインスタンス(containerInstanceLongArnFormat) のアカウント設定を変更したり、コンテナインスタンス(awsvpcTrunking) の Elastic Network Interface (ENI) 制限の引き上げをオプトインしたりできます。そのためには、name パラメータを対応するリソースタイプに置き換えます。

• Write-ECSAccountSetting (AWS Tools for Windows PowerShell)

Write-ECSAccountSettingDefault -Name serviceLongArnFormat -Value enabled -Region us-east-1 -Force

コマンドラインを使用して自分の IAM ユーザーのアカウント設定を変更するには

自分の IAM ユーザーのアカウント設定を変更するには、以下のいずれかのコマンドを使用します。rootユーザーとしてこれらのコマンドを使用する場合、IAM ユーザーまたはロールがこれらの設定を明示的に上書きしない限り、変更は AWS アカウント全体に適用されます。

• put-account-setting (AWS CLI)

API バージョン 2014-11-13111

Amazon ECS AWS Fargate 用ユーザーガイドアカウント設定の変更

aws ecs put-account-setting --name serviceLongArnFormat --value enabled --region us-east-1

また、このコマンドを使用して、すべてのタスク (taskLongArnFormat)、コンテナインスタンス(containerInstanceLongArnFormat) のアカウント設定を変更したり、コンテナインスタンス(awsvpcTrunking) の Elastic Network Interface (ENI) 制限の引き上げをオプトインしたりできます。そのためには、name パラメータを対応するリソースタイプに置き換えます。

• Write-ECSAccountSetting (AWS Tools for Windows PowerShell)

Write-ECSAccountSetting -Name serviceLongArnFormat -Value enabled -Force

コマンドラインを使用して特定の IAM ユーザーまたは IAM ロールのアカウント設定を変更するには

特定の IAM ユーザーまたは IAM ロールのアカウント設定を変更するには、以下のいずれかのコマンドを使用し、リクエストで IAM ユーザー、IAM ロール、または root ユーザーの ARN を指定します。

• put-account-setting (AWS CLI)

aws ecs put-account-setting --name serviceLongArnFormat --value enabled --principal-arn arn:aws:iam::aws_account_id:user/principalName --region us-east-1

また、このコマンドを使用して、すべてのタスク (taskLongArnFormat)、コンテナインスタンス(containerInstanceLongArnFormat) のアカウント設定を変更したり、コンテナインスタンス(awsvpcTrunking) の Elastic Network Interface (ENI) 制限の引き上げをオプトインしたりできます。そのためには、name パラメータを対応するリソースタイプに置き換えます。

• Write-ECSAccountSetting (AWS Tools for Windows PowerShell)

Write-ECSAccountSetting -Name serviceLongArnFormat -Value enabled -PrincipalArn arn:aws:iam::aws_account_id:user/principalName -Region us-east-1 -Force

API バージョン 2014-11-13112

Amazon ECS AWS Fargate 用ユーザーガイド

Amazon ECS タスクのスケジューリング

Amazon Elastic Container Service (Amazon ECS) は、タスクとコンテナの柔軟なスケジュール機能を提供する、共有状態のオプティミスティックな並列システムです。Amazon ECS スケジューラは Amazon ECSAPI から提供される同じクラスターの状態情報を利用して、適切な配置を決定します。

Fargate 起動タイプを使用する各タスクには独自の分離境界があり、基盤となるカーネル、CPU リソース、メモリリソース、または Elastic Network Interface は別のタスクと共有されません。

Amazon ECS には、サービススケジューラ (長期実行タスクおよびアプリケーション用に)、タスクを手動で実行する機能 (バッチジョブまたは単一実行タスク用)、および Amazon ECS でクラスターにタスクを配置する機能があります。また、タスク配置戦略と制約事項を指定できます。これにより、複数のアベイラビリティーゾーンに分散させるなど、選択した設定に基づいてタスクを実行できるようになります。さらに、カスタムのスケジューラやサードパーティー製スケジューラを統合することもできます。

サービススケジューラ

サービススケジューラは、長期実行するステートレスサービスおよびアプリケーションに適しています。サービススケジューラにより、指定したスケジュール戦略が順守され、タスクが失敗したときに (基盤となるインフラストラクチャに何らかの理由で障害が発生した場合などに) タスクが再スケジュールされます。

利用できる 2 つのサービススケジューラ戦略があります。

• REPLICA — レプリカスケジュール戦略では、クラスター全体で必要数のタスクを配置して維持します。デフォルトでは、サービススケジューラによってタスクはアベイラビリティーゾーン間で分散されます。タスク配置の戦略と制約を使用すると、タスク配置の決定をカスタマイズできます。詳細については、「レプリカ (p. 123)」を参照してください。

• DAEMON — デーモンのスケジュール戦略では、指定したすべてのタスク配置制約を満たすクラスター内のアクティブなコンテナインスタンスごとに、1 つのタスクのみをデプロイします。この戦略を使用する場合、タスクの必要数や配置戦略、サービスの Auto Scaling ポリシーを指定する必要はありません。詳細については、「???」を参照してください。

Note

Fargate タスクは DAEMON スケジューリング戦略をサポートしていません。

サービススケジューラではオプションで、タスクが Elastic Load Balancing ロードバランサーに確実に登録されるようにできます。新しいタスク定義のデプロイや目的のタスクの実行数の変更など、サービススケジューラで保守されているサービスを更新できます。デフォルトでは、サービススケジューラはアベイラビリティーゾーン間でタスクをスプレッドしますが、タスク配置の戦略と制約を使用してタスク配置の決定をカスタマイズできます。詳細については、「Amazon ECS サービス (p. 122)」を参照してください。

手動でのタスク実行

RunTask アクションは、バッチジョブなど、実行されその後停止する処理に最適です。たとえば、キューに作業が入ったときに RunTask をコールする処理を入れることができます。タスクはキューから作業を引き出し、作業を実行して、その後終了します。RunTask を使用すると、デフォルトのタスク配置戦略でタスクをクラスター内にランダムに配置できます。これにより単一のインスタンスに不相応な数のタスクが割り当てられる可能性を最小限にできます。また、RunTask を使用して、スケジューラがタスク配置戦略と制約を使用してタスクを配置する方法をカスタマイズできます。詳細については、Amazon ElasticContainer Service API Referenceの「タスクの実行 (p. 114)」および「RunTask」を参照してください。

API バージョン 2014-11-13113

Amazon ECS AWS Fargate 用ユーザーガイドタスクの実行

cron ライクなスケジュールでのタスクの実行

バックアップオペレーションやログスキャンなど、クラスター内で一定間隔で実行するタスクがある場合は、Amazon ECS コンソールを使用して、指定した時間にクラスターで 1 つ以上のタスクを実行するCloudWatch イベント ルールを作成できます。スケジュールされたイベントルールは、特定の間隔 (N 分、時間、日ごとに実行) に設定できます。または、より複雑なスケジュールに設定する場合は、cron 式を使用することもできます。詳細については、「タスクのスケジューリング (cron) (p. 116)」を参照してください。

コンテンツ• タスクの実行 (p. 114)• タスクのスケジューリング (cron) (p. 116)• タスクのリタイア (p. 119)• Fargate タスクリサイクル (p. 120)

タスクの実行特定の状況では、タスクを手動で実行するのが最適です。たとえば、タスクを開発しているが、このタスクをサービススケジューラでデプロイする準備はできていないとします。このタスクは 1 回限りまたは定期的なバッチジョブであり、実行させ続けたり、終了後に再起動する意味はないとします。

指定数のタスクを実行させ続けたり、ロードバランサーの配下にタスクを配置するには、Amazon ECSサービススケジューラを使用します。詳細については、「Amazon ECS サービス (p. 122)」を参照してください。

コンテンツ• Fargate 起動タイプを使用してタスクを実行する (p. 114)

Fargate 起動タイプを使用してタスクを実行するFargate 起動タイプを使用してタスクを実行するには、次の手順を実行します。

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで、[Task Definitions] を選択し、実行するタスク定義を選択します。

• ここに表示されたタスク定義の最新のリビジョンを実行するには、実行するタスク定義の左側にあるチェックボックスを選択します。

• ここに表示されたタスク定義の以前のリビジョンを実行するには、タスク定義を選択してすべてのアクティブなリビジョンを表示し、実行するリビジョンを選択します。

3. [Actions]、[Run Task] を選択します。4. [Run Task (タスクの実行)] セクションで、以下の手順を実行します。

a. [Launch type (起動タイプ)] で、[FARGATE] を選択します。起動タイプの詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

b. [プラットフォームのバージョン] で、[最新] を選択します。プラットフォームの詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

c. [Cluster] で、使用するクラスターを選択します。d. [Number of tasks] に、このタスク定義で起動するタスクの数を入力します。e. [Task Group] に、タスクグループの名前を入力します。

5. [VPC and security groups (VPC とセキュリティグループ)] セクションで、次の手順を実行します。

API バージョン 2014-11-13114

Amazon ECS AWS Fargate 用ユーザーガイドFargate 起動タイプを使用してタスクを実行する

a. [クラスター VPC] で、タスクが使用する VPC を選択します。選択した VPC で専有ハードウェアテナンシーが必須に設定されていないことを確認してください。これは Fargate タスクではサポートされていません。

b. [Subnets] では、タスクで利用できるサブネットを選択します。c. [Security groups] にタスク用のセキュリティグループが作成され、インターネットからの HTTP

トラフィックが許可されるようになります。このセキュリティグループの名前やルールを編集する場合や、既存のセキュリティグループを選択する場合は、[Edit] を選択してセキュリティグループ設定に変更を加えます。

d. Fargate タスクにアタッチされた Elastic Network Interface にパブリック IP アドレスを割り当てる場合は、[自動割り当てパブリック IP] で [有効] を選択します。イメージのプルなどのアウトバウンドネットワークアクセスがタスクで必要な場合は必須です。アウトバウンドネットワークアクセスが必要ない場合は [無効] を選択します。

6. [詳細オプション] セクションで、以下の手順を実行します。

• (オプション) コマンド、環境変数、タスクの IAM ロール、またはタスクの実行ロールのオーバーライドをタスク定義の 1 つ以上のコンテナに送信するには、[Advanced Options (詳細オプション)] を選択して次のステップを実行します。

Note

タスク定義からパラメータ値を使用する場合は、オーバーライドを指定する必要はありません。これらのフィールドは、タスク定義で指定された値をオーバーライドするためにのみ使用されます。

i. [タスクロールの上書き] で、このタスクがタスク定義で指定された IAM ロールをオーバーライドするための IAM ロールを選択します。詳細については、「タスク用の IAM ロール (p. 251)」を参照してください。

ここには、[ecs-tasks.amazonaws.com] 信頼関係を持つロールのみが表示されます。タスク用の IAM ロールを作成する方法の詳細については、タスク用の IAM ロールとポリシーの作成 (p. 252) を参照してください。

ii. [Task Execution Role Override (タスク実行ロールの上書き)] で、タスク定義で指定されたタスク実行ロールをオーバーライドするためのタスク実行ロールを選択します。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

iii. [Container Overrides] で、コマンドまたは環境変数のオーバーライドを送信するコンテナを選択します。

• コマンドのオーバーライドの場合: [Command override] に、送信するコマンドオーバーライドを入力します。コンテナ定義で ENTRYPOINT が指定されていない場合は、引用符のない文字列のカンマ区切りリストである必要があります。例:

/bin/sh,-c,echo,$DATE

コンテナ定義で ENTRYPOINT が指定されている場合 (sh,-c など)、形式は引用符のない文字列である必要があります。これは二重引用符で囲まれ、引数として ENTRYPOINT コマンドに渡されます。例:

while true; do echo $DATE > /var/www/html/index.html; sleep 1; done

• 環境変数オーバーライドの場合: [Add Environment Variable] を選択します。[Key] に、環境変数の名前を入力します。[Value] に、環境値の文字列値を入力します (引用符で囲まない)。

API バージョン 2014-11-13115

Amazon ECS AWS Fargate 用ユーザーガイドタスクのスケジューリング (cron)

この環境変数の上書きはコンテナに次のように送信されます。

MY_ENV_VAR="This variable contains a string."

7. In the Task tagging configuration section, complete the following steps:

a. Select Enable ECS managed tags if you want Amazon ECS to automatically tag each task with theAmazon ECS managed tags. For more information, see Tagging Your Amazon ECS Resources.

b. For Propagate tags from, select one of the following:

• Do not propagate – This option will not propagate any tags.• Task Definitions – This option will propagate the tags specified in the task definition to the task.

Note

If you specify a tag with the same key in the Tags section, it will override the tagpropagated from the task definition.

8. [Tags (タグ)] セクションで、タスクに関連付ける各タグのキーと値を指定します。詳細については、「Amazon ECS リソースにタグを付ける」を参照してください。

9. タスク情報を確認し、[Run Task] を選択します。Note

タスクが PENDING から STOPPED に移行した場合、または PENDING ステータスが表示された後、リストされているタスクから消えた場合、エラーで停止した可能性があります。詳細については、トラブルシューティングセクションの「停止されたタスクでのエラーの確認 (p. 350)」を参照してください。

タスクのスケジューリング (cron)Amazon ECS は、cron のようなスケジュール、または CloudWatch イベント に応答してタスクをスケジュールする機能をサポートしています。この機能は、Fargate および EC2 の両方の起動タイプを使用する Amazon ECS タスクでサポートされています。

バックアップオペレーションやログスキャンなど、クラスター内で一定間隔で実行するタスクがある場合は、Amazon ECS コンソールを使用して、指定した時間にクラスターで 1 つ以上のタスクを実行するCloudWatch イベント ルールを作成できます。スケジュールされたイベントルールは、特定の間隔 (N 分、時間、日ごとに実行) に設定できます。または、より複雑なスケジュールに設定する場合は、cron 式を使用することもできます。詳細については、Amazon CloudWatch Events ユーザーガイドの「ルールのスケジュール式」を参照してください。

また、Fargate タスクを CloudWatch イベント のタスクターゲットとして設定できるようになりました。これにより、発生した変更に応答してタスクを起動することができます。さらに、CloudWatch イベントコンソールおよび AWS CLI を介して awsvpc ネットワークを使用するときに、ネットワーク設定を修正でき、CloudWatch イベント によってトリガーされた Fargate タスクに、Amazon EC2 インスタンスと同じネットワーキングプロパティが与えられます。詳細については、Amazon CloudWatch Events ユーザーガイドの「チュートリアル: ファイルが Amazon S3 バケットにアップロードされたときに Amazon ECSタスクを実行する」を参照してください 。

API バージョン 2014-11-13116

Amazon ECS AWS Fargate 用ユーザーガイドタスクのスケジューリング (cron)

Note

この機能は、次のリージョンでは Fargate タスクにまだ使用できません。

リージョン名 リージョン

中国 (北京) cn-north-1

中国 (寧夏) cn-northwest-1

欧州 (パリ) eu-west-3

欧州 (ストックホルム) eu-north-1

南米 (サンパウロ) sa-east-1

中東 (バーレーン) me-south-1

スケジュールされたタスクの作成

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. スケジュールされたタスクを作成するクラスターを選択します。クラスターがない場合は、「クラス

ターの作成 (p. 20)」で新しいクラスターを作成するステップを参照してください。3. [Cluster: cluster-name] ページで、[Scheduled Tasks]、[Create] の順に選択します。4. [Schedule rule name] に、スケジュールルールの一意の名前を入力します。最大 64 文字の英字、数

字、ピリオド、ハイフン、アンダースコアを使用できます。5. (オプション) [Schedule rule description] に、ルールの説明を入力します。最大 512 文字の文字を使用

できます。6. [Schedule rule type] で、スケジュールルールに固定間隔スケジュールを使用するか cron 式を使用す

るかを選択します。詳細については、Amazon CloudWatch Events ユーザーガイドの「ルールのスケジュール式」を参照してください。

• [Run at fixed interval] に、スケジュールの間隔と単位を入力します。• [Cron expression] に、タスクスケジュールの cron 式を入力します。これらの式には 6 つの必須

フィールドがあり、フィールドは空白で区切られます。詳細と cron 式の例については、AmazonCloudWatch Events ユーザーガイドの「Cron 式」を参照してください。

7. スケジュールルールのターゲットを作成します。

a. [ターゲット ID] に、ターゲットの一意の ID を入力します。最大 64 文字の英字、数字、ピリオド、ハイフン、アンダースコアを使用できます。

b. [起動タイプ] で、サービスのタスクの起動タイプを選択します。詳細については、「AmazonECS 起動タイプ (p. 64)」を参照してください。

c. [Task definition] で、このターゲットに対して実行するタスク定義のファミリーとリビジョン(family:revision) を選択します。

d. [プラットフォームのバージョン] では、このターゲットに使用するプラットフォームバージョンを選択します。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

Note

プラットフォームのバージョンは、Fargate の起動タイプを使用するタスクにのみ適用されます。

e. [Number of tasks] に、ルールの実行時にクラスターで実行する、指定したタスク定義のインスタンスの数を入力します。

API バージョン 2014-11-13117

Amazon ECS AWS Fargate 用ユーザーガイドタスクのスケジューリング (cron)

f. (オプション) [Task role override (タスクロールの上書き)] で、タスク定義のデフォルトの代わりに、ターゲットでタスクに使用する IAM ロールを選択します。詳細については、「タスク用のIAM ロール (p. 251)」を参照してください。ここには、[Amazon EC2 Container Service TaskRole] 信頼関係があるロールのみが表示されます。タスク用の IAM ロールを作成する方法の詳細については、「タスク用の IAM ロールとポリシーの作成 (p. 252)」を参照してください。タスクロールやタスクロール上書き用の iam:PassRole アクセス許可を CloudWatch IAM ロールに追加する必要があります。詳細については、「Amazon ECS CloudWatch イベント IAM ロール (p. 258)」を参照してください。

g. スケジュールされたタスク定義で awsvpc ネットワークモードを使用する場合、VPC、サブネット、セキュリティグループ設定をスケジュールタスクに設定する必要があります。詳細については、AWS Fargate 用 Amazon Elastic Container Service ユーザーガイドの「Fargate タスクネットワーキング」を参照してください。

i. [Cluster VPC (クラスター VPC)] で、EC2 起動タイプを選択した場合は、コンテナインスタンスが存在する VPC を選択します。Fargate 起動タイプを選択した場合は、Fargate タスクが使用する VPC を選択します。専有ハードウェアテナンシーは Fargate タスクではサポートされていないため、選択した VPC で専有ハードウェアテナンシーが必須に設定されていないことを確認してください。

ii. [サブネット] では、スケジュールされたタスクの配置に利用できるサブネットを選択します。

Important

awsvpc ネットワークモードではプライベートサブネットだけがサポートされます。タスクはパブリック IP アドレスを受け取らないため、アウトバウンドのインターネットアクセスには NAT ゲートウェイが必要です。またインバウンドのインターネットトラフィックは、ロードバランサーを経由させる必要があります。

iii. [セキュリティグループ] にスケジュールされたタスク用のセキュリティグループが作成され、インターネットからの HTTP トラフィックが許可されるようになります (0.0.0.0/0)。このセキュリティグループの名前やルールを編集する場合や、既存のセキュリティグループを選択する場合は、[Edit] を選択してセキュリティグループ設定に変更を加えます。

iv. [自動割り当てパブリック IP] で、タスクがパブリック IP アドレスを受け取るかどうかを選択します。Fargate タスクを使用している場合、タスクの Elastic Network Interface に、インターネットへのルートを持つか、またはリクエストをインターネットにルーティングできるNAT ゲートウェイを持つパブリック IP アドレスが割り当てられている必要があります。そうすることにより、タスクでコンテナイメージをプルできるようになります。

h. [CloudWatch Events IAM role for this target (このターゲットの CloudWatch イベントの IAM ロール)] で、すでに作成した CloudWatch イベント サービスロール (ecsEventsRole) を選択します。または、[Create new role (新しいロールの作成)] を選択して、CloudWatch イベント がお客様に代わって Amazon ECS を呼び出してタスクを実行するために必要な IAM ロールを作成します。詳細については、「Amazon ECS CloudWatch イベント IAM ロール (p. 258)」を参照してください。

Important

スケジュールされたタスクでタスク実行ロールやタスクロールを使用する必要があるか、タスクロール上書きを使用している場合は、タスク実行ロール、タスクロール、またはタスクロール上書き用の iam:PassRole アクセス許可を CloudWatch IAM ロールに追加する必要があります。詳細については、「Amazon ECS CloudWatch イベントIAM ロール (p. 258)」を参照してください。

i. (オプション) [Container overrides] セクションで、個々のコンテナを展開し、タスク定義で定義されているそのコンテナのコマンド/環境変数を上書きできます。

8. (オプション) 追加のターゲット (このルールの適用時に実行する他のタスク) を追加するには、[Addtargets] を選択し、追加のターゲットごとに前のサブステップを繰り返します。

9. [作成] を選択します。API バージョン 2014-11-13

118

Amazon ECS AWS Fargate 用ユーザーガイドタスクのリタイア

スケジュールされたタスクを編集するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. スケジュールされたタスクを編集するクラスターを選択します。3. [Cluster: cluster-name] ページで、[Scheduled Tasks] を選択します。4. 編集するスケジュールルールの左側にあるボックスを選択してから、[Edit] を選択します。5. 更新するフィールドを編集し、[Update] を選択します。

タスクのリタイアAmazon ECS タスクのリタイアは、Fargate および EC2 起動タイプの両方のタスクに影響し、保留中のリタイアについては E メールで通知されます。

以下のシナリオで、タスクのリタイアを予定できます。

• AWS は、タスクをホストしている基盤のハードウェアで回復不可能な障害を検出します。• Fargate 起動タイプを使用し、セキュリティ脆弱性のあるプラットフォームバージョンで実行されてい

るタスクでは、パッチが適用されたプラットフォームバージョンを使用して新しいタスクを起動して、タスクを置き換える必要があります。

タスクのリタイアが予定された場合、イベントの前に、当該のタスク ID とリタイア日を記載したメールが送信されます。このメールは、アカウントに関連付けられているアドレスに送信されます。これは、AWSマネジメントコンソール へのログインに使用するメールアドレスと同じです。定期的に確認しないメールアカウントを使用している場合は、AWS Personal Health Dashboard を使用して、いずれかのタスクにリタイアが予定されているかどうかを判断できます。アカウントの連絡先情報を更新するには、「アカウント設定」ページに移動します。

予定されたリタイア日になると、タスクは AWS によって停止または終了されます。タスクがサービスの一部で、自動的に停止された場合、サービスのスケジューラにより、そのタスクを置き換える新しいタスクが起動されます。スタンドアロンタスクを使用する場合は、タスクのリタイアの通知が送信され、新しいタスクを開始して置き換える必要があります。

リタイアが予定されているタスクの操作タスクがサービスの一部である場合、予定されたリタイア日以降になると自動的にタスクが停止し、サービスのスケジューラによりそのタスクを置き換える新しいタスクが開始されます。リタイア日以前にサービスタスクを更新する場合は、以下のステップを使用できます。詳細については、「サービスの更新 (p. 147)」を参照してください。

実行中のサービスを更新するには (AWS マネジメントコンソール)

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーで、クラスターのあるリージョンを選択します。3. ナビゲーションペインで [Clusters] を選択します。4. [クラスター] ページで、サービスが存在するクラスターの名前を選択します。5. [Cluster: name] ページで、[Services] を選択します。6. 更新するサービスの左側にあるチェックボックスをオンにし、[Update] を選択します。7. [サービスの設定] ページで、サービスの情報はあらかじめ入力されています。[新しいデプロイの強制]

を選択し、[次のステップ] を選択します。Note

Fargate 起動タイプを使用するタスクについては、新しいデプロイを強制すると、パッチが適用されたプラットフォームバージョンを使用して新しいタスクが起動されます。タスク

API バージョン 2014-11-13119

Amazon ECS AWS Fargate 用ユーザーガイドFargate タスクリサイクル

では異なるプラットフォームバージョンを選択する必要はありません。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

8. [ネットワークの設定] および [Auto Scaling の設定 (オプション)] ページで、[次のステップ] を選択します。

9. [Update Service] を選択して終了し、サービスを更新します。

実行中のサービスを更新するには (AWS CLI)

1. サービスの ARN を取得します。

aws ecs list-services --cluster cluster_name --region region

出力:

{ "serviceArns": [ "arn:aws:ecs:region:aws_account_id:service/MyService" ]}

2. サービスを更新して、新しいデプロイを強制し新しいタスクをデプロイします。

aws ecs update-service --service serviceArn --force-new-deployment --cluster cluster_name --region region

スタンドアロンタスクを使用している場合、新しいタスクを開始して置き換えることができます。詳細については、「タスクの実行 (p. 114)」を参照してください。

Fargate タスクリサイクルAmazon ECS タスクリサイクルは、Fargate を使用するタスクにのみ影響し、イベントをリサイクルする前に通知は送信されません。

以下のシナリオで、タスクをリサイクルできます。

• タスクは、Fargate 起動タイプを使用し、バージョン 1.3.0 以降のプラットフォームを使用しています。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

Note

1.3.0 より前のプラットフォームバージョンを使用する Fargate タスクは影響を受けません。• タスクは Amazon ECS サービスの一部です。スタンドアロンタスクはタスクリサイクルの影響を受けま

せんが、リタイアを予定することはできます。詳細については、「タスクのリタイア (p. 119)」を参照してください。

• 以下で説明しているように、AWS がタスクをリサイクルする原因があるかどうかを決定します。

AWS が Fargate タスクにセキュリティやインフラストラクチャの更新が必要であると判断したとき、タスクに必要なパッチを適用します。これらのパッチのほとんどは、透過的でありタスクを停止する必要はありませんが、ときどきタスクをリサイクルする必要があります。Fargate プラットフォームバージョン1.3.0 以降、タスクに可能な限り最善のセキュリティと可用性を提供するために、サービスの一部として起動された Fargate タスクを停止し、Amazon ECS サービススケジューラにより新しいタスクを開始できます。タスクリサイクルは 2019 年 2 月 1 日以降に開始され、ローリング方式で継続されます。サービススケジューラにより、サービスに必要なタスクの数が維持されます。

API バージョン 2014-11-13120

Amazon ECS AWS Fargate 用ユーザーガイドFargate タスクリサイクル

この新しいプロセスに備えるため、このシナリオをシミュレートして、アプリケーションの動作をテストすることをお勧めします。弾力性をテストするために、サービスで個々のタスクを停止することで、これを行うことができます。

API バージョン 2014-11-13121

Amazon ECS AWS Fargate 用ユーザーガイドサービススケジューラの概念

Amazon ECS サービスAmazon ECS サービスを使用すると、Amazon ECS クラスター内で、タスク定義の指定した数のインスタンスを同時に実行して維持できます。タスクが何らかの理由で失敗または停止した場合、Amazon ECSサービススケジューラは、タスク定義の別のインスタンスを起動してそれに置き換え、サービスで必要数のタスクを維持します。

サービスで必要数のタスクを維持することに加えて、オプションでロードバランサーの背後でサービスを実行することもできます。ロードバランサーは、サービスに関連付けられたタスク間でトラフィックを分散させます。

トピック• サービススケジューラの概念 (p. 122)• その他のサービスの概念 (p. 123)• サービス定義パラメーター (p. 123)• サービスの作成 (p. 135)• サービスの更新 (p. 147)• サービスの削除 (p. 149)• Amazon ECS デプロイタイプ (p. 150)• サービスロードバランシング (p. 160)• サービスの Auto Scaling (p. 173)• サービス検出 (p. 181)• サービスの調整ロジック (p. 184)

サービススケジューラの概念サービスのタスクが停止した場合、そのタスクは強制終了されてから、新しいタスクが開始されます。このプロセスは、サービスの作成時に指定したスケジュール戦略 (サービスタイプともいいます) に基づいて、サービスが実行中のタスクの必要数に達するまで続行されます。

サービススケジューラには、タスクが繰り返し起動に失敗した場合にタスクを再起動する頻度を調整するロジックが含まれています。タスクが RUNNING 状態にならずに停止した場合 (タスクに startedAtタイムスタンプがあることで判断されます)、サービススケジューラは起動の試行の増分的な減速を開始し、サービスイベントメッセージを出力します。この動作により、失敗したタスクに対して不必要なリソースの使用が回避され、問題を解決できる可能性が生まれます。サービスが更新されると、サービススケジューラは正常な動作を再開します。詳細については、「サービスの調整ロジック (p. 184)」および「サービスイベントメッセージ (p. 359)」を参照してください。

利用できる 2 つのサービススケジューラ戦略があります。

• REPLICA — レプリカスケジュール戦略では、クラスター全体で必要数のタスクを配置して維持します。デフォルトでは、サービススケジューラによってタスクはアベイラビリティーゾーン間で分散されます。タスク配置の戦略と制約を使用すると、タスク配置の決定をカスタマイズできます。詳細については、「レプリカ (p. 123)」を参照してください。

• DAEMON — デーモンのスケジュール戦略では、指定したすべてのタスク配置制約を満たすクラスター内のアクティブなコンテナインスタンスごとに、1 つのタスクのみをデプロイします。この戦略を使用する場合、タスクの必要数や配置戦略、サービスの Auto Scaling ポリシーを指定する必要はありません。詳細については、「???」を参照してください。

API バージョン 2014-11-13122

Amazon ECS AWS Fargate 用ユーザーガイドレプリカ

Note

Fargate タスクは DAEMON スケジューリング戦略をサポートしていません。

レプリカレプリカスケジュール戦略では、クラスターに必要数のタスクを配置して維持します。

タスクで Fargate 起動タイプを使用する場合、サービススケジューラは、新しいタスクの起動時や実行中タスクの停止時に、アベイラビリティーゾーン間の負荷バランスを維持します。

その他のサービスの概念• オプションで、ロードバランサーの背後でサービスを実行できます。詳細については、「サービスロー

ドバランシング (p. 160)」を参照してください。• オプションで、サービスのデプロイ設定を指定できます。デプロイメントは、タスク定義またはサービ

スの必要数を更新することでトリガーされます。デプロイ中、サービススケジューラは、最小ヘルス率と最大ヘルス率のパラメータを使用して、デプロイ戦略を判断します。詳細については、「サービス定義パラメーター (p. 123)」を参照してください。

• サービスはオプションで Amazon ECS サービス検出 を使用するように設定できます。サービス検出 はAmazon Route 53 自動命名 API を使用して、サービスのタスクの DNS エントリを管理し、VPC 内で検出できるようにします。詳細については、「サービス検出 (p. 181)」を参照してください。

• サービスを削除するときに、クリーンアップが必要なタスクがまだ実行中の場合、サービスステータスは ACTIVE から DRAINING に移行し、そのサービスはコンソールまたは ListServices API オペレーションで表示されなくなります。すべてのタスクが STOPPING または STOPPED ステータスに以降されたら、サービスステータスは DRAINING から INACTIVE になります。ステータスがDRAINING または INACTIVE のサービスは、DescribeServices API オペレーションで引き続き表示できます。ただし、INACTIVE ステータスのサービスは、後で Amazon ECS によって保存されたレコードからクリーンアップされて削除され、それらのサービスに対して DescribeServices を呼び出すと、ServiceNotFoundException エラーが返る可能性があります。

サービス定義パラメーターサービス定義は、Amazon ECS サービスの実行方法を定義します。サービス定義では、次のパラメータを指定できます。

起動タイプlaunchType

型: 文字列

有効な値: EC2 | FARGATE

必須: いいえ

サービスを実行する起動タイプ。指定しない場合は、デフォルトで EC2 が使用されます。詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

launchType を指定した場合、capacityProviderStrategy パラメータを省略する必要があります。

API バージョン 2014-11-13123

Amazon ECS AWS Fargate 用ユーザーガイドキャパシティープロバイダー戦略

キャパシティープロバイダー戦略capacityProviderStrategy

タイプ: オブジェクトの配列

必須: いいえ

サービスに使用するキャパシティープロバイダー戦略。

キャパシティープロバイダー戦略は、1 つ以上のキャパシティープロバイダーと、それらに割り当てる base と weight で構成されます。キャパシティープロバイダーは、キャパシティープロバイダー戦略で使用するクラスターに関連付ける必要があります。PutClusterCapacityProviders API は、キャパシティープロバイダーをクラスターに関連付けるために使用されます。ACTIVE または UPDATINGステータスのキャパシティープロバイダーのみを使用できます。

capacityProviderStrategy を指定した場合、launchType パラメータを省略する必要があります。capacityProviderStrategy または launchType を指定しない場合は、クラスターのdefaultCapacityProviderStrategy が使用されます。

Auto Scaling グループを使用するキャパシティープロバイダーを指定する場合は、キャパシティープロバイダーがすでに作成されている必要があります。新しいキャパシティープロバイダーは、CreateCapacityProvider API オペレーションで作成できます。

AWS Fargate キャパシティープロバイダーを使用するには、キャパシティープロバイダー FARGATEまたは FARGATE_SPOT を指定します。AWS Fargate キャパシティープロバイダーはすべてのアカウントで使用でき、クラスターに関連付けるだけで使用できるようになります。

PutClusterCapacityProviders API オペレーションは、クラスターの作成後にクラスターで使用可能なキャパシティープロバイダーのリストを更新するために使用されます。capacityProvider

型: 文字列

必須: はい

キャパシティープロバイダーの短縮名または完全な ARN。weight

タイプ: 整数

有効な範囲: 0~1,000 の整数。

必須: いいえ

ウエイト値は、指定したキャパシティープロバイダーを使用する起動済みタスクの総数に対する相対的な割合を示します。

たとえば、2 つのキャパシティープロバイダーを含む戦略があり、両方のウェイトが 1 である場合、ベースが満たされると、タスクは 2 つのキャパシティープロバイダー間で均等に分割されます。同じロジックを使用して、キャパシティープロバイダーcapacityProviderA に 1 のウエイトを指定し、capacityProviderB に 4 のウエイトを指定すると、capacityProviderA を使用して実行されるタスクごとに、4 つのタスクが capacityProviderB を使用します。

base

タイプ: 整数

有効な範囲: 0~100,000 の整数。

必須: いいえ

API バージョン 2014-11-13124

Amazon ECS AWS Fargate 用ユーザーガイドタスク定義

ベース値は、指定されたキャパシティープロバイダーで実行するタスクの最小限の数を指定します。キャパシティープロバイダー戦略では、ベースを定義できるキャパシティープロバイダーは1 つだけです。

タスク定義taskDefinition

型: 文字列

必須: いいえ

family と revision (family:revision)、またはサービスで実行されるタスク定義の完全なAmazon リソースネーム (ARN)。revision を指定しない場合、指定したファミリーの最新のACTIVE リビジョンが使用されます。

ローリングアップデート (ECS) デプロイメントコントローラーを使用する場合は、タスク定義を指定する必要があります。

プラットフォームのバージョンplatformVersion

型: 文字列

必須: いいえ

サービス内のタスクが実行されているプラットフォームのバージョン。プラットフォームのバージョンは、Fargate 起動タイプを使用するタスクにのみ指定されます。指定されない場合、デフォルトで最新バージョン (LATEST) が使用されます。

AWS Fargate プラットフォームのバージョンを使って、Fargate タスクインフラストラクチャの特定のランタイム環境を参照できます。プラットフォームのバージョンに LATEST を指定してタスクを実行またはサービスを作成すると、プラットフォームの最新バージョンをタスクで利用できるようになります。サービスをスケールアップする場合は、これらのタスクには、サービスの最新のデプロイで指定されたプラットフォームのバージョンが提供されます。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

クラスターcluster

型: 文字列

必須: いいえ

サービスを実行するクラスターの短い名前または完全な Amazon リソースネーム (ARN)。クラスターを指定しない場合は、default クラスターが使用されます。

サービス名serviceName

型: 文字列

API バージョン 2014-11-13125

Amazon ECS AWS Fargate 用ユーザーガイドスケジュール戦略

必須: はい

サービスの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。 サービス名は同じクラスター内で一意になるようにしてください。ただし、リージョン内のクラスター間や複数のリージョンにまたがるクラスター間では、同様の名前のサービスがあっても構いません。

スケジュール戦略schedulingStrategy

型: 文字列

有効な値: REPLICA | DAEMON

必須: いいえ

使用するスケジュール戦略。スケジュール戦略が指定されていない場合は、REPLICA 戦略が使用されます。詳細については、「サービススケジューラの概念 (p. 122)」を参照してください。

利用できる 2 つのサービススケジューラ戦略があります。• REPLICA — レプリカスケジュール戦略では、クラスター全体で必要数のタスクを配置して維持し

ます。デフォルトでは、サービススケジューラによってタスクはアベイラビリティーゾーン間で分散されます。タスク配置の戦略と制約を使用すると、タスク配置の決定をカスタマイズできます。詳細については、「レプリカ (p. 123)」を参照してください。

• DAEMON — デーモンのスケジュール戦略では、指定したすべてのタスク配置制約を満たすクラスター内のアクティブなコンテナインスタンスごとに、1 つのタスクのみをデプロイします。この戦略を使用する場合、タスクの必要数や配置戦略、サービスの Auto Scaling ポリシーを指定する必要はありません。詳細については、「???」を参照してください。

Note

Fargate タスクは DAEMON スケジューリング戦略をサポートしていません。

必要数desiredCount

タイプ: 整数

必須: いいえ

指定したタスク定義のインスタンスをクラスターに配置して実行状態に保つ数。

このパラメータは、REPLICA スケジュール戦略を使用する場合に必要です。サービスが DAEMON スケジュール戦略を使用する場合、このパラメータはオプションです。

デプロイ設定deploymentConfiguration

タイプ: オブジェクト

必須: いいえ

API バージョン 2014-11-13126

Amazon ECS AWS Fargate 用ユーザーガイドデプロイ設定

デプロイ時に実行されるタスクの数と、タスクの停止および開始の順序を制御するオプションのデプロイパラメータ。maximumPercent

タイプ: 整数

必須: いいえ

サービスでローリング更新 (ECS) のデプロイタイプが使用されている場合、maximumPercent パラメータは、デプロイ時に RUNNING または PENDING 状態で使用できるサービスのタスクの上限数を desiredCount のパーセント値 (最も近い整数に切り下げ) で表します。このパラメータを使用すると、デプロイのバッチサイズを定義できます。たとえば、サービスで REPLICA サービススケジューラを使用して、desiredCount が 4 タスク、maximumPercent の値が 200% とすると、スケジューラは 4 つの古いタスクを停止する前に、4 つの新しいタスクを開始できます (そのために必要なクラスターリソースを使用できることが前提)。REPLICA サービススケジューラを使用するサービスのデフォルトの maximumPercent 値は 200% です。

サービスで DAEMON サービススケジューラタイプを使用している場合、maximumPercent はデフォルト値の 100% のままにする必要があります。

デプロイ時のタスクの最大数は、desiredCount に maximumPercent/100 を乗算したもので、最も近い整数値に切り下げられます。

サービスが Blue/Green (CODE_DEPLOY) または EXTERNAL デプロイのタイプと EC2 起動タイプを使用するタスクのいずれかを使用している場合、maximum percent 値はデフォルト値に設定され、コンテナインスタンスが DRAINING 状態のとき RUNNING 状態のままのタスクの上限数を定義するために使用されます。サービス内のタスクが Fargate 起動タイプを使用する場合、最大ヘルス率の値はサービスを記述するときに返されますが、使用されません。

minimumHealthyPercent

タイプ: 整数

必須: いいえ

サービスでローリング更新 (ECS) のデプロイタイプが使用されている場合、minimumHealthyPercent は、デプロイ時に RUNNING 状態に留まる必要があるサービスのタスクの下限数を desiredCount のパーセント値 (最も近い整数に切り上げ) で表します。このパラメータにより、追加のクラスターキャパシティーを使用せずにデプロイできます。たとえば、サービスで desiredCount が 4 タスク、minimumHealthyPercent が 50% とすると、サービススケジューラは 2 つの新しいタスクを開始する前に、2 つの既存のタスクを停止してクラスターの容量を解放できます。

ロードバランサーを使用しないサービスの場合、次の点に注意してください。• サービスのタスク内のすべての必須コンテナがヘルスチェックに合格すると、サービスは正常

と見なされます。• タスクにヘルスチェックが定義された必須コンテナがない場合、サービススケジューラは、タ

スクが RUNNING 状態に達した後 40 秒間待ってから、正常性の最小割合の合計にカウントします。

• タスクに、ヘルスチェックが定義された必須コンテナが 1 つ以上ある場合、サービススケジューラは、タスクが正常ステータスに達するのを待ってから、正常性の最小割合の合計にカウントします。タスク内のすべての必須コンテナがヘルスチェックに合格すると、タスクは正常と見なされます。サービススケジューラが待つことができる時間は、コンテナのヘルスチェックの設定によって決まります。詳細については、「ヘルスチェック (p. 43)」を参照してください。

ロードバランサーを使用するサービスについては、次の点に注意してください。

API バージョン 2014-11-13127

Amazon ECS AWS Fargate 用ユーザーガイドデプロイメントコントローラー

• タスクにヘルスチェックが定義されている必須コンテナがない場合、サービススケジューラは、ロードバランサーターゲットグループのヘルスチェックが正常ステータスを返すのを待ってから、正常性の最小割合の合計にカウントします。

• タスクにヘルスチェックが定義されている必須コンテナがない場合、サービススケジューラは、両方のタスクが正常なステータスになり、ロードバランサーターゲットグループのヘルスチェックが正常ステータスを返すのを待機し、その後でタスクを正常性の最小割の合計にカウントします。

レプリカサービスの minimumHealthyPercent のデフォルト値は 100% です。DAEMON サービススケジュールを使用しているデフォルトの minimumHealthyPercent 値は、AWS CLI、AWSSDK、API では 0%、AWS マネジメントコンソール では 50% です。

デプロイ時の正常なタスクの最小数は、desiredCount に minimumHealthyPercent/100 を乗算したもので、最も近い整数値に切り上げられます。

サービスが Blue/Green (CODE_DEPLOY) または EXTERNAL デプロイのタイプと EC2 起動タイプを使用するタスクのいずれかを使用している場合、最小ヘルス率のデフォルト値はデフォルト値に設定され、コンテナインスタンスが DRAINING 状態のとき RUNNING 状態のままのタスクの下限数を定義するために使用されます。サービス内のタスクが Fargate 起動タイプを使用する場合、最小ヘルス率の値はサービスを記述するときに返されますが、使用されません。

デプロイメントコントローラーdeploymentController

型: オブジェクト

必須: いいえ

サービスで使用するデプロイコントローラータイプ。デプロイメントコントローラーが指定されていない場合は、ECS コントローラーが使用されます。詳細については、「Amazon ECS デプロイタイプ (p. 150)」を参照してください。type

型: 文字列

有効な値: ECS | CODE_DEPLOY | EXTERNAL

必須: はい

使用するデプロイコントローラータイプ。次の 3 つのデプロイコントローラータイプを使用できます。ECS

ローリング更新 (ECS) デプロイタイプでは、コンテナの現在実行されているバージョンを最新バージョンに置き換えられます。ローリング更新中に Amazon ECS がサービスに追加または削除するコンテナの数は、deploymentConfiguration で指定されるように、サービスのデプロイ中に許可される正常なタスクの最小数と最大数を調整することで制御されます。

CODE_DEPLOY

Blue/Green (CODE_DEPLOY) デプロイタイプは、CodeDeploy による Blue/Green デプロイモデルを使用することにより、本稼働トラフィックを送信する前に、サービスの新しいデプロイを確認できます。

EXTERNAL

外部デプロイタイプでは、Amazon ECS サービスのデプロイプロセスを完全に制御するためのサードパーティーのデプロイコントローラーを使用できます。

API バージョン 2014-11-13128

Amazon ECS AWS Fargate 用ユーザーガイドタスクの配置

タスクの配置placementStrategy

タイプ: オブジェクトの配列

必須: いいえ

サービスのタスクで使用する配置戦略オブジェクト。サービスごとに最大 4 つの戦略ルールを指定できます。type

型: 文字列

有効な値: random | spread | binpack

必須: いいえ

配置戦略のタイプ。random 配置戦略は、タスクを利用可能な候補にランダムに配置します。spread 配置戦略は、field パラメータに基づいて、利用可能候補間で均等にタスクを分散して配置します。binpack 戦略は、field パラメータで指定したリソースの利用可能量が最も少ない利用可能候補にタスクを配置します。たとえば、メモリの binpack 戦略を使用する場合、タスクは残りのメモリの量が最も少ない (ただし、タスクを実行するのに十分な) インスタンスに配置されます。

field

型: 文字列

必須: いいえ

配置戦略を適用するフィールド。spread 配置戦略では、有効な値は instanceId (または同じ効果を持つ host)、または attribute:ecs.availability-zone などのコンテナインスタンスに適用される任意のプラットフォームまたはカスタム属性です。binpack 配置戦略では、有効な値は、cpu および memory です。random 配置戦略では、このフィールドは使用されません。

Tagstags

タイプ: オブジェクトの配列

必須: いいえ

サービスに適用し、サービスの分類と整理に役立つメタデータ。タグはそれぞれ、1 つのキーとオプションの 1 つの値で構成されており、どちらもお客様側が定義します。サービスが削除されると、タグも削除されます。サービスには最大 50 個のタグを適用できます。詳細については、「AmazonECS リソースのタグ付け (p. 186)」を参照してください。key

型: 文字列

長さの制限: 最小長は 1 です。最大長は 128 です。

必須: いいえ

タグを構成するキーと値のペアの一部。キーは、より具体的なタグ値のカテゴリのように動作する、一般的なラベルです。

API バージョン 2014-11-13129

Amazon ECS AWS Fargate 用ユーザーガイドネットワーク構成

value

型: 文字列

長さの制限: 最小長は 0 です。最大長は 256 です。

必須: いいえ

タグを構成するキーと値のペアのオプションの一部。値はタグカテゴリ (キー) の記述子として機能します。

enableECSManagedTags

タイプ: ブール値

有効な値: true | false

必須: いいえ

サービスでタスクの Amazon ECS マネージドタグを有効にするかどうかを指定します。値を指定しない場合、デフォルトは false になります。詳細については、「請求用のリソースにタグを付ける (p. 188)」を参照してください。

propagateTags

型: 文字列

有効な値: TASK_DEFINITION | SERVICE

必須: いいえ

タグをタスク定義またはサービスからサービスのタスクへコピーするかどうかを指定します。値を指定しない場合、タグはコピーされません。タグは、サービス作成中のサービス内のタスクにのみコピーすることができます。タグをサービス作成後のタスクに追加するには、TagResource API アクションを使用します。

ネットワーク構成networkConfiguration

型: オブジェクト

必須: いいえ

サービスのネットワーク構成。awsvpc ネットワークモードを使用して独自の Elastic NetworkInterface を受け取るタスク定義の場合に必要です。その他のネットワークモードではサポートされていません。Fargate 起動タイプを使用している場合、awsvpc ネットワークモードが必要です。詳細については、AWS Fargate 用 Amazon Elastic Container Service ユーザーガイドの「Fargate タスクネットワーキング」を参照してください。awsvpcConfiguration

型: オブジェクト

必須: いいえ

タスクまたはサービスのサブネットとセキュリティグループを表すオブジェクト。subnets

タイプ: 文字列の配列

API バージョン 2014-11-13130

Amazon ECS AWS Fargate 用ユーザーガイドネットワーク構成

必須: はい

タスクまたはサービスに関連付けられたサブネット。awsvpcConfiguration ごとに指定できるサブネットは 16 個に制限されています。

securityGroups

タイプ: 文字列の配列

必須: いいえ

タスクまたはサービスに関連付けられたセキュリティグループ。セキュリティグループを指定しないと、VPC のデフォルトのセキュリティグループが使用されます。awsvpcConfiguration ごとに指定できるセキュリティグループは 5 つに制限されています。

assignPublicIP

型: 文字列

有効な値: ENABLED | DISABLED

必須: いいえ

タスクの Elastic Network Interface がパブリック IP アドレスを受け取るかどうか。値を指定しない場合は、デフォルト値の DISABLED が使用されます。

healthCheckGracePeriodSeconds

タイプ: 整数

必須: いいえ

Amazon ECS サービススケジューラが、タスクが RUNNING 状態になった後で異常な Elastic LoadBalancing ターゲットのヘルスチェック、コンテナのヘルスチェック、Route 53 のヘルスチェックを無視する期間 (秒単位)。これが有効であるのは、ロードバランサーを使用するようにサービスが設定されている場合のみです。サービスにロードバランサーを定義している場合、ヘルスチェックの猶予期間値を指定しないと、デフォルト値の 0 が使用されます。

サービスのタスクで、ヘルスチェックを開始して応答するまでに時間がかかる場合は、ヘルスチェックの猶予期間として最大 2,147,483,647 秒まで指定できます。この間は、ECS サービススケジューラはヘルスチェックのステータスを無視します。この猶予期間により、ECS サービススケジューラがタスクを異常とマークして時間より前に停止することがなくなります。

loadBalancers

タイプ: オブジェクトの配列

必須: いいえ

サービスで使用するロードバランサーを表すロードバランサーオブジェクト。Application LoadBalancer または Network Load Balancer を使用するサービスの場合、サービスにアタッチできる 5 つのターゲットグループの制限があります。

サービスを作成した後、サービス定義で指定されているロードバランサー名、ターゲットグループARN、コンテナ名、コンテナポートはイミュータブルです。

Classic Load Balancer では、このオブジェクトには、ロードバランサー名、コンテナ名 (コンテナの定義に表示)、ロードバランサーからアクセスされるコンテナポートが含まれる必要があります。このサービスのタスクがコンテナインスタンスに配置されると、コンテナインスタンスはここで指定したロードバランサーに登録されます。

API バージョン 2014-11-13131

Amazon ECS AWS Fargate 用ユーザーガイドネットワーク構成

Application Load Balancer および Network Load Balancer では、このオブジェクトには、ロードバランサーターゲットグループ ARN、コンテナ名 (コンテナの定義に表示)、ロードバランサーからアクセスされるコンテナポートが含まれている必要があります。このサービスのタスクがコンテナインスタンスに配置されると、コンテナインスタンスとポートの組み合わせは、ここで指定したターゲットグループのターゲットとして登録されます。targetGroupArn

型: 文字列

必須: いいえ

サービスに関連付けられた Elastic Load Balancing ターゲットグループの完全な ARN。

ターゲットグループ ARN は、Application Load Balancer または Network Load Balancer を使用する場合にのみ指定します。Classic Load Balancer を使用する場合は、ターゲットグループ ARNを省略してください。

loadBalancerName

型: 文字列

必須: いいえ

サービスに関連付けるロードバランサーの名前。

ロードバランサー名は、Classic Load Balancer を使用する場合にのみ指定します。 ApplicationLoad Balancer または Network Load Balancer を使用する場合は、ロードバランサー名パラメータを省略してください。

containerName

型: 文字列

必須: いいえ

ロードバランサーに関連付けるコンテナの名前 (コンテナ定義に表示)。containerPort

タイプ: 整数

必須: いいえ

ロードバランサーに関連付けるコンテナのポート。このポートは、サービスのタスクが使用しているタスク定義の containerPort に対応する必要があります。EC2 起動タイプを使用するタスクの場合、コンテナインスタンスは、ポートマッピングの hostPort で進入トラフィックを許可する必要があります。

role

型: 文字列

必須: いいえ

Amazon ECS によるロードバランサーの呼び出しを許可する IAM ロールの短縮名または完全なARN。このパラメータは、サービスでロードバランサーを使用していて、タスク定義が awsvpcネットワークモードを使用していない場合にのみ許可されます。role パラメータを指定する場合、loadBalancers パラメータでロードバランサーのオブジェクトも指定する必要があります。

指定したロールに / 以外のパスがある場合は、完全なロール ARN を指定するか (推奨)、ロール名の前にパスを付ける必要があります。たとえば、ロールの名前が bar で、パスが /foo/ の場合、ロー

API バージョン 2014-11-13132

Amazon ECS AWS Fargate 用ユーザーガイドネットワーク構成

ル名として /foo/bar を指定します。詳細については、IAM ユーザーガイド の「わかりやすい名前とパス」を参照してください。

Important

アカウントが既に Amazon ECS サービスリンクロールを作成している場合は、ここでロールを指定しない限り、そのロールがサービスにデフォルトで使用されます。タスク定義でawsvpc ネットワークモードを使用している場合はサービスにリンクされたロールが必要です。詳細については、「Amazon ECS 用のサービスにリンクされたロール (p. 238)」を参照してください。

serviceRegistries

タイプ: オブジェクトの配列

必須: いいえ

サービスのサービス検出設定の詳細。詳細については、「サービス検出 (p. 181)」を参照してください。registryArn

型: 文字列

必須: いいえ

サービスレジストリの ARN。現在サポートされているサービスレジストリは AWS Cloud Map です。詳細については、AWS Cloud Map 開発者ガイドの「サービスの使用」を参照してください。

port

タイプ: 整数

必須: いいえ

サービス検出サービスが SRV レコードを指定した場合に使用されるポート値。このフィールドは、awsvpc ネットワークモードと SRV レコードの両方が使用されている場合に必要です。

containerName

型: 文字列

必須: いいえ

タスク定義にすでに指定されているコンテナ名の値。サービス検出サービスに使用されます。サービスタスクが指定するタスク定義に bridge または host ネットワークモードが使用されている場合は、タスク定義からの containerName と containerPort の組み合わせを指定する必要があります。サービスタスクが指定するタスク定義に awsvpcネットワークモードが使用され、SRV DNS タイプのレコードが使用されている場合は、containerName とcontainerPort の組み合わせを指定するか、port 値を指定する必要があります (両方は指定しないでください)。

containerPort

タイプ: 整数

必須: いいえ

タスク定義にすでに指定されているポートの値。サービス検出サービスに使用されます。サービスタスクが指定するタスク定義に bridge または host ネットワークモードが使用されている場合は、タスク定義からの containerName と containerPort の組み合わせを指定する必要があ

API バージョン 2014-11-13133

Amazon ECS AWS Fargate 用ユーザーガイドクライアントトークン

ります。サービスタスクが指定するタスク定義に awsvpc ネットワークモードが使用され、SRVDNS タイプのレコードが使用されている場合は、containerName と containerPort の組み合わせを指定するか、port 値を指定する必要があります (両方は指定しないでください)。

クライアントトークンclientToken

型: 文字列

必須: いいえ

リクエストのべき等のために割り当てる一意の識別子 (大文字と小文字を区別)。最大 32 文字の ASCII文字を使用できます。

サービス定義テンプレート以下に、Amazon ECS サービス定義の JSON 表現を示します。

{ "cluster": "", "serviceName": "", "taskDefinition": "", "loadBalancers": [ { "targetGroupArn": "", "loadBalancerName": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "desiredCount": 0, "clientToken": "", "launchType": "FARGATE", "capacityProviderStrategy": [ { "capacityProvider": "", "weight": 0, "base": 0 } ], "platformVersion": "", "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" }

API バージョン 2014-11-13134

Amazon ECS AWS Fargate 用ユーザーガイドサービスの作成

], "placementStrategy": [ { "type": "spread", "field": "" } ], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "ENABLED" } }, "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "CODE_DEPLOY" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "SERVICE"}

このサービス定義テンプレートは、次の AWS CLI コマンドを使用して作成できます。

aws ecs create-service --generate-cli-skeleton

サービスの作成Amazon ECS サービスを作成するとき、サービスの内容と動作を定義する基本パラメータを指定します。これらのパラメータを使用してサービス定義が作成されます。

オプションで、サービス内のコンテナ間にトラフィックを分散する Elastic Load Balancing ロードバランサーなどの追加機能を設定できます。詳細については、「サービスロードバランシング (p. 160)」を参照してください。コンテナインスタンスがロードバランサーからトラフィックを受信できることを確認する必要があります。ロードバランサーのセキュリティグループのコンテナインスタンス上のすべてのポートに対するトラフィックを許可して、動的に割り当てられるポートを使用するコンテナにトラフィックが確実に到達するようにできます。

次のドキュメントでは、AWS マネジメントコンソール のサービス作成ウィザードの各ステップを説明します。

トピック• ステップ 1: 基本的なサービスパラメータの設定 (p. 136)• ステップ 2: ネットワークの設定 (p. 137)• ステップ 3: ロードバランサーを使用するようにサービスを設定する (p. 138)• ステップ 4: サービス検出 を使用するようにサービスを設定する (p. 143)

API バージョン 2014-11-13135

Amazon ECS AWS Fargate 用ユーザーガイドステップ 1: 基本的なサービスパラメータの設定

• ステップ 5: サービスの Auto Scaling を使用するようにサービスを設定する (p. 144)• ステップ 6: サービスを確認して作成する (p. 146)

ステップ 1: 基本的なサービスパラメータの設定すべてのサービスには、使用するタスク定義、サービスを実行するクラスター、サービスに配置するタスクの数など、サービスを定義するいくつかの基本的な設定パラメータが必要です。これは、サービス定義と呼ばれます。サービス定義で定義されるパラメータの詳細については、「サービス定義パラメーター (p. 123)」を参照してください。

この手順は、必要な基本サービス定義パラメータを使用してサービスを作成します。これらのパラメータを作成してから、サービスの作成、またはロードバランサーを使用するサービスの設定などオプションのサービス定義の設定手順に移行できます。

Note

クラスターがデフォルトのキャパシティープロバイダー戦略で設定されている場合、コンソールを使用するときにデフォルトのキャパシティープロバイダー戦略を使用してのみサービスを作成できます。同様に、デフォルトのキャパシティープロバイダーが定義されていない場合、コンソールを使用してサービスを作成するときにのみ起動タイプを使用できます。現時点では、コンソールでキャパシティープロバイダーと起動タイプの両方を使用した混合戦略を持つことはできません。

基本的なサービス定義パラメータを設定するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーで、クラスターのあるリージョンを選択します。3. ナビゲーションペインで、[Task Definitions] を選択し、サービスを作成するタスク定義を選択しま

す。4. [Task Definition name] ページで、サービスを作成するタスク定義のリビジョンを選択します。5. タスク定義を確認し、[アクション]、[サービスの作成] を選択します。6. [サービスの設定] ページで、必要に応じて次のパラメータを入力します。

• キャパシティープロバイダー戦略: サービスで、クラスターに定義されたデフォルトのキャパシティープロバイダー戦略を使用するか、カスタムのキャパシティープロバイダー戦略を使用するかを選択します。キャパシティープロバイダーをカスタムのキャパシティープロバイダー戦略で使用するには、すでにクラスターに関連付けられている必要があります。詳細については、「AmazonECS クラスターキャパシティープロバイダー (p. 21)」を参照してください。

• [Launch type (起動タイプ)]: サービスのタスクを Fargate インフラストラクチャで実行するか、または維持している Amazon EC2 コンテナインスタンスで実行するかを選択します。このオプションは、クラスターにデフォルトのキャパシティープロバイダーが定義されていない場合に使用できます。詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

• [プラットフォームのバージョン]: Fargate 起動タイプを選択する場合は、使用するプラットフォームのバージョンを選択します。

Note

プラットフォームバージョンとして [LATEST] を選択すると、1.3.0 プラットフォームバージョンが使用されます。プラットフォームバージョン 1.4.0 を使用するには、[1.4.0]オプションを選択する必要があります。

• クラスター: サービスを作成するクラスターを選択します。• サービス名: サービスの一意の名前を入力します。• Service type (サービスタイプ): サービスのスケジュール戦略を選択します。詳細については、

「サービススケジューラの概念 (p. 122)」を参照してください。

API バージョン 2014-11-13136

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: ネットワークの設定

• [Number of tasks (タスクの数)]: REPLICA サービスタイプを選択する場合は、クラスター上で起動して維持するタスクの数を入力します。

Note

起動タイプが EC2 であり、タスク定義でコンテナインスタンスの静的ホストポートマッピングを使用する場合は、サービスのタスクごとにクラスターで、指定したポートを使用できるコンテナインスタンスが 1 つ以上必要です。この制限は、タスク定義で bridge ネットワークモードを使用した動的ホストポートマッピングを使用する場合は適用されません。詳細については、「portMappings (p. 41)」を参照してください

• [ローリング更新] デプロイタイプを使用している場合は、次のデプロイ設定パラメータを入力します。これらのパラメータの使用方法の詳細については、「デプロイ設定 (p. 126)」を参照してください。• Minimum healthy percent: デプロイ時に RUNNING 状態に保つ必要のあるサービスのタスクの下限

数をサービスのタスクの必要数のパーセント値 (最も近い整数に切り上げ) で指定します。• Maximum percent: デプロイ時に RUNNING または PENDING 状態にできるサービスのタスクの上

限数をサービスの必要数のタスクのパーセント値 (最も近い整数に切り下げ) で指定します。7. [デプロイ] ページで、必要に応じて次のパラメータを入力します。

• [デプロイタイプ] で、ローリング更新のデプロイを使用するか、または AWS CodeDeploy を使用した Blue/Green デプロイを使用するかを選択します。詳細については、「Amazon ECS デプロイタイプ (p. 150)」を参照してください。

• Blue/Green デプロイタイプを選択した場合は、次の手順を実行します。• [デプロイ設定] で、サービスに使用するデプロイ設定を選択します。これにより、タスクセット

が更新されたときにトラフィックがどのようにシフトされるかが決まります。詳細については、「CodeDeploy を使用した Blue/Green デプロイ (p. 150)」を参照してください。

• [Service role for CodeDeploy] で、AWS CodeDeploy の IAM サービスロールを選択します。詳細については、「Amazon ECS CodeDeploy IAM ロール (p. 255)」を参照してください。

8. In the Task tagging configuration section, complete the following steps:

a. Select Enable ECS managed tags if you want Amazon ECS to automatically tag the tasks in theservice with the Amazon ECS managed tags. For more information, see Tagging Your AmazonECS Resources.

b. For Propagate tags from, select one of the following:

• Do not propagate – This option will not propagate any tags to the tasks in the service.• Service – This option will propagate the tags specified on your service to each of the tasks in the

service.• Task Definitions – This option will propagate the tags specified in the task definition of a task to

the tasks in the service.

Note

If you specify a tag with the same key in the Tags section, it will override the tagpropagated from either the service or the task definition.

9. [Tags (タグ)] セクションで、タスクに関連付ける各タグのキーと値を指定します。詳細については、「Amazon ECS リソースにタグを付ける」を参照してください。

10. [次のステップ] を選択し、「ステップ 2: ネットワークの設定 (p. 137)」に移動します。

ステップ 2: ネットワークの設定サービスのタスク定義で awsvpc ネットワークモードを使用する場合、VPC、サブネット、セキュリティグループをサービスに設定する必要があります。

API バージョン 2014-11-13137

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ロードバランサーを使用するようにサービスを設定する

サービスのタスク定義で awsvpc ネットワークモードを使用しない場合、次のステップ「ステップ 3: ロードバランサーを使用するようにサービスを設定する (p. 138)」に進むことができます。

awsvpc ネットワークモードは、EC2 起動タイプを使用するタスクには、パブリック IP アドレスを使用する ENI を提供しません。EC2 起動タイプを使用するタスクでインターネットにアクセスするには、NATゲートウェイを使用するよう設定されたプライベートサブネットでタスクを起動する必要があります。詳細については、『Amazon VPC ユーザーガイド』の「NAT ゲートウェイ」を参照してください。インバウンドのネットワークアクセスは、プライベート IP アドレスまたは DNS ホスト名を使用して VPC から実行するか、VPC からロードバランサーを経由させる必要があります。パブリックサブネット内で起動されるタスクには、アウトバウンドのネットワークにアクセスできません。

Note

上記の制限は Fargate 起動タイプを使用するタスクには適用されません。これらのタスクでパブリック IP アドレスを受け取るように設定できます。

VPC とセキュリティグループ設定をサービスに設定するには

1. まだ実行していない場合は、「ステップ 1: 基本的なサービスパラメータの設定 (p. 136)」の基本的なサービス設定手順に従います。

2. [Cluster VPC (クラスター VPC)] で、EC2 起動タイプを選択した場合は、コンテナインスタンスが存在する VPC を選択します。Fargate 起動タイプを選択した場合は、Fargate タスクが使用する VPCを選択します。専有ハードウェアテナンシーは Fargate タスクではサポートされていないため、選択した VPC で専有ハードウェアテナンシーが必須に設定されていないことを確認してください。

3. [Subnets] では、サービスタスクの配置に利用できるサブネットを選択します。4. [Security groups] にサービスタスク用のセキュリティグループが作成され、インターネットからの

HTTP トラフィックが許可されるようになります。このセキュリティグループの名前やルールを編集する場合や、既存のセキュリティグループを選択する場合は、[Edit] を選択してセキュリティグループ設定に変更を加えます。

5. [自動割り当てパブリック IP] で、タスクがパブリック IP アドレスを受け取るかどうかを選択します。Fargate タスクを使用している場合、タスクがコンテナイメージをプルするには、パブリックサブネットを使用し、パブリック IP アドレス、またはインターネットへのルートを持つプライベートサブネット、またはインターネットへのリクエストをルーティングできる NAT ゲートウェイを割り当てる必要があります。

6. ロードバランサーを使用するようにサービスを設定している場合、または Blue/Green デプロイタイプを使用している場合、「ステップ 3: ロードバランサーを使用するようにサービスを設定する (p. 138)」に進んでください。ロードバランサーを使用するようにサービスを設定しない場合、ロードバランサータイプに [None] を選択して、次のセクション「ステップ 5: サービスの AutoScaling を使用するようにサービスを設定する (p. 144)」に進むことができます。

ステップ 3: ロードバランサーを使用するようにサービスを設定するロードバランサーを使用して受信トラフィックをサービスのタスクへ分散するようにサービスを設定できます。サービスでローリング更新のデプロイタイプが使用されている場合、これはオプションです。サービスで Blue/Green デプロイタイプが使用されている場合、Application Load Balancer または NetworkLoad Balancer のいずれかを使用する必要があります。

ロードバランサーを使用するようにサービスを設定しない場合、ロードバランサータイプに [None] を選択して、次のセクション「ステップ 4: サービス検出 を使用するようにサービスを設定する (p. 143)」に進むことができます。

使用できる Elastic Load Balancing ロードバランサーを設定した場合は、以下の手順でサービスにアタッチするか、新しいロードバランサーを設定できます。詳細については、「ロードバランサーの作成 (p. 164)」を参照してください。

API バージョン 2014-11-13138

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ロードバランサーを使用するようにサービスを設定する

Important

これらの手順を実行する前に、Elastic Load Balancing ロードバランサーリソースを作成する必要があります。

トピック• ローリング更新のデプロイタイプのロードバランサーを設定する (p. 139)• Blue/Green デプロイタイプのロードバランサーを設定する (p. 141)

ローリング更新のデプロイタイプのロードバランサーを設定するサービスのタスクで、Elastic Load Balancing ヘルスチェックを開始して応答するまでに時間がかかる場合は、ヘルスチェックの猶予期間として最大 2,147,483,647 秒まで指定できます。この間は、サービススケジューラはヘルスチェックのステータスを無視します。この猶予期間により、サービススケジューラがタスクを異常とマークして時間より前に停止することがなくなります。これが有効であるのは、ロードバランサーを使用するようにサービスが設定されている場合のみです。

ヘルスチェックの猶予期間を設定するには

1. まだ実行していない場合は、「ステップ 1: 基本的なサービスパラメータの設定 (p. 136)」の基本的なサービス設定手順に従います。

2. [ヘルスチェックの猶予期間] の場合: Amazon ECS サービススケジューラが、タスクが最初に開始された後で異常な Elastic Load Balancing ターゲットのヘルスチェックを無視する期間 (秒単位) を入力します。

ロードバランサーを使用するようにサービスを設定するには、サービスで使用するロードバランサーのタイプを選択する必要があります。

ロードバランサーのタイプを選択するには

1. まだ実行していない場合は、「ステップ 1: 基本的なサービスパラメータの設定 (p. 136)」の基本的なサービス作成手順に従います。

2. [ロードバランサーの種類] で、サービスで使用するロードバランサーのタイプを選択します。

Application Load Balancer

コンテナで動的ホストポートマッピングの使用を許可します。これにより、単一のコンテナインスタンス上の同じポートを使用して、複数のタスクを配置できます。ルールベースのルーティングとパスを使用することで、1 つのロードバランサーの同じリスナーポートを複数のサービスで共有できます。

Network Load Balancer

コンテナで動的ホストポートマッピングの使用を許可します。これにより、単一のコンテナインスタンス上の同じポートを使用して、複数のタスクを配置できます。ルールベースのルーティングを使用することで、1 つのロードバランサーの同じリスナーポートを複数のサービスで共有できます。

Classic Load Balancer

静的ホストポートマッピングを必須にします (コンテナインスタンスごとに 1 つのタスクのみを許可)。ルールベースのルーティングとパスはサポートされていません。

Amazon ECS サービスには Application Load Balancer を使用して、拡張機能を利用できるようにすることをお勧めします。

API バージョン 2014-11-13139

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ロードバランサーを使用するようにサービスを設定する

3. [Select IAM role for service (サービス用のロールの選択)] で、[新しいロールの作成] を選択してサービスで使用する新しいロールを作成するか、既存の IAM ロール (デフォルトでは ecsServiceRole) を選択してサービスで使用します。

Important

既存の ecsServiceRole IAM ロールを使用するように選択した場合は、Application LoadBalancer および Classic Load Balancer を使用するための適切なアクセス権限が、そのロールにあることを確認する必要があります。詳細については、「サービススケジューラ IAMロール (p. 244)」を参照してください。

4. [ELB Name] で、サービスで使用するロードバランサーの名前を選択します。先ほど選択したロードバランサータイプに対応するロードバランサーのみがここに表示されます。

5. 次のステップは、サービスのロードバランサーのタイプによって異なります。Application LoadBalancer を選択した場合は、「Application Load Balancer を設定するには (p. 140)」の手順に従います。Network Load Balancer を選択した場合は、「Network Load Balancer を設定するには (p. 140)」の手順に従います。

Application Load Balancer を設定するには

1. [負荷分散用のコンテナ] で、ロードバランサーによってトラフィックの分散に使用されるタスク定義のコンテナとポートの組み合わせを選択してから、[ロードバランサーに追加] を選択します。

2. [リスナーポート] で、「Application Load Balancer の作成 (p. 165)」で作成したリスナーのリスナーポートとプロトコルを選択するか (該当する場合)、または、[新規作成] を選択して新しいリスナーを作成し、ポート番号を入力して、[リスナープロトコル] のポートプロトコルを選択します。

3. [Target group name] で、「Application Load Balancer の作成 (p. 165)」で作成したターゲットグループを選択するか (該当する場合)、または、[create new] を選択して新しいターゲットグループを作成します。

Important

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、ターゲットグループで instance ではなく、ip をターゲットタイプとして使用する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

4. (オプション) 新しいターゲットグループを作成するように選択した場合は、以下のフィールドに次のように入力します。

• [ターゲットグループ名] では、デフォルト名が設定されています。• [Target group protocol] に、タスクへのトラフィックのルーティングに使用するプロトコルを入力し

ます。• [Path pattern] で、リスナーに既存のルールがない場合は、デフォルトのパスパターン (/) が使用

されます。リスナーにデフォルトのルールがすでにある場合は、サービスのターゲットグループに送信するトラフィックに一致するパスパターンを入力する必要があります。たとえば、サービスがweb-app という名前のウェブアプリケーションであり、http://my-elb-url/web-app に一致するトラフィックをサービスにルーティングする場合は、パスパターンとして「/web-app*」と入力します。詳細については、Application Load Balancer 用ユーザーガイド の「ListenerRules」を参照してください。

• [Health check path] に、ロードバランサーがヘルスチェック ping を送信するパスを入力します。5. Application Load Balancer の設定が終了したら、[次のステップ] を選択します。

Network Load Balancer を設定するには

1. [負荷分散用のコンテナ] で、ロードバランサーによってトラフィックの分散に使用されるタスク定義のコンテナとポートの組み合わせを選択してから、[ロードバランサーに追加] を選択します。

API バージョン 2014-11-13140

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ロードバランサーを使用するようにサービスを設定する

2. [リスナーポート] で、「Application Load Balancer の作成 (p. 165)」で作成したリスナーのリスナーポートとプロトコルを選択するか (該当する場合)、または、[新規作成] を選択して新しいリスナーを作成し、ポート番号を入力して、[リスナープロトコル] のポートプロトコルを選択します。

3. [Target group name] で、「Application Load Balancer の作成 (p. 165)」で作成したターゲットグループを選択するか (該当する場合)、または、[create new] を選択して新しいターゲットグループを作成します。

Important

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、ターゲットグループで instance ではなく、ip をターゲットタイプとして使用する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

4. (オプション) 新しいターゲットグループを作成するように選択した場合は、以下のフィールドに次のように入力します。

• [ターゲットグループ名] では、デフォルト名が設定されています。• [Target group protocol] に、タスクへのトラフィックのルーティングに使用するプロトコルを入力し

ます。• [Health check path] に、ロードバランサーがヘルスチェック ping を送信するパスを入力します。

5. Network Load Balancer の設定が終了したら、[次のステップ] を選択します。

Blue/Green デプロイタイプのロードバランサーを設定するロードバランサーの使用に Blue/Green デプロイタイプを使用するサービスを設定するには、ApplicationLoad Balancer または Network Load Balancer のいずれかを使用する必要があります。

ロードバランサーのタイプを選択するには

1. まだ実行していない場合は、「ステップ 1: 基本的なサービスパラメータの設定 (p. 136)」の基本的なサービス作成手順に従います。

2. [ロードバランサーの種類] で、サービスで使用するロードバランサーのタイプを選択します。

Application Load Balancer

コンテナで動的ホストポートマッピングの使用を許可します。これにより、単一のコンテナインスタンス上の同じポートを使用して、複数のタスクを配置できます。ルールベースのルーティングとパスを使用することで、1 つのロードバランサーの同じリスナーポートを複数のサービスで共有できます。

Network Load Balancer

コンテナで動的ホストポートマッピングの使用を許可します。これにより、単一のコンテナインスタンス上の同じポートを使用して、複数のタスクを配置できます。ルールベースのルーティングを使用することで、1 つのロードバランサーの同じリスナーポートを複数のサービスで共有できます。

Amazon ECS サービスには Application Load Balancer を使用して、拡張機能を利用できるようにすることをお勧めします。

3. [ロードバランサー名] で、サービスで使用するロードバランサーの名前を選択します。先ほど選択したロードバランサータイプに対応するロードバランサーのみがここに表示されます。

4. 次のステップは、サービスのロードバランサーのタイプによって異なります。Application LoadBalancer を選択した場合は、「Application Load Balancer を設定するには (p. 140)」の手順に従います。Network Load Balancer を選択した場合は、「Network Load Balancer を設定するには (p. 140)」の手順に従います。

API バージョン 2014-11-13141

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ロードバランサーを使用するようにサービスを設定する

Blue/Green デプロイタイプの Application Load Balancer を設定するには

1. [負荷分散用のコンテナ] で、ロードバランサーによってトラフィックの分散に使用されるタスク定義のコンテナとポートの組み合わせを選択してから、[ロードバランサーに追加] を選択します。

2. [Production listener port (本稼働リスナーポート)] で、「Application Load Balancer の作成 (p. 165)」で作成したリスナーのリスナーポートとプロトコルを選択するか (該当する場合)、または、[新規作成]を選択して新しいリスナーを作成し、ポート番号を入力して、[Production listener protocol (本稼働リスナープロトコル)] のポートプロトコルを選択します。

3. (オプション) トラフィックを新しいタスクセットにルーティングする前に、ロードバランサーでリスナーポートおよびプロトコルを設定して、サービスの更新をテストする場合は、[Test listener (テストリスナー)] を選択します。以下の手順を実行します。

• [Test listener port (テストリスナーポート)] で、トラフィックをテストするリスナーのリスナーポートとプロトコルを選択するか、または、[新規作成] を選択して新しいテストリスナーを作成し、ポート番号を入力して、[Test listener protocol (テストリスナープロトコル)] でプロトコルを選択します。

4. Blue/Green デプロイの場合、2 つのターゲットグループが必要です。各ターゲットグループが、デプロイの別のタスクセットにバインドされます。以下の手順を実行します。

a. [Target group 1 name (ターゲットグループ 1 の名前)] で、「Application Load Balancer の作成 (p. 165)」で作成したターゲットグループを選択するか (該当する場合)、または、[新規作成]を選択して新しいターゲットグループを作成します。

Important

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、ターゲットグループで instance ではなく、ip をターゲットタイプとして使用する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

b. (オプション) 新しいターゲットグループを作成するように選択した場合は、以下のフィールドに次のように入力します。

• [Target group name] に、ターゲットグループの名前を入力します。• [Target group protocol] に、タスクへのトラフィックのルーティングに使用するプロトコルを入

力します。• [Path pattern] で、リスナーに既存のルールがない場合は、デフォルトのパスパターン (/) が

使用されます。リスナーにデフォルトのルールがすでにある場合は、サービスのターゲットグループに送信するトラフィックに一致するパスパターンを入力する必要があります。たとえば、サービスが web-app という名前のウェブアプリケーションであり、http://my-elb-url/web-app に一致するトラフィックをサービスにルーティングする場合は、パスパターンとして「/web-app*」と入力します。詳細については、Application Load Balancer 用ユーザーガイド の「ListenerRules」を参照してください。

• [Health check path] に、ロードバランサーがヘルスチェック ping を送信するパスを入力します。

c. ターゲットグループ 2 にも同様に、上記ステップを繰り返します。d. Application Load Balancer の設定が終了したら、[次のステップ] を選択します。ステップ 4: サー

ビス検出 を使用するようにサービスを設定する (p. 143) に移動します。

Blue/Green デプロイタイプの Network Load Balancer を設定するには

1. [負荷分散用のコンテナ] で、ロードバランサーによってトラフィックの分散に使用されるタスク定義のコンテナとポートの組み合わせを選択してから、[ロードバランサーに追加] を選択します。

API バージョン 2014-11-13142

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: サービス検出 を使用するようにサービスを設定する

2. [リスナーポート] で、「Application Load Balancer の作成 (p. 165)」で作成したリスナーのリスナーポートとプロトコルを選択するか (該当する場合)、または、[新規作成] を選択して新しいリスナーを作成し、ポート番号を入力して、[リスナープロトコル] のポートプロトコルを選択します。

3. [Target group name] で、「Application Load Balancer の作成 (p. 165)」で作成したターゲットグループを選択するか (該当する場合)、または、[create new] を選択して新しいターゲットグループを作成します。

Important

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、ターゲットグループで instance ではなく、ip をターゲットタイプとして使用する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、Elastic Network Interface に関連付けられているためです。

4. (オプション) 新しいターゲットグループを作成するように選択した場合は、以下のフィールドに次のように入力します。

• [Target group name] に、ターゲットグループの名前を入力します。• [Target group protocol] に、タスクへのトラフィックのルーティングに使用するプロトコルを入力し

ます。• [Health check path] に、ロードバランサーがヘルスチェック ping を送信するパスを入力します。

5. Network Load Balancer の設定が終了したら、[次のステップ] を選択します。ステップ 4: サービス検出 を使用するようにサービスを設定する (p. 143) に移動します。

ステップ 4: サービス検出 を使用するようにサービスを設定するAmazon ECS サービスは、DNS を介してサービスを検出できる サービス検出 統合をオプションで有効にできます。詳細については、「サービス検出 (p. 181)」を参照してください。

サービス検出を使用するようにサービスを設定しない場合、次のセクション「ステップ 5: サービスのAuto Scaling を使用するようにサービスを設定する (p. 144)」に進むことができます。

サービス検出 を設定するには

1. まだ実行していない場合は、「ステップ 1: 基本的なサービスパラメータの設定 (p. 136)」の基本的なサービス設定手順に従います。

2. [Configure network (ネットワークの設定)] ページで、[Enable サービス検出 integration (統合の有効化)] を選択します。

3. [Namespace (名前空間)] で、Amazon Route 53 名前空間を所有している場合にはその名前空間を選択し、そうでない場合には [create new private namespace (新しいプライベート名前空間の作成)] を選択します。

4. 新しい名前空間を作成する場合、[名前空間名] には名前空間のわかりやすい名前を入力します。これは Amazon Route 53 ホストゾーンで使用する名前です。

5. [Configure サービス検出 service (サービスの設定)] で、新規の サービス検出 サービスを作成するか、または既存のサービスを選択します。

6. 新規の サービス検出 サービスを作成する場合は、[Service discovery name (サービスの検出名)] にサービス検出 サービスのわかりやすい名前を入力します。これは、作成する DNS レコードのプレフィックスとして使用されます。

7. サービス検出 サービスでヘルスチェックを有効にするには、[Enable ECS task health propagation(ECS タスク状態の伝達の有効化)] を選択します。

8. [DNS record type (DNS レコード型)] で、サービスに作成する DNS レコード型を選択します。Amazon ECS サービス検出 は、タスク定義で指定されたネットワークモードに応じて、A レコー

API バージョン 2014-11-13143

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: サービスの Auto Scaling を

使用するようにサービスを設定する

ドおよび SRV レコードのみをサポートします。これらのレコードタイプの詳細については、AmazonRoute 53 開発者ガイドの「 サポートされている DNS レコードタイプ 」を参照してください。

• サービスタスクで指定されたタスク定義が bridge または host ネットワークモードを使用する場合、SRV タイプのレコードのみがサポートされます。レコードに関連付けるコンテナ名とポートの組み合わせを選択します。

• サービスタスクで指定されたタスク定義が awsvpc ネットワークモードを使用する場合、A またはSRV レコードタイプのいずれかを選択します。タイプ A の DNS レコードタイプが選択されている場合は、次のステップまでスキップします。タイプ SRV が選択されている場合は、サービスを検出できるポートまたはレコードに関連付けるコンテナ名とポートの組み合わせを指定します。

9. [TTL] には、リソースレコードキャッシュの有効期限 (TTL) を秒単位で入力します。この値は、レコードセットが DNS リゾルバーおよびウェブブラウザによってキャッシュされる期間を決定します。

10. [次のステップ] を選択して続行し、「ステップ 5: サービスの Auto Scaling を使用するようにサービスを設定する (p. 144)」に移動します。

ステップ 5: サービスの Auto Scaling を使用するようにサービスを設定するオプションで、Auto Scaling を使用して CloudWatch アラームに応じて Amazon ECS サービスの必要タスク数をスケールアップ/ダウンするように、Amazon ECS サービスを設定できます。

Amazon ECS サービスの Auto Scaling は、以下のタイプのスケーリングポリシーをサポートします。

• ターゲット追跡スケーリングポリシー (p. 175) (推奨)—特定のメトリクスのターゲット値に基づいて、サービスが実行するタスク数を増減させます。これはサーモスタットが家の温度を維持する方法に似ています。温度を選択すれば、後はサーモスタットがすべてを実行します。

• ステップスケーリングポリシー (p. 180)— アラーム超過のサイズに応じて変動する一連のスケーリング調整値 (ステップ調整値) に基づいて、サービスが実行するタスク数を増減させます。

詳細については、「サービスの Auto Scaling (p. 173)」を参照してください。

基本的な サービスの Auto Scaling パラメータを設定するには

1. まだ実行していない場合は、「ステップ 1: 基本的なサービスパラメータの設定 (p. 136)」の基本的なサービス設定手順に従います。

2. [Auto Scaling を設定] ページで、[Service Auto Scaling の設定を変更することで、サービスの必要数を調整する] を選択します。

3. [Minimum number of tasks (タスクの最小数)] に、サービスの Auto Scaling で使用するタスクの下限数を入力します。サービスの必要数は、この数を下回ると自動的に調整されません。

4. [タスクの必要数] には、前に入力した値があらかじめ入力されています。この時点でサービスの必要数を変更できますが、この値は、このページで指定した最小数と最大数の間にあることが必要です。

5. [Maximum number of tasks (タスクの最大数)] に、サービスの Auto Scaling で使用されるタスクの上限数を入力します。サービスの必要数は、この数を上回ると自動的に調整されません。

6. [IAM role for Service Auto Scaling (サービスの自動スケーリング用の IAM ロール)]で、ecsAutoscaleRole を選択します。このロールが存在しない場合は、[新しいロールの作成] を選択して、コンソールで作成します。

7. 次の手順は、サービス用のターゲットの追跡またはステップスケーリングポリシーを作成するためのステップです。目的のスケーリングポリシータイプを選択します。

ここでの手順は、ターゲットの追跡スケーリングポリシーと、サービスのスケーリングアクティビティのトリガーに使用できる CloudWatch アラームを作成するために役立ちます。

API バージョン 2014-11-13144

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: サービスの Auto Scaling を

使用するようにサービスを設定する

サービスのターゲットの追跡スケーリングポリシーを設定するには

1. [スケーリングポリシータイプ] で [ターゲットの追跡] を選択します。2. [ポリシー名] に、ポリシーのわかりやすい名前を入力します。3. [ECS service metric (ECS サービスメトリクス)] で、追跡するメトリクスを選択します。以下のメトリ

クスが利用可能です。

• ECSServiceAverageCPUUtilization—サービスの CPU 平均使用率。• ECSServiceAverageMemoryUtilization—サービスのメモリ平均使用率。• ALBRequestCountPerTarget—Application Load Balancer ターゲットグループ内のターゲットごとに

完了したリクエストの数。4. [ターゲット値] に、ポリシーが維持するメトリクス値を入力します。た

とえば、ALBRequestCountPerTarget にはターゲット値 1000 を使用し、ECSServiceAverageCPUUtilization にはターゲット値 75 (%) を使用します。

5. [スケールアウトのクールダウン期間] に、スケールアウトアクティビティが完了してから別のスケールアウトアクティビティが開始されるまでの時間 (秒) を入力します。スケールアウトのクールダウン期間が有効な間は、その期間中にクールダウンを開始したスケールアウトアクティビティによって追加された容量は、次のスケールアウトに予定される容量の一部として繰り入れられます。これにより、スケールアウトが継続的に (ただし過剰になることなく) 行われます。

6. [スケールインのクールダウン期間] に、スケールインアクティビティが完了してから別のスケールインアクティビティが開始されるまでの時間 (秒) を入力します。スケールインのクールダウン期間は、その期間が過ぎるまでは以後のスケールインリクエストをブロックするために使用されます。これにより、スケールインが抑制されてアプリケーションの可用性が確保されます。ただし、スケールイン後のクールダウン期間中に別のアラームによってスケールアウトアクティビティがトリガーされると、サービスの Auto Scaling によってスケーラブルなターゲットが即座にスケールアウトされます。

7. (省略可能) このポリシーのスケールインアクションを無効にするには、[スケールインの無効化] を選択します。これにより、後でスケールイン用の別のスケーリングポリシーを作成できます。

8. [Next step] を選択します。

ここでの手順は、ステップスケーリングポリシーと、サービスのスケーリングアクティビティのトリガーに使用できる CloudWatch アラームを作成するために役立ちます。サービスの必要数を増やすための[Scale out] アラームと、サービスの必要数を減らすための [Scale in] アラームを作成できます。

サービスのステップスケーリングポリシーを設定するには

1. [スケーリングポリシータイプ] で [ステップスケーリング] を選択します。2. [ポリシー名] に、ポリシーのわかりやすい名前を入力します。3. [Execute policy when (次の場合にポリシーを実行)] で、サービスのスケールアップ/ダウンに使用する

CloudWatch アラームを選択します。

以前に作成した既存の CloudWatch アラームを使用することも、新しいアラームを作成することもできます。[Create new alarm (新しいアラームの作成)] ワークフローでは、作成するサービスのCPUUtilization と MemoryUtilization に基づいて CloudWatch アラームを作成できます。他のメトリクスを使用するには、CloudWatch コンソールでアラームを作成してから、このウィザードに戻ってそのアラームを選択します。

4. (オプション) 新しいアラームを作成するように選択した場合は、以下の手順を実行します。

a. [Alarm name] に、アラームのわかりやすい名前を入力します。たとえば、サービスの CPU 使用率が 75% を超えたときにトリガーされるアラームには、service_name-cpu-gt-75 という名前を付けることができます。

b. [ECS service metric] で、アラームに使用するサービスメトリクスを選択します。詳細については、「サービスの Auto Scaling (p. 173)」を参照してください。

c. [Alarm threshold] で、以下の情報を入力してアラームを設定します。

API バージョン 2014-11-13145

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: サービスを確認して作成する

• アラームの CloudWatch 統計を選択します (多くの場合、[平均] のデフォルト値を使用できます)。詳細については、Amazon CloudWatch ユーザーガイドの「統計」を参照してください。

• アラームの比較演算子を選択し、比較演算子で確認する値 (> and 75 など) を入力します。• アラームがトリガーされるまでの連続する期間の数とその期間の長さを入力します。たとえ

ば、連続する期間の数が 2、その期間が 5 分であれば、アラームがトリガーされるまでに 10 分かかります。Amazon ECS タスクはすばやくスケールアップ/ダウンされる場合があるため、連続する期間の数を少なくし、期間を短くして、アラームの応答時間をできる限り短くすることを検討してください。

d. [Save] を選択します。5. [Scaling action] に、以下の情報を入力して、サービスがアラームにどのように応答するかを設定しま

す。

• サービスに対してタスクを追加するか、削除するか、または特定の必要数を設定するかを選択します。

• タスクを追加または削除するように選択した場合は、スケーリングアクションがトリガーされたときに追加または削除するタスクの数 (または既存のタスクのパーセント値) を入力します。必要数を設定するように選択した場合は、スケーリングアクションがトリガーされたときにサービスに設定する必要数を入力します。

• (オプション) タスクを追加または削除するように選択した場合は、前の値を既存の必要数の整数として使用するか、パーセント値として使用するかを選択します。

• ステップスケーリング調整の下限値を入力します。デフォルトでは、最初のスケーリングアクションの場合、この値はアラームがトリガーされるメトリクス値です。たとえば、以下のスケーリングアクションでは、CPU 使用率が 75% を超えると、既存の必要数の 100% が加算されます。

6. (オプション) 「Step 5 (p. 146)」の手順を繰り返して、1 つのアラームに対して複数のスケーリングアクションを設定します (たとえば、CPU 使用率が 75 〜 85% の場合は 1 つのタスクが追加され、CPU 使用率が 85% を超える場合は 2 つのタスクが追加されるようにします)。

7. (オプション) 既存の必要数のパーセント値を加算または減算するように選択した場合は、[Add tasksin increments of N task(s)] に最小増減値を入力します。

8. [Cooldown period] に、スケーリングアクションの間隔を秒数で入力します。9. [Scale in (スケールイン)] ポリシーに対してStep 1 (p. 145)〜Step 8 (p. 146) の手順を繰り返し、

[保存] を選択します。10. [次のステップ] を選択して続行し、「ステップ 6: サービスを確認して作成する (p. 146)」に移動し

ます。

ステップ 6: サービスを確認して作成する基本的なサービス定義パラメータを設定し、オプションでサービスのネットワーク、ロードバランサー、サービス検出、および自動スケーリングを設定した後、その設定を確認できます。その設定を確認したら、[サービスの作成] を選択して、サービスの作成を終了できます。

Note

サービスを作成した後、サービス定義で指定されているターゲットグループ ARN、ロードバランサー名、コンテナ名、コンテナポートはイミュータブルです。既存のサービスのロードバランサー設定を追加、削除、または変更することはできません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。

API バージョン 2014-11-13146

Amazon ECS AWS Fargate 用ユーザーガイドサービスの更新

サービスの更新実行中のサービスを更新することで、サービスが維持するタスク数の変更、タスクがどのタスク定義を使用するか、また、タスクで Fargate 起動タイプを使用している場合には、サービスが使用するプラットフォームバージョンの変更ができます。さらに容量が必要なアプリケーションがある場合には、サービスのスケール調整ができます。スケールダウンする未使用のキャパシティーがある場合は、サービスのタスクの必要数を減らし、リソースを解放できます。

アプリケーションの Docker イメージを更新した場合は、そのイメージを使用する新しいタスク定義を作成し、サービスにデプロイできます。

Note

更新した Docker イメージがサービスに既存するタスク定義と同じタグを使用する場合(my_image:latest など)、タスク定義の新しいリビジョンを作成する必要はありません。サービスの更新には、以下の手順を使用してサービスの現在の設定を維持し、[新しいデプロイの強制]を選択します。デプロイによって起動される新しいタスクは、リポジトリの開始時にリポジトリから現在のイメージあるいはタグを取得します。[Force new deployment (新しいデプロイの強制)]オプションは、LATEST を指定する場合により最近のプラットフォームバージョンを使用するように Fargate タスクを更新するためにも使用できます。たとえば、LATEST を指定し、実行中のタスクが 1.0.0 プラットフォームバージョンを使用している場合に、より最新のプラットフォームバージョンを使用するために再起動したいときなどです。

サービススケジューラは、最小ヘルス率と最大ヘルス率のパラメータ (サービスのデプロイ設定) を使用して、デプロイ戦略を判断します。

サービスでローリング更新 (ECS) のデプロイタイプが使用されている場合、最小ヘルス率は、デプロイ時に RUNNING 状態に保つ必要のあるサービスのタスクの下限数をサービスのタスクの必要数のパーセント値 (最も近い整数に切り上げ) で表します。サービスに EC2 起動タイプを使用するタスクが含まれている場合、DRAINING 状態のコンテナインスタンスがある間は、パラメータも適用されます。このパラメータにより、追加のクラスターキャパシティーを使用せずにデプロイできます。たとえば、サービスで必要数が 4 タスク、最小ヘルス率が 50% とすると、スケジューラは 2 つの新しいタスクを開始する前に、2 つの既存のタスクを停止してクラスターのキャパシティーを解放できます。ロードバランサーを使用しないサービスのタスクは、RUNNING 状態にある場合正常な状態と見なされます。ロードバランサーを使用するサービスのタスクは、RUNNING 状態にあり、ロードバランサーによって正常と報告された場合に、正常であると見なされます。最小ヘルス率のデフォルト値は 100% です。

サービスでローリング更新 (ECS) のデプロイタイプが使用されている場合、最大ヘルス率パラメータは、デプロイ時に RUNNING または PENDING 状態で使用できるサービスのタスクの上限数をサービスのタスクの必要数のパーセント値 (最も近い整数に切り下げ) で表します。サービスに EC2 起動タイプを使用するタスクが含まれている場合、DRAINING 状態のコンテナインスタンスがある間は、パラメータも適用されます。このパラメータを使用すると、デプロイのバッチサイズを定義できます。たとえば、サービスで必要数が 4 タスク、最大ヘルス率の値が 200% とすると、スケジューラは 4 つの古いタスクを停止する前に、4 つの新しいタスクを開始できます。そのために必要なクラスターリソースを使用できることが前提です。最大ヘルス率のデフォルト値は 200% です。

サービスで EC2 起動タイプを使用する Blue/Green (CODE_DEPLOY) デプロイタイプとタスクが使用されている場合、最小ヘルス率 および 最大ヘルス率の値はデフォルト値に設定されます。コンテナインスタンスが DRAINING 状態にある間、RUNNING 状態を保つサービスのタスク数の下限と上限を定義する目的でのみ使用されます。サービスのタスクで Fargate 起動タイプを使用する場合、最小ヘルス率と最大ヘルス率の値は使用されません。現在、サービスについて説明するときに、これらは表示されます。

更新中にサービススケジューラがタスクを置き換えるとき、サービスはまずロードバランサーからタスクを削除し (使用されている場合)、接続のドレインが完了するのを待ちます。その後、タスクで実行されているコンテナに docker stop と同等のコマンドが発行されます。この結果、SIGTERM 信号と 30 秒のタイムアウトが発生し、その後に SIGKILL が送信され、コンテナが強制的に停止されます。コンテナがSIGTERM 信号を正常に処理し、その受信時から 30 秒以内に終了する場合、SIGKILL 信号は送信されません。サービススケジューラは、最小ヘルス率と最大ヘルス率の設定で定義されているとおりに、タスクを開始および停止します。

API バージョン 2014-11-13147

Amazon ECS AWS Fargate 用ユーザーガイドサービスの更新

Important

タスク定義でコンテナが使用するポートを変更する場合は、変更後のポートを使用するようにコンテナインスタンスのセキュリティグループを更新する必要があります。サービスでロードバランサーを使用する場合、サービスの作成時に定義したロードバランサー設定は変更できません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。ロードバランサー名、コンテナ名、またはサービスロードバランサー設定に関連付けられたコンテナポートを変更するには、新しいサービスを作成する必要があります。Amazon ECS は、Elastic Load Balancing ロードバランサーまたは Amazon ECS コンテナインスタンスに関連付けられたセキュリティグループを自動的には更新しません。

実行中のサービスを更新するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーで、クラスターのあるリージョンを選択します。3. ナビゲーションペインで [Clusters] を選択します。4. [クラスター] ページで、サービスが存在するクラスターの名前を選択します。5. [Cluster: name] ページで、[Services] を選択します。6. 更新するサービスの左側にあるチェックボックスをオンにし、[Update] を選択します。7. [サービスの設定] ページで、サービスの情報はあらかじめ入力されています。タスク定義、キャパシ

ティープロバイダー戦略、プラットフォームバージョン、デプロイ設定、タスクの必要数のいずれか(またはこれらの組み合わせ) を変更し、[次のステップ] を選択します。

Note

サービスで既存のタスク定義にあるものと同じタグ (my_image:latest など) で最新に更新された Docker イメージを使用するには、あるいはサービスの現在の設定を維持するには、[Force new deployment (新しいデプロイの強制)] を選択します。デプロイによって起動される新しいタスクは、リポジトリの開始時にリポジトリから現在のイメージあるいはタグを取得します。[Force new deployment (新しいデプロイの強制)] オプションは、LATEST を指定する場合により最近のプラットフォームバージョンを使用するように Fargate タスクを更新するためにも使用できます。たとえば、LATEST を指定し、実行中のタスクが 1.0.0 プラットフォームバージョンを使用している場合に、より最新のプラットフォームバージョンを使用するために再起動したいときなどです。

8. [Configure deployments (デプロイの設定)] ページでは、サービスで Blue/Green デプロイタイプを使用している場合、サービスのデプロイメントのコンポーネントはあらかじめ入力されています。以下の設定を確認します。

a. [アプリケーション名] では、サービスが含まれる CodeDeploy アプリケーションを選択します。b. [デプロイグループ名] では、サービスが含まれる CodeDeploy デプロイグループを選択します。c. サービスのデプロイメントの新しいリビジョンの一部として実行するデプロイライフサイクルイ

ベントフックと関連する Lambda 関数を選択します。使用できるライフサイクルフックは次のとおりです。

• BeforeInstall – 置き換えタスクセットが作成される前に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果では、ロールバックはトリガーされません。

• AfterInstall – 置き換えタスクセットが作成された後に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果により、ロールバックをトリガーできます。

• BeforeAllowTraffic – 本稼働トラフィックが置き換えタスクセットに再ルーティングされる前に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果により、ロールバックをトリガーできます。

API バージョン 2014-11-13148

Amazon ECS AWS Fargate 用ユーザーガイドサービスの削除

• AfterAllowTraffic – 本稼働トラフィックが置き換えタスクセットに再ルーティングされた後に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果により、ロールバックをトリガーできます。

ライフサイクルフックの詳細については、AWS CodeDeploy User Guide の「AppSpec の「hooks」セクション」を参照してください。

9. [Next step] を選択します。10. [ネットワークの設定] ページで、ネットワークの情報はあらかじめ入力されています。[ロードバラン

シング] セクションでは、サービスで Blue/Green デプロイタイプを使用している場合、ターゲットグループと関連付けるリスナーを選択します。ヘルスチェックの猶予期間を変更します (必要な場合)。[次のステップ] をクリックします。

11. (オプション) サービスの Auto Scaling を使用すると、CloudWatch アラームに応じてサービスが自動的にスケールアップ/ダウンされるようにできます。

a. [Optional configurations (オプションの設定)] で、[サービスの Auto Scaling の設定] を選択します。

b. ステップ 5: サービスの Auto Scaling を使用するようにサービスを設定する (p. 144) に進みます。

c. そのセクションの手順を完了し、戻ります。12. [Update Service] を選択して終了し、サービスを更新します。

サービスの削除コンソールを使用して Amazon ECS サービスを削除できます。削除する前に、このサービスは自動的に0 までスケールダウンされます。サービスに関連付けられたロードバランサーまたは サービス検出 リソースがある場合、これらはサービスの削除の影響を受けません。Elastic Load Balancing リソースを削除するには、ロードバランサーのタイプに応じて、次のいずれかのトピックを参照してください。「ApplicationLoad Balancer の削除」または「Network Load Balancer の削除」。サービス検出 リソースを削除するには、以下の手順に従ってください。

Amazon ECS サービスを削除するには

以下の手順に従って、Amazon ECS サービスを削除します。

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーで、クラスターのあるリージョンを選択します。3. ナビゲーションペインで、[Clusters (クラスター)] を選択し、サービスが存在するクラスターの名前を

選択します。4. [Cluster: name] ページで、[Services] を選択します。5. 削除するサービスの左側にあるチェックボックスをオンにし、[Delete] を選択します。6. テキストフレーズを入力してサービスの削除を確認し、[削除] を選択します。

サービス検出 リソースを削除するには (AWS CLI)

残りのサービス検出リソースを削除するには、AWS CLI を使用してサービス検出サービスおよびサービス検出名前空間を削除します。

1. AWS CLI の最新バージョンがインストールされ、設定されていることを確認します。AWS CLI のインストールまたはアップグレードの方法についての詳細は、「AWS コマンドラインインターフェイスのインストール」を参照してください。

2. 削除する サービス検出 サービスの ID を取得します。

API バージョン 2014-11-13149

Amazon ECS AWS Fargate 用ユーザーガイドデプロイタイプ

aws servicediscovery list-services --region <region_name>

Note

サービス検出 サービスが返されない場合は、ステップ 4 に進みます。3. 前の出力で取得した サービス検出 ID を使用して、サービスを削除します。

aws servicediscovery delete-service --id <service_discovery_service_id> --region <region_name>

4. 削除する サービス検出 名前空間の ID を取得します。

aws servicediscovery list-namespaces --region <region_name>

5. 前の出力で取得した サービス検出 名前空間 ID を使用して、名前空間を削除します。

aws servicediscovery delete-namespace --id <service_discovery_namespace_id> --region <region_name>

Amazon ECS デプロイタイプAmazon ECS デプロイタイプは、サービスが使用するデプロイメント戦略を決定します。デプロイタイプには、ローリング更新、Blue/Green、外部の 3 つがあります。

トピック• ローリング更新 (p. 150)• CodeDeploy を使用した Blue/Green デプロイ (p. 150)• 外部デプロイ (p. 155)

ローリング更新ローリング更新デプロイタイプは Amazon ECS により制御されます。これには、コンテナの現在実行されているバージョンを最新バージョンに置き換えるサービススケジューラも含まれます。ローリング更新中にサービスに対して Amazon ECS が追加または削除するタスク数は、デプロイ設定により制御されます。デプロイ設定はサービスデプロイメント中に許可されているタスクの最小数と最大数で構成されます。

ローリング更新デプロイタイプを使用する新しい Amazon ECS サービスを作成するには、「サービスの作成 (p. 135)」を参照してください。

CodeDeploy を使用した Blue/Green デプロイBlue/Green デプロイタイプでは、CodeDeploy によって制御される Blue/Green デプロイモデルを使用します。このデプロイタイプでは、本番稼働用トラフィックを送信する前にサービスの新しいデプロイメントを検証することができます。詳細については、AWS CodeDeploy User Guideの「CodeDeploy とは」を参照してください。

Blue/Green デプロイ中にトラフィックを移行するには、次の 3 つの方法があります。

• Canary — トラフィックを 2 回の増分で移行します。事前定義された複数の Canary オプションから選択し、最初の増分および間隔でトラフィックを更新済みタスクセットに移行する割合 (%) を分単位で指定できます。次に 2 回目の増分で残りのトラフィックを移行します。

API バージョン 2014-11-13150

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy を使用した Blue/Green デプロイ

• 線形 — トラフィックを毎回、同じ増分、同じ間隔 (分) で移行します。事前定義された複数の線形オプションから選択し、増分ごとに移行するトラフィックの割合 (%) と増分間の間隔 (分) を指定できます。

• 一括 — すべてのタスクを元のタスクセットから更新済みタスクセットに同時に移行します。

以下に示しているのは、サービスが Blue/Green デプロイタイプを使用するときに Amazon ECS が使用する CodeDeploy のコンポーネントです。

CodeDeploy アプリケーション

CodeDeploy リソースのコレクションです。これは 1 つ以上のデプロイグループで構成されます。CodeDeploy デプロイグループ

デプロイ設定。これには以下の構成要素があります。• Amazon ECS クラスターとサービス• ロードバランサーのターゲットグループとリスナー情報• デプロイメントロールバック戦略• トラフィックルーティング設定• 元のリビジョンの終了設定• デプロイ設定• デプロイメントを停止するために設定できる CloudWatch アラームの設定• 通知用 SNS または CloudWatch イベント の設定

詳細については、『AWS CodeDeploy User Guide』の「デプロイグループの使用」を参照してください。

CodeDeploy デプロイ設定

デプロイメント中に本番トラフィックを置換タスクに CodeDeploy がルーティングする方法を指定します。次の事前定義された線形および Canary デプロイ設定を使用できます。また、カスタム定義の線形および Canary デプロイを作成することもできます。詳細については、『AWS CodeDeploy UserGuide』の「デプロイ設定を使用する」を参照してください。

デプロイ設定 説明

CodeDeployDefault.ECSLinear10PercentEvery1Minutesすべてのトラフィックを移行するまで、1 分ごとにトラフィックの 10% を移行します。

CodeDeployDefault.ECSLinear10PercentEvery3Minutesすべてのトラフィックを移行するまで、3 分ごとにトラフィックの 10% を移行します。

CodeDeployDefault.ECSCanary10percent5Minutes最初の増分でトラフィックの 10% を移行します。残りの 90% は 5 分後にデプロイします。

CodeDeployDefault.ECSCanary10percent15Minutes最初の増分でトラフィックの 10% を移行します。残りの 90 パーセントは 15 分後にデプロイされます。

CodeDeployDefault.ECSAllAtOnce すべてのトラフィックを同時に更新済みAmazon ECS コンテナに移行します。

リビジョン

リビジョンは、CodeDeploy アプリケーション仕様ファイル (AppSpec ファイル) です。AppSpecファイルでは、タスク定義の完全な ARN と置換タスクセットのコンテナとポートを指定し、新しいデプロイが作成時にトラフィックがルーティングされるようにします。コンテナ名は、タスク定義内

API バージョン 2014-11-13151

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy を使用した Blue/Green デプロイ

で参照されているコンテナ名のいずれかに設定する必要があります。ネットワーク設定またはプラットフォームのバージョンがサービス定義で更新された場合は、AppSpec ファイルでその詳細についても指定する必要があります。また、デプロイメントライフサイクルイベント中に実行する Lambda 関数も指定できます。Lambda 関数を使用することで、デプロイメント中にテストを実行し、メトリクスを返すことができます。詳細については、AWS CodeDeploy User Guide で「AppSpec File リファレンス」を参照してください。

Blue/Green デプロイの考慮事項Blue/Green デプロイタイプを使用するときは、以下の点を考慮します。

• Blue/Green デプロイタイプを使用して、Amazon ECS サービスが最初に作成されたとき、Amazon ECSタスクセットが作成されます。

• このサービスは Application Load Balancer または Network Load Balancer のどちらかを使用するように設定する必要があります。Classic Load Balancer はサポートされていません。ロードバランサーの要件は以下のとおりです。• 本番稼働用リスナーをロードバランサーに追加する必要があります。これは本番トラフィックをルー

ティングするために使用されます。• オプションテストリスナーをロードバランサーに追加することができます。これはテストトラフィッ

クをルーティングするために使用されます。テストリスナーを指定する場合、CodeDeploy はデプロイメント中にテストトラフィックを置換タスクセットにルーティングします。

• 本番稼働用とテストリスナーの両方が同じロードバランサーに属している必要があります。• ロードバランサーに対してターゲットグループを定義する必要があります。ターゲットグループは本

番稼働用リスナーを通じてトラフィックをサービスの元のタスクセットにルーティングします。• Blue/Green デプロイタイプを使用する場合、Amazon ECS サービスの Auto Scaling はサポートされま

せん。回避策として、サービスのデプロイ前に、サービス用に作成した Amazon EC2 Auto Scaling グループでスケーリングプロセスを一時停止し、デプロイが完了したら、そのプロセスを再開できます。詳細については、Amazon EC2 Auto Scaling ユーザーガイド の「スケーリングプロセスの中断と再開」を参照してください。

• Blue/Green デプロイタイプを使用する場合、クラスターキャパシティープロバイダーはサポートされません。

• Fargate 起動タイプまたは CODE_DEPLOY デプロイコントローラータイプを使用するタスクは、DAEMONスケジューリング戦略をサポートしません。

• 最初に CodeDeploy アプリケーションおよびデプロイグループを作成する際に、以下を指定する必要があります。• ロードバランサーに対して 2 つのターゲットグループを定義する必要があります。1 つのターゲット

グループは、Amazon ECS サービスの作成時に、ロードバランサーに対して定義された最初のターゲットグループです。2 番目のターゲットグループの唯一の要件は、サービスが使用するものとは別のロードバランサーに関連付けることはできないということです。

• Amazon ECS サービスに対して CodeDeploy デプロイを作成すると、CodeDeploy は置換タスクセット(または Green タスクセット) をデプロイで作成します。テストリスナーをロードバランサーに追加した場合、CodeDeploy はテストトラフィックを置換タスクセットにルーティングします。この時点で検証テストを実行できます。次に、CodeDeploy は本番稼働用トラフィックを元のタスクセットから置換タスクセットに再ルーティングします。このときデプロイグループへのトラフィックの再ルーティング設定に従います。

Amazon ECS コンソールの操作Amazon ECS コンソールのサービス作成とサービス更新のワークフローでは Blue/Green デプロイがサポートされています。

Blue/Green デプロイタイプを使用する Amazon ECS サービスを作成するには、「サービスの作成 (p. 135)」を参照してください。

API バージョン 2014-11-13152

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy を使用した Blue/Green デプロイ

Blue/Green デプロイタイプを使用している既存の Amazon ECS サービスを更新するには、「サービスの更新 (p. 147)」を参照してください。

Blue/Green デプロイタイプを使用した Amazon ECS サービスを Amazon ECS コンソールを使用して作成するとき、Amazon ECS タスクセットと次の CodeDeploy リソースは次のデフォルト設定で自動的に作成されます。

リソース デフォルト設定

アプリケーション名 AppECS-<cluster[:47]>-<service[:47]>

デプロイグループ名 DgpECS-<cluster[:47]>-<service[:47]>

Deployment group load balancer info (デプロイグループのロードバランサー情報)

ロードバランサー本番稼働用リスナー、オプションテストリスナー、指定されたターゲットグループは、デプロイグループ設定に追加されます。

トラフィックルーティング設定 トラフィックの再ルーティング – デフォルトでは [Reroute traffic immediately (すぐにトラフィックを再ルーティング)] に設定されます。これは CodeDeploy コンソールで、またはTrafficRoutingConfig を更新することで変更できます。詳細については、『AWS CodeDeployAPI Reference』の「CreateDeploymentConfig」を参照してください。

元のリビジョンの終了設定 元のリビジョン終了設定が、Blue タスクセットを終了する前に、トラフィックが再ルーティングされた後 1 時間待機するように設定されます。

デプロイ設定 デプロイ設定は、デフォルトでCodeDeployDefault.ECSAllAtOnce に設定されます。この場合、すべてのトラフィックは Blueタスクセットから Green タスクセットに同時にルーティングされます。デプロイ設定は、サービスの作成後に AWS CodeDeploy コンソールを使用して変更できます。

Automatic rollback configuration (自動ロールバックの設定)

デプロイメントが失敗すると、自動ロールバック設定がロールバックするように指定されます。

Blue/Green デプロイタイプを使用する Amazon ECS サービスの詳細を表示するには、Amazon ECS コンソールで [Deployments (デプロイ)] タブを使用します。

CodeDeploy コンソールで CodeDeploy デプロイグループの詳細を表示するには、AWS CodeDeploy UserGuide の「CodeDeploy を使用したデプロイグループの詳細の表示」を参照してください。

CodeDeploy コンソールで CodeDeploy デプロイグループの設定を変更するには、AWS CodeDeploy UserGuide の「CodeDeploy を使用したデプロイグループの設定の変更」を参照してください。

IAM アクセス権限が必要な Blue/Green デプロイAmazon ECS Blue/Green デプロイは Amazon ECS および CodeDeploy API の組み合わせによって実現されています。IAM ユーザーは、AWS マネジメントコンソール、AWS CLI または SDK で Amazon ECSBlue/Green デプロイを使用する前に、これらのサービスに対する適切なアクセス権限が必要です。

API バージョン 2014-11-13153

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy を使用した Blue/Green デプロイ

サービスの作成や更新に使用する標準の IAM アクセス権限に加えて、Amazon ECS には次のアクセス権限が必要です。IAM の AmazonECS_FullAccess ポリシーには、次のアクセス権限が追加されています。詳細については、「AmazonECS_FullAccess (p. 232)」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "cloudwatch:DescribeAlarms", "lambda:ListFunctions" ], "Resource": [ "*" ] } ]}

Note

タスクおよびサービスを実行するために必要な標準の Amazon ECS アクセス権限を付与するだけでなく、IAM ユーザーにはタスクの IAM ロールを使用する iam:PassRole アクセス権限も必要です。

CodeDeploy には、Amazon ECS API の呼び出し、Elastic Load Balancing の変更、Lambda 関数の起動、CloudWatch アラームの記述のアクセス権限が必要です。また、ユーザーの代わりにサービスの必要数を変更するためのアクセス許可も必要です。Blue/Green デプロイタイプを使用する Amazon ECS サービスを作成する前に、IAM ロール (ecsCodeDeployRole) を作成する必要があります。詳細については、「Amazon ECS CodeDeploy IAM ロール (p. 255)」を参照してください。

「サービス作成の例 (p. 228)」および「サービスの更新の例 (p. 229)」の IAM ポリシー例に、IAM ユーザーが AWS マネジメントコンソール で Amazon ECS Blue/Green デプロイを使用するためのアクセス許可が示されています。

API バージョン 2014-11-13154

Amazon ECS AWS Fargate 用ユーザーガイド外部デプロイ

外部デプロイ外部デプロイタイプでは、Amazon ECS サービスのデプロイプロセスを完全に制御するためのサードパーティーのデプロイコントローラーを使用できます。サービスの詳細はサービス管理 API アクション (CreateService、UpdateService、DeleteService) または タスク設定管理 API アクション(CreateTaskSet、UpdateTaskSet、UpdateServicePrimaryTaskSet、DeleteTask) のいずれかにより管理されます。各 API アクションには管理可能なサービス定義パラメータのサブセットがあります。

UpdateService API アクションは、サービスの必要数およびヘルスチェック猶予期間パラメータを更新します。起動タイプ、プラットフォームバージョン、ロードバランサーの詳細、ネットワーク構成、またはタスク定義を更新する必要がある場合、新しいタスクセットを作成する必要があります。

UpdateTaskSet API アクションは、タスクセットのスケールパラメータのみを更新します。

UpdateServicePrimaryTaskSet API アクションは、サービス内のどのタスクセットをプライマリタスクセットであるかを変更します。DescribeServices API アクションを呼び出すと、プライマリタスクセットに指定されたすべてのフィールドが返されます。サービスのプライマリタスクセットが更新されると、サービスの新しいプライマリタスクセットに存在し、古いプライマリタスクセットとは異なるタスクセットのパラメータ値はどれでも、新しいプライマリタスクセットが定義されるときに新しい値に更新されます。サービスにプライマリタスクセットが定義されていない場合にサービスを定義するとき、タスクセットフィールドは null になります。

外部デプロイに関する考慮事項外部デプロイタイプを使用するときは、以下の点を考慮します。

• 外部デプロイコントローラーを使用している場合、サービスの Auto Scaling はサポートされません。• タスクタイプにロードバランサーを使用する場合、サポートされるロードバランサータイプは

Application Load Balancer または Network Load Balancer のいずれかです。• Fargate 起動タイプまたは EXTERNAL デプロイコントローラータイプを使用するタスクは、DAEMON ス

ケジューリング戦略をサポートしません。

外部デプロイワークフロー以下に示しているのは、Amazon ECS で外部デプロイを管理する基本的なワークフローです。

外部デプロイコントローラーを使用して Amazon ECS サービスを管理するには

1. Amazon ECS サービスを作成します。必須のパラメータは、サービス名のみです。サービスを作成するときに、外部デプロイコントローラーを使用して以下のパラメータを指定できます。その他すべてのサービスパラメータは、サービス内でタスクセットが作成されるときに指定されます。

serviceName

型: 文字列

必須: はい

サービスの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。 サービス名は同じクラスター内で一意になるようにしてください。ただし、リージョン内のクラスター間や複数のリージョンにまたがるクラスター間では、同様の名前のサービスがあっても構いません。

desiredCount

指定したタスクセットのタスク定義のインスタンスをサービス内で実行状態に保つ数を設定します。

API バージョン 2014-11-13155

Amazon ECS AWS Fargate 用ユーザーガイド外部デプロイ

deploymentConfiguration

デプロイ時に実行されるタスクの数と、タスクの停止および開始の順序を制御するオプションのデプロイパラメータ。詳細については、「deploymentConfiguration」を参照してください。

tags

タイプ: オブジェクトの配列

必須: いいえ

サービスに適用し、サービスの分類と整理に役立つメタデータ。タグはそれぞれ、1 つのキーとオプションの 1 つの値で構成されており、どちらもお客様側が定義します。サービスが削除されると、タグも削除されます。サービスには最大 50 個のタグを適用できます。詳細については、「Amazon ECS リソースのタグ付け (p. 186)」を参照してください。key

型: 文字列

長さの制限: 最小長は 1 です。最大長は 128 です。

必須: いいえ

タグを構成するキーと値のペアの一部。キーは、より具体的なタグ値のカテゴリのように動作する、一般的なラベルです。

value

型: 文字列

長さの制限: 最小長は 0 です。最大長は 256 です。

必須: いいえ

タグを構成するキーと値のペアのオプションの一部。値はタグカテゴリ (キー) の記述子として機能します。

enableECSManagedTags

サービスでタスクの Amazon ECS マネージドタグを有効にするかどうかを指定します。詳細については、「請求用のリソースにタグを付ける (p. 188)」を参照してください。

propagateTags

型: 文字列

有効な値: TASK_DEFINITION | SERVICE

必須: いいえ

タグをタスク定義またはサービスからサービスのタスクへコピーするかどうかを指定します。値を指定しない場合、タグはコピーされません。タグは、サービス作成中のサービス内のタスクにのみコピーすることができます。タグをサービス作成後のタスクに追加するには、TagResourceAPI アクションを使用します。

healthCheckGracePeriodSeconds

タイプ: 整数

必須: いいえ

Amazon ECS サービススケジューラが、タスクが RUNNING 状態になった後で異常な ElasticLoad Balancing ターゲットのヘルスチェック、コンテナのヘルスチェック、Route 53 のヘルス

API バージョン 2014-11-13156

Amazon ECS AWS Fargate 用ユーザーガイド外部デプロイ

チェックを無視する期間 (秒単位)。これが有効であるのは、ロードバランサーを使用するようにサービスが設定されている場合のみです。サービスにロードバランサーを定義している場合、ヘルスチェックの猶予期間値を指定しないと、デフォルト値の 0 が使用されます。

サービスのタスクで、ヘルスチェックを開始して応答するまでに時間がかかる場合は、ヘルスチェックの猶予期間として最大 2,147,483,647 秒まで指定できます。この間は、ECS サービススケジューラはヘルスチェックのステータスを無視します。この猶予期間により、ECS サービススケジューラがタスクを異常とマークして時間より前に停止することがなくなります。

schedulingStrategy

使用するスケジュール戦略。外部デプロイコントローラーを使用するサービスは、REPLICAスケジューリング戦略のみをサポートします。詳細については、「サービススケジューラの概念 (p. 122)」を参照してください。

placementConstraints

サービスのタスクに使用する、配置制約オブジェクトの配列。タスクごとに最大 10 個の制約を指定できます (この制限数には、タスク定義内の制約と、実行時に指定される制約が含まれます)。Fargate 起動タイプを使用している場合、タスク配置の制約事項はサポートされません。

placementStrategy

サービスのタスクで使用する配置戦略オブジェクト。サービスごとに最大 4 つの戦略ルールを指定できます。

次の例は、外部デプロイコントローラーを使用するサービスを作成するためのサービス定義です。

{ "cluster": "", "serviceName": "", "desiredCount": 0, "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION"}

API バージョン 2014-11-13157

Amazon ECS AWS Fargate 用ユーザーガイド外部デプロイ

2. 最初のタスクセットを作成します。タスクセットには、サービスに関する次の詳細が含まれています。

taskDefinition

使用するタスクセットのタスクのタスク定義。launchType

型: 文字列

有効な値: EC2 | FARGATE

必須: いいえ

サービスを実行する起動タイプ。指定しない場合は、デフォルトで EC2 が使用されます。詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

launchType を指定した場合、capacityProviderStrategy パラメータを省略する必要があります。

platformVersion

型: 文字列

必須: いいえ

サービス内のタスクが実行されているプラットフォームのバージョン。プラットフォームのバージョンは、Fargate 起動タイプを使用するタスクにのみ指定されます。指定されない場合、デフォルトで最新バージョン (LATEST) が使用されます。

AWS Fargate プラットフォームのバージョンを使って、Fargate タスクインフラストラクチャの特定のランタイム環境を参照できます。プラットフォームのバージョンに LATEST を指定してタスクを実行またはサービスを作成すると、プラットフォームの最新バージョンをタスクで利用できるようになります。サービスをスケールアップする場合は、これらのタスクには、サービスの最新のデプロイで指定されたプラットフォームのバージョンが提供されます。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

loadBalancers

サービスで使用するロードバランサーを表すロードバランサーオブジェクト。外部デプロイコントローラーを使用する場合、Application Load Balancer および Network Load Balancer のみがサポートされます。Application Load Balancer を使用している場合は、タスクセットあたり 1 つのApplication Load Balancer ターゲットグループのみが許可されます。

次のスニペットは、使用する loadBalancer オブジェクトの例を示しています。

"loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 }]

Note

loadBalancer オブジェクトを指定する場合は、targetGroupArn を指定し、loadBalancerName パラメータを省略する必要があります。

API バージョン 2014-11-13158

Amazon ECS AWS Fargate 用ユーザーガイド外部デプロイ

networkConfiguration

サービスのネットワーク構成。このパラメータは awsvpc ネットワークモードを使用して独自のElastic Network Interface を受け取るタスク定義の場合に必要です。その他のネットワークモードではサポートされていません。詳細については、AWS Fargate 用 Amazon Elastic ContainerService ユーザーガイドの「Fargate タスクネットワーキング」を参照してください。

serviceRegistries

このサービスに割り当てるサービス検出レジストリの詳細。詳細については、「サービス検出 (p. 181)」を参照してください。

scale

タスクセットに配置して実行し続けるために必要なタスク数の浮動小数点パーセンテージ。この値は、サービスの desiredCount の割合 (%) の合計として指定されます。許容値は 0 から 100までの数字です。

外部デプロイコントローラー用のタスクセットを作成するための JSON の例を次に示します。

{ "service": "", "cluster": "", "externalId": "", "taskDefinition": "", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "" ], "securityGroups": [ "" ], "assignPublicIp": "DISABLED" } }, "loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ], "serviceRegistries": [ { "registryArn": "", "port": 0, "containerName": "", "containerPort": 0 } ], "launchType": "EC2", "capacityProviderStrategy": [ { "capacityProvider": "", "weight": 0, "base": 0 } ], "platformVersion": "", "scale": { "value": null, "unit": "PERCENT"

API バージョン 2014-11-13159

Amazon ECS AWS Fargate 用ユーザーガイドサービスロードバランシング

}, "clientToken": ""}

3. サービスの変更が必要な場合、更新するパラメータに応じて UpdateService、UpdateTaskSet、または CreateTaskSet のいずれかの API アクションを使用します。タスクセットを作成した場合は、サービスの各タスクセットに scale パラメータを使用して、サービス内で継続して実行するタスクの数を決定します。たとえば、tasksetA を含むサービスがあり tasksetB を作成した場合、本番トラフィックを移行する前に tasksetB の有効性をテストする場合があります。両方のタスクの scale を 100 に設定し、すべての本番トラフィックを tasksetB に移行する準備が整ったときに、tasksetA の scale を 0 に更新して、スケールダウンすることもできます。

サービスロードバランシングElastic Load Balancing を使用してサービスのタスク間でトラフィックを均等に分散するように、オプションで Amazon ECS サービスを設定できます。

Amazon ECS サービスは、Application Load Balancer、Network Load Balancer、および Classic LoadBalancer ロードバランサータイプをサポートします。Application Load Balancer は、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。Network Load Balancer と ClassicLoad Balancer は、TCP (またはレイヤー 4) トラフィックをルーティングするために使用されます。詳細については、「ロードバランサーの種類 (p. 162)」を参照してください。

Application Load Balancer は Amazon ECS サービスでの使用に便利な複数の機能を提供しています。

• 各サービスは、複数のロードバランサーからトラフィックを送信し、複数のターゲットグループを指定することにより複数のロードバランシングポートを公開できます。

• これらは、Fargate および EC2 の両方の起動タイプを使用するタスクでサポートされています。• Application Load Balancer により、コンテナが動的ホストポートマッピングを使用できるようになりま

す (同じサービスから複数のタスクがコンテナインスタンスごとに許可するため)。• Application Load Balancer では、パスベースのルーティングと優先ルールをサポートしています (複数の

サービスが 1 つの Application Load Balancer で同じリスナーポートを使用するため)。

サービスで Network Load Balancer および Classic Load Balancer でのみ使用できる機能が必要な場合を除き、最新の機能を利用できるように、Amazon ECS サービスで Application Load Balancer を使用することをお勧めします。Elastic Load Balancing およびロードバランサーの違いに関する詳細は、「Elastic LoadBalancing ユーザーガイド」を参照してください。

トピック• サービス負荷分散に関する考慮事項 (p. 160)• ロードバランサーの種類 (p. 162)• ロードバランサーの作成 (p. 164)• サービスに複数のターゲットグループを登録する (p. 171)

サービス負荷分散に関する考慮事項サービス負荷分散を使用する場合は、次の点を考慮してください。

Application Load Balancer および Network Load Balancer に関する考慮事項以下の考慮事項は、Application Load Balancer または Network Load Balancerを使用する Amazon ECSサービスに固有のものです。

API バージョン 2014-11-13160

Amazon ECS AWS Fargate 用ユーザーガイドサービス負荷分散に関する考慮事項

• Application Load Balancer または Network Load Balancer を使用するサービスの場合、サービスに サービスに 5 つより多くのターゲットグループをアタッチすることはできません。

• awsvpc ネットワークモードを使用するタスクを含むサービスの場合、サービスのターゲットグループを作成するときに、instance ではなく、ip をターゲットタイプとして選択する必要があります 。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2 インスタンスではなく、ElasticNetwork Interface に関連付けられているためです。

• Application Load Balancer を使用するサービスで、HTTP/HTTPS サービスのポート 80 やポート 443 など、複数の負荷分散されたポートにアクセスする必要がある場合は、2 つのリスナーを設定できます。1つのリスナーは、リクエストをサービスに転送する HTTPS を担当し、別のリスナーは HTTP リクエストを適切な HTTPS ポートへのリダイレクトを担当します。詳細については、Application Load Balancer用ユーザーガイドの「Application Load Balancer のリスナーの作成」を参照してください。

• サービスを作成した後、サービス定義で指定されているターゲットグループ ARN、ロードバランサー名、コンテナ名、コンテナポートはイミュータブルです。既存のサービスのロードバランサー設定を追加、削除、または変更することはできません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。

• サービスのタスクがロードバランサーのヘルスチェック条件を満たさない場合、タスクは停止され、再起動されます。このプロセスは、サービスが実行中のタスクの必要数に達するまで続行されます。

• Application Load Balancer スロースタートモードがサポートされています。詳細については、「Application Load Balancer スロースタートモードに関する考慮事項 (p. 161)」を参照してください。スロースタートモードについては、「Application Load Balancers のターゲットグループ」を参照してください。

• ロードバランサーで有効にされているサービスに問題がある場合は、「サービスロードバランサーのトラブルシューティング (p. 360)」を参照してください。

Application Load Balancer スロースタートモードに関する考慮事項スロースタートモードが有効な Application Load Balancer は、Amazon ECS サービスでサポートされています。スロースタートモードの詳細については、「Application Load Balancer のターゲットグループ」を参照してください。

タスクがウォームアップしてトラフィックを受信する準備ができるまで、サービススケジューラが異常なコンテナヘルスチェックを無視するようにするには、以下の設定が必要です。

• スロースタート期間が終了するまで UNHEALTHY ステータスを返すように、コンテナのヘルスチェックを設定する必要があります。

• Amazon ECS サービスのヘルスチェックの猶予期間の値は、スロースタートモードの期間と同じ期間に設定する必要があります。

Application Load Balancer スロースタートモードで異なるタスクネットワークモードを使用する場合は、次の点を考慮してください。

• awsvpc ネットワークモードを使用する場合、各タスクには独自の Elastic Network Interface (ENI) と IPアドレスが割り当てられます。これにより、Application Load Balancer は各タスクをターゲットグループのターゲットとして登録できます。これにより、新しく登録された各ターゲットでスロースタートモードが有効になります。

• host ネットワークモードを使用する場合、タスクは Docker ネットワーキング構造をバイパスし、コンテナポートを Amazon EC2 インスタンスのネットワークインターフェイスまたはインターフェイスに直接マッピングします。タスクの IP アドレスではなく、コンテナインスタンスを Application LoadBalancer ターゲットとして登録します。つまり、スロースタートモードを効果的に機能させる場合、インスタンスごとに 1 つのタスクしか実行できません。既存のタスクまたはサービスを更新するか、コンテナインスタンスを再起動する場合、コンテナインスタンスが Application Load Balancer ターゲットとして再登録されず、スロースタート期間が開始されません。

API バージョン 2014-11-13161

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの種類

• bridge ネットワークモードを使用するときは、host ネットワークモードを使用する場合と同様に、コンテナインスタンスを Amazon ECS タスクではなく Application Load Balancer ターゲットとして登録します。そのため、上記と同じ考慮事項が適用されます。

さらに、以下の考慮事項は、Application Load Balancer スロースタートモードの使用とターゲットとしての Amazon ECS タスクの追加に固有のものです。

• ターゲットグループでスロースタートを有効にする場合、既にそのターゲットグループに登録済みのターゲットをスロースタートモードに入りません。

• 空のターゲットグループでスロースタートを有効にし、その後、単一登録オペレーションを使用して 1つ以上のターゲットを登録すると、それらのターゲットはスロースタートモードに入りません。新しく登録されたターゲットは、スロースタートモードになっていない登録済みターゲットが 1 つ以上ある場合にのみスロースタートモードに入ります。

• スロースタートモードのターゲットを登録解除すると、そのターゲットはスロースタートモードを終了します。同じターゲットを再度登録すると、再度スロースタートモードに入ります。

• スロースタートモードのターゲットに異常が発生してから、期間が経過する前に正常に戻った場合、そのターゲットはスロースタートモードを維持し、期間の残りが経過してからスロースタートモードを終了します。スロースタートモードではないターゲットが異常な状態から正常に変わった場合は、スロースタートモードに入りません。

ロードバランサーの種類Elastic Load Balancing は、次のタイプのロードバランサーをサポートしています。Application LoadBalancer、Network Load Balancer、および Classic Load Balancer です。Amazon ECS サービスでは、ロードバランサーのいずれかのタイプを使用できます。Application Load Balancer は、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。Network Load Balancer と ClassicLoad Balancer は、TCP またはレイヤー 4 トラフィックをルーティングするために使用されます。

トピック• Application Load Balancer (p. 162)• Network Load Balancer (p. 163)

Application Load BalancerApplication Load Balancer では、アプリケーションレイヤー (HTTP/HTTPS) でルーティング決定を行い、パスベースのルーティングをサポートします。また、クラスター内の各コンテナインスタンスの 1 つまたは複数のポートにリクエストをルーティングできます。Application Load Balancer では、動的ホストポートマッピングをサポートしています。たとえば、タスクのコンテナの定義で NGINX コンテナポートにポート 80、ホストポートにポート 0 を指定している場合、ホストポートはコンテナインスタンスの一時ポート範囲から動的に選択されます (最新の Amazon ECS-optimized AMI での 32768~61000 など)。タスクの起動時に、NGINX コンテナは、インスタンス ID およびポートの組み合わせとして Application LoadBalancer で登録されます。トラフィックは、コンテナに対応するインスタンス ID およびポートに分散されます。この動的なマッピングにより、同じコンテナインスタンスの単一のサービスから複数のタスクを持つことができます。詳細については、Application Load Balancer 用ユーザーガイド を参照してください。

API バージョン 2014-11-13162

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの種類

Network Load BalancerNetwork Load Balancer により、トランスポートレイヤー (TCP/SSL) でルーティングの決定が行われます。毎秒数百万のリクエストを処理できます。ロードバランサーは、接続を受信すると、フローハッシュルーティングアルゴリズムを使用してデフォルトルールのターゲットグループからターゲットを選択します。リスナー構成で指定されたポート上の選択したターゲットへの TCP 接続を開こうとします。ヘッダーを変更せずにリクエストを転送します。 Network Load Balancer では、動的ホストポートマッピングをサポートしています。たとえば、タスクのコンテナの定義で NGINX コンテナポートにポート 80、ホストポートにポート 0 を指定している場合、ホストポートはコンテナインスタンスの一時ポート範囲から動的に選択されます (最新の Amazon ECS-optimized AMI での 32768~61000 など)。タスクの起動時に、NGINX コンテナは、インスタンス ID およびポートの組み合わせとして Network Load Balancer で登録されます。トラフィックは、コンテナに対応するインスタンス ID およびポートに分散されます。この動的なマッピングにより、同じコンテナインスタンスの単一のサービスから複数のタスクを持つことができます。詳細については、Network Load Balancer 用ユーザーガイド を参照してください。

API バージョン 2014-11-13163

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

ロードバランサーの作成このセクションでは、Amazon ECS サービスで使用する AWS マネジメントコンソール を使った ElasticLoad Balancing の使用方法を実践的に説明します。このセクションでは、パブリックネットワークトラフィックを受信し、それを Amazon ECS コンテナインスタンスにルーティングする外部ロードバランサーを作成します。

Elastic Load Balancing は、次のタイプのロードバランサーをサポートしています。Application LoadBalancer、Network Load Balancer、Classic Load Balancer です。Amazon ECS サービスでは、ロードバランサーのいずれかのタイプを使用できます。Application Load Balancer は、HTTP/HTTPS トラフィックをルーティングするために使用されます。Network Load Balancer と Classic Load Balancer は、TCP またはレイヤー 4 トラフィックをルーティングするために使用されます。

Application Load Balancer は Amazon ECS サービスでの使用に便利な複数の機能を提供しています。

• Application Load Balancer により、コンテナが動的ホストポートマッピングを使用できるようになります (同じサービスから複数のタスクがコンテナインスタンスごとに許可するため)。

• Application Load Balancer では、パスベースのルーティングと優先ルールをサポートしています (複数のサービスが 1 つの Application Load Balancer で同じリスナーポートを使用するため)。

これらの最新の機能を活用するため、Amazon ECS サービスには Application Load Balancer を使用することをお勧めします。Elastic Load Balancing およびロードバランサーの違いに関する詳細は、「ElasticLoad Balancing ユーザーガイド」を参照してください。

Amazon ECS サービスでロードバランサーを使用する前に、アカウントに Amazon ECS サービスロールが作成済みである必要があります。詳細については、「アカウントのサービスロールを確認する (p. 165)」を参照してください。

トピック

API バージョン 2014-11-13164

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

• アカウントのサービスロールを確認する (p. 165)• Application Load Balancer の作成 (p. 165)• Network Load Balancer の作成 (p. 170)

アカウントのサービスロールを確認するAmazon ECS では、タスクの作成および停止時にロードバランサーでコンテナインスタンスを登録および登録解除するための権限が必要です。

ほとんどの場合、Amazon ECS サービスロールは Amazon ECS コンソールの最初の実行時に自動的に作成されます。以下の手順を使用して、アカウントにすでに Amazon ECS サービスロールがあるかどうかを確認できます。

IAM コンソールで ecsServiceRole を確認するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [ロール] を選択します。3. ロールのリストで ecsServiceRole を検索します。ロールが存在しない場合は、「サービススケ

ジューラ IAM ロール (p. 244)」を参照してロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

4. [Permissions] を選択します。5. [Managed Policies] セクションで、[AmazonEC2ContainerServiceRole] 管理ポリシーがロールにア

タッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS サービスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

a. [Attach Policy] を選択します。b. [Filter] で、AmazonEC2ContainerServiceRole と入力し、アタッチする利用可能なポリシー

を絞り込みます。c. [AmazonEC2ContainerServiceRole] ポリシーの左にあるチェックボックスをオンにし、[Attach

Policy] を選択します。6. [Trust Relationship]、[Edit Trust Relationship] を選択します。7. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する

場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

Application Load Balancer の作成このセクションでは、Application Load Balancer を AWS マネジメントコンソール で作成する手順について説明します。

API バージョン 2014-11-13165

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

ロードバランサーを定義する

最初に、名前、ネットワーク、リスナーなど、ロードバランサーの基本的な設定情報を指定します。

リスナーとは接続リクエストをチェックするプロセスです。リスナーは、フロントエンド (クライアントからロードバランサー) 接続用のプロトコルとポート、およびバックエンド (ロードバランサーからバックエンドインスタンス) 接続用のプロトコルとポートを使用して設定します。この例では、ポート 80 でHTTP リクエストを受け取り、HTTP を使用してポート 80 でタスクのコンテナにそれらのリクエストを送信するリスナーを設定します。

ロードバランサーを定義するには

1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。2. ナビゲーションバーで、ロードバランサーのリージョンを選択します。Amazon ECS コンテナインス

タンス用に選択したリージョンと同じリージョンを必ず選択してください。3. ナビゲーションペインの [LOAD BALANCING] で [Load Balancers] を選択します。4. [Create Load Balancer] を選択します。5. [Select load balancer type (ロードバランサーの種類の選択)] ページで、[Application Load Balancer] を

選択し、[次へ] を選択します。6. [Configure Load Balancer] ページで次の操作を完了します。

a. [Name] に、ロードバランサーの名前を入力します。b. [Scheme (スキーム)] のインターネット向けロードバランサーは、クライアントからインターネッ

ト経由でリクエストをターゲットにルーティングします。内部ロードバランサーは、プライベート IP アドレスを使用してターゲットにリクエストをルーティングします。

c. [IP address type] で、[ipv4] を選択して IPv4 アドレスのみをサポートするか、[dualstack] を選択して IPv4 と IPv6 アドレスの両方をサポートします。

d. [Listeners] のデフォルトは、ポート 80 で HTTP トラフィックを受け付けるリスナーです。デフォルトのリスナーの設定をそのままにしておくことも、リスナーのプロトコルまたはポートを変更することも、[Add] を選択して別のリスナーを追加することもできます。

Note

複数のターゲットグループにトラフィックをルーティングする場合は、ホストまたはパスベースのルールを追加する方法の詳細について、「ListenerRules」を参照してください。

e. VPC 用に、サービスを実行するコンテナインスタンスに使用したのと同じ VPC を選択します。f. [Availability Zones] で、ロードバランサーに有効化するアベイラビリティーゾーンのチェックボッ

クスを選択します。そのアベイラビリティーゾーンに対して 1 つのサブネットがある場合、そのサブネットが選択されます。そのアベイラビリティーゾーンに複数のサブネットがある場合は、いずれかのサブネットを選択します。アベイラビリティーゾーンごとに 1 つだけサブネットを選択できます。ロードバランサーのサブネット設定には、コンテナインスタンスが存在するアベイラビリティーゾーンすべてを含める必要があります。

g. [Next: Configure Security Settings] を選択します。

セキュリティ設定の構成

前のステップでセキュアリスナーを作成した場合は、[Configure Security Settings] ページで次の操作を完了するか、[Next: Configure Security Groups] を選択します。

セキュリティ設定を指定するには

1. AWS Certificate Manager の証明書を持っている場合は、[Choose an existing certificate from AWSCertificate Manager (ACM) (AWS Certificate Manager (ACM) から既存の証明書を選択する)] を選択し、[Certificate name (証明書の名前)] から証明書を選択します。

API バージョン 2014-11-13166

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

2. IAM を使用して証明書をすでにアップロードしている場合は、[Choose an existing certificate fromAWS Identity and Access Management (IAM) (AWS Identity and Access Management (IAM) から既存の証明書を選択する)] を選択し、[Certificate name (証明書の名前)] から証明書を選択します。

3. 証明書をアップロードする準備ができたら、[Upload a new SSL Certificate to AWS Identity andAccess Management (IAM)] を選択します。[Certificate name] に証明書の名前を入力します。[PrivateKey] に、PEM エンコードされたプライベートキーファイルの内容をコピーして貼り付けます。[Public Key Certificate] に、PEM エンコードされたパブリックキー証明書ファイルの内容をコピーして貼り付けます。自己署名証明書を使用しておらず、ブラウザが暗黙的に証明書を受け入れることが重要である場合に限り、[Certificate Chain] に、PEM エンコードされた証明書チェーンファイルの内容をコピーして貼り付けます。

4. [Select Policy] で、事前定義されたセキュリティポリシーを選択します。セキュリティポリシーの詳細については、Application Load Balancer 用ユーザーガイドの「セキュリティポリシー」を参照してください。

5. [Next: Configure Security Groups] を選択します。

セキュリティグループの設定

リスナーに指定したポートへのインバウンドトラフィックを許可するロードバランサーにセキュリティグループを割り当てる必要があります。 Amazon ECS は、Elastic Load Balancing ロードバランサーまたはAmazon ECS コンテナインスタンスに関連付けられたセキュリティグループを自動的には更新しません。

ロードバランサーにセキュリティグループを割り当てるには

1. [Assign Security Groups] ページで [Create a new security group] を選択します。2. セキュリティグループの名前と説明を入力するか、デフォルトの名前と説明をそのまま使用します。

この新しいセキュリティグループには、リスナーで使用するように設定したポートへのトラフィックを許可するルールが含まれます。

Note

このトピックの後半では、ここで作成されたセキュリティグループから来るすべてのポートのトラフィックを許可するコンテナインスタンスのセキュリティグループのルールを作成します。これにより、Application Load Balancer では、コンテナインスタンスの動的に割り当てられたホストポートにトラフィックをルーティングできるようになります。

API バージョン 2014-11-13167

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

3. [Next: Configure Routing] を選択して、ウィザードの次のページに移動します。

ルーティングの設定

このセクションでは、ロードバランサーのターゲットグループと、そのグループ内に登録されたターゲットのヘルスチェックの条件を作成します。

ターゲットグループを作成してヘルスチェックを設定するには

1. [Target group] で、デフォルトの [New target group] を保持します。2. [Name] に、新しいターゲットグループの名前を入力します。3. [Protocol] と [Port] を必要に応じて設定します。4. [ターゲットの種類] で、インスタンス ID と IP アドレスのどちらを使用してターゲットを登録するか

を選択します。

Important

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、instance ではなく、ip をターゲットタイプとして選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2インスタンスではなく、Elastic Network Interface に関連付けられているためです。

5. [Health checks] は、デフォルトのヘルスチェック設定のままにします。6. [Next: Register Targets] を選択します。

ターゲットの登録

ロードバランサーは、ターゲットグループに登録されたターゲットにトラフィックを分散します。ターゲットグループを Amazon ECS サービスに関連付けると、Amazon ECS はターゲットグループにコンテ

API バージョン 2014-11-13168

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

ナを自動的に登録および登録解除します。Amazon ECS によってターゲットの登録が処理されるため、現時点ではターゲットをターゲットグループに追加しません。

ターゲット登録をスキップするには

1. [Registered instances] セクションで、インスタンスが登録用に選択されていないことを確認します。2. [Next: Review] を選択して、ウィザードの次のページに移動します。

確認と作成ロードバランサーとターゲットグループの設定を確認して、[Create] を選択し、ロードバランサーを作成します。

コンテナインスタンスのセキュリティグループルールを作成するApplication Load Balancer を作成した後、ロードバランサーからのトラフィックがコンテナに到達することを許可するインバウンドルールをコンテナインスタンスのセキュリティグループに追加する必要があります。

ロードバランサーからコンテナインスタンスへのインバウンドトラフィックを許可するには

1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。2. 左のナビゲーションで [ Security Groups] を選択します。3. コンテナインスタンスで使用するセキュリティグループを選択します。最初に実行されたウィザード

の Amazon ECS を使用してコンテナインスタンスを作成した場合、このセキュリティグループは、[ECS Allowed Ports (ECS 許可ポート)] の説明を持つ可能性があります。

4. [Inbound ] タブを選択してから、[Edit] を選択します。5. [Type] で、[All traffic] を選択します。6. [ソース] で、[カスタム] を選択し、セキュリティグループの設定 (p. 167) で作成した Application

Load Balancer セキュリティグループの名前を入力します。このルールにより、Application LoadBalancer からのすべてのトラフィックが、ロードバランサーに登録されたタスクのコンテナに到達することを許可されます。

API バージョン 2014-11-13169

Amazon ECS AWS Fargate 用ユーザーガイドロードバランサーの作成

7. [Save] を選択して終了します。

Amazon ECS サービスを作成するロードバランサーとターゲットグループを作成した後、サービスを作成する際にサービス定義でターゲットグループを指定できます。サービスの各タスクが開始されると、サービス定義で指定されたコンテナとポートの組み合わせがターゲットグループに登録され、トラフィックはロードバランサーからそのコンテナにルーティングされます。詳細については、「サービスの作成 (p. 135)」を参照してください。

Network Load Balancer の作成このセクションでは、Network Load Balancer を AWS マネジメントコンソール で作成する手順について説明します。

ロードバランサーを定義する最初に、名前、ネットワーク、リスナーなど、ロードバランサーの基本的な設定情報を指定します。

リスナーとは接続リクエストをチェックするプロセスです。リスナーは、フロントエンド (クライアントからロードバランサー) 接続用のプロトコルとポート、およびバックエンド (ロードバランサーからバックエンドインスタンス) 接続用のプロトコルとポートを使用して設定します。この例では、ポート 80 で TCPトラフィックを受信するリスナーを持つ、選択したネットワークのインターネット接続ロードバランサーを設定します。

ロードバランサーを定義するには

1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。2. ナビゲーションバーで、ロードバランサーのリージョンを選択します。Amazon ECS コンテナインス

タンス用に選択したリージョンと同じリージョンを必ず選択してください。3. ナビゲーションペインの [LOAD BALANCING] で [Load Balancers] を選択します。4. [Create Load Balancer] を選択します。5. [Select load balancer type (ロードバランサーの種類の選択)] ページで、[Network Load Balancer] の下

の [作成] を選択します。6. [Configure Load Balancer] ページで次の操作を完了します。

a. [Name] に、ロードバランサーの名前を入力します。b. [Scheme] で、[internet-facing] または [internal] を選択します。インターネット向けロードバラ

ンサーは、クライアントからインターネット経由でリクエストをターゲットにルーティングします。内部ロードバランサーは、プライベート IP アドレスを使用してターゲットにリクエストをルーティングします。

c. [Listeners] のデフォルトは、ポート 80 で TCP トラフィックを受け付けるリスナーです。デフォルトのリスナーの設定をそのままにしておくことも、リスナーのプロトコルまたはポートを変更することも、[Add listener] を選択して別のリスナーを追加することもできます。

d. [アベイラビリティーゾーン] で、Amazon EC2 インスタンスに使用する VPC を選択します。Amazon EC2 インスタンスの起動に使用した各アベイラビリティーゾーンについて、アベイラビリティーゾーンを選択し、そのアベイラビリティーゾーンのパブリックサブネットを選択します。Elastic IP アドレスをサブネットに関連付けるには、[Elastic IP] から選択します。

e. [Next: Configure Routing] を選択します。

ルーティングの設定Amazon EC2 インスタンスなどのターゲットをターゲットグループに登録できます。このステップで設定するターゲットグループは、リクエストをターゲットグループに転送するリスナールールで、ターゲットグループとして使用されます。詳細については、Network Load Balancer 用ユーザーガイドの「NetworkLoad Balancer のターゲットグループ」を参照してください。

API バージョン 2014-11-13170

Amazon ECS AWS Fargate 用ユーザーガイドサービスに複数のターゲットグループを登録する

ターゲットグループを設定するには

1. [Target group] で、デフォルトの [New target group] を保持します。2. [Name] に、ターゲットグループの名前を入力します。3. [Protocol] と [Port] を必要に応じて設定します。4. [ターゲットの種類] で、インスタンス ID と IP アドレスのどちらを使用してターゲットを登録するか

を選択します。

Important

サービスのタスク定義で、awsvpc ネットワークモード (起動タイプが Fargate の場合に必要) が使用されている場合は、instance ではなく、ip をターゲットタイプとして選択する必要があります。これは、awsvpc ネットワークモードを使用するタスクは、Amazon EC2インスタンスではなく、Elastic Network Interface に関連付けられているためです。インスタンス ID がC1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3、および T1 のインスタンス ID でインスタンスを登録することはできません。IP アドレスで、これらの種類のインスタンスを登録することができます。

5. [Health checks] は、デフォルトのヘルスチェック設定のままにします。6. [Next: Register Targets] を選択します。

ターゲットグループへのターゲットの登録

ロードバランサーは、ターゲットグループに登録されたターゲットにトラフィックを分散します。ターゲットグループを Amazon ECS サービスに関連付けると、Amazon ECS はターゲットグループにコンテナを自動的に登録および登録解除します。Amazon ECS によってターゲットの登録が処理されるため、現時点ではターゲットをターゲットグループに追加しません。

ターゲット登録をスキップするには

1. [Registered instances] セクションで、インスタンスが登録用に選択されていないことを確認します。2. [Next: Review] を選択して、ウィザードの次のページに移動します。

確認と作成

ロードバランサーとターゲットグループの設定を確認して、[Create] を選択し、ロードバランサーを作成します。

Amazon ECS サービスを作成する

ロードバランサーとターゲットグループを作成した後、サービスを作成する際にサービス定義でターゲットグループを指定できます。サービスの各タスクが開始されると、サービス定義で指定されたコンテナとポートの組み合わせがターゲットグループに登録され、トラフィックはロードバランサーからそのコンテナにルーティングされます。詳細については、「サービスの作成 (p. 135)」を参照してください。

サービスに複数のターゲットグループを登録するサービス定義で複数のターゲットグループを指定すると、Amazon ECS サービスは複数のロードバランサーからのトラフィックを送信し、複数のロードバランサーポートを公開できます。

複数のターゲットグループを指定してサービスを作成するには、Amazon ECS API、SDK、AWS CLI、または AWS CloudFormation テンプレートを使用してサービスを作成する必要があります。サービスの作成後、AWS マネジメントコンソール に登録されているサービスとターゲットグループを表示できます。既存のサービスの負荷分散設定を更新することはできません。

API バージョン 2014-11-13171

Amazon ECS AWS Fargate 用ユーザーガイドサービスに複数のターゲットグループを登録する

次の形式を使用して、複数のターゲットグループをサービス定義で指定できます。サービス定義の完全な構文については、「サービス定義テンプレート (p. 134)」を参照してください。

"loadBalancers":[ { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456", "containerName":"container_name", "containerPort":container_port }, { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321", "containerName":"container_name", "containerPort":container_port }]

複数のターゲットグループの考慮事項サービス定義で複数のターゲットグループを指定する際には、次の点を考慮する必要があります。

• 複数のターゲットグループは、Application Load Balancer または Network Load Balancer ロードバランサータイプを使用する場合にのみサポートされます。

• 複数のターゲットグループは、サービスがローリング更新 (ECS) のデプロイコントローラータイプを使用する場合にのみサポートされます。CodeDeploy または外部デプロイコントローラーを使用している場合、複数のターゲットグループはサポートされていません。

• Fargate および EC2 の両方の起動タイプを使用するタスクを含むサービスでは、複数のターゲットグループがサポートされています。

• 複数のターゲットグループを指定するサービスを作成するときは、Amazon ECS サービスにリンクされたロールを作成する必要があります。ロールは、API リクエストの role パラメータを省略するか、AWS CloudFormation の Role プロパティを省略することによって作成されます。詳細については、「Amazon ECS 用のサービスにリンクされたロール (p. 238)」を参照してください。

サービス定義の例次に、サービス定義で複数のターゲットグループを指定するいくつかのユースケースの例を示します。サービス定義の完全な構文については、「サービス定義テンプレート (p. 134)」を参照してください。

例: 内部トラフィックと外部トラフィックに別々のロードバランサーを使用する

次のユースケースでは、サービスは 2 つの別個のロードバランサーを使用します。1 つは内部トラフィック用、もう 1 つはインターネット向けトラフィック用で、同じコンテナとポートに対して使用します。

"loadBalancers":[ //Internal ELB { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456", "containerName":"nginx", "containerPort":8080 }, //Internet-facing ELB {

API バージョン 2014-11-13172

Amazon ECS AWS Fargate 用ユーザーガイドサービスの Auto Scaling

"targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321", "containerName":"nginx", "containerPort":8080 }]

例: 同じコンテナから複数のポートを公開する

次のユースケースでは、サービスは 1 つのロードバランサーを使用しますが、同じコンテナから複数のポートを公開します。たとえば、Jenkins コンテナは、Jenkins ウェブインターフェイス用にポート 8080を、API 用にポート 50000 を公開する場合があります。

"loadBalancers":[ { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456", "containerName":"jenkins", "containerPort":8080 }, { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321", "containerName":"jenkins", "containerPort":50000 }]

例: 複数のコンテナのポートを公開する

次のユースケースでは、サービスは 1 つのロードバランサーと 2 つのターゲットグループを使用して、個別のコンテナからポートを公開します。

"loadBalancers":[ { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_1/1234567890123456", "containerName":"webserver", "containerPort":80 }, { "targetGroupArn":"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/target_group_name_2/6543210987654321", "containerName":"database", "containerPort":3306 }]

サービスの Auto ScalingAuto Scaling は、Amazon ECS サービスの必要タスク数を自動的に増減させる機能です。Amazon ECS はApplication Auto Scaling サービスを活用してこの機能を提供します。詳細については、Application AutoScaling ユーザーガイドを参照してください。

API バージョン 2014-11-13173

Amazon ECS AWS Fargate 用ユーザーガイドサービスの Auto Scaling に必要な IAM アクセス許可

Amazon ECS はご使用のサービスの CPU とメモリの平均使用量を含む CloudWatch メトリクスを発行します。詳細については、「サービス使用率 (p. 196)」を参照してください。これらおよびその他のCloudWatch メトリクスを使用して、ピーク時に高需要に対処するためにサービスをスケールアウトし (実行するタスクを増やし)、使用率の低い期間にコストを削減するためにサービスをスケールインする (実行するタスクを減らす) ことができます。

Amazon ECS サービスの Auto Scaling は、以下のタイプの自動スケーリングをサポートします。

• ターゲット追跡スケーリングポリシー (p. 175)—特定のメトリクスのターゲット値に基づいて、サービスが実行するタスクの数を増減させます。これはサーモスタットが家の温度を維持する方法に似ています。温度を選択すれば、後はサーモスタットがすべてを実行します。

• ステップスケーリングポリシー (p. 180)—アラーム超過のサイズに応じて変動する一連のスケーリング調整値 (ステップ調整値) に基づいて、サービスが実行するタスク数を増減させます。

• スケジュールに基づくスケーリング—日付と時刻に基づいてサービスが実行するタスクの数を増減させます。

サービスの Auto Scaling に必要な IAM アクセス許可サービスの Auto Scaling は Amazon ECS、CloudWatch、および Application Auto Scaling API と組み合わせることで機能します。サービスは Amazon ECS を使用して作成および更新され、アラームはCloudWatch を使用して作成されます。また、スケーリングポリシーは Application Auto Scaling で作成されます。

サービスを作成および更新する標準の IAM アクセス許可に加えて、サービスの Auto Scaling 設定にアクセスする IAM ユーザーには、動的スケーリングをサポートするサービスに対する適切なアクセス許可が必要です。IAM ユーザーには、以下のポリシー例に示されているアクションを使用するアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:*", "ecs:DescribeServices", "ecs:UpdateService", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "cloudwatch:DisableAlarmActions", "cloudwatch:EnableAlarmActions", "iam:CreateServiceLinkedRole", "sns:CreateTopic", "sns:Subscribe", "sns:Get*", "sns:List*" ], "Resource": [ "*" ] } ]

API バージョン 2014-11-13174

Amazon ECS AWS Fargate 用ユーザーガイドターゲット追跡スケーリングポリシー

}

「サービス作成の例 (p. 228)」および「サービスの更新の例 (p. 229)」の IAM ポリシー例に、IAM ユーザーが AWS マネジメントコンソール で サービスの Auto Scaling を使用するためのアクセス権限が示されています。

Application Auto Scaling サービスには、Amazon ECS サービスおよび CloudWatch アラームを記述するアクセス許可が必要です。また、ユーザーの代わりにサービスの必要タスク数を変更するアクセス許可も必要です。ECS サービスの自動スケーリングを有効にすると、サービスにリンクされたロールがAWSServiceRoleForApplicationAutoScaling_ECSService という名前で作成されます。このサービスにリンクされたロールでは、ポリシーのアラームを記述し、サービスの現在実行中のタスクの数をモニタリングし、サービスの必要なタスクの数を変更するアクセス許可を Application Auto Scaling に付与します。Application Auto Scaling の元のマネージド型の Amazon ECS ロールは ecsAutoscaleRole ですが、このロールは不要になりました。サービスにリンクされたロールは Application Auto Scaling のデフォルトロールです。詳細については、Application Auto Scaling ユーザーガイド の「サービスにリンクされたロール」を参照してください。

ターゲット追跡スケーリングポリシーターゲット追跡スケーリングポリシーでは、メトリクスを選択してターゲット値を設定します。AmazonECS サービスの Auto Scaling はスケーリングポリシーをトリガーする CloudWatch アラームを作成および管理し、メトリクスとターゲット値に基づいてスケーリング調整値を計算します。スケーリングポリシーは、指定されたターゲット値、またはそれに近い値にメトリクスを維持するため、必要に応じてサービスタスクを追加または削除します。ターゲットの追跡スケーリングポリシーは、メトリクスをターゲット値近くに維持することに加えて、負荷パターンの変動によるメトリクスの変動に合わせて調整し、サービスで実行されているタスク数の急速な変動を最小化します。

考慮事項次の考慮事項に注意が必要です。

• ターゲットの追跡スケーリングポリシーでは、指定されたメトリクスがターゲット値を超えている場合、スケールアウトする必要があると見なされます。指定されたメトリクスがターゲット値を下回っている場合、ターゲットの追跡スケーリングポリシーを使用してスケールアウトすることはできません。

• 指定されたメトリクスに十分なデータがない場合、ターゲットの追跡スケーリングポリシーによってスケールされません。不十分なデータは低い使用率として解釈されないため、スケールインされません。

• ターゲット値と実際のメトリクスデータポイント間にギャップが発生する場合があります。これは、サービスの Auto Scaling が追加または削除する容量を決定するときに、その数を切り上げまたは切り捨てて常に控えめに動作するためです。これにより、不十分な容量を追加したり、必要以上に容量を削除することを防ぎます。

• アプリケーションの可用性を高めるために、サービスのスケールアウトはメトリクスに比例して可能な限り高速に行われますが、スケールインはより緩やかです。

• Amazon ECS サービスに対して複数のターゲット追跡スケーリングポリシーを設定できます。ただし、各ポリシーがそれぞれ異なるメトリクスを使用している必要があります。サービスの Auto Scaling の目的は常に可用性を優先することであるため、その動作は、ターゲット追跡ポリシーでスケールアウトまたはスケールインの準備ができているかによって異なります。ターゲット追跡ポリシーのいずれかでスケールアウトする準備ができると、サービスがスケールアウトされますが、すべてのターゲット追跡ポリシー (スケールイン部分が有効) でスケールインする準備ができている場合にのみスケールインされます。

• ターゲット追跡スケーリングポリシー用に サービスの Auto Scaling によって管理されているCloudWatch アラームを編集または削除しないでください。スケーリングポリシーを削除すると、サービスの Auto Scaling によって自動的にアラームが削除されます。

API バージョン 2014-11-13175

Amazon ECS AWS Fargate 用ユーザーガイドターゲット追跡スケーリングポリシー

チュートリアル: ターゲット追跡を伴うサービスの Auto Scaling以下の手順は、Amazon ECS クラスターを作成するために、また、ターゲット追跡を使用して需要に基づいて自動的にスケールアウト (およびイン) するサービスを作成するために役立ちます。

このチュートリアルでは、Amazon ECS 初回実行ウィザードを使用してクラスターとサービス (ElasticLoad Balancing ロードバランサーの背後で実行) を作成します。その後、サービスの CPU 使用率(CloudWatch の ECS、ClusterName、ServiceName カテゴリからのもの) で測定される現在のアプリケーション負荷に基づいてサービスを自動的にスケーリングする、ターゲット追跡スケーリングポリシーを設定します。

サービスの CPU 平均使用率が 75% を上回ると (サービス用に予約されている CPU が 75% より多く使用されると)、スケールアウトアラームがトリガーされて サービスの Auto Scaling が開始され、増加した負荷に応じてサービスに別のタスクが追加されます。逆に、サービスの CPU 平均使用率が一定期間ターゲットの使用率を下回ると、スケールインアラームがトリガーされてサービスの必要タスク数が減らされ、それらのクラスターリソースが他のタスクやサービス用に解放されます。

前提条件このチュートリアルでは、管理者の認証情報を使用しており、現在のリージョンに Amazon EC2 キーペアがあることを前提としています。これらのリソースがないか、わからない場合は、「Amazon ECS でのセットアップ (p. 3)」の手順に従ってリソースを作成できます。

ステップ 1: クラスターとサービスを作成するAmazon ECS 初回実行ウィザードを使用してクラスターとサービスを作成することから始めます。初回実行ウィザードでは、このチュートリアルに必要な IAM ロール、コンテナインスタンス用の Auto Scaling グループ、ロードバランサーの背後で実行されるサービスを作成します。また、このウィザードでは、AWSCloudFormation スタック全体をワンステップで削除できるため、クリーンアッププロセスが大幅に簡単になります。

このチュートリアルでは、service-autoscaling という名前のクラスターと sample-webapp という名前のサービスを作成します。

クラスターとサービスを作成するには

1. Amazon ECS コンソールの初回実行ウィザード (https://console.aws.amazon.com/ecs/home#/firstRun)を開きます。

2. ナビゲーションバーから、[米国東部 (バージニア北部)] リージョンを選択します。3. [ステップ 1: コンテナとタスク] の [コンテナの定義] で、[sample-app] を選択します。4. [タスク定義] では、すべてのデフォルトのオプションを変更しないで、[次へ] を選択します。5. [ステップ 2: サービス] の [ロードバランサーの種類] で、[Application Load Balancer]、[次へ] の順に選

択します。

Important

Application Load Balancer が AWS リソースに存在する間、コストが発生します。詳細については、「Elastic Load Balancing 料金表」を参照してください。

6. [ステップ 3: クラスター] の [クラスター名] に「service-autoscaling」と入力し、[次へ] を選択します。

7. 選択内容を確認し、[作成] を選択します。

[作成ステータス] ページに進みます。このページでは、起動ステータスが示され、プロセスの各ステップについて説明されます (クラスターのリソースが作成されて入力されるまでに数分かかる場合があります)。

8. クラスターとサービスが作成されたら、[サービスの表示] を選択します。

API バージョン 2014-11-13176

Amazon ECS AWS Fargate 用ユーザーガイドターゲット追跡スケーリングポリシー

ステップ 2: サービスの Auto Scaling の設定クラスターを起動し、ロードバランサーの背後で実行されるサービスをそのクラスターに作成したので、ターゲット追跡スケーリングポリシーを作成することで サービスの Auto Scaling を有効にできます。

基本的な サービスの Auto Scaling パラメータを設定するには

1. [Service: sample-app-service (サービス: sample-app-service)] ページで、サービス設定は次の画像のようになっています (ただし、タスク定義のリビジョンとロードバランサー名は異なります)。[Update] を選択して、新しいサービスを更新します。

2. [サービスの更新] ページで、[次のステップ] を選択して [ステップ 3: Auto Scaling の設定 (省略可能)]まで進みます。

3. [サービスの Auto Scaling] で、[Configure Service Auto Scaling to adjust your service's desired count(サービス Auto Scaling の設定を変更することで、サービスの必要数を調整する)] を選択します。

4. [Minimum number of tasks (タスクの最小数)] に、サービスの Auto Scaling で使用するタスクの下限数として 1 と入力します。サービスの必要数は、この数を下回ると自動的に調整されません。

API バージョン 2014-11-13177

Amazon ECS AWS Fargate 用ユーザーガイドターゲット追跡スケーリングポリシー

5. [タスクの必要数] には、前に入力した値があらかじめ入力されています。この値は、このページで指定したタスクの最小数と最大数の間であることが必要です。この値は 1 のままにします。

6. [Maximum number of tasks (タスクの最大数)] に、サービスの Auto Scaling で使用するタスクの上限数として 2 と入力します。サービスの必要数は、この数を上回ると自動的に調整されません。

7. [IAM role for Service Auto Scaling (サービスの自動スケーリング用の IAM ロール)]で、ecsAutoscaleRole を選択します。このロールが存在しない場合は、[新しいロールの作成] を選択して、コンソールで作成します。

サービスのターゲット追跡スケーリングポリシーを設定するには

1. [スケーリングポリシーの追加] を選択してスケーリングポリシーを設定します。2. [Add policy (ポリシーの追加)] ページで、以下のフィールドを更新します。

a. [スケーリングポリシータイプ] で [ターゲットの追跡] を選択します。b. [ポリシー名] に「TargetTrackingPolicy」と入力します。c. [ECS サービスメトリクス] で、[ECSServiceAverageCPUUtilization] を選択します。d. [ターゲット値] に「75」と入力します。e. [スケールアウトクールダウン期間] に「60」と入力します。スケールアウトアクティビティは、

サービスのタスクの数を増やします。スケールアウトのクールダウン期間が有効な間は、その期間中にクールダウンを開始したスケールアウトアクティビティによって追加された容量は、次のスケールアウトに予定される容量の一部として繰り入れられます。これにより、スケールアウトが継続的に (ただし過剰になることなく) 行われます。

f. [スケールインクールダウン期間] に「60」(秒) と入力します。スケールインアクティビティは、サービスのタスクの数を減らします。スケールインのクールダウン期間は、その期間が過ぎるまでは以後のスケールインリクエストをブロックするために使用されます。これにより、スケールインが抑制されてアプリケーションの可用性が確保されます。ただし、スケールイン後のクールダウン期間中に別のアラームによってスケールアウトアクティビティがトリガーされると、サービスの Auto Scaling によってスケーラブルなターゲットが即座にスケールアウトされます。

g. [Save] を選択します。3. [Next step] を選択します。4. すべての選択内容を確認し、[サービスを更新] を選択します。5. サービスステータスの更新が終了したら、[View Service] を選択します。

ステップ 3: スケーリングアクティビティをトリガーするサービスを サービスの Auto Scaling で設定した後、サービスの CPU 使用率を ALARM 状態にプッシュすることで、スケーリングアクティビティをトリガーできます。このチュートリアルの例はロードバランサーの背後で実行されるウェブアプリケーションであるため、ApacheBench ユーティリティを使用して数千の HTTP リクエストをサービスに送信することで、しきい値を上回るようにサービスの CPU 使用率をスパイクできます。このスパイクによりアラームがトリガーされることで、サービスに 1 タスクを追加するスケーリングアクティビティがトリガーされます。

ApacheBench ユーティリティからのリクエストが終了した後、サービスの CPU 使用率は 75% のしきい値を下回って、サービスの必要タスク数を 1 に戻すスケールインアクティビティがトリガーされます。

サービスのスケーリングアクティビティをトリガーするには

1. Amazon EC2 コンソールで、サービスのメインビューページからロードバランサー名を選択すると、その詳細が表示されます。ロードバランサーの DNS 名が必要です。この名前は EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com のようになります。

2. ApacheBench (ab) ユーティリティを使用して、ロードバランサーに短期間に数千の HTTP リクエストを送信します。

API バージョン 2014-11-13178

Amazon ECS AWS Fargate 用ユーザーガイドターゲット追跡スケーリングポリシー

Note

このコマンドは macOS にデフォルトでインストールされており、多くの Linux ディストリビューションでも使用できます。たとえば、以下のコマンドを使用して Amazon Linux に abをインストールできます。

$ sudo yum install -y httpd24-tools

以下のコマンドを実行します (DNS 名はロードバランサーの DNS 名に置き換えます)。

$ ab -n 100000 -c 1000 http://EC2Contai-EcsElast-SMAKV74U23PH-96652279.us-east-1.elb.amazonaws.com/

3. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。4. 左側のナビゲーションペインで [アラーム] を選択します。5. ab HTTP リクエストによって CloudWatch コンソールのスケールアウトアラームがトリガーされるの

を待ちます。Amazon ECS サービスがスケールアウトされて、そのサービスの必要数に 1 タスクが追加されています。

6. ab HTTP リクエストが完了するとすぐに (1、2 分間で)、スケールインアラームがトリガーされ、スケールインポリシーによりサービスの必要数が 1 に戻ります。

ステップ 4: 次のステップこのチュートリアル用に作成した基本インフラストラクチャを削除する場合は、次のステップに進みます。それ以外の場合は、ベースとしてこのインフラストラクチャを使用し、次の 1 つ以上を試すことができます。

• Amazon ECS コンソールからこれらのスケーリングアクティビティを表示するには、サービスの[Events (イベント)] タブを選択します。スケーリングイベントが発生すると、ここに通知メッセージが表示されます。次に例を示します。

Message: Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy

• CloudWatch Container Insights の設定が完了し、Amazon ECS メトリクスの収集が開始されたら、それらのメトリクスデータを CloudWatch 自動ダッシュボードで表示できます。詳細については、AWS コンピューティングブログの「Amazon ECS 用 Amazon CloudWatch Container Insights の紹介」を参照してください。

• CloudWatch Container Insights の設定方法について説明します。追加の変更が適用されます。詳細については、「Amazon ECS CloudWatch Container Insights (p. 207)」および「クラスター設定の更新 (p. 26)」を参照してください。

ステップ 5: クリーンアップするこのチュートリアルを完了したら、クラスター、Auto Scaling グループ、ロードバランサー、ターゲット追跡スケーリングポリシー、CloudWatch アラームを維持するように選択できます。ただし、これらのリソースをアクティブに使用していない場合は、アカウントで不要な料金が発生しないように、リソースのクリーンアップを検討する必要があります。

クラスターを削除するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. 左のナビゲーションペインで [Clusters (クラスター)] を選択します。

API バージョン 2014-11-13179

Amazon ECS AWS Fargate 用ユーザーガイドステップスケーリングポリシー

3. [クラスター] ページで、[service-autoscaling] クラスターを選択します。4. [クラスターの削除]、[削除] の順に選択します。クラスター AWS CloudFormation スタックのクリーン

アップが終了するまでに数分かかることがあります。

ステップスケーリングポリシーAmazon ECS サービスの Auto Scaling は Application Auto Scaling ステップスケーリングポリシーの使用をサポートしていますが、代わりにターゲット追跡ポリシーを使用することをお勧めします。たとえば、CPU 使用率が特定のレベルを下回ったまたは上回ったときにサービスをスケーリングする場合は、Amazon ECS によって提供される CPU 使用率メトリクスに基づいてターゲット追跡スケーリングポリシーを作成します。詳細については、「ターゲット追跡スケーリングポリシー (p. 175)」を参照してください。

ステップスケーリングポリシーを使用して、スケーリングプロセスをトリガーする CloudWatch アラームを作成および管理します。ターゲット追跡アラームがユースケースで機能しない場合は、ステップスケーリングを使用できます。また、高度なスケーリングポリシー設定に、ターゲット追跡スケーリングをステップスケーリングと共に使用することもできます。たとえば、必要に応じて、使用率が一定のレベルに達したときにより積極的なレスポンスを設定できます。

サービスの Auto Scaling に関する考慮事項• クラスターとサービスが CloudWatch にメトリクスを送信するまで、メトリクスは使用できません。ま

た、まだ存在しないメトリクスに対して CloudWatch アラームを作成することはできません。• Amazon ECS サービス用に作成したスケーリングポリシーはクールダウン期間をサポートしています。

クールダウン期間は、以前のスケーリングポリシー関連のスケーリングアクティビティが以後のスケーリングアクティビティに影響できる期限であり、スケーリングアクティビティが終了した時点からの秒数として指定します。• スケールアウトポリシーにクールダウン期間を設定すると、その期間中にクールダウンを開始したス

ケールアウトアクティビティによって追加された容量は、次のスケールアウトに予定される容量の一部として繰り入れられます。これにより、スケールアウトが継続的に (ただし過剰になることなく) 行われます。

• スケールインポリシーにクールダウン期間を設定すると、その期間が過ぎるまでは以後のスケールインリクエストがブロックされます。これにより、スケールインが抑制されてアプリケーションの可用性が確保されます。ただし、スケールイン後のクールダウン期間中に別のアラームによってスケールアウトポリシーがトリガーされると、自動スケーリングによってサービスが即座にスケールアウトされます。

• ECS サービススケジューラは常に必要数を優先しますが、サービスにアクティブなスケーリングポリシーとアラームがある限り、サービスの Auto Scaling はユーザーが手動で設定した目的数を変更できます。

• サービスの必要タスク数が容量最小値より小さく設定された状態で、アラームがスケールアウトアクティビティをトリガーしたとき、サービスの Auto Scaling が必要タスク数を容量最小値までスケールアップします。その後もアラームに関連付けられたスケーリングポリシーに基づいて、必要に応じてスケーリングし続けます。ただし、必要数はすでにキャパシティーの最小値より小さいため、スケールインアクティビティでは調整されません。

• サービスの必要タスク数が容量最大値より大きく設定された状態で、アラームがスケールインアクティビティをトリガーしたとき、サービスの Auto Scaling が必要タスク数を容量最大値までスケールアウトします。その後もアラームに関連付けられたスケーリングポリシーに基づいて、必要に応じてスケーリングし続けます。ただし、必要タスク数はすでに容量最大値より大きいため、スケールアウトアクティビティでは調整されません。

• 規模の拡大や縮小中、サービスの実際の実行中タスク数は、必要数とは異なり、サービスの AutoScaling が開始点として使用する、処理能力として想定される値です。これにより、たとえば、追加タスクを配置するために十分なコンテナインスタンスリソースがない場合に、満たすことができない過剰な(ランナウェイ) スケーリングを防ぐことができます。後でコンテナインスタンスのキャパシティーを使

API バージョン 2014-11-13180

Amazon ECS AWS Fargate 用ユーザーガイドサービス検出

用できるようになった場合、保留中の規模の拡大や縮小が続行され、クールダウン期間後にさらに規模の拡大や縮小を続行できることができます。

Amazon ECS コンソールの操作サービスの Auto Scaling はデフォルトで無効になっています。有効にするには、Amazon ECS の AWS マネジメントコンソール でサービスの [Auto Scaling] タブからスケーリングポリシーを設定します。

コンソールからスケーリングポリシーを操作するためのステップバイステップのガイダンスについては、「サービスの作成 (p. 135)」および「サービスの更新 (p. 147)」を参照してください。ステップスケーリングの詳細とチュートリアルについては、AWS コンピューティングブログの「Amazon ECS での自動スケーリング」を参照してください。ターゲット追跡のチュートリアルについては、「ターゲット追跡スケーリングポリシー (p. 175)」を参照してください。

Amazon ECS コンソールでサービスのスケーリングポリシーを設定すると、サービスはスケーラブルなターゲットとして Application Auto Scaling に自動的に登録され、スケーリングポリシーは正常に作成されるとすぐに有効になります。

AWS CLI および SDK の操作サービスの Auto Scaling は Amazon ECS、CloudWatch、および Application Auto Scaling API と組み合わせることで機能します。サービスは Amazon ECS を使用して作成および更新され、アラームはCloudWatch を使用して作成されます。また、スケーリングポリシーは Application Auto Scaling で作成されます。

これら特定の API オペレーションの詳細については、Amazon Elastic Container Service APIReference、Amazon CloudWatch API リファレンス、および Application Auto Scaling API リファレンスを参照してください。これらのサービス用の AWS CLI コマンドの詳細については、AWS CLI CommandReference の「ecs」、「cloudwatch」、および「application-autoscaling」を参照してください。

AWS CLI を使用して ECS サービスのスケーリングポリシーを設定するには

1. register-scalable-target コマンドを使用して、スケーラブルなターゲットとして ECS サービスを登録します。

2. put-scaling-policy コマンドを使用してスケーリングポリシーを作成します。3. [ステップスケーリング] put-metric-alarm コマンドを使用してスケーリングポリシーをトリガーするア

ラームを作成します。

AWS CLI を使用したスケーリングポリシーの設定の詳細については、Application Auto Scaling ユーザーガイド を参照してください。

サービス検出Amazon ECS サービスはオプションで Amazon ECS サービス検出 を使用するように設定できます。サービス検出 は AWS Cloud Map API アクションを使用して Amazon ECS サービスの HTTP および DNS 名前空間を管理します。詳細については、AWS Cloud Map 開発者ガイド の「AWS Cloud Map とは」を参照してください。

サービス検出 は以下の AWS リージョンで利用できます。

リージョン名 リージョン

米国東部(バージニア北部) us-east-1

米国東部 (オハイオ) us-east-2

API バージョン 2014-11-13181

Amazon ECS AWS Fargate 用ユーザーガイドサービス検出 の概念

リージョン名 リージョン

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

アジアパシフィック (香港) ap-east-1

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (東京) ap-northeast-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール) ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

欧州 (ストックホルム) eu-north-1

中東 (バーレーン) me-south-1

南米 (サンパウロ) sa-east-1

サービス検出 の概念サービス検出 のコンポーネントは次のとおりです。

• サービス検出 名前空間: 同じドメイン名 (example.com など) を共有する サービス検出 サービスの論理グループ。

• サービス検出 サービス: サービス検出 名前空間にあり、名前空間のサービス名および DNS 設定から構成されます。これは、次の主要なコンポーネントを提供します。• サービスレジストリ: DNS あるいは AWS Cloud Map API アクションを介してサービスを検索し、

サービスに接続するために使用できる 1 つ以上の利用可能なエンドポイントを返すことができます。• サービス検出 インスタンス: サービス検出 サービスにあり、サービスディレクトリ内の各 Amazon ECS

サービスに関連付けられた属性で構成されます。• インスタンスの属性: 次のメタデータは、サービス検出 を使用するように設定された各 Amazon ECS

サービスのカスタム属性として追加されます。• AWS_INSTANCE_IPV4 – A レコードの場合、インスタンスの詳細が検出されると、192.0.2.44 な

ど、DNS クエリへの応答として Route 53 が返す IPv4 アドレスおよび AWS Cloud Map が返されます。

• AWS_INSTANCE_PORT – サービス検出 サービスに関連付けられたポート値。• AVAILABILITY_ZONE – タスクが起動したアベイラビリティーゾーン。EC2 起動タイプを使用す

るタスクの場合、これはコンテナインスタンスが存在するアベイラビリティーゾーンです。Fargate起動タイプを使用するタスクの場合、これは Elastic Network Interface が存在するアベイラビリティーゾーンです。

• REGION – タスクが存在するリージョン。

API バージョン 2014-11-13182

Amazon ECS AWS Fargate 用ユーザーガイドサービス検出 に関する考慮事項

• ECS_SERVICE_NAME – タスクが属している Amazon ECS サービスの名前。• ECS_CLUSTER_NAME – タスクが属している Amazon ECS クラスターの名前。• EC2_INSTANCE_ID – タスクが配置されていたコンテナインスタンスの ID。タスクが Fargate 起動

タイプを使用している場合、このカスタム属性は追加されません。• ECS_TASK_DEFINITION_FAMILY – タスクが使用しているタスク定義ファミリー。• ECS_TASK_SET_EXTERNAL_ID – タスクセットが外部デプロイ用に作成され、サービス検出レジス

トリに関連付けられている場合、ECS_TASK_SET_EXTERNAL_ID 属性にはタスクセットの外部 IDが含まれます。

• Amazon ECS ヘルスチェック: Amazon ECS はコンテナレベルのヘルスチェックを定期的に実行します。エンドポイントがヘルスチェックに失敗した場合、このエンドポイントは DNS ルーチングから削除され、異常とマークされます。

サービス検出 に関する考慮事項サービス検出 を使用する際には、以下の点を考慮する必要があります。

• プラットフォームバージョンが v1.1.0 以降を使用する場合、サービス検出 は Fargate 起動タイプを使用してタスクでサポートされます。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

• Amazon ECS コンソールでのサービスの作成ワークフローでは、プライベート DNS 名前空間へのサービスの登録のみがサポートされます。AWS Cloud Map プライベート DNS 名前空間が作成されると、Route 53 プライベートホストゾーンが自動的に作成されます。

• パブリック名前空間が使用されている場合でも、サービス検出 サービス用に作成された DNS レコードは、パブリック IP アドレスではなく、タスクのプライベート IP アドレスに常に登録されます。

• サービス検出 では、awsvpc、bridge、host のいずれかのネットワークモードをタスクで指定する必要があります (none はサポートされていません)。

• サービスタスクで指定されたタスク定義が awsvpc ネットワークモードを使用する場合、各サービスタスクで A レコードまたは SRV レコードを組み合わせて作成できます。SRV レコードを使用する場合、ポートが必要です。

• サービスタスクで指定されたタスク定義が bridge または host ネットワークモードを使用する場合、SRV のレコードのみがサポートされる DNS レコードタイプです。各サービスタスクの SRV レコードを作成します。SRV レコードのコンテナ名とコンテナポートの組み合わせをタスク定義から指定する必要があります。

• サービス検出 サービスの DNS レコードは、VPC 内でクエリを実行できます。これは、次の形式を使用します: <###### service name>.<###### namespace>。詳細については、「ステップ 3: サービス検出 を確認する (p. 327)」を参照してください。

• サービス名で DNS クエリを実行すると、A レコードはタスクに対応する IP アドレスのセットを返します。SRV レコードは、タスクごとに IP アドレスとポートのセットを返します。

• 8 つ以下の正常なレコードがある場合、Route 53 はすべての DNS クエリにすべての正常なレコードを返します。

• すべてのレコードが異常である場合、Route 53 は DNS クエリに最大 8 つの異常なレコードを返します。

• サービス検出 はロードバランサーの背後にある ECS サービスに設定できますが、サービス検出 トラフィックは必ずタスクにルーティングされ、ロードバランサーにはルーティングされません。

• Classic Load Balancer では、サービス検出 の使用はサポートされていません。• サービス検出 サービスの Amazon ECS により管理されるコンテナレベルのヘルスチェックを使用する

ことをお勧めします。• HealthCheckCustomConfig—Amazon ECS はユーザーに代わってヘルスチェックを管理しま

す。Amazon ECS ではコンテナおよびヘルスチェック、そしてタスク状態からの情報を使用して、AWS Cloud Map の正常性を更新します。これは、--health-check-custom-config パラ

API バージョン 2014-11-13183

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS コンソールの操作

メータを使用して サービス検出 サービスの作成時に指定します。詳細については、『AWS CloudMap API リファレンス』の「ヘルスチェックカスタム設定」を参照してください。

• Amazon ECS コンソールを使用している場合、ワークフローは ECS サービスごとに 1 つの サービス検出 サービスを作成します。すべてのタスク IP アドレスを A レコード、あるいはタスク IP アドレスとポートを SRV レコードとしてマッピングします。

• サービス検出 は、最初にサービスを作成するときにのみ設定できます。サービス検出 を初めて構成するための既存のサービスの更新、または現在の構成の変更はサポートされていません。

• サービス検出 を使用するときに作成される AWS Cloud Map リソースは、手動でクリーンアップする必要があります。詳細については、「チュートリアル: サービス検出 を使用したサービスの作成 (p. 322)」トピックの「ステップ 4: クリーンアップ (p. 329)」を参照してください。

Amazon ECS コンソールの操作Amazon ECS コンソールのサービス作成ワークフローは サービス検出 をサポートしています。サービス検出 はサービスの初回作成時にのみ設定できます。サービス検出 を初めて構成するための既存のサービスの更新、または現在の構成の変更はサポートされていません。

サービス検出 を使用する新しい Amazon ECS サービスを作成するには、「サービスの作成 (p. 135)」を参照してください。

サービス検出 料金表Amazon ECS サービス検出 を使用しているお客様には、Route 53 リソースおよび AWS Cloud Map 検出API オペレーションの料金が発生します。これには、Route 53 ホストゾーンの作成とサービスレジストリへのクエリのコストが含まれます。詳細については、AWS Cloud Map 開発者ガイド の「AWS Cloud MapPricing」を参照してください。

Amazon ECS は、コンテナレベルのヘルスチェックを実行し、この結果を AWS Cloud Map カスタムヘルスチェック API オペレーションに公開します。現在のところ、これは追加コストなしでお客様に提供されています。パブリックに公開されているタスクにネットワークヘルスチェックを設定する場合、このヘルスチェックに対しては課金されます。

サービスの調整ロジックAmazon ECS サービススケジューラには、サービスタスクが繰り返し起動に失敗した場合にタスクを起動する頻度を調整するロジックがあります。

ECS サービスのタスクが繰り返し RUNNING 状態への遷移に失敗 (PENDING から直接 STOPPED に進行)する場合、その後の再起動の試行間隔は最大 15 分まで段階的に増加します。この最大期間は今後変更される可能性があり、永続的なものと見なすことはできません。この動作により、起動できないタスクが Amazon ECS クラスターのリソースまたは Fargate のインフラストラクチャのコストに与える影響が軽減されます。サービスによって調整ロジックがトリガーされると、次のサービスイベントメッセージ (p. 359)が表示されます。

(service service-name) is unable to consistently start tasks successfully.

Amazon ECS によって失敗したサービスの再試行が停止されることはありません。また、再起動間隔を増やす以外に変更を加えることもありません。サービスの調整ロジックにはユーザーが調整できるパラメータは用意されていません。

新しいタスク定義を使用するようにサービスを更新する場合、サービスは即時通常の調整されていない状態に戻ります。詳細については、「サービスの更新 (p. 147)」を参照してください。

API バージョン 2014-11-13184

Amazon ECS AWS Fargate 用ユーザーガイドサービスの調整ロジック

このロジックをトリガーする一般的な原因を以下に示します。

• Amazon ECS コンテナエージェントがタスクの Docker イメージをプルできない。これは、コンテナイメージ名、イメージ、またはタグが不正であったり、プライベートレジストリの認証またはアクセス権限がないためである可能性があります。この場合、停止されたタスクのエラー (p. 350)にCannotPullContainerError も表示されます。

Important

RUNNING 状態になった後で停止されたタスクは、調整ロジックまたは関連サービスイベントメッセージをトリガーしません。たとえば、サービスの Elastic Load Balancing ヘルスチェックが失敗した場合、タスクに異常のフラグが付けられ、Amazon ECS によってタスク登録が解除されて強制終了されます。調整はトリガーされません。タスクのコンテナコマンドでゼロ以外の終了コードで即時終了した場合でも、タスクはすでに RUNNING 状態に移行しています。コマンドのエラーが原因で即時失敗したタスクは、調整やサービスイベントメッセージをトリガーしません。

API バージョン 2014-11-13185

Amazon ECS AWS Fargate 用ユーザーガイドリソースにタグを付ける

リソースとタグリソース、タスク定義、クラスター、タスク、サービス、コンテナインスタンスなどの Amazon ECS リソースには Amazon リソースネーム (ARN) と一意のリソース識別子 (ID) が割り当てられています。これらのリソースを整理および識別しやすいように、ユーザーが定義した値でリソースにタグ付けできます。

以下のトピックでは、リソースとタグ、およびそれらの使用方法について説明します。

目次• Amazon ECS リソースのタグ付け (p. 186)• Amazon ECS 使用状況レポート (p. 191)

Amazon ECS リソースのタグ付けAmazon ECS タスク、サービス、タスクセット、タスク定義、クラスター、およびコンテナインスタンスを管理しやすいように、タグという形式で独自のメタデータをオプションで各リソースに割り当てることができます。ここでは、タグとその作成方法について説明します。

Important

この機能を使用するには、新形式の Amazon リソースネーム (ARN) とリソース識別子 (ID)をオプトインする必要があります。詳細については、「Amazon リソースネーム (ARN) とID (p. 109)」を参照してください。

タグの基本タグとは、AWS リソースに付けるラベルです。タグはそれぞれ、1 つのキーとオプションの 1 つの値で構成されており、どちらもお客様側が定義します。

タグを使用すると、AWS リソースを用途、所有者、環境などのさまざまな方法で分類できます。同じ型のリソースが多い場合に役立ちます — 割り当てたタグに基づいて特定のリソースをすばやく識別できます。たとえば、アカウントの Amazon ECS コンテナインスタンスに一連のタグを定義して、各コンテナインスタンスの所有者やスタックレベルを追跡しやすくすることができます。

ニーズを満たす一連のタグキーをリソースタイプごとに考案されることをお勧めします。一貫性のあるタグキーセットを使用することで、リソースの管理が容易になります。追加したタグに基づいてリソースを検索およびフィルタリングできます。

タグは Amazon ECS にとっては何の意味もなく、文字列としてだけ解釈されます。また、タグは自動的にリソースに割り当てられます。タグのキーと値は編集でき、タグはリソースからいつでも削除できます。タグの値を空の文字列に設定することはできますが、タグの値を null に設定することはできません。特定のリソースについて既存のタグと同じキーを持つタグを追加した場合、古い値は新しい値によって上書きされます。リソースを削除すると、リソースのタグも削除されます。

AWS マネジメントコンソール、AWS CLI、および Amazon ECS API を使用してタグを操作できます。

AWS Identity and Access Management (IAM) を使用している場合は、AWS アカウント内のどのユーザーがタグを作成、編集、削除するアクセス許可を持つかを制御できます。

リソースにタグを付けるAmazon ECS の新規または既存のタスク、サービス、タスク定義、およびクラスターにタグ付けできます。

API バージョン 2014-11-13186

Amazon ECS AWS Fargate 用ユーザーガイドタグの制限

Amazon ECS コンソールを使用している場合、新規リソースには作成時にタグを適用でき、既存のリソースには関連するリソースページの [Tags (タグ)] タブを使用していつでもタグを適用できます。タスク定義からタスクにタグをコピーするタスクを実行するとき、またはサービスあるいはタスク定義からサービス内のタスクにタグをコピーするサービスを作成するとき、[Propagate tags from (タグの伝播元)] オプションが使用できます。

Amazon ECS API、AWS CLI、または AWS SDK を使用している場合、関連する API アクションの tagsパラメータを使用して新規リソースにタグを適用でき、TagResource API アクションを使用して既存のリソースにタグを適用できます。詳細については、「TagResource」を参照してください。タスク定義からタスクにタグをコピーするタスクを実行するとき、またはサービスあるいはタスク定義からサービス内のタスクにタグをコピーするサービスを作成するとき、[propagateTags] パラメータが使用できます。詳細については、「RunTask」および「CreateService」を参照してください。

さらに、リソース作成アクションによっては、リソースの作成時にリソースのタグを指定できます。リソースの作成時にタグを適用できない場合は、リソース作成プロセスがロールバックされます。これにより、リソースがタグ付きで作成されるか、まったく作成されないようになるため、タグ付けされていないリソースが存在することがなくなります。作成時にリソースにタグ付けすることで、リソース作成後にカスタムタグ付けスクリプトを実行する必要がなくなります。

次の表は、タグ付け可能な Amazon ECS リソースおよび作成時にタグ付け可能なリソースについて説明しています。

Amazon ECS リソースでのタグ付けのサポート

リソース タグをサポート タグの伝播をサポート 作成時のタグ付けをサポート (Amazon ECSAPI、AWS CLI、AWSSDK)

Amazon ECS タスク はい はい、タスク定義からサポートします。

はい

Amazon ECS サービス はい はい、タスク定義またはサービス内のタスクへのサービスのいずれかからサポートします。

はい

Amazon ECS タスクセット

はい いいえ はい

Amazon ECS タスク定義

はい いいえ はい

Amazon ECS クラスター

はい いいえ はい

タグの制限タグには以下のような基本制限があります。

• リソースあたりのタグの最大数は 50 です。• タグキーは、リソースごとにそれぞれ一意である必要があります。また、各タグキーに設定できる値は

1 つのみです。• キーの最大長 – 128 文字 (Unicode) (UTF-8)• 値の最大長 – 256 文字 (Unicode) (UTF-8)

API バージョン 2014-11-13187

Amazon ECS AWS Fargate 用ユーザーガイド請求用のリソースにタグを付ける

• 複数のサービス間およびリソース間でタグ付けスキーマを使用する場合、他のサービスでも許可される文字に制限が適用されることがあるのでご注意ください。一般的に使用が許可される文字は、UTF-8 で表現できる文字、数字、スペース、および +、-、=、.、_、:、/、@。

• タグのキーと値は大文字と小文字が区別されます。• aws:、AWS:、またはその大文字または小文字の組み合わせを、キーまたは値のプレフィックスとし

て使用しないでください。これらの文字列は AWS による使用のために予約されています。このプレフィックスが含まれるタグのキーや値を編集したり削除することはできません。このプレフィックスを持つタグは、リソースあたりのタグ数の制限時には計算されません。

請求用のリソースにタグを付けるAmazon ECS マネージドタグを有効にすると、Amazon ECS は新たに起動されたすべてのタスクに、クラスター名を使用して自動的にタグ付けします。サービスに属するタスクにも、サービス名を使用してタグ付けされます。これらのマネージドタグは、コスト配分を有効にした後にコストと使用状況レポートでコスト配分を確認するときに便利です。詳細については、「Amazon ECS 使用状況レポート (p. 191)」を参照してください。

リソースを組み合わせたコストを確認するには、同じタグキー値を持つリソースに基づいて、請求情報を整理します。たとえば、複数のリソースに特定のアプリケーション名のタグを付け、請求情報を整理することで、複数のサービスを利用しているアプリケーションの合計コストを確認することができます。タグによるコスト配分レポートの設定の詳細については、AWS Billing and Cost Management ユーザーガイドの「毎月のコスト配分レポート」を参照してください。

Important

この機能を使用するには、新形式の Amazon リソースネーム (ARN) とリソース識別子 (ID)をオプトインする必要があります。詳細については、「Amazon リソースネーム (ARN) とID (p. 109)」を参照してください。

Note

レポートを有効にすると、約 24 時間後に、今月のデータを表示できるようになります。

コンソールでのタグの処理Amazon ECS コンソールを使用して、新規または既存のタスク、サービス、タスク定義、クラスター、またはコンテナインスタンスに関連付けられているタグを管理できます。

Amazon ECS コンソールでリソース固有のページを選択すると、リソースリストが表示されます。たとえば、ナビゲーションペインで [Clusters (クラスター)] を選択すると、Amazon ECS クラスターのリストがコンソールに表示されます。そのリスト (特定のクラスターなど) からリソースを 1 つ選択すると、そのリソースでタグがサポートされている場合は、[Tags (タグ)] タブでタグを表示および管理できます。

目次• 個々のリソースでの起動時のタグの追加 (p. 188)• 個々のリソースでのタグの追加と削除 (p. 189)

個々のリソースでの起動時のタグの追加以下のリソースでは、リソースの作成時にタグを指定できます。

タスク コンソール

1 つまたは複数のタスクを実行する タスクの実行 (p. 114)

API バージョン 2014-11-13188

Amazon ECS AWS Fargate 用ユーザーガイドCLI または API でのタグの操作

タスク コンソール

サービスを作成する サービスの作成 (p. 135)

タスクセットを作成します。 外部デプロイ (p. 155)

タスク定義を登録する タスク定義の作成 (p. 33)

クラスターを作成する クラスターの作成 (p. 20)

個々のリソースでのタグの追加と削除Amazon ECS では、クラスター、サービス、およびタスク定義に関連付けられているタグを、そのリソースのページから直接追加または削除できます。

個々のリソースにタグを追加するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーから、使用するリージョンを選択します。3. ナビゲーションペインでリソースタイプ (例: [Clusters (クラスター)]) を選択します。4. リソースリストからリソースを選択して [Tags (タグ)]、[Edit (編集)] の順に選択します。5. [Edit Tags (タグの編集)] ダイアログボックスで、各タグのキーと値を指定してから [Save (保存)] を選

択します。

個々のリソースからタグを削除するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーから、使用するリージョンを選択します。3. ナビゲーションペインでリソースタイプ (例: [Clusters (クラスター)]) を選択します。4. リソースリストからリソースを選択して [Tags (タグ)]、[Edit (編集)] の順に選択します。5. [Edit Tags (タグの編集)] ページで、削除する各タグの [Delete (削除)] アイコンを選択してから [Save

(保存)] を選択します。

CLI または API でのタグの操作リソースのタグの追加、更新、リスト表示、および削除には、次を使用します。対応するドキュメントに例が記載されています。

Amazon ECS リソースでのタグ付けのサポート

タスク AWS CLI API アクション

1 つ以上のタグを追加、または上書きします。

tag-resource TagResource

1 つ以上のタグを削除します。 untag-resource UntagResource

以下の例では、AWS CLI を使用して、リソースに対してタグ付けまたはタグ削除する方法を示しています。

例 1: 既存のクラスターへのタグ付け

API バージョン 2014-11-13189

Amazon ECS AWS Fargate 用ユーザーガイドCLI または API でのタグの操作

次のコマンドは既存のクラスターにタグ付けします。

aws ecs tag-resource --resource-arn resource_ARN --tags key=stack,value=dev

例 2: 既存のクラスターでのタグ削除

次のコマンドは既存のクラスターからタグを削除します。

aws ecs untag-resource --resource-arn resource_ARN --tag-keys tag_key

例 3: リソースのタグのリスト取得

次のコマンドは、既存のリソースに関連付けられているタグのリストを取得します。

aws ecs list-tags-for-resource --resource-arn resource_ARN

一部のリソース作成アクションでは、リソースの作成時にタグを指定できます。以下のアクションでは、作成時のタグ付けがサポートされます。

タスク AWS CLI AWS Tools for WindowsPowerShell

API アクション

1 つまたは複数のタスクを実行する run-task Start-ECSTask RunTask

サービスを作成する create-service New-ECSService CreateService

タスクセットを作成します。 create-task-set New-ECSTaskSet CreateTaskSet

タスク定義を登録する register-task-definition

Register-ECSTaskDefinition

RegisterTaskDefinition

クラスターを作成する create-cluster New-ECSCluster CreateCluster

次の例は、リソースの作成時にタグを適用する方法を示しています。

例 1: クラスターを作成してタグを適用する

次のコマンドは、devcluster という名前のクラスターを作成し、キーが team で値が devs のタグを追加します。

aws ecs create-cluster --cluster-name devcluster --tags key=team,value=devs

例 2: サービスを作成してタグを適用する

次のコマンドは、application という名前のサービスを作成し、キーが stack で値が dev のタグを追加します。

aws ecs create-service --service-name application --task-definition task-def-app --tags key=stack,value=dev

例 3: タグを使用してサービスを作成し、サービス内のタスクにタグを伝播する

--propagateTags パラメータを使用すると、タスク定義またはサービスからサービス内のタスクにタグをコピーできます。次のコマンドは、タグ付きのサービスを作成し、そのタグをそのサービス内のタスクに伝達します。

API バージョン 2014-11-13190

Amazon ECS AWS Fargate 用ユーザーガイド使用状況レポート

aws ecs create-service --service-name application --task-definition task-def-app --tags key=stack,value=dev --propagateTags Service

Amazon ECS 使用状況レポートAWS は、Amazon ECS リソースのコストおよび使用量を分析できる、Cost Explorer と呼ばれる無料のレポートツールを提供します。

Cost Explorer は、使用量とコストの表を表示するために使用できる無料のツールです。過去 13 か月からデータを表示でき、また次の 3 か月間にどのくらい使用する可能性があるかを予測します。時間の経過に伴う AWS リソースの使用量パターンを確認して、さらに照会が必要な分野を識別し、コストの把握に役立つ傾向を確認するには、Cost Explorer を使用します。データの時間範囲を指定したり、時間データを日または月ごとに表示することもできます。

コストと使用状況レポートの計測データには、すべての Amazon ECS タスクの使用量が示されます。計測データには、実行された各タスクの CPU 使用量が vCPU-Hours として、メモリ使用量が GB-Hours として含まれます。データがどのように示されるかは、次に示すようにタスクの起動タイプによって異なります。

Fargate 起動タイプを使用するタスクの場合、lineItem/Operation 列には FargateTask が表示され、各タスクに関連するコストが示されます。

Amazon ECS マネージドタグを使用して各タスクが属するサービスやクラスターを識別することもできます。詳細については、「請求用のリソースにタグを付ける (p. 188)」を参照してください。

Important

計測データは、2018 年 11 月 16 日以降に起動したタスクでのみ表示されます。この日付よりも前に起動したタスクでは、計測データは表示されません。

以下に、Cost Explorer の使用によりコスト配分データをソートする、いくつかのフィールドの例を示します。

• クラスター名• サービス名• リソースタグ• 起動タイプ• リージョン• 使用タイプ

AWS のコストと使用状況レポートの作成の詳細については、AWS Billing and Cost Management ユーザーガイド の「AWS のコストと使用状況レポート」を参照してください。

API バージョン 2014-11-13191

Amazon ECS AWS Fargate 用ユーザーガイドモニタリングツール

Amazon ECS のモニタリングAmazon CloudWatch を使用して、Amazon ECS リソースをモニタリングすることで Amazon ECS からraw データを収集し、リアルタイムに近い読み取り可能なメトリクスに加工することができます。これらの統計情報は 2 週間記録されるため、履歴情報にアクセスしてクラスターまたはサービスの動作をより的確に把握できます。Amazon ECS メトリクスデータは 1 分間隔で CloudWatch に自動的に送信されます。CloudWatch の詳細については、「Amazon CloudWatch ユーザーガイド」を参照してください。

モニタリングは、Amazon ECS と AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。ただし、Amazon ECS のモニタリングを開始する前に、以下の質問に対する回答を反映したモニタリング計画を作成する必要があります。

• どのような目的でモニタリングしますか?• モニタリングの対象となるリソースとは ?• どのくらいの頻度でこれらのリソースをモニタリングしますか?• 使用するモニタリングツールは?• 誰がモニタリングタスクを実行しますか?• 誰が問題が発生したときに通知を受け取りますか?

Fargate 起動タイプを使用している場合、環境のモニタリングを支援するために、各サービスの CPU とメモリの使用状況メトリクスが提供されます。

次のステップでは、さまざまなタイミングと負荷条件でパフォーマンスを測定することにより、お客様の環境で通常の Amazon ECS のパフォーマンスのベースラインを確定します。Amazon ECS のモニタリングでは、過去のモニタリングデータを保存し、現在のパフォーマンスデータと比較することで、パフォーマンスの通常パターンと異常パターンを特定し、問題に対処する方法を考案できます。

トピック• モニタリングツール (p. 192)• Amazon ECS CloudWatch のメトリクス (p. 193)• Amazon ECS イベントと EventBridge (p. 198)• Amazon ECS CloudWatch Container Insights (p. 207)• AWS CloudTrail を使用した Amazon ECS API コールのログ作成 (p. 209)

モニタリングツールAWS では、Amazon ECS のモニタリングに使用できるさまざまなツールを用意しています。これらのツールの中には、自動モニタリングを設定できるものもあれば、手操作を必要とするものもあります。モニタリングタスクをできるだけ自動化することをお勧めします。

自動モニタリングツール以下の自動化されたモニタリングツールを使用して、Amazon ECS を監視し、問題が発生したときにレポートできます。

API バージョン 2014-11-13192

Amazon ECS AWS Fargate 用ユーザーガイド手動ツール

• Amazon CloudWatch アラーム – 指定した期間中に単一のメトリクスを監視し、複数の期間にわたる特定のしきい値に対するメトリクス値に基づいて 1 つ以上のアクションを実行します。アクションは、Amazon Simple Notification Service (Amazon SNS) トピックまたは Amazon EC2 Auto Scaling ポリシーに送信される通知です。CloudWatch アラームは、単に特定の状態にあるというだけではアクションを呼び出しません。状態が変わり、それが指定した数の期間にわたって持続する必要があります。詳細については、「Amazon ECS CloudWatch のメトリクス (p. 193)」を参照してください。

Fargate 起動タイプを使用するタスクがあるサービスでは、CloudWatch アラームを使用して、CPU やメモリの使用率などの CloudWatch メトリクスに基づいてサービス内のタスクをスケールインおよびスケールアウトできます。詳細については、「サービスの Auto Scaling (p. 173)」を参照してください。

• Amazon CloudWatch Logs – タスク定義で awslogs ログドライバーを指定することで、AmazonECS タスクのコンテナからのログファイルをモニタリング、保存、およびアクセスできます。これは、Fargate 起動タイプを使用するタスクのログにアクセスするためのサポートされている唯一の方法です。詳細については、「awslogs ログドライバーを使用する (p. 74)」を参照してください。

• Amazon CloudWatch Events – イベントに一致し、1 つ以上のターゲット関数またはストリームにルーティングして変更を行い、状態情報を取得して、修正作業を行います。詳細については、このガイドの「Amazon ECS イベントと EventBridge (p. 198)」および Amazon CloudWatch Events ユーザーガイド の「Amazon CloudWatch Events とは」を参照してください。

• AWS CloudTrail ログのモニタリング – アカウント間でログファイルを共有し、CloudWatch Logs に送信してリアルタイムで CloudTrail ログファイルをモニタリングします。また、Java でログを処理するアプリケーションを記述して、CloudTrail によって配信後にログファイルが変更されていないことを確認します。詳細については、このガイドの「AWS CloudTrail を使用した Amazon ECS API コールのログ作成 (p. 209)」と AWS CloudTrail User Guide の「CloudTrail ログファイルの操作」を参照してください。

手動モニタリングツールAmazon ECS のモニタリングでもう 1 つ重要な点は、CloudWatch アラームの対象外の項目を手動でモニタリングすることです。CloudWatch、Trusted Advisor などの AWS コンソールダッシュボードには、AWS 環境の状態が一目でわかるビューが表示されます。コンテナインスタンスおよびタスクのコンテナのログファイルも確認することをお勧めします。

• CloudWatch ホームページ:• 現在のアラームとステータス• アラームとリソースのグラフ• サービス状態ステータス

さらに、CloudWatch を使用して次のことが行えます。• 重視するサービスをモニタリングするためのカスタマイズしたダッシュボードを作成する.• メトリクスデータをグラフ化して、問題のトラブルシューティングを行い、傾向を確認する.• AWS リソースのすべてのメトリクスを検索および参照する。• 問題があることを通知するアラームを作成/編集する.

• AWS Trusted Advisor は、AWS リソースのパフォーマンス、信頼性、セキュリティ、費用効率を向上するためのモニタリングに役立ちます。すべてのユーザーは、4 つの Trusted Advisor; チェックを利用できます。ビジネスまたはエンタープライズサポートプランのユーザーは、50 以上のチェックを利用できます。詳細については、「AWS Trusted Advisor」を参照してください。

Amazon ECS CloudWatch のメトリクスAmazon CloudWatch を使用して、Amazon ECS リソースをモニタリングすることで Amazon ECS からraw データを収集し、リアルタイムに近い読み取り可能なメトリクスに加工することができます。これら

API バージョン 2014-11-13193

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch メトリクスを有効にする

の統計情報は 2 週間記録されるため、履歴情報にアクセスしてクラスターまたはサービスの動作をより的確に把握できます。Amazon ECS メトリクスデータは 1 分間隔で CloudWatch に自動的に送信されます。CloudWatch の詳細については、「Amazon CloudWatch ユーザーガイド」を参照してください。

トピック• CloudWatch メトリクスを有効にする (p. 194)• 使用できるメトリクスとディメンション (p. 194)• サービス使用率 (p. 196)• サービスの RUNNING タスク数 (p. 197)• Amazon ECS メトリクスの表示 (p. 197)

CloudWatch メトリクスを有効にするFargate 起動タイプを使用するどの Amazon ECS サービスでも CloudWatch の CPU とメモリの使用率メトリクスが自動的に有効になっているため、手動で有効にする必要はありません。

使用できるメトリクスとディメンション以下のセクションでは、Amazon ECS が Amazon CloudWatch に送信するメトリクスとディメンションを一覧表示しています。

Amazon ECS メトリクスAmazon ECS には、リソースをモニタリングするためのメトリクスが用意されています。クラスター全体の CPU とメモリの予約率と使用率、およびクラスター内のサービスの CPU とメモリの使用率を測定できます。GPU のワークロードについては、クラスター全体の GPU 予約率を測定できます。

使用可能になるメトリクスは、クラスター内のタスクとサービスの起動タイプに応じて変化します。サービスに Fargate 起動タイプを使用する場合、サービスのモニタリングを支援するための CPU とメモリの使用率メトリクスが提供されます。EC2 起動タイプの場合、基盤となるインフラストラクチャを構成する Amazon EC2 インスタンスの所有者となるため、それらのインスタンスをモニタリングする必要があります。したがって、追加の CPU、メモリ、GPU の予約率、CPU とメモリの使用率メトリクスが、クラスター、サービス、タスクの各レベルで使用可能になっています。

Amazon ECS は以下のメトリクスを CloudWatch に毎分送信します。Amazon ECS がメトリクスを収集する際は、1 分ごとに、複数のデータポイントを収集します。次に、それらを 1 つのデータポイントに集計してから、データを CloudWatch に送信します。したがって、CloudWatch では、1 つのサンプル数は実際には 1 分間の複数のデータポイントの集計になります。

AWS/ECS 名前空間には、次のメトリクスが含まれます。

CPUReservation

クラスターでタスクを実行することで予約されている CPU ユニットの割合。

クラスターの CPU 予約率 (このメトリクスは ClusterName でのみフィルタ処理できます) は、クラスター内の Amazon ECS タスクによって予約されている CPU ユニットの合計を、クラスター内のすべてのコンテナインスタンスに登録されている CPU ユニットの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、CPU 予約メトリクスに影響します。このメトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

有効なディメンション: ClusterName。

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

API バージョン 2014-11-13194

Amazon ECS AWS Fargate 用ユーザーガイド使用できるメトリクスとディメンション

単位: パーセント。CPUUtilization

クラスターやサービスで使用されている CPU の割合。

クラスターの CPU 使用率 (このメトリクスは ServiceName を除く ClusterName でフィルタ処理されます) は、クラスター内の Amazon ECS タスクによって使用されている CPU ユニットの合計を、クラスター内のすべてのコンテナインスタンスに登録されている CPU ユニットの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、CPU 使用率メトリクスに影響します。クラスターの CPU 使用率メトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

サービスの CPU 使用率 ( ClusterName と ServiceName の両方でフィルタリングされたメトリクス) は、サービスに属するタスクで使用されている CPU ユニット数を、サービスに属するタスクで予約されている CPU ユニット数で割った値です。サービスの CPU 使用率メトリクスは、Fargate とEC2 の両方の起動タイプを使用するタスクに適用されます。

有効なディメンション: ClusterName、ServiceName。

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。MemoryReservation

クラスターでタスクを実行することで予約されているメモリの割合。

クラスターのメモリ予約率 (このメトリクスは ClusterName でのみフィルタ処理できます) は、クラスター内の Amazon ECS タスクによって予約されているメモリの合計を、クラスター内のすべてのコンテナインスタンスに登録されているメモリの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、メモリ予約メトリクスに影響します。このメトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

有効なディメンション: ClusterName。

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。MemoryUtilization

クラスターやサービスで利用されるメモリの割合。

クラスターのメモリ使用率 (このメトリクスは ServiceName を除く ClusterName でフィルタ処理されます) は、クラスター内の Amazon ECS タスクによって使用されているメモリの合計を、クラスター内のすべてのコンテナインスタンスに登録されているメモリの合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、メモリ使用率メトリクスに影響します。クラスターのメモリ使用率メトリクスは、EC2 起動タイプを使用するタスクにのみ適用されます。

サービスメモリの使用率は (メトリクスは ClusterName と ServiceName 出フィルタリングされます)、サービスに付属するタスク数をサービスに属するタスクのためのメモリ総数で割った数で使用中の合計メモリを測定します。サービスのメモリ使用率メトリクスは、Fargate と EC2 の両方の起動タイプを使用するタスクに適用されます。

有効なディメンション: ClusterName、ServiceName。

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

API バージョン 2014-11-13195

Amazon ECS AWS Fargate 用ユーザーガイドサービス使用率

GPUReservation

使用可能な GPU の合計に対する、クラスター内の実行中のタスクによって予約されている GPU の割合。

クラスターの GPU 予約率は、クラスター内の Amazon ECS タスクによって予約されている GPU の合計を、クラスター内のすべての GPU 対応コンテナインスタンスで使用可能だった GPU の合計で割った数として測定されます。ステータスが ACTIVE または DRAINING であるコンテナインスタンスのみが、GPU 予約メトリクスに影響します。

有効なディメンション: ClusterName。

有効な統計: 平均、最小、最大、合計、サンプル数。最も有用な統計は Average です。

単位: パーセント。

Note

EC2 起動タイプを使用するタスク、および Linux コンテナインスタンスがある場合、AmazonECS コンテナエージェントは Docker stats メトリクスを利用して、インスタンスで実行中の各コンテナの CPU およびメモリデータを収集します。バーストパフォーマンスインスタンス(T3、T3a、および T2 インスタンス) の場合、CPU 使用率メトリクスには、インスタンスレベルの CPU メトリクスとは異なるデータが反映される場合があります。

Amazon ECS メトリクスのディメンションAmazon ECS メトリックスは AWS/ECS 名前空間を使用し、以下のディメンションのメトリックスを提供しています。ディメンションのメトリクスは、期間中にタスクが実行されているリソースのみを反映します。たとえば、クラスターに 1 つのサービスがあるが、このサービスに RUNNING 状態のタスクがない場合、CloudWatch に送信されるメトリクスはありません。2 つのサービスがあり、1 つに実行中のタスクがあるが、別の 1 つに実行中のタスクがない場合、実行中のタスクがあるサービスのメトリクスのみが送信されます。

ClusterName

このディメンションにより、指定したクラスター内のすべてのリソースから、リクエストしたデータがフィルタ処理されます。すべての Amazon ECS メトリクスは ClusterName でフィルタ処理されます。

ServiceName

このディメンションにより、指定したクラスター内の特定サービスのすべてのリソースから、リクエストしたデータがフィルタ処理されます。

サービス使用率サービスの使用率は、サービスのタスク定義で指定された CPU およびメモリに対する、クラスターのサービスに属する Amazon ECS タスクによって使用されている CPU とメモリの比率として測定されます。このメトリクスは、Fargate 起動タイプを使用するタスクを含むサービスでサポートされています。

(Total CPU units used by tasks in service) x 100Service CPU utilization = ---------------------------------------------------------------------------- (Total CPU units specified in task definition) x (number of tasks in service)

(Total MiB of memory used by tasks in service) x 100

API バージョン 2014-11-13196

Amazon ECS AWS Fargate 用ユーザーガイドサービスの RUNNING タスク数

Service memory utilization = -------------------------------------------------------------------------------- (Total MiB of memory specified in task definition) x (number of tasks in service)

各タスクに関連付けられている Amazon ECS コンテナエージェントは毎分、サービスが所有する各タスクで現在使用されている CPU ユニット数とメモリの MiB を計算し、この情報は Amazon ECS にレポートされます。クラスターで実行中のサービスが所有するすべてのタスクで使用されている CPU とメモリの合計が計算され、その数字がサービスのタスク定義でサービス用に指定されたリソースの合計に対する比率として CloudWatch にレポートされます。ソフト制限 (memoryReservation) を指定した場合、予約メモリの容量を計算するためにその制限が使用されます。それ以外の場合は、ハード制限 (memory) が使用されます。ハード制限とソフト制限の詳細については、「タスク定義パラメータ」を参照してください。

サービスの RUNNING タスク数CloudWatch メトリクスを使用して、RUNNING 状態のサービス内のタスク数を表示できます。たとえば、このメトリクスに CloudWatch アラームを設定して、サービスで実行中のタスクの数が指定された値を下回った場合にアラートを送信できます。

サービスの実行中のタスク数を表示するには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. ナビゲーションペインで [Metrics (メトリクス)] を選択します。3. [All metrics] タブで、[ECS] を選択します。4. [ClusterName]、[ServiceName] を選択してから、実行中のタスクを表示するサービスに対応したメト

リクス (CPUUtilization または MemoryUtilization) を選択します。5. [グラフ化したメトリクス] タブで、[期間] を [1 分] に、[統計] を [サンプル数] に変更します。

グラフに表示された値は、サービスの RUNNING タスクの数を示しています。

Amazon ECS メトリクスの表示Amazon ECS で CloudWatch メトリクスを有効にすると、Amazon ECS および CloudWatch コンソールでこれらのメトリクスを表示できます。Amazon ECS コンソールでは、サービスのメトリクスの 24 時間の最大、最小、平均が表示されます。CloudWatch コンソールでは、リソースを詳細でカスタマイズ可能な表示で示します。また、サービスの実行中タスク数も表示します。

トピック• Amazon ECS コンソールでのサービスメトリクスの表示 (p. 198)

API バージョン 2014-11-13197

Amazon ECS AWS Fargate 用ユーザーガイドイベントと EventBridge

• CloudWatch コンソールでの Amazon ECS メトリクスの表示 (p. 198)

Amazon ECS コンソールでのサービスメトリクスの表示Amazon ECS サービスの CPU とメモリの使用率メトリクスを Amazon ECS コンソールで使用できます。サービスメトリクスについてのビューには、過去 24 時間の平均値、最小値、最大値が、5 分ごとのデータポイントとともに表示されます。詳細については、「サービス使用率 (p. 196)」を参照してください。

コンソールでサービスメトリクスを表示するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. メトリクスを表示するサービスを含むクラスターを選択します。3. [クラスター: cluster-name] ページで、[サービス] を選択します。4. メトリクスを表示するサービスを選択します。5. [サービス: service-name] ページで、[メトリクス] タブを選択します。

CloudWatch コンソールでの Amazon ECS メトリクスの表示Amazon ECS サービスのメトリクスも CloudWatch コンソールに表示できます。コンソールで AmazonECS メトリクスの最も詳細なビューを表示できます。必要に応じてこのビューをカスタマイズできます。「サービス使用率 (p. 196)」、および「サービスの RUNNING タスク数 (p. 197)」を表示できます。CloudWatch の詳細については、「Amazon CloudWatch ユーザーガイド」を参照してください。

CloudWatch コンソールでメトリクスを表示するには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. ナビゲーションペインの [Metrics (メトリクス)] セクションで、[ECS] を選択します。3. 表示するメトリクスを選択します。クラスターメトリクスは [ECS > ClusterName] で見つかります。

サービス使用率メトリクスは [ECS > ClusterName, ServiceName] で見つかります。以下の例では、クラスターの CPU 使用率とメモリ使用率を示しています。

Amazon ECS イベントと EventBridgeAmazon EventBridge を使用すると、AWS サービスを自動化して、アプリケーションの可用性の問題やリソースの変更などのシステムイベントに自動的に対応できます。AWS サービスからのイベントは、ほぼリアルタイムに EventBridge に提供されます。簡単なルールを記述して、注目するイベントと、イベントがルールに一致した場合に自動的に実行するアクションを指定できます。自動的にトリガーできるオペレーションには、以下が含まれます。

API バージョン 2014-11-13198

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS イベント

• CloudWatch Logs でのロググループへのイベントの追加• AWS Lambda 関数の呼び出し• Amazon EC2 Run Command の呼び出し• Amazon Kinesis Data Streams へのイベントの中継• AWS Step Functions ステートマシンのアクティブ化• Amazon SNS トピックまたは Amazon Simple Queue Service キュー (Amazon SQS) の通知

詳細については、Amazon EventBridge ユーザーガイド の「Amazon EventBridge の開始方法」を参照してください。

EventBridge の Amazon ECS イベントを使用して、Amazon ECS クラスターの現在の状態に関するほぼリアルタイムの通知を受け取ることができます。 Fargate 起動タイプを使用している場合、タスクの状態を確認できます。 サービスの場合、サービスの正常性に関連するイベントを表示できます。

EventBridge を使用して Amazon ECS 上にカスタムスケジューラを構築し、クラスター間のタスクを調整するとともに、クラスターの状態をほぼリアルタイムにモニタリングできます。Amazon ECS サービスに対して状態の変更を絶え間なくポーリングするスケジューリングおよびモニタリングのコードをなくし、代わりに、EventBridge ターゲットを使用して非同期的に Amazon ECS 状態の変更に対応できます。ターゲットには AWS Lambda、Amazon Simple Queue Service、Amazon Simple NotificationService、Amazon Kinesis Data Streams が含まれます。

Amazon ECS イベントストリームは、イベントごとに少なくとも 1 回必ず送信されます。重複したイベントが送信された場合、イベントには重複を識別できるだけの十分な情報が備わっています。詳細については、「イベントの処理 (p. 205)」を参照してください。

イベントは相対的な順番になっているため、特定のイベントがいつ発生したかは、他のイベントとの前後関係から簡単に判断できます。

トピック• Amazon ECS イベント (p. 199)• イベントの処理 (p. 205)

Amazon ECS イベントAmazon ECS は、各タスクとサービスの状態を追跡します。タスクやサービスの状態が変わると、イベントがトリガーされ、Amazon EventBridge に送信されます。これらのイベントは、タスク状態変更イベントおよびサービスアクションイベントとして分類されます。各イベントとその考えられる原因については、以下のセクションで詳しく説明します。

Note

将来、Amazon ECS には他の種類のイベント、ソース、詳細が追加される場合があります。プログラムを使用してイベントの JSON データを逆シリアル化する場合は、不明なプロパティが追加されたときに問題が発生しないようにアプリケーションで対応する準備を整えます。

コンテナ状態変更イベントとタスク状態変更イベントには 2 つの version フィールドがあります。1 つはイベントの本体で、もう 1 つはイベントの detail オブジェクトです。次に、これら 2 つのフィールドの違いについて説明します。

• イベントの本文の version フィールドは、すべてのイベントで 0 に設定されています。EventBridgeパラメータの詳細については、Amazon EventBridge ユーザーガイド の「Events and Event Patterns」を参照してください。

• イベントの detail オブジェクトの version フィールドは、関連付けられているリソースのバージョンについて説明します。リソースの状態が変わるたびに、このバージョンはインクリメントされます。

API バージョン 2014-11-13199

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS イベント

イベントは複数回送信できるため、このフィールドで重複するイベントを識別できます。重複するイベントには、detail オブジェクト内で同じバージョンがあります。タスク状態を EventBridge でレプリケートする場合は、Amazon ECS API から報告されるリソースのバージョンとリソースの EventBridgeで報告されるバージョン (detail オブジェクト内) を比較して、イベントストリームのバージョンが最新であることを確認できます。

サービスアクションイベントには、本体の version フィールドのみが含まれます。

タスク状態変更イベント以下の場合は、タスク状態変更イベントがトリガーされます。

ユーザーが StartTask、RunTask、StopTask API オペレーションを直接または AWS マネジメントコンソール、AWS CLI、SDK 経由で呼び出します。

タスクを開始または停止すると、新しいタスクリソースが作成されるか、既存のタスクリソースの状態が変更されます。

Amazon ECS サービススケジューラがタスクを開始または停止する。

タスクを開始または停止すると、新しいタスクリソースが作成されるか、既存のタスクリソースの状態が変更されます。

Amazon ECS コンテナエージェントが SubmitTaskStateChange API オペレーションを呼び出す。

Amazon ECS コンテナエージェントは、ユーザーのタスクの状態をモニタリングし、状態に変更があるとレポートします。状態の変更には、PENDING から RUNNING または RUNNING から STOPPED への変更が含まれます。

タスクのコンテナの状態が変わる。

Amazon ECS コンテナエージェントは、タスク内のコンテナの状態をモニタリングします。たとえば、タスク内で実行されているコンテナが停止すると、このコンテナの状態変更に伴ってイベントがトリガーされます。

Fargate Spot キャパシティープロバイダーを使用するタスクは、終了通知を受け取ります。

タスクが FARGATE_SPOT キャパシティープロバイダーを使用していて、スポットの中断により停止すると、タスク状態変更イベントがトリガーされます。

Example タスク状態変更イベント

タスク状態変更イベントは、次の形式で配信されます。以下の「detail」セクションは、AmazonElastic Container Service API Reference の DescribeTasks API オペレーションから返される Task オブジェクトに似ています。コンテナが Amazon ECR でホストされているイメージを使用している場合は、imageDigest フィールドが返されます。

Note

createdAt、connectivityAt、pullStartedAt、startedAt、pullStoppedAt、およびupdatedAt の各フィールドの値は DescribeTasks アクションのレスポンスでは UNIX タイムスタンプであり、タスク状態変更イベントでは ISO 文字列タイムスタンプです。

CloudWatch イベント パラメータの詳細については、Amazon EventBridge ユーザーガイド の「Eventsand Event Patterns」を参照してください。

{ "version": "0", "id": "3317b2af-7005-947d-b652-f55e762e571a",

API バージョン 2014-11-13200

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS イベント

"detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "time": "2020-01-23T17:57:58Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:task/FargateCluster/c13b4cb40f1f4fe4a2971f76ae5a47ad" ], "detail": { "attachments": [ { "id": "1789bcae-ddfb-4d10-8ebe-8ac87ddba5b8", "type": "eni", "status": "ATTACHED", "details": [ { "name": "subnetId", "value": "subnet-abcd1234" }, { "name": "networkInterfaceId", "value": "eni-abcd1234" }, { "name": "macAddress", "value": "0a:98:eb:a7:29:ba" }, { "name": "privateIPv4Address", "value": "10.0.0.139" } ] } ], "availabilityZone": "us-west-2c", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/FargateCluster", "containers": [ { "containerArn": "arn:aws:ecs:us-west-2:111122223333:container/cf159fd6-3e3f-4a9e-84f9-66cbe726af01", "lastStatus": "RUNNING", "name": "FargateApp", "image": "111122223333.dkr.ecr.us-west-2.amazonaws.com/hello-repository:latest", "imageDigest": "sha256:74b2c688c700ec95a93e478cdb959737c148df3fbf5ea706abe0318726e885e6", "runtimeId": "ad64cbc71c7fb31c55507ec24c9f77947132b03d48d9961115cf24f3b7307e1e", "taskArn": "arn:aws:ecs:us-west-2:111122223333:task/FargateCluster/c13b4cb40f1f4fe4a2971f76ae5a47ad", "networkInterfaces": [ { "attachmentId": "1789bcae-ddfb-4d10-8ebe-8ac87ddba5b8", "privateIpv4Address": "10.0.0.139" } ], "cpu": "0" } ], "createdAt": "2020-01-23T17:57:34.402Z", "launchType": "FARGATE", "cpu": "256", "memory": "512", "desiredStatus": "RUNNING", "group": "family:sample-fargate",

API バージョン 2014-11-13201

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS イベント

"lastStatus": "RUNNING", "overrides": { "containerOverrides": [ { "name": "FargateApp" } ] }, "connectivity": "CONNECTED", "connectivityAt": "2020-01-23T17:57:38.453Z", "pullStartedAt": "2020-01-23T17:57:52.103Z", "startedAt": "2020-01-23T17:57:58.103Z", "pullStoppedAt": "2020-01-23T17:57:55.103Z", "updatedAt": "2020-01-23T17:57:58.103Z", "taskArn": "arn:aws:ecs:us-west-2:111122223333:task/FargateCluster/c13b4cb40f1f4fe4a2971f76ae5a47ad", "taskDefinitionArn": "arn:aws:ecs:us-west-2:111122223333:task-definition/sample-fargate:1", "version": 4, "platformVersion": "1.3.0" }}

Amazon ECS タスクイベントをリッスンして CloudWatch Logs ログストリームに書き出す簡単な AWSLambda 関数を設定するためのチュートリアルについては、「チュートリアル: Amazon ECS CloudWatchイベント のリッスン (p. 345)」を参照してください。

タスク状態変更イベントが発生したときに E メールで通知する SNS トピックを作成するためのチュートリアルについては、「チュートリアル: タスク停止時のイベントに関する Amazon Simple NotificationService アラートを送信する (p. 346)」を参照してください。

サービスアクションイベントAmazon ECS は、詳細タイプ ECS サービスアクションのサービスアクションイベントを送信します。コンテナインスタンスおよびタスク状態変更イベントとは異なり、サービスアクションイベントの detailsレスポンスフィールドにバージョン番号は含まれません。次に、Amazon ECS サービスアクションイベントの EventBridge ルールを作成するために使用されるイベントパターンを示します。詳細については、Amazon EventBridge ユーザーガイド の「AWS リソースからのイベントでトリガーする EventBridgeルールの作成」を参照してください。

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Service Action" ]}

Amazon ECS は、INFO、WARN、ERROR イベントタイプのイベントを送信します。以下はサービスアクションイベントです。

INFO イベントタイプのサービスアクションイベント

SERVICE_STEADY_STATE

サービスは正常であり、目的のタスクの数であるため、安定した状態に達します。TASKSET_STEADY_STATE

タスクセットは正常で、目的のタスクの数であるため、定常状態に達します。

API バージョン 2014-11-13202

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS イベント

CAPACITY_PROVIDER_STEADY_STATE

サービスに関連付けられたキャパシティープロバイダーが定常状態に達します。SERVICE_DESIRED_COUNT_UPDATED

サービススケジューラが、サービスまたはタスクセットに対して計算された目的のカウントを更新するとき。このイベントは、目的のカウントがユーザーによって手動で更新されるときには送信されません。

WARN イベントタイプのサービスアクションイベント

SERVICE_TASK_START_IMPAIRED

サービスは一貫してタスクを正常に起動することができません。SERVICE_DISCOVERY_INSTANCE_UNHEALTHY

サービス検出を使用するサービスに、異常なタスクが含まれています。サービススケジューラは、サービスレジストリ内のタスクが正常でないことを検出します。

ERROR イベントタイプのサービスアクションイベント

SERVICE_DAEMON_PLACEMENT_CONSTRAINT_VIOLATED

DAEMON サービススケジューラ戦略を使用するサービス内のタスクは、サービスの配置制約戦略を満たさなくなりました。

ECS_OPERATION_THROTTLED

Amazon ECS API スロットルの制限により、サービススケジューラが調整されました。SERVICE_DISCOVERY_OPERATION_THROTTLED

AWS Cloud Map API スロットルの制限により、サービススケジューラが調整されました。これは、サービス検出を使用するように設定されたサービスで発生する可能性があります。

SERVICE_TASK_PLACEMENT_FAILURE

サービススケジューラがタスクを配置できません。原因は、reason フィールドに説明されます。

このサービスイベントがトリガーされる一般的な原因は、タスクを配置するためのクラスターでリソースが不足しているためです。たとえば、使用可能なコンテナインスタンスに CPU またはメモリ容量が不足しているか、使用可能なコンテナインスタンスがない場合などです。もう 1 つの一般的な原因は、Amazon ECS コンテナエージェントがコンテナインスタンスで切断され、スケジューラがタスクを配置できない場合です。

SERVICE_TASK_CONFIGURATION_FAILURE

設定エラーのため、サービススケジューラがタスクを配置できません。原因は、reason フィールドに説明されます。

このサービスイベントがトリガーされる一般的な原因は、タグがサービスに適用されてはいるが、ユーザーまたはロールがリージョンで新しい Amazon リソースネーム (ARN) 形式にオプトインしていないためです。詳細については、「Amazon リソースネーム (ARN) と ID (p. 109)」を参照してください。もう 1 つの一般的な原因は、Amazon ECS が IAM ロールが提供するタスクを継承できなかったことです。

Example サービス定常状態イベント

サービス定常状態イベントは、次の形式で配信されます。EventBridge パラメータの詳細については、Amazon EventBridge ユーザーガイド の「Events and Event Patterns」を参照してください。

API バージョン 2014-11-13203

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS イベント

Amazon ECS サービスアクションをリッスンして CloudWatch Logs ログストリームに書き出す簡単な AWS Lambda 関数を設定するためのチュートリアルについては、「チュートリアル: Amazon ECSCloudWatch イベント のリッスン (p. 345)」を参照してください。

サービスイベントが発生したときに電子メールで送信する SNS トピックを作成するチュートリアルについては、「チュートリアル: タスク停止時のイベントに関する Amazon Simple Notification Service アラートを送信する (p. 346)」を参照してください。

{ "version": "0", "id": "af3c496d-f4a8-65d1-70f4-a69d52e9b584", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:27:22Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "SERVICE_STEADY_STATE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "createdAt": "2019-11-19T19:27:22.695Z" }}

Example キャパシティープロバイダー定常状態イベント

キャパシティプロバイダーの定常状態イベントは、次の形式で配信されます。

{ "version": "0", "id": "b9baa007-2f33-0eb1-5760-0d02a572d81f", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:37:00Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "INFO", "eventName": "CAPACITY_PROVIDER_STEADY_STATE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "capacityProviderArns": [ "arn:aws:ecs:us-west-2:111122223333:capacity-provider/ASG-tutorial-capacity-provider" ], "createdAt": "2019-11-19T19:37:00.807Z" }}

Example サービスタスク開始障害イベント

サービスタスク開始障害イベントは、次の形式で配信されます。

{ "version": "0", "id": "57c9506e-9d21-294c-d2fe-e8738da7e67d",

API バージョン 2014-11-13204

Amazon ECS AWS Fargate 用ユーザーガイドイベントの処理

"detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:55:38Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "WARN", "eventName": "SERVICE_TASK_START_IMPAIRED", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "createdAt": "2019-11-19T19:55:38.725Z" }}

Example サービスタスク配置失敗イベント

サービスタスク配置失敗イベントは、次の形式で配信されます。EventBridge パラメータの詳細については、Amazon EventBridge ユーザーガイド の「Events and Event Patterns」を参照してください。

次の例では、タスクは FARGATE_SPOT キャパシティープロバイダーを使用しようとしましたが、サービススケジューラは Fargate Spot キャパシティーを取得できませんでした。

{ "version": "0", "id": "ddca6449-b258-46c0-8653-e0e3a6d0468b", "detail-type": "ECS Service Action", "source": "aws.ecs", "account": "111122223333", "time": "2019-11-19T19:55:38Z", "region": "us-west-2", "resources": [ "arn:aws:ecs:us-west-2:111122223333:service/default/servicetest" ], "detail": { "eventType": "ERROR", "eventName": "SERVICE_TASK_PLACEMENT_FAILURE", "clusterArn": "arn:aws:ecs:us-west-2:111122223333:cluster/default", "capacityProviderArns": [ "arn:aws:ecs:us-west-2:111122223333:capacity-provider/FARGATE_SPOT" ], "reason": "RESOURCE:FARGATE", "createdAt": "2019-11-06T19:09:33.087Z" }}

イベントの処理Amazon ECS は、少なくとも 1 回の割合でイベントを送信します。つまり、イベントごとに複数のコピーを受け取る場合があります。さらに、イベントは発生順にイベントリスナーに送信されない場合があります。

イベントを適切に順序付けられるように、各イベントの detail セクションには version プロパティが含まれています。リソースの状態が変わるたびに、この version はインクリメントされます。重複するイベントには、detail オブジェクト内で同じ version バージョンがあります。タスク状態をEventBridge でレプリケートする場合は、Amazon ECS API から報告されるリソースのバージョンとリソースの EventBridge で報告される version を比較して、イベントストリームのバージョンが最新であることを確認できます。バージョンプロパティ番号が高いイベントは、バージョン番号が低いイベントより後で発生したものとして処理されます。

API バージョン 2014-11-13205

Amazon ECS AWS Fargate 用ユーザーガイドイベントの処理

例: AWS Lambda 関数でのイベントの処理次の例では、タスク状態変更イベントをキャプチャする、Python 2.7 で記述された Lambda 関数を示し、次の Amazon DynamoDB テーブルに保存します。

• ECSTaskState: – タスクの最新状態を保存します。テーブル ID は、タスクの taskArn 値です。

import jsonimport boto3

def lambda_handler(event, context): id_name = "" new_record = {}

# For debugging so you can see raw event format. print('Here is the event:') print(json.dumps(event))

if event["source"] != "aws.ecs": raise ValueError("Function only supports input from events with a source type of: aws.ecs")

# Switch on task/container events. table_name = "" if event["detail-type"] == "ECS Task State Change": table_name = "ECSTaskState" id_name = "taskArn" event_id = event["detail"]["taskArn"] else: raise ValueError("detail-type for event is not a supported type. Exiting without saving event.")

new_record["cw_version"] = event["version"] new_record.update(event["detail"])

# "status" is a reserved word in DDB, but it appears in containerPort # state change messages. if "status" in event: new_record["current_status"] = event["status"] new_record.pop("status")

# Look first to see if you have received a newer version of an event ID. # If the version is OLDER than what you have on file, do not process it. # Otherwise, update the associated record with this latest information. print("Looking for recent event with same ID...") dynamodb = boto3.resource("dynamodb", region_name="us-east-1") table = dynamodb.Table(table_name) saved_event = table.get_item( Key={ id_name : event_id } ) if "Item" in saved_event: # Compare events and reconcile. print("EXISTING EVENT DETECTED: Id " + event_id + " - reconciling") if saved_event["Item"]["version"] < event["detail"]["version"]: print("Received event is a more recent version than the stored event - updating") table.put_item( Item=new_record ) else:

API バージョン 2014-11-13206

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch Container Insights

print("Received event is an older version than the stored event - ignoring") else: print("Saving new event - ID " + event_id)

table.put_item( Item=new_record )

Amazon ECS CloudWatch Container InsightsCloudWatch Container Insights は、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集計、要約します。このメトリクスには、CPU、メモリ、ディスク、ネットワークなどのリソース使用率が含まれます。メトリクスは、CloudWatch 自動ダッシュボードで使用できます。AmazonECS Container Insights メトリクスの完全なリストについては、Amazon CloudWatch ユーザーガイドの「Amazon ECS Container Insights のメトリクス」を参照してください。

運用データは、パフォーマンスログイベントとして収集されます。これらは、高濃度データを取り込み、大規模に保存することが可能な構造化された JSON スキーマを使用するエントリです。CloudWatch はこのデータから、クラスターおよびサービスレベルで、高レベルの集約されたメトリクスを CloudWatch メトリクスとして作成します。詳細については、Amazon CloudWatch ユーザーガイドの「Amazon ECS のContainer Insights 構造化ログ」を参照してください。

Important

CloudWatch Container Insights によって収集されたメトリクスは、カスタムメトリクスとして課金されます。CloudWatch の料金の詳細については、「CloudWatch 料金表」を参照してください。Amazon ECS では、追加コストなしでモニタリングメトリクスも提供されます。詳細については、「Amazon ECS CloudWatch のメトリクス (p. 193)」を参照してください。

Container Insights に関する考慮事項CloudWatch Container Insights を使用する際には、以下の点を考慮する必要があります。

• CloudWatch Container Insights のメトリクスは、指定した期間中にタスクが実行されているリソースのみを反映します。たとえば、クラスターに 1 つのサービスがあるが、このサービスに RUNNING 状態のタスクがない場合、CloudWatch に送信されるメトリクスはありません。2 つのサービスがあり、1 つに実行中のタスクがあるが、別の 1 つに実行中のタスクがない場合、実行中のタスクがあるサービスのメトリクスのみが送信されます。

• ネットワークメトリクスは、Fargate 起動タイプを使用するタスク、または bridge ネットワークモードを使用するタスクでのみ使用できます。

Container Insights が有効なクラスターの操作Container Insights は、containerInsights アカウント設定をオプトインして作成されたすべての新しいクラスターに対して有効にでき、クラスター作成時にクラスター設定を使用して個々のクラスターに対して有効にすることも、UpdateClusterSettings API を使用して既存のクラスターに対して有効にすることもできます。

containerInsights アカウント設定へのオプトインは、Amazon ECS コンソールと AWS CLI の両方を使用してできます。この機能を使用するには、バージョン 1.16.200 以降の AWS CLI を実行している必要があります。Amazon ECS クラスターの作成の詳細については、「クラスターの作成 (p. 20)」を参照してください。

Important

API バージョン 2014-11-13207

Amazon ECS AWS Fargate 用ユーザーガイドContainer Insights が有効なクラスターの操作

コンソールを使用して、Container Insights が有効なクラスターにアカウントのすべての IAM ユーザーまたはロールをオプトインするには

1. アカウントのルートユーザーとして、Amazon ECS コンソール (https://console.aws.amazon.com/ecs/) を開きます。

2. 画面上部のナビゲーションバーで、Container Insights が有効なクラスターにオプトインするリージョンを選択します。

3. ダッシュボードで、[アカウント設定] を選択します。4. [IAM ユーザーまたはロール] で、ルートユーザーまたはコンテナインスタンスの IAM ロールが選択さ

れていることを確認します。5. [Container Insights] で、チェックボックスをオンにします。終了したら、[保存] を選択します。

Important

IAM ユーザーと IAM ロールでこのアクションを実行するには ecs:PutAccountSetting アクセス許可が必要です。

6. 確認画面で [Confirm (確認)] を選択すると、選択内容が保存されます。

コマンドラインを使用して、Container Insights が有効なクラスターにアカウントのすべての IAMユーザーまたはロールをオプトインするには

アカウントのユーザーは、以下のいずれかのコマンドを使用して、アカウントのすべての IAM ユーザーまたはロールのデフォルトアカウント設定を変更することができます。これらの変更は、IAM ユーザーまたはロールがこれらの設定を明示的に上書きしない限り、AWS アカウント全体に適用されます。

• put-account-setting-default (AWS CLI)

aws ecs put-account-setting-default --name containerInsights --value enabled --region us-east-1

• Write-ECSAccountSettingDefault (AWS Tools for Windows PowerShell)

Write-ECSAccountSettingDefault -Name containerInsights -Value enabled -Region us-east-1 -Force

コマンドラインを使用して、IAM ユーザーまたはコンテナインスタンスの IAM ロールをルートユーザーとして Container Insights が有効なクラスターにオプトインするには

アカウントのルートユーザーは、次のいずれかのコマンドを使用して、プリンシパル IAM ユーザー、またはコンテナインスタンスロールの IAM ロールの ARN をリクエストで指定して、アカウント設定を変更できます。

• put-account-setting (AWS CLI)

次の例では、特定の IAM ユーザーのアカウント設定を変更します。

aws ecs put-account-setting --name containerInsights --value enabled --principal-arn arn:aws:iam::aws_account_id:user/userName --region us-east-1

• Write-ECSAccountSetting (AWS Tools for Windows PowerShell)

次の例では、特定の IAM ユーザーのアカウント設定を変更します。

Write-ECSAccountSetting -Name containerInsights -Value enabled -PrincipalArn arn:aws:iam::aws_account_id:user/userName -Region us-east-1 -Force

API バージョン 2014-11-13208

Amazon ECS AWS Fargate 用ユーザーガイドAWS CloudTrail を使用した

Amazon ECS API コールのログ作成

コマンドラインを使用して既存のクラスターの設定を更新するには

クラスターの設定を更新するには、次のいずれかのコマンドを使用します。

• update-cluster-settings (AWS CLI)

aws ecs update-cluster-settings --cluster cluster_name_or_arn --settings name=containerInsights,value=enabled|disabled --region us-east-1

AWS CloudTrail を使用した Amazon ECS API コールのログ作成

Amazon ECS は AWS CloudTrail と統合されています。このサービスは、Amazon ECS 内でユーザーやロール、または AWS のサービスによって実行されたアクションを記録するサービスです。CloudTrailは、Amazon ECS コンソールからのコールや Amazon ECS API オペレーションへのコードコールからを含む、Amazon ECS の API コールをイベントとしてキャプチャします。

証跡を作成する場合は、Amazon ECS のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Eventhistory (イベント履歴)] で最新のイベントを表示できます。CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、Amazon ECS に対してどのようなリクエストが行われたかを判断できます。

詳細については、AWS CloudTrail User Guideを参照してください。

CloudTrail 内の Amazon ECS 情報CloudTrail は、アカウント作成時に AWS アカウントで有効になります。Amazon ECS でアクティビティが発生すると、そのアクティビティは [Event history] の AWS の他のサービスのイベントとともにCloudTrail イベントに記録されます。最近のイベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

Amazon ECS のイベントなど、AWS アカウントのイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべてのリージョンに適用されます。証跡では、AWS パーティションのすべてのリージョンからのイベントがログに記録され、指定した Amazon S3 バケットにログファイルが配信されます。さらに、より詳細な分析と CloudTrail ログで収集されたデータに基づいた行動のためにその他の AWS サービスを設定できます。詳細については、以下のトピックを参照してください。

• 証跡を作成するための概要• CloudTrail でサポートされるサービスと統合• CloudTrail の Amazon SNS 通知の設定• 「複数のリージョンから CloudTrail ログファイルを受け取る」と「複数のアカウントから CloudTrail ロ

グファイルを受け取る」

Amazon ECS アクションはすべて CloudTrail によって記録されます。また、これらのアクションはAmazon Elastic Container Service API Referenceで説明されています。たとえば、[CreateService]、[RunTask]、[DeleteCluster] セクションの呼び出しは、CloudTrail ログファイルにエントリを生成します。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

API バージョン 2014-11-13209

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS ログファイルエントリの概要

• リクエストが、ルートと IAM ユーザー認証情報のどちらを使用して送信されたか。• リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用

して送信されたか.• リクエストが、別の AWS サービスによって送信されたかどうか。

詳細については、「CloudTrail userIdentity 要素」を参照してください。

Amazon ECS ログファイルエントリの概要証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できる設定です。CloudTrailログファイルには、1 つ以上のログエントリが含まれます。イベントは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

Note

これらの例は、読みやすくするために書式設定されています。CloudTrail ログファイルでは、すべてのエントリとイベントが 1 行に連結されます。さらに、この例は 1 つの Amazon ECS エントリに限定しています。実際の CloudTrail ログファイルには、複数の AWS サービスからのエントリとイベントが記録されます。

以下の例は、CreateCluster アクションの CloudTrail ログエントリを示しています。

{ "eventVersion": "1.04", "userIdentity": { "type": "AssumedRole", "principalId": "AIDACKCEVSQ6C2EXAMPLE:account_name", "arn": "arn:aws:sts::123456789012:user/Mary_Major", "accountId": "123456789012", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-06-20T18:32:25Z" }, "sessionIssuer": { "type": "Role", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "Mary_Major" } } }, "eventTime": "2018-06-20T19:04:36Z", "eventSource": "ecs.amazonaws.com", "eventName": "CreateCluster", "awsRegion": "us-east-1", "sourceIPAddress": "203.0.113.12", "userAgent": "console.amazonaws.com", "requestParameters": { "clusterName": "default" }, "responseElements": { "cluster": { "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/default", "pendingTasksCount": 0, "registeredContainerInstancesCount": 0, "status": "ACTIVE",

API バージョン 2014-11-13210

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS ログファイルエントリの概要

"runningTasksCount": 0, "statistics": [], "clusterName": "default", "activeServicesCount": 0 } }, "requestID": "cb8c167e-EXAMPLE", "eventID": "e3c6f4ce-EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "123456789012"}

API バージョン 2014-11-13211

Amazon ECS AWS Fargate 用ユーザーガイドIdentity and Access Management

Amazon Elastic Container Service でのセキュリティ

AWS では、クラウドのセキュリティが最優先事項です。AWS のお客様は、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャから利点を得られます。

セキュリティは、AWS とお客様の間の共有責任です。共有責任モデルでは、これをクラウドのセキュリティおよびクラウド内のセキュリティとして説明しています。

• クラウドのセキュリティ – AWS は、AWS クラウド内で AWS サービスを実行するインフラストラクチャを保護する責任を担います。また、AWS は、使用するサービスを安全に提供します。AWS コンプライアンスプログラムの一環として、サードパーティーの監査が定期的にセキュリティの有効性をテストおよび検証しています。Amazon Elastic Container Service に適用するコンプライアンスプログラムの詳細については、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。

• クラウド内のセキュリティ – お客様の責任はお客様が使用する AWS のサービスによって決まります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントは、Amazon ECS を使用する際に共有責任モデルを適用する方法を理解するのに役立ちます。以下のトピックでは、セキュリティおよびコンプライアンスの目的を達成するために Amazon ECSを設定する方法を示します。また、Amazon ECS リソースのモニタリングや保護に役立つ他の AWS サービスの使用方法についても説明します。

トピック• Amazon Elastic Container Service の Identity and Access Management (p. 212)• Amazon Elastic Container Service でのログ記録とモニタリング (p. 263)• Amazon Elastic Container Service のコンプライアンス検証 (p. 264)• Amazon Elastic Container Service のインフラストラクチャセキュリティ (p. 264)

Amazon Elastic Container Service の Identity andAccess Management

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全にコントロールするために役立つ AWS のサービスです。IAM 管理者は、Amazon ECS リソースを使用するために認証 (サインイン) および承認 (アクセス許可を持つ) される者を制御します。IAM は、追加料金なしで使用できる AWS のサービスです。

トピック• 対象者 (p. 213)• アイデンティティを使用した認証 (p. 213)• ポリシーを使用したアクセスの管理 (p. 215)• Amazon Elastic Container Service と IAM の連携 (p. 216)• Amazon Elastic Container Service アイデンティティベースのポリシーの例 (p. 221)• Amazon ECS API アクションでサポートされるリソースレベルのアクセス許可 (p. 230)

API バージョン 2014-11-13212

Amazon ECS AWS Fargate 用ユーザーガイド対象者

• 管理ポリシーと信頼関係 (p. 231)• Amazon ECS 用のサービスにリンクされたロール (p. 238)• Amazon ECS タスク実行 IAM ロール (p. 247)• タスク用の IAM ロール (p. 251)• Amazon ECS CodeDeploy IAM ロール (p. 255)• Amazon ECS CloudWatch イベント IAM ロール (p. 258)• Amazon Elastic Container Service の Identity and Access のトラブルシューティング (p. 261)

対象者AWS Identity and Access Management (IAM) の用途は、Amazon ECS で行う作業によって異なります。

サービスユーザー – ジョブを実行するために Amazon ECS サービスを使用する場合は、管理者が必要なアクセス許可と認証情報を用意します。作業を実行するためにさらに多くの Amazon ECS 機能を使用するとき、追加のアクセス許可が必要になる場合があります。アクセスの管理方法を理解すると、管理者から適切なアクセス許可をリクエストするのに役に立ちます。Amazon ECS の機能にアクセスできない場合は、「Amazon Elastic Container Service の Identity and Access のトラブルシューティング (p. 261)」を参照してください。

サービス管理者 – 社内の Amazon ECS リソースを担当している場合は、おそらく Amazon ECS へのフルアクセスがあります。従業員がどの Amazon ECS 機能とリソースアクセスする必要があるかを決定するのは管理者の仕事です。その後で、サービスユーザーのアクセス許可を変更するために、IAM 管理者にリクエストを送信する必要があります。IAM の基本概念については、このページの情報を確認します。お客様の会社で Amazon ECS の IAM を利用する方法の詳細については、「Amazon Elastic Container Service とIAM の連携 (p. 216)」を参照して ください。

IAM 管理者 – IAM 管理者は、Amazon ECS へのアクセスを管理するポリシーの作成方法の詳細について確認する場合があります。IAM で使用できる Amazon ECS アイデンティティベースのポリシーの例を表示するには、「Amazon Elastic Container Service アイデンティティベースのポリシーの例 (p. 221)」を参照して ください。

アイデンティティを使用した認証認証は、アイデンティティ認証情報を使用して AWS にサインインする方法です。AWS マネジメントコンソール を使用するサインインの詳細については、IAM ユーザーガイド の「IAM コンソールとサインインページ」を参照してください。

AWS アカウントのルートユーザー、IAM ユーザーとして、または IAM ロールを引き受けて、認証されている (AWS にサインインしている) 必要があります。会社のシングルサインオン認証を使用することも、Google や Facebook を使用してサインインすることもできます。このような場合、管理者は以前にIAM ロールを使用して ID フェデレーションを設定しました。他の会社の認証情報を使用して AWS にアクセスした場合、ロールを間接的に割り当てられています。

AWS マネジメントコンソール へ直接サインインするには、ルートユーザー E メールまたは IAM ユーザー名とパスワードを使用します。ルートユーザー または IAM を使用して AWS にプログラム的にアクセスできます。AWS では、SDK とコマンドラインツールを提供して、お客様の認証情報を使用して、リクエストに暗号で署名できます。AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。これには、インバウンド API リクエストを認証するためのプロトコル、署名バージョン 4 を使用します。リクエストの認証の詳細については、AWS General Referenceの「署名バージョン 4 の署名プロセス」を参照してください。

使用する認証方法を問わず、追加のセキュリティ情報の提供を要求される場合もあります。たとえば、AWS では多要素認証 (MFA) を使用してアカウントのセキュリティを高めることを推奨しています。詳細については、IAM ユーザーガイドの「AWS のデバイスに多要素認証 (MFA) を使用」を参照してください。

API バージョン 2014-11-13213

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティを使用した認証

AWS アカウントのルートユーザーAWS アカウントを初めて作成する場合は、このアカウントのすべての AWS サービスとリソースに対して完全なアクセス権限を持つシングルサインインアイデンティティで始めます。このアイデンティティはAWS アカウント ルートユーザー と呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでのサインインによりアクセスします。強くお勧めしているのは、日常的なタスクには、それが管理者タスクであっても、ルートユーザーを使用しないことです。代わりに、最初の IAM ユーザーを作成するためだけに ルートユーザー を使用するというベストプラクティスに従います。その後、ルートユーザー認証情報を安全な場所に保管し、それらを使用して少数のアカウントおよびサービス管理タスクのみを実行します。

IAM ユーザーとグループIAM ユーザーは、単一のユーザーまたはアプリケーションに特定のアクセス許可がある AWS アカウント内のアイデンティティです。IAM ユーザーは、ユーザー名とパスワード、アクセスキーのセットなど、長期的な認証情報を持つことができます。アクセスキーを生成する方法の詳細については、IAM ユーザーガイド の「IAM ユーザーのアクセスキーの管理」を参照してください。IAM ユーザーにアクセスキーを生成するとき、必ずキーペアを表示して安全に保存してください。後になって、シークレットアクセスキーを回復することはできません。新しいアクセスキーペアを生成する必要があります。

IAM グループは、IAM ユーザーのコレクションを指定するアイデンティティです。グループとしてサインインすることはできません。グループを使用して、一度に複数のユーザーに対してアクセス許可を指定できます。多数の組のユーザーがある場合、グループを使用すると管理が容易になります。たとえば、IAMAdmin という名前のグループを設定して、そのグループに IAM リソースを管理するアクセス許可を与えることができます。

ユーザーは、ロールとは異なります。ユーザーは 1 人の特定の人またはアプリケーションに一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。ユーザーには永続的な長期の認証情報がありますが、ロールでは一時的な認証情報が利用できます。詳細については、IAMユーザーガイド の「IAM ユーザーの作成が適している場合 (ロールではなく)」を参照してください。

IAM ロールIAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のアイデンティティです。これは IAMユーザーに似ていますが、特定のユーザーに関連付けられていません。ロールを切り替えて、AWS マネジメントコンソール で IAM ロールを一時的に引き受けることができます。ロールを引き受けるには、AWSCLI または AWS API オペレーションを呼び出すか、カスタム URL を使用します。ロールを使用する方法の詳細については、IAM ユーザーガイド の「IAM ロールの使用」を参照してください。

IAM ロールと一時的な認証情報は、次の状況で役立ちます。

• 一時的な IAM ユーザーアクセス許可 – IAM ユーザーは、特定のタスクに対して複数の異なるアクセス許可を一時的に IAM ロールで引き受けることができます。

• フェデレーティッドユーザーアクセス – IAM ユーザーを作成する代わりに、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブ ID プロバイダーに既存のアイデンティティを使用できます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、ID プロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドの「フェデレーティッドユーザーとロール」を参照してください。

• クロスアカウントアクセス – IAM ロールを使用して、自分のアカウントのリソースにアクセスすることを別のアカウントの信頼済みプリンシパルに許可できます。ロールは、クロスアカウントアクセスを許可する主な方法です。ただし、一部の AWS のサービスでは、(ロールをプロキシとして使用する代わりに) リソースにポリシーを直接アタッチできます。クロスアカウントアクセスでのロールとリソースベースのポリシーの違いの詳細については、IAM ユーザーガイド の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

• AWS サービスアクセス – サービスロールは、サービスがお客様に代わってお客様のアカウントでアクションを実行するために引き受ける IAM ロールです。一部の AWS のサービス環境を設定するときに、

API バージョン 2014-11-13214

Amazon ECS AWS Fargate 用ユーザーガイドポリシーを使用したアクセスの管理

サービスが引き受けるロールを定義する必要があります。このサービスロールには、サービスが必要とする AWS のリソースにサービスがアクセスするために必要なすべてのアクセス権限を含める必要があります。サービスロールはサービスによって異なりますが、多くのサービスロールでは、そのサービスの文書化された要件を満たしている限り、アクセス権限を選択することができます。サービスロールは、お客様のアカウント内のみでアクセスを提供します。他のアカウントのサービスへのアクセス権を付与するためにサービスロールを使用することはできません。IAM 内部からロールを作成、修正、削除できます。たとえば、Amazon Redshift がお客様に代わって Amazon S3 バケットにアクセスし、バケットからデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、IAM ユーザーガイドのAWS サービスにアクセス権限を委任するロールの作成を参照してください。

• Amazon EC2で実行されているアプリケーション – IAM ロールを使用して、EC2 インスタンスで実行され、AWS CLI または AWS API リクエストを作成しているアプリケーションの一時的な認証情報を管理できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。AWS ロールを EC2インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、IAM ユーザーガイドの「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する」を参照してください。

IAM ロールを使用するべきかどうかについては、IAM ユーザーガイド の「IAM ロール (ユーザーではない)の作成が適している場合」を参照してください。

ポリシーを使用したアクセスの管理AWS でアクセスをコントロールするには、ポリシーを作成して IAM アイデンティティや AWS リソースにアタッチします。ポリシーは AWS のオブジェクトであり、アイデンティティやリソースに関連付けて、これらのアクセス許可を定義します。AWS は、エンティティ (ルートユーザー、IAM ユーザーまたはIAM ロール) によってリクエストが行われると、それらのポリシーを評価します。ポリシーでのアクセス許可により、リクエストが許可されるか拒否されるかが決まります。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの構造と内容の詳細については、IAM ユーザーガイド の「JSON ポリシー概要」を参照してください。

IAM 管理者は、ポリシーを使用して、AWS リソースへのアクセスを許可するユーザーと、これらのリソースで実行できるアクションを指定できます。すべての IAM エンティティ (ユーザーまたはロール) は、アクセス許可のない状態からスタートします。言い換えると、デフォルト設定では、ユーザーは何もできず、自分のパスワードを変更することすらできません。何かを実行するアクセス許可をユーザーに付与するには、管理者がユーザーにアクセス許可ポリシーをアタッチする必要があります。また、管理者は、必要なアクセス許可があるグループにユーザーを追加できます。管理者がグループにアクセス許可を付与すると、そのグループ内のすべてのユーザーにこれらのアクセス許可が付与されます。

IAM ポリシーは、オペレーションの実行方法を問わず、アクションのアクセス許可を定義します。たとえば、iam:GetRole アクションを許可するポリシーがあるとします。このポリシーがあるユーザーは、AWS マネジメントコンソール、AWS CLI、または AWS API からロールの情報を取得できます。

アイデンティティベースのポリシーアイデンティティベースのポリシーは、IAM ユーザー、ロール、グループなどのアイデンティティにJSON ドキュメントとしてアタッチできるアクセス許可ポリシーです。これらのポリシーは、アイデンティティが実行できるアクション、リソース、および条件を制御します。アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「IAM ポリシー の 作成」を参照してください 。

アイデンティティベースのポリシーは、さらにインラインポリシーまたは管理ポリシーに分類できます。インラインポリシーは、単一のユーザー、グループ、またはロールに直接埋め込まれています。管理ポリシーは、AWS アカウント内の複数のユーザー、グループ、およびロールにアタッチできるスタンドアロンポリシーです。管理ポリシーには、AWS 管理ポリシーとカスタマー管理ポリシーが含まれます。管理ポリシーまたはインラインポリシーのいずれかを選択する方法については、IAM ユーザーガイド の「管理ポリシーとインラインポリシーの比較」を参照してください。

API バージョン 2014-11-13215

Amazon ECS AWS Fargate 用ユーザーガイドAmazon Elastic Container Service と IAM の連携

リソースベースのポリシーリソースベースのポリシーは、Amazon S3 バケットなどのリソースにアタッチする JSON ポリシードキュメントです。サービス管理者は、これらのポリシーを使用して、特定のプリンシパル (アカウントメンバー、ユーザー、またはロール) がそのリソースに対して実行する条件およびアクションを定義することができます。リソースベースのポリシーはインラインポリシーです。マネージド型のリソースベースのポリシーはありません。

アクセスコントロールリスト (ACL)アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) にリソースへのアクセス許可を付与するかを制御する一種のポリシーです。ACL は、リソースベースのポリシーと似ていますが、JSON ポリシードキュメント形式を使用しません。ACL をサポートするサービスとして Amazon S3、AWS WAF、Amazon VPC などがあります。ACL の詳細については、『AmazonSimple Storage Service 開発者ガイド』の「アクセスコントロールリスト (ACL) の概要」を参照してください。

その他のポリシータイプAWS では、別のあまり一般的ではないポリシータイプもサポートしています。これらのポリシータイプでは、より一般的なポリシータイプで付与された最大のアクセス許可を設定できます。

• アクセス許可の境界 – アクセス許可の境界は、アイデンティティベースのポリシーが IAM エンティティ(IAM ユーザーまたはロール) に付与できるアクセス許可の上限を設定する高度な機能です。エンティティのアクセス許可の境界を設定できます。結果として得られるアクセス許可は、エンティティの IDベースのポリシーとそのアクセス許可の境界の共通部分です。Principal フィールドでユーザーまたはロールを指定するリソースベースのポリシーは、アクセス許可の境界では制限されません。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。アクセス許可の境界の詳細については、IAM ユーザーガイド の「IAM エンティティのアクセス許可の境界」を参照してください。

• サービスコントロールポリシー (SCP) – SCP は、AWS Organizations で 組織や組織単位 (OU) に最大権限を指定する JSON ポリシーです。AWS Organizations は、お客様のビジネスが所有する複数の AWSアカウントをグループ化し、一元的に管理するサービスです。組織内のすべての機能を有効にすると、サービス制御ポリシー (SCP) を一部またはすべてのアカウントに適用できます。SCP はメンバーアカウントのエンティティに対するアクセス許可を制限します (各 AWS アカウントのルートユーザー など)。組織 および SCP の詳細については、AWS Organizations ユーザーガイド の「SCP の動作」を参照してください。

• セッションポリシー – セッションポリシーは、ロールまたはフェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。結果として得られるセッションのアクセス許可は、ユーザーまたはロールの ID ベースのポリシーとセッションポリシーの共通部分です。また、リソースベースのポリシーからアクセス許可が派生する場合もあります。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。詳細については、IAM ユーザーガイド の「セッションポリシー」を参照してください。

複数のポリシータイプ1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに複雑になります。複数のポリシータイプが関連するとき、リクエストを許可するかどうかを AWS が決定する方法の詳細については、IAM ユーザーガイド の「ポリシーの評価ロジック」を参照してください。

Amazon Elastic Container Service と IAM の連携Amazon ECS へのアクセスを管理するために IAM 使用する前に、Amazon ECS で使用できる IAM 機能を理解しておく必要があります。Amazon ECS およびその他の AWS サービスが IAM と連携する方法の概要を理解するには、IAM ユーザーガイド の「IAM と連携する AWS サービス」を参照してください。

API バージョン 2014-11-13216

Amazon ECS AWS Fargate 用ユーザーガイドAmazon Elastic Container Service と IAM の連携

トピック• Amazon ECS アイデンティティベースのポリシー (p. 217)• Amazon ECS リソースベースのポリシー (p. 220)• Amazon ECS タグに基づいた承認 (p. 220)• Amazon ECS IAM ロール (p. 220)

Amazon ECS アイデンティティベースのポリシーIAM アイデンティティベースのポリシーでは、許可または拒否されたアクションとリソースを指定でき、さらにアクションが許可または拒否された条件を指定できます。Amazon ECS は、特定のアクション、リソース、および条件キーをサポートします。JSON ポリシーで使用するすべての要素については、IAMユーザーガイド の「IAM JSON ポリシーエレメントのリファレンス」を参照してください 。

アクションIAM アイデンティティベースのポリシーの Action エレメントは、そのポリシーにより許可または拒否される特定のアクションについて説明します。ポリシーアクションの名前は通常、関連する AWS API オペレーションと同じです。このアクションは、関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。

Amazon ECS のポリシーアクションは、アクションの前にプレフィックス ecs: を使用します。たとえば、Amazon ECS CreateCluster API オペレーションを使用して Amazon ECS クラスターを作成するアクセス許可を付与するには、ポリシーに ecs:CreateCluster アクションを含めます。ポリシーステートメントには、Action 要素あるいは NotAction 要素を含める必要があります。Amazon ECS は、このサービスで実行できるタスクを説明する独自の一連のアクションを定義します。

単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。

"Action": [ "ecs:action1", "ecs:action2"

ワイルドカード (*) を使用して複数のアクションを指定することができます。たとえば、Describe という単語で始まるすべてのアクションを指定するには、次のアクションを含めます。

"Action": "ecs:Describe*"

Amazon ECS アクションのリストを表示するには、IAM ユーザーガイドの「Amazon Elastic ContainerService のアクション、リソース、および条件キー」を参照してください。

リソースResource エレメントは、アクションが適用されるオブジェクトを指定します。ステートメントには、Resource または NotResource エレメントを含める必要があります。ARN を使用して、またはステートメントがすべてのリソースに適用されることを示すワイルドカード (*) を使用して、リソースを指定します。

Amazon ECS クラスターリソースの ARN は次のようになります。

arn:${Partition}:ecs:${Region}:${Account}:cluster/${clusterName}

ARN の形式の詳細については、「Amazon リソースネーム (ARN) と AWS サービスの名前空間」を参照してください。

API バージョン 2014-11-13217

Amazon ECS AWS Fargate 用ユーザーガイドAmazon Elastic Container Service と IAM の連携

たとえば、ステートメントで my-cluster クラスターを指定するには、次の ARN を使用します。

"Resource": "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster"

特定のアカウントに属するすべてのクラスターを指定するには、ワイルドカード (*) を使用します。

"Resource": "arn:aws:ecs:us-east-1:123456789012:cluster/*"

リソースの作成など、一部の Amazon ECS アクションは、特定のリソースで実行できません。このような場合は、ワイルドカード (*) を使用する必要があります。

"Resource": "*"

一部の Amazon ECS API アクションは複数のリソースで実行できます。たとえば、DescribeClustersAPI アクションを呼び出すときに複数のクラスターを参照できます。複数のリソースを単一のステートメントで指定するには、ARN をカンマで区切ります。

"Resource": [ "resource1", "resource2"

次の表は、Amazon ECS API アクションで使用される各リソースタイプの ARN について説明しています。

Important

次の表では、Amazon ECS のタスク、サービス、およびコンテナインスタンスに長い形式の新しい ARN を使用しています。長い形式の ARN にオプトインしない場合は、ARN にクラスター名が含まれることはありません。詳細については、「Amazon リソースネーム (ARN) とID (p. 109)」を参照してください。

リソースタイプ ARN

すべての Amazon ECS リソース arn:aws:ecs:*

特定リージョンの特定アカウントが所有するすべての AmazonECS リソース

arn:aws:ecs:region:account:*

クラスター arn:aws:ecs:region:account:cluster/cluster-name

コンテナインスタンス arn:aws:ecs:region:account:container-instance/cluster-name/container-instance-id

タスク定義 arn:aws:ecs:region:account:task-definition/task-definition-family-name:task-definition-revision-number

サービス arn:aws:ecs:region:account:service/cluster-name/service-name

タスク arn:aws:ecs:region:account:task/cluster-name/task-id

コンテナ arn:aws:ecs:region:account:container/container-id

各リソースの ARN を指定することができるアクションについては、Amazon ECS API アクションでサポートされるリソースレベルのアクセス許可 (p. 230) を参照してください。

API バージョン 2014-11-13218

Amazon ECS AWS Fargate 用ユーザーガイドAmazon Elastic Container Service と IAM の連携

条件キー

Condition エレメント (または Condition ブロック) を使用すると、ステートメントが有効な条件を指定できます。Conditionエレメントはオプションです。イコールや以下などの条件演算子を使用する条件式を構築して、リクエスト内に値のあるポリシーの条件に一致させることができます。

1 つのステートメントに複数の Condition エレメントを指定する場合、または 1 つの Condition エレメントに複数のキーを指定する場合、AWS が論理 AND 演算を使用してそれらを評価します。単一の条件キーに複数の値を指定する場合、AWS が論理 OR 演算を使用して条件を評価します。ステートメントのアクセス許可が付与される前にすべての条件が満たされる必要があります。

条件を指定する際にプレースホルダー変数も使用できます。たとえば、IAM ユーザー名でタグ付けされている場合のみ、リソースにアクセスする IAM ユーザーアクセス許可を付与できます。詳細については、IAM ユーザーガイド の「IAM ポリシーエレメント: 変数およびタグ」を参照してください。

Amazon ECS は独自の条件キーを定義し、一部のグローバル条件キーの使用をサポートしています。すべての AWS グローバル条件キーを確認するには、IAM ユーザーガイド の「AWS グローバル条件コンテキストキー」を参照してください 。

Amazon ECS には、以下のサービス固有の条件キーが実装されています。

条件キー 説明 評価の種類

aws:RequestTag/${TagKey}

コンテキストキーは "aws:RequestTag/tag-key":"tag-value" という形式です。ここで tag-key および tag-value はタグキーと値のペアです。

タグキーと値のペアが AWS リクエストに含まれていることを確認します。たとえば、リクエストに「"Dept"」タグキーが含まれ、「"Accounting"」という値が含まれているかどうかを確認できます。

文字列

aws:ResourceTag/${TagKey}

コンテキストキーは "aws:ResourceTag/tag-key":"tag-value" という形式です。ここで tag-key および tag-value はタグキーと値のペアです。

リソース (ユーザーまたはロール) を識別するためにアタッチされたタグが、指定されたキーの名前および値と一致するかどうかをチェックします。

文字列

aws:TagKeys このコンテキストキーは "aws:TagKeys":"tag-key" という形式であり、ここで tag-key は値 (["Dept","Cost-Center"] など) のないタグキーのリストです。

AWS リクエストに存在するタグキーをチェックします。

文字列

ecs:ResourceTag/${TagKey}

コンテキストキーは "ecs:ResourceTag/tag-key":"tag-value" という形式です。ここで tag-key および tag-value はタグキーと値のペアです。

リソース (ユーザーまたはロール) を識別するためにアタッチされたタグが、指定されたキーの名前および値と一致するかどうかをチェックします。

文字列

ecs:cluster コンテキストキーは "ecs:cluster":"cluster-arn" という形式です。ここで cluster-arn は、Amazon ECS クラスターの ARN です。

ARN、Null

API バージョン 2014-11-13219

Amazon ECS AWS Fargate 用ユーザーガイドAmazon Elastic Container Service と IAM の連携

条件キー 説明 評価の種類

ecs:container-instances

コンテキストキーは "ecs:container-instances":"container-instance-arns" という形式です。ここで container-instance-arns は、1 つ以上のコンテナインスタンス ARN です。

ARN、Null

ecs:task-definition コンテキストキーは "ecs:task-definition":"task-definition-arn" という形式です。ここで task-definition-arn は、Amazon ECS タスク定義の ARN です。

ARN、Null

ecs:service コンテキストキーは "ecs:service":"service-arn" という形式です。ここで service-arn は、Amazon ECS サービスの ARN です。

ARN、Null

条件キーを使用できるアクションおよびリソースについては、Amazon ECS API アクションでサポートされるリソースレベルのアクセス許可 (p. 230) を参照してください。

Amazon ECS アイデンティティベースのポリシーの例を表示するには、「Amazon Elastic ContainerService アイデンティティベースのポリシーの例 (p. 221)」を参照してください。

Amazon ECS リソースベースのポリシーAmazon ECS では、リソースベースのポリシーはサポートされていません。

Amazon ECS タグに基づいた承認タグを Amazon ECS リソースにアタッチすることも、Amazon ECS へのリクエストでタグを渡すこともできます。タグに基づいてアクセスを制御するには、、aws:RequestTag/key-name、またはaws:TagKeys の条件キーを使用して、ポリシーの条件要素でタグ情報を提供します。詳細については、IAM ユーザーガイド の「タグを使用したアクセス制御」を参照してください。

Amazon ECS リソースのタグ付けの詳細については、「リソースとタグ (p. 186)」を参照してください。

リソースのタグに基づいてリソースへのアクセスを制限するためのアイデンティティベースのポリシーの例を表示するには、「タグに基づき、Amazon ECS サービスを記述する (p. 229)」を参照してください。

Amazon ECS IAM ロールIAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のエンティティです。

Amazon ECS を使用した一時的な認証情報の使用一時的な認証情報を使用して、フェデレーションでサインイン、IAM ロールを引き受ける、またはクロスアカウントロールを引き受けることができます。一時的なセキュリティ認証情報を取得するには、AssumeRole または GetFederationToken などの AWS STS API オペレーションを呼び出します。

Amazon ECSでは、一時認証情報の使用をサポートしています。

サービスにリンクされたロールサービスにリンクされたロールによって、AWS サービスが他のサービスのリソースにアクセスして自動的にアクションを完了できます。サービスにリンクされたロールは、IAM アカウント内に表示され、サービ

API バージョン 2014-11-13220

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

スによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

Amazon ECS はサービスにリンクされたロールをサポートします。Amazon ECS サービスにリンクされたロールの作成または管理の詳細については、Amazon ECS 用のサービスにリンクされたロール (p. 238)を参照してください。

サービスロール

この機能では、サービスのロールをユーザーに代わって引き受けることをサービスに許可します。このロールにより、サービスはユーザーに代わって他のサービスのリソースにアクセスし、アクションを実行できます。サービスロールは、IAM アカウントに表示され、サービスによって所有されます。つまり、IAM 管理者は、このロールのアクセス許可を変更できます。ただし、これを行うことにより、サービスの機能が損なわれる場合があります。

Amazon ECS ではサービスロールがサポートされています。

Amazon Elastic Container Service アイデンティティベースのポリシーの例デフォルトでは、IAM ユーザーおよびロールには、Amazon ECS リソースを作成または変更するアクセス許可がありません。また、AWS マネジメントコンソール、AWS CLI、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行するアクセス許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス権限が必要な IAM ユーザーまたはグループにそのポリシーをアタッチします。

JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「[JSON] タブでのポリシーの 作成」を参照してください。

トピック• ポリシーのベストプラクティス (p. 221)• ユーザーに自分のアクセス許可の表示を許可 (p. 222)• Amazon ECS 初回実行ウィザードのアクセス許可 (p. 222)• クラスターの例 (p. 226)• タスクの一覧表示と記述の例 (p. 227)• サービス作成の例 (p. 228)• サービスの更新の例 (p. 229)• タグに基づき、Amazon ECS サービスを記述する (p. 229)

ポリシーのベストプラクティスアイデンティティベースのポリシーは非常に強力です。アカウント内で、Amazon ECS リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションを実行すると、AWS アカウントに追加料金が発生する可能性があります。アイデンティティベースのポリシーを作成または編集するときは、以下のガイドラインと推奨事項に従います。

• AWS 管理ポリシーの使用を開始する – Amazon ECS の使用をすばやく開始するには、AWS 管理ポリシーを使用して、従業員に必要なアクセス許可を付与します。これらのポリシーはアカウントですでに有効になっており、AWS によって管理および更新されています。詳細については、IAM ユーザーガイドの「AWS 管理ポリシーを使用したアクセス許可の使用開始」を参照してください 。

• 最小権限を付与する – カスタムポリシーを作成するときは、タスクを実行するために必要なアクセス許可のみを付与します。最小限のアクセス権限から開始し、必要に応じて追加のアクセス権限を付与しま

API バージョン 2014-11-13221

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

す。この方法は、寛容なアクセス権限で始め、後でそれらを強化しようとするよりも安全です。詳細については、IAM ユーザーガイド の「最小権限を付与する」を参照してください。

• 機密性の高いオペレーションに MFA を有効にする – 追加セキュリティとして、機密性の高リソースまたは API オペレーションにアクセスするために IAM ユーザーに対して、多要素認証 (MFA) の使用を要求します。詳細については、IAM ユーザーガイドの「AWS のデバイスに 多要素認証 (MFA) を使用」を参照してください。

• 追加セキュリティに対するポリシー条件を使用する – 実行可能な範囲内で、アイデンティティベースのポリシーがリソースにアクセスできる条件を定義します。たとえば、要求が発生しなければならない許容 IP アドレスの範囲を指定するための条件を記述できます。指定された日付または時間範囲内でのみリクエストを許可する条件を書くことも、SSL や MFA の使用を要求することもできます。ポリシー要素の詳細については、IAM ユーザーガイド の「IAM JSON ポリシー要素: 条件」を参照してください。

ユーザーに自分のアクセス許可の表示を許可この例は

この例では、ユーザー ID にアタッチされたインラインおよび管理ポリシーの表示を IAM ユーザーに許可するポリシーを作成する方法を示します。このポリシーには、コンソールで、または AWS CLI か AWSAPI を使用してプログラム的に、このアクションを完了するアクセス許可が含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ]}

Amazon ECS 初回実行ウィザードのアクセス許可Amazon ECS 初回実行ウィザードにより、クラスターを作成してタスクとサービスを実行するプロセスが簡素化されます。ただしウィザードを完了するために、複数の AWS のサービスから多くの API オペレーションへのアクセス許可が必要になります。次の AmazonECS_FullAccess (p. 232) 管理ポリシーは、Amazon ECS 初回実行ウィザードを完了するために必要なアクセス許可を示しています。

API バージョン 2014-11-13222

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:DeregisterScalableTarget", "application-autoscaling:DescribeScalableTargets", "application-autoscaling:DescribeScalingActivities", "application-autoscaling:DescribeScalingPolicies", "application-autoscaling:PutScalingPolicy", "application-autoscaling:RegisterScalableTarget", "appmesh:ListMeshes", "appmesh:ListVirtualNodes", "appmesh:DescribeVirtualNode", "autoscaling:UpdateAutoScalingGroup", "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateLaunchConfiguration", "autoscaling:DeleteAutoScalingGroup", "autoscaling:DeleteLaunchConfiguration", "autoscaling:Describe*", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStack*", "cloudformation:UpdateStack", "cloudwatch:DescribeAlarms", "cloudwatch:DeleteAlarms", "cloudwatch:GetMetricStatistics", "cloudwatch:PutMetricAlarm", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "lambda:ListFunctions", "ec2:AssociateRouteTable", "ec2:AttachInternetGateway", "ec2:AuthorizeSecurityGroupIngress", "ec2:CancelSpotFleetRequests", "ec2:CreateInternetGateway", "ec2:CreateLaunchTemplate", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateVpc",

API バージョン 2014-11-13223

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

"ec2:DeleteLaunchTemplate", "ec2:DeleteSubnet", "ec2:DeleteVpc", "ec2:Describe*", "ec2:DetachInternetGateway", "ec2:DisassociateRouteTable", "ec2:ModifySubnetAttribute", "ec2:ModifyVpcAttribute", "ec2:RunInstances", "ec2:RequestSpotFleet", "elasticloadbalancing:CreateListener", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:CreateRule", "elasticloadbalancing:CreateTargetGroup", "elasticloadbalancing:DeleteListener", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:DeleteRule", "elasticloadbalancing:DeleteTargetGroup", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:DescribeTargetGroups", "ecs:*", "events:DescribeRule", "events:DeleteRule", "events:ListRuleNamesByTarget", "events:ListTargetsByRule", "events:PutRule", "events:PutTargets", "events:RemoveTargets", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfiles", "iam:ListRoles", "logs:CreateLogGroup", "logs:DescribeLogGroups", "logs:FilterLogEvents", "route53:GetHostedZone", "route53:ListHostedZonesByName", "route53:CreateHostedZone", "route53:DeleteHostedZone", "route53:GetHealthCheck", "servicediscovery:CreatePrivateDnsNamespace", "servicediscovery:CreateService", "servicediscovery:GetNamespace", "servicediscovery:GetOperation", "servicediscovery:GetService", "servicediscovery:ListNamespaces", "servicediscovery:ListServices", "servicediscovery:UpdateService", "servicediscovery:DeleteService" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/aws/service/ecs*" }, { "Effect": "Allow",

API バージョン 2014-11-13224

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

"Action": [ "ec2:DeleteInternetGateway", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DeleteSecurityGroup" ], "Resource": [ "*" ], "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-name": "EC2ContainerService-*" } } }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "*" ], "Condition": { "StringLike": { "iam:PassedToService": "ecs-tasks.amazonaws.com" } } }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/ecsInstanceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "ec2.amazonaws.com", "ec2.amazonaws.com.cn" ] } } }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/ecsAutoscaleRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "application-autoscaling.amazonaws.com", "application-autoscaling.amazonaws.com.cn" ] } } }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringLike": { "iam:AWSServiceName": [ "ecs.amazonaws.com",

API バージョン 2014-11-13225

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

"spot.amazonaws.com", "spotfleet.amazonaws.com", "ecs.application-autoscaling.amazonaws.com", "autoscaling.amazonaws.com" ] } } } ]}

初回実行ウィザードは試行の起動タイプに応じて、異なる IAM ロールを自動的に作成しようとします。例として、Amazon ECS サービスロール、コンテナインスタンス IAM ロール、およびタスク実行 IAM ロールがあります。初回実行時にこれらの IAM ロールを作成できるようにするには、次のいずれかの条件を満たす必要があります。

• ユーザーが管理者権限を持っていることが必要です。詳細については、「Amazon ECS でのセットアップ (p. 3)」を参照してください。

• ユーザーがサービスロールを作成するための IAM 権限を持っていることが必要です。詳細については、「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。

• 管理者権限を持つユーザーは、使用するアカウントでこれらの IAM ロールを手動で作成することにより、アカウントを有効にします。詳細については、以下を参照してください。• サービススケジューラ IAM ロール (p. 244)• Amazon ECS タスク実行 IAM ロール (p. 247)

クラスターの例次の IAM ポリシーでは、クラスターを作成し、記載したアクセス権限を付与します。CreateCluster とListClusters のアクションはリソースを受け入れないため、すべてのリソースでリソース定義は * に設定されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:CreateCluster", "ecs:ListClusters" ], "Resource": [ "*" ] } ]}

次の IAM ポリシーでは、特定のクラスターに記述、および削除するアクセス権限を付与します。DescribeClusters と DeleteCluster のアクションはリソースとしてクラスター ARN を使用します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeClusters",

API バージョン 2014-11-13226

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

"ecs:DeleteCluster" ], "Resource": [ "arn:aws:ecs:us-east-1:<aws_account_id>:cluster/<cluster_name>" ] } ]}

次の IAM ポリシーは、ユーザーまたはグループが特定のクラスターでのオペレーションの実行のみを許可するユーザーまたはグループにアタッチできます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:Describe*", "ecs:List*" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "ecs:DeleteCluster", "ecs:DeregisterContainerInstance", "ecs:ListContainerInstances", "ecs:RegisterContainerInstance", "ecs:SubmitContainerStateChange", "ecs:SubmitTaskStateChange" ], "Effect": "Allow", "Resource": "arn:aws:ecs:us-east-1:<aws_account_id>:cluster/default" }, { "Action": [ "ecs:DescribeContainerInstances", "ecs:DescribeTasks", "ecs:ListTasks", "ecs:UpdateContainerAgent", "ecs:StartTask", "ecs:StopTask", "ecs:RunTask" ], "Effect": "Allow", "Resource": "*", "Condition": { "ArnEquals": { "ecs:cluster": "arn:aws:ecs:us-east-1:<aws_account_id>:cluster/default" } } } ]}

タスクの一覧表示と記述の例次の IAM ポリシーでは、ユーザーが指定したクラスターのためのタスクをリストできるようにします。

{ "Version": "2012-10-17",

API バージョン 2014-11-13227

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

"Statement": [ { "Effect": "Allow", "Action": [ "ecs:ListTasks" ], "Condition": { "ArnEquals": { "ecs:cluster": "arn:aws:ecs:<region>:<aws_account_id>:cluster/<cluster_name>" } }, "Resource": [ "*" ] } ]}

次の IAM ポリシーでは、ユーザーが指定したクラスターに指定タスクを記述することができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeTasks" ], "Condition": { "ArnEquals": { "ecs:cluster": "arn:aws:ecs:<region>:<aws_account_id>:cluster/<cluster_name>" } }, "Resource": [ "arn:aws:ecs:<region>:<aws_account_id>:task/<task_UUID>" ] } ]}

サービス作成の例次の IAM ポリシーでは、ユーザーが AWS マネジメントコンソール で Amazon ECS サービスを作成することができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:Describe*", "application-autoscaling:PutScalingPolicy", "application-autoscaling:RegisterScalableTarget", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "ecs:List*", "ecs:Describe*", "ecs:CreateService", "elasticloadbalancing:Describe*", "iam:AttachRolePolicy", "iam:CreateRole",

API バージョン 2014-11-13228

Amazon ECS AWS Fargate 用ユーザーガイドアイデンティティベースのポリシーの例

"iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRole", "iam:ListAttachedRolePolicies", "iam:ListRoles", "iam:ListGroups", "iam:ListUsers" ], "Resource": [ "*" ] } ]}

サービスの更新の例次の IAM ポリシーでは、ユーザーが AWS マネジメントコンソール で Amazon ECS サービスを更新することができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:Describe*", "application-autoscaling:PutScalingPolicy", "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:RegisterScalableTarget", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm", "ecs:List*", "ecs:Describe*", "ecs:UpdateService", "iam:AttachRolePolicy", "iam:CreateRole", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRole", "iam:ListAttachedRolePolicies", "iam:ListRoles", "iam:ListGroups", "iam:ListUsers" ], "Resource": [ "*" ] } ]}

タグに基づき、Amazon ECS サービスを記述するアイデンティティベースのポリシーの条件を使用して、タグに基づいて Amazon ECS リソースへのアクセスを制御できます。この例では、サービスを表示できるポリシーを作成する方法を示します。ただし、アクセス許可は、サービスタグ Owner にそのユーザーのユーザー名の値がある場合のみ、付与されます。このポリシーでは、このアクションをコンソールで実行するために必要なアクセス権限も付与します。

{ "Version": "2012-10-17",

API バージョン 2014-11-13229

Amazon ECS AWS Fargate 用ユーザーガイドサポートされるリソースレベルのアクセス許可

"Statement": [ { "Sid": "DescribeServices", "Effect": "Allow", "Action": "ecs:DescribeServices", "Resource": "*" }, { "Sid": "ViewServiceIfOwner", "Effect": "Allow", "Action": "ecs:DescribeServices", "Resource": "arn:aws:ecs:*:*:service/*", "Condition": { "StringEquals": {"ecs:ResourceTag/Owner": "${aws:username}"} } } ]}

このポリシーをアカウントの IAM ユーザーにアタッチできます。richard-roe という名前のユーザーがAmazon ECS サービスを表示する場合は、サービスに Owner=richard-roe または owner=richard-roe とタグ付けする必要があります。それ以外の場合、アクセスは拒否されます。条件キー名では大文字と小文字は区別されないため、条件タグキー Owner は Owner と owner に一致します。ポリシー要素の詳細については、『IAM ユーザーガイド』の「IAM JSON ポリシー要素: 条件」を参照してください。

Amazon ECS API アクションでサポートされるリソースレベルのアクセス許可「リソースレベルのアクセス許可」という用語は、ユーザーがアクションを実行可能なリソースを指定できることを示します。Amazon ECS では、リソースレベルのアクセス許可が部分的にサポートされています。これは、特定の Amazon ECS アクションでは、満たす必要がある条件、またはユーザーが使用できる特定のリソースに基づいて、ユーザーがそれらのアクションをいつ使用できるかを制御できることを意味します。たとえば、特定の AMI のみを使用して、特定のタイプのインスタンスだけを起動するアクセス許可をユーザーに付与できます。

Amazon ECS アクションによって作成または変更されるリソースの詳細と、IAM ポリシーステートメントで使用できる ARN および Amazon ECS 条件キーの詳細については、IAM ユーザーガイド の「AmazonElastic Container Service のアクション、リソース、および条件キー」を参照してください。

リソースレベルのアクセス許可に関する考慮事項IAM ポリシーでリソースの Amazon リソースネーム (ARN) を指定して Amazon ECS API アクションへのアクセスを制御する場合、ECS がコンテナインスタンス、サービスおよびタスクの ARN 形式に影響するアカウント設定を導入していることに留意してください。リソースレベルのアクセス許可を使用するには、新しい、より長い ARN 形式をオプトインすることをお勧めします。詳細については、「Amazon リソースネーム (ARN) と ID (p. 109)」を参照してください。

IAM ポリシーが評価されると、指定されたリソースは、新しいより長い ARN 形式の使用に基づいて評価されます。以下は、アクセスの制御方法の例です。

ワイルドカードのみを使用したクラスターでのサービスの指定例: arn:aws:ecs:region:aws_account_id:service/cluster_name*

この例では、次のサービスへのアクセスが制御されます。

• cluster_name* クラスターにある新しい ARN 形式を使用するすべてのサービス。• cluster_name* クラスターにある古い ARN 形式を使用するすべてのサービス。

API バージョン 2014-11-13230

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

Important

これは、cluster_name* クラスターにはない cluster_name プレフィックスを使用したサービス名を持つ、古い ARN 形式を使用するサービスへのアクセスを制御しません。

ワイルドカードを使用してクラスターおよびサービス名の両方でサービスを指定する

例: arn:aws:ecs:region:aws_account_id:service/cluster_name/service_name*

この例では、次のサービスへのアクセスが制御されます。

• service_name プレフィックスを使用した cluster_name クラスターにある新しい ARN 形式を使用するすべてのサービス。

• サービスの実際の ARN が arn:aws:ecs:region:aws_account_id:service/service_name*ARN 形式のままであっても、service_name プレフィックスを使用した cluster_name クラスターにある古い ARN 形式を使用するすべてのサービス。

完全な ARN を使用したサービスの指定

例: arn:aws:ecs:region:aws_account_id:service/cluster_name/service_name

この例では、次のサービスへのアクセスが制御されます。

• service_name サービス名を使用した cluster_name クラスターにある新しい ARN 形式を使用するすべてのサービス。

• サービスの実際の ARN が arn:aws:ecs:region:aws_account_id:service/service_nameARN 形式のままであっても、service_name プレフィックスを使用した cluster_name クラスターにある古い ARN 形式を使用するすべてのサービス。

管理ポリシーと信頼関係Amazon ECS および Amazon ECR では、IAM ユーザー、EC2 インスタンス、および Amazon ECS タスクにアタッチして、リソースや API オペレーションで異なる制御レベルを使用できる複数の管理ポリシーと信頼関係を提供しています。これらのポリシーを直接適用することも、独自のポリシーを作成する開始点として使用することもできます。

トピック• Amazon ECS 管理ポリシーと信頼関係 (p. 231)• Amazon ECR 管理ポリシー (p. 236)

Amazon ECS 管理ポリシーと信頼関係Amazon ECS では、IAM ユーザー、EC2 インスタンス、または Amazon ECS タスクにアタッチして、Amazon ECS リソースや API オペレーションで異なる制御レベルを使用できる複数の管理ポリシーと信頼関係を提供しています。これらのポリシーを直接適用することも、独自のポリシーを作成する開始点として使用することもできます。これらのポリシーに記載されている各 API オペレーションの詳細については、Amazon Elastic Container Service API Referenceの「アクション」を参照してください。

トピック• AmazonECS_FullAccess (p. 232)• AmazonEC2ContainerServiceFullAccess (p. 235)

API バージョン 2014-11-13231

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

• AmazonEC2ContainerServiceRole (p. 235)• AmazonEC2ContainerServiceAutoscaleRole (p. 236)

AmazonECS_FullAccess

この管理ポリシーにより、Amazon ECS リソースへの管理アクセスが提供され、VPC、Auto Scaling グループ、および AWS CloudFormation スタックを含む他の AWS のサービスリソースへのアクセスを通じて ECS 機能が有効になります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:DeleteScalingPolicy", "application-autoscaling:DeregisterScalableTarget", "application-autoscaling:DescribeScalableTargets", "application-autoscaling:DescribeScalingActivities", "application-autoscaling:DescribeScalingPolicies", "application-autoscaling:PutScalingPolicy", "application-autoscaling:RegisterScalableTarget", "appmesh:ListMeshes", "appmesh:ListVirtualNodes", "appmesh:DescribeVirtualNode", "autoscaling:UpdateAutoScalingGroup", "autoscaling:CreateAutoScalingGroup", "autoscaling:CreateLaunchConfiguration", "autoscaling:DeleteAutoScalingGroup", "autoscaling:DeleteLaunchConfiguration", "autoscaling:Describe*", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStack*", "cloudformation:UpdateStack", "cloudwatch:DescribeAlarms", "cloudwatch:DeleteAlarms", "cloudwatch:GetMetricStatistics", "cloudwatch:PutMetricAlarm", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "lambda:ListFunctions",

API バージョン 2014-11-13232

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

"ec2:AssociateRouteTable", "ec2:AttachInternetGateway", "ec2:AuthorizeSecurityGroupIngress", "ec2:CancelSpotFleetRequests", "ec2:CreateInternetGateway", "ec2:CreateLaunchTemplate", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateVpc", "ec2:DeleteLaunchTemplate", "ec2:DeleteSubnet", "ec2:DeleteVpc", "ec2:Describe*", "ec2:DetachInternetGateway", "ec2:DisassociateRouteTable", "ec2:ModifySubnetAttribute", "ec2:ModifyVpcAttribute", "ec2:RunInstances", "ec2:RequestSpotFleet", "elasticloadbalancing:CreateListener", "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:CreateRule", "elasticloadbalancing:CreateTargetGroup", "elasticloadbalancing:DeleteListener", "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:DeleteRule", "elasticloadbalancing:DeleteTargetGroup", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:DescribeTargetGroups", "ecs:*", "events:DescribeRule", "events:DeleteRule", "events:ListRuleNamesByTarget", "events:ListTargetsByRule", "events:PutRule", "events:PutTargets", "events:RemoveTargets", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfiles", "iam:ListRoles", "logs:CreateLogGroup", "logs:DescribeLogGroups", "logs:FilterLogEvents", "route53:GetHostedZone", "route53:ListHostedZonesByName", "route53:CreateHostedZone", "route53:DeleteHostedZone", "route53:GetHealthCheck", "servicediscovery:CreatePrivateDnsNamespace", "servicediscovery:CreateService", "servicediscovery:GetNamespace", "servicediscovery:GetOperation", "servicediscovery:GetService", "servicediscovery:ListNamespaces", "servicediscovery:ListServices", "servicediscovery:UpdateService", "servicediscovery:DeleteService" ], "Resource": [ "*" ] },

API バージョン 2014-11-13233

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

{ "Effect": "Allow", "Action": [ "ssm:GetParametersByPath", "ssm:GetParameters", "ssm:GetParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/aws/service/ecs*" }, { "Effect": "Allow", "Action": [ "ec2:DeleteInternetGateway", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DeleteSecurityGroup" ], "Resource": [ "*" ], "Condition": { "StringLike": { "ec2:ResourceTag/aws:cloudformation:stack-name": "EC2ContainerService-*" } } }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "*" ], "Condition": { "StringLike": { "iam:PassedToService": "ecs-tasks.amazonaws.com" } } }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/ecsInstanceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "ec2.amazonaws.com", "ec2.amazonaws.com.cn" ] } } }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/ecsAutoscaleRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "application-autoscaling.amazonaws.com", "application-autoscaling.amazonaws.com.cn" ]

API バージョン 2014-11-13234

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

} } }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringLike": { "iam:AWSServiceName": [ "ecs.amazonaws.com", "spot.amazonaws.com", "spotfleet.amazonaws.com", "ecs.application-autoscaling.amazonaws.com", "autoscaling.amazonaws.com" ] } } } ]}

AmazonEC2ContainerServiceFullAccessこの管理ポリシーでは、管理者権限による Amazon ECS へのフルアクセスを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:Describe*", "autoscaling:UpdateAutoScalingGroup", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStack*", "cloudformation:UpdateStack", "cloudwatch:GetMetricStatistics", "ec2:Describe*", "elasticloadbalancing:*", "ecs:*", "events:DescribeRule", "events:DeleteRule", "events:ListRuleNamesByTarget", "events:ListTargetsByRule", "events:PutRule", "events:PutTargets", "events:RemoveTargets", "iam:ListInstanceProfiles", "iam:ListRoles", "iam:PassRole" ], "Resource": "*" } ]}

AmazonEC2ContainerServiceRoleこの管理ポリシーは、Elastic Load Balancing ロードバランサーがユーザーの代わりに Amazon ECS コンテナインスタンスを登録および登録解除することを許可します。詳細については、「サービススケジューラ IAM ロール (p. 244)」を参照してください。

API バージョン 2014-11-13235

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:Describe*", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:Describe*", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:RegisterTargets" ], "Resource": "*" } ]}

AmazonEC2ContainerServiceAutoscaleRoleこの管理ポリシーは、Application Auto Scaling が CloudWatch アラームに応じてユーザーの代わりにAmazon ECS サービスの必要数をスケーリングすることを許可します。詳細については、「サービスのAuto Scaling IAM ロール (p. 246)」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeServices", "ecs:UpdateService" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm" ], "Resource": [ "*" ] } ]}

Amazon ECR 管理ポリシーAmazon ECR では、IAM ユーザーや EC2 インスタンスにアタッチして、Amazon ECR リソースや API オペレーションで異なる制御レベルを使用できる複数のマネージドポリシーを提供しています。これらのポリシーを直接適用することも、独自のポリシーを作成する開始点として使用することもできます。これらのポリシーに記載された各 API オペレーションの詳細については、Amazon Elastic Container Registry APIReference の「アクション」を参照してください。

トピック• AmazonEC2ContainerRegistryFullAccess (p. 237)

API バージョン 2014-11-13236

Amazon ECS AWS Fargate 用ユーザーガイド管理ポリシーと信頼関係

• AmazonEC2ContainerRegistryPowerUser (p. 237)• AmazonEC2ContainerRegistryReadOnly (p. 237)

AmazonEC2ContainerRegistryFullAccess

この管理ポリシーは、Amazon ECR の使用を管理するための完全な管理者アクセスを IAM ユーザーまたはロールに 提供することを検討しているお客様にとっての開始ポイントです。Amazon ECR ライフサイクルポリシー機能を使用すると、リポジトリ内のイメージのライフサイクル管理を指定できます。ライフサイクルポリシーイベントは CloudTrail イベントとしてレポートされます。また、Amazon ECR が AWSCloudTrail と統合されているため、お客様のライフサイクルポリシーイベントは Amazon ECR コンソールに直接表示されます。AmazonEC2ContainerRegistryFullAccess マネージド IAM ポリシーには、この動作を容易にするための cloudtrail:LookupEvents アクセス許可が含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*" ], "Resource": "*" } ]}

AmazonEC2ContainerRegistryPowerUser

この管理ポリシーでは、パワーユーザーによる Amazon ECR へのアクセスを許可して、リポジトリへの読み書きアクセスを許可しますが、リポジトリの削除、適用されるポリシードキュメントの変更は許可しません。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:InitiateLayerUpload", "ecr:UploadLayerPart", "ecr:CompleteLayerUpload", "ecr:PutImage" ], "Resource": "*" }]}

AmazonEC2ContainerRegistryReadOnly

この管理ポリシーでは、リポジトリとリポジトリ内のイメージの一覧表示や、Docker CLI を使用したAmazon ECR からのイメージのプルなど、Amazon ECR への読み取り専用アクセスを許可します。

API バージョン 2014-11-13237

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage" ], "Resource": "*" }]}

Amazon ECS 用のサービスにリンクされたロールAmazon Elastic Container Service は、ユーザーに代わって他の AWS のサービスを呼び出すために必要なアクセス許可を持つサービスにリンクされたロールを使用します。詳細については、IAM ユーザーガイドの「サービスにリンクされたロールの使用」を参照してください。

Amazon ECS のサービスにリンクされたロールが導入される前に、Amazon ECS に必要なアクセス権限を付与する Amazon ECS サービス用の IAM ロールを作成する必要があります。このロールは不要ですが、必要に応じて使用できます。詳細については、「Amazon ECS のレガシー IAM ロール (p. 244)」を参照してください。

サービスにリンクされたロールによって付与されるアクセス許可Amazon ECS は、AWSServiceRoleForECS という名前のサービスにリンクされたロールを使用して、Amazon ECS がユーザーに代わって AWS API を呼び出します。

AWSServiceRoleForECS サービスにリンクされたロールは、ロールを継承するためにecs.amazonaws.com サービスプリンシパルを信頼します。

ロールのアクセス許可ポリシーは、リソースに対して以下のアクションを実行することを Amazon ECS に許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSTaskManagement", "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:Describe*", "ec2:DetachNetworkInterface", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:Describe*", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:RegisterTargets", "route53:ChangeResourceRecordSets",

API バージョン 2014-11-13238

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

"route53:CreateHealthCheck", "route53:DeleteHealthCheck", "route53:Get*", "route53:List*", "route53:UpdateHealthCheck", "servicediscovery:DeregisterInstance", "servicediscovery:Get*", "servicediscovery:List*", "servicediscovery:RegisterInstance", "servicediscovery:UpdateInstanceCustomHealthStatus" ], "Resource": "*" }, { "Sid": "AutoScaling", "Effect": "Allow", "Action": [ "autoscaling:Describe*" ], "Resource": "*" }, { "Sid": "AutoScalingManagement", "Effect": "Allow", "Action": [ "autoscaling:DeletePolicy", "autoscaling:PutScalingPolicy", "autoscaling:SetInstanceProtection", "autoscaling:UpdateAutoScalingGroup" ], "Resource": "*", "Condition": { "Null": { "autoscaling:ResourceTag/AmazonECSManaged": "false" } } }, { "Sid": "AutoScalingPlanManagement", "Effect": "Allow", "Action": [ "autoscaling-plans:CreateScalingPlan", "autoscaling-plans:DeleteScalingPlan", "autoscaling-plans:DescribeScalingPlans" ], "Resource": "*" }, { "Sid": "CWAlarmManagement", "Effect": "Allow", "Action": [ "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm" ], "Resource": "arn:aws:cloudwatch:*:*:alarm:*" }, { "Sid": "ECSTagging", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:network-interface/*" }, {

API バージョン 2014-11-13239

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

"Sid": "CWLogGroupManagement", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:DescribeLogGroups", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*" }, { "Sid": "CWLogStreamManagement", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*:log-stream:*" } ]}

サービスにリンクされたロールの作成ほとんどの状況では、サービスにリンクされたロールを手動で作成する必要はありません。たとえば、新しいクラスターを作成する (例: Amazon ECS の初回実行のエクスペリエンス、クラスターの作成ウィザード、AWS CLI または SDK) か、AWS マネジメントコンソール でサービスを作成または更新するときに、存在しない場合は Amazon ECS によりサービスにリンクされたロールが作成されます。

IAM エンティティ (ユーザー、グループ、ロールなど) がサービスにリンクされたロールを作成、編集、削除できるようにするには、アクセス権限を設定する必要があります。

IAM エンティティが AWSServiceRoleForECS サービスにリンクされたロールを作成することを許可するには

サービスにリンクされたロールを作成する必要のある IAM エンティティのアクセス権限ポリシーに、次のステートメントを追加します。

{ "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*", "Condition": {"StringLike": {"iam:AWSServiceName": "ecs.amazonaws.com"}}}

IAM でのサービスにリンクされたロールの作成 (AWS CLI)

ロールを引き受けるためにサービスで必要な信頼ポリシーやインラインポリシー指定して、サービスにリンクされたロールを作成するには、IAM から AWS Command Line Interface コマンドを使用します。

サービスにリンクされたロールを作成するには (CLI)

次のコマンドを使用します。

$ aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

API バージョン 2014-11-13240

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

サービスにリンクされたロールを編集するAmazon ECS では、AWSServiceRoleForECS サービスにリンクされたロールを編集することはできません。サービスにリンクされたロールを作成すると、多くのエンティティによってロールが参照される可能性があるため、ロール名を変更することはできません。ただし、ロールの説明の編集はできます。詳細については、IAM ユーザーガイド の「ロールの修正」を参照してください。

IAM エンティティが AWSServiceRoleForECS サービスにリンクされたロールの説明を編集することを許可するには

サービスにリンクされたロールの説明を編集する必要のある IAM エンティティのアクセス権限ポリシーに、次のステートメントを追加します。

{ "Effect": "Allow", "Action": [ "iam:UpdateRoleDescription" ], "Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*", "Condition": {"StringLike": {"iam:AWSServiceName": "ecs.amazonaws.com"}}}

サービスにリンクされたロールを削除するAmazon ECS が不要になった場合は、サービスにリンクされたロールを削除することをお勧めします。そうすることで、使用していないエンティティがアクティブにモニタリングされたり、メンテナンスされたりすることがなくなります。ただし、サービスにリンクされたロールを削除する前に、すべてのリージョンのすべての Amazon ECS クラスターを削除する必要があります。

IAM エンティティが AWSServiceRoleForECS サービスにリンクされたロールを削除することを許可するには

サービスにリンクされたロールを削除する必要のある IAM エンティティのアクセス権限ポリシーに、次のステートメントを追加します。

{ "Effect": "Allow", "Action": [ "iam:DeleteServiceLinkedRole", "iam:GetServiceLinkedRoleDeletionStatus" ], "Resource": "arn:aws:iam::*:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS*", "Condition": {"StringLike": {"iam:AWSServiceName": "ecs.amazonaws.com"}}}

サービスにリンクされたロールのクリーンアップ

IAM を使用してサービスにリンクされたロールを削除するには、まずそのロールにアクティブなセッションがないことを確認し、すべての AWS リージョンのすべての Amazon ECS クラスターを削除する必要があります。

サービスにリンクされたロールがアクティブなセッションを持っているかどうかを確認するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで、[ロール] を選択し、(チェックボックスではなく) AWSServiceRoleForECS

の名前を選択します。

API バージョン 2014-11-13241

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

3. [概要] ページで [アクセスアドバイザー] を選択し、サービスにリンクされたロールの最新のアクティビティを確認します。

Note

Amazon ECS で AWSServiceRoleForECS ロールが使用されているかどうかが不明な場合は、このロールの削除を試みることができます。サービスでロールが使用されている場合、削除は失敗し、ロールが使用されているリージョンが表示されます。ロールが使用されている場合は、ロールを削除する前にセッションが終了するのを待つ必要があります。サービスにリンクされたロールのセッションを取り消すことはできません。

AWSServiceRoleForECS サービスにリンクされたロールによって使用されている Amazon ECSリソースを削除するには

AWSServiceRoleForECS ロールを削除する前に、すべての AWS リージョンのすべての Amazon ECS クラスターを削除する必要があります。

• すべてのリージョンですべての Amazon ECS クラスターを削除します。詳細については、「クラスターの削除 (p. 26)」を参照してください。

IAM でのサービスにリンクされたロールの削除 (コンソール)

IAM コンソールを使用して、サービスにリンクされたロールを削除できます。

サービスにリンクされたロールを削除するには (コンソール)

1. AWS マネジメントコンソール にサインインし、IAM コンソール(https://console.aws.amazon.com/iam/)を開きます。

2. IAM コンソールのナビゲーションペインで [ロール] を選択します。次に、AWSServiceRoleForECSの横のチェックボックス (名前または行全体ではありません) を選択します。

3. [ロールの削除] を選択します。4. 確認ダイアログボックスで、サービスの最終アクセス時間データを確認します。これは、選択したそ

れぞれのロールの AWS サービスへの最終アクセス時間を示します。これは、そのロールが現在アクティブであるかどうかを確認するのに役立ちます。先に進む場合は、[Yes, Delete] を選択し、削除するサービスにリンクされたロールを送信します。

5. IAM コンソール通知を見て、サービスにリンクされたロールの削除の進行状況を監視します。IAMサービスにリンクされたロールの削除は非同期であるため、削除するロールを送信すると、削除タスクは成功または失敗する可能性があります。

• タスクが成功した場合は、ロールがリストから削除され、成功の通知がページの上部に表示されます。

• タスクが失敗した場合は、通知から [詳細を表示] または [リソースを表示] を選択して、削除が失敗した理由を知ることができます。ロールがサービスのリソースを使用しているために削除が失敗したとき、サービスがその情報を返す場合は、通知にはリソースのリストが含まれます。次にリソースをクリーンアップしてから、削除をもう一度送信できます。

Note

サービスが返す情報に応じて、このプロセスを何度も繰り返す必要があります。たとえば、サービスにリンクされたロールが 6 つのリソースを使用しており、サービスはそのうち 5 つのリソースに関する情報を返すことがあります。5 つのリソースをクリーンアップして削除するロールを再度送信すると、削除は失敗し、残りの 1 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。

• タスクが失敗し、通知にリソースのリストが含まれていない場合、サービスはその情報を返さない可能性があります。このようなサービスのリソースをクリーンアップする方法の詳細については、

API バージョン 2014-11-13242

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

「IAM と連携する AWS サービス」を参照してください。使用しているサービスをテーブルで見つけ、「はい」リンクを選択すると、そのサービスのサービスにリンクされたロールに関するドキュメントが表示されます。

IAM でのサービスにリンクされたロールの削除 (AWS CLI)

AWS Command Line Interface から IAM コマンドを使用して、サービスにリンクされたロールを削除できます。

サービスにリンクされたロールを削除するには (CLI)

1. サービスにリンクされているロールは、使用されている、または関連するリソースがある場合は削除できないため、削除リクエストを送信する必要があります。これらの条件が満たされない場合、そのリクエストは拒否される可能性があります。レスポンスから deletion-task-id を取得して、削除タスクのステータスを確認する必要があります。サービスにリンクされたロールの削除リクエストを送信するには、次のコマンドを入力します。

$ aws iam delete-service-linked-role --role-name AWSServiceRoleForECS+OPTIONAL-SUFFIX

2. 削除タスクのステータスを確認するには、次のコマンドを入力します。

$ aws iam get-service-linked-role-deletion-status --deletion-task-id deletion-task-id

削除タスクのステータスは、NOT_STARTED、IN_PROGRESS、SUCCEEDED、または FAILED となります。削除が失敗した場合は、失敗した理由がコールによって返され、トラブルシューティングが可能になります。ロールがサービスのリソースを使用しているために削除が失敗したとき、サービスがその情報を返す場合は、通知にはリソースのリストが含まれます。次にリソースをクリーンアップしてから、削除をもう一度送信できます。

Note

サービスが返す情報に応じて、このプロセスを何度も繰り返す必要があります。たとえば、サービスにリンクされたロールが 6 つのリソースを使用しており、サービスはそのうち 5 つのリソースに関する情報を返すことがあります。5 つのリソースをクリーンアップして削除するロールを再度送信すると、削除は失敗し、残りの 1 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。リソースを報告しないサービスのリソースをクリーンアップする方法の詳細については、「IAM と連携する AWS サービス」を参照してください。使用しているサービスをテーブルで見つけ、「はい」リンクを選択すると、そのサービスのサービスにリンクされたロールに関するドキュメントが表示されます。

IAM でのサービスにリンクされたロールの削除 (AWSAPI)

IAM API を使用して、サービスにリンクされたロールを削除できます。

サービスにリンクされたロールを削除するには (API)

1. サービスにリンクされたロールの削除リクエストを送信するには、DeleteServiceLinkedRole を呼び出します。リクエストで、AWSServiceRoleForECS ロール名を指定します。

サービスにリンクされているロールは、使用されている、または関連するリソースがある場合は削除できないため、削除リクエストを送信する必要があります。これらの条件が満たされない場合、そのリクエストは拒否される可能性があります。レスポンスから DeletionTaskId を取得して、削除タスクのステータスを確認する必要があります。

2. 削除タスクのステータスを確認するには、GetServiceLinkedRoleDeletionStatus を呼び出します。リクエストで DeletionTaskId を指定します。

API バージョン 2014-11-13243

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

削除タスクのステータスは、NOT_STARTED、IN_PROGRESS、SUCCEEDED、または FAILED となります。削除が失敗した場合は、失敗した理由がコールによって返され、トラブルシューティングが可能になります。ロールがサービスのリソースを使用しているために削除が失敗したとき、サービスがその情報を返す場合は、通知にはリソースのリストが含まれます。次にリソースをクリーンアップしてから、削除をもう一度送信できます。

Note

サービスが返す情報に応じて、このプロセスを何度も繰り返す必要があります。たとえば、サービスにリンクされたロールが 6 つのリソースを使用しており、サービスはそのうち 5 つのリソースに関する情報を返すことがあります。5 つのリソースをクリーンアップして削除するロールを再度送信すると、削除は失敗し、残りの 1 つのリソースが報告されます。サービスはすべてのリソースを返しますが、そのうちいくつかはリソースを報告しない場合もあります。リソースを報告しないサービスのリソースをクリーンアップする方法の詳細については、「IAM と連携する AWS サービス」を参照してください。使用しているサービスをテーブルで見つけ、「はい」リンクを選択すると、そのサービスのサービスにリンクされたロールに関するドキュメントが表示されます。

Amazon ECS のレガシー IAM ロールAWSServiceRoleForECS IAM ロールの導入以前は、ユーザーに代わって Elastic Load Balancing とApplication Auto Scaling API を呼び出すための Amazon ECS アクセス権限を有効にするために、別の IAMロールを作成する必要がありました。

Amazon ECS サービススケジューラ IAM ロールは、ロードバランサーにコンテナインスタンスを登録および登録解除するために必要なアクセス権限を Amazon ECS サービススケジューラに付与します。オプションで、サービススケジューラ IAM ロールを作成してサービスの作成時に指定するか、サービスにリンクされたロールを使用して Amazon ECS を許可できます。

Amazon ECS サービスの Auto Scaling IAM ロールでは、CloudWatch アラームおよび登録されているサービスを記述するための Amazon ECS アクセス権限と、Amazon ECS サービスで必要な数を更新する権限が必要になります。

これらのレガシー IAM ロールについては以下で詳しく説明しますが、実質的に Amazon ECS サービスにリンクされたロールに置き換えられています。

サービススケジューラ IAM ロール

Amazon ECS は、サービススケジューラ IAM ロールに使用する AmazonEC2ContainerServiceRole という名前のマネージド IAM ポリシーを提供します。AmazonEC2ContainerServiceRole のポリシーを次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:Describe*", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer", "elasticloadbalancing:DeregisterTargets", "elasticloadbalancing:Describe*", "elasticloadbalancing:RegisterInstancesWithLoadBalancer", "elasticloadbalancing:RegisterTargets" ], "Resource": "*" }

API バージョン 2014-11-13244

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

]}

Note

ec2:AuthorizeSecurityGroupIngress ルールは、将来の利用のために予約されています。Amazon ECS では、Elastic Load Balancing ロードバランサーまたは Amazon ECS コンテナインスタンスに関連付けられたセキュリティグループを自動的には更新しません。

IAM コンソールで ecsServiceRole を確認するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles (ロール) ] を選択します。3. ロールのリストで ecsServiceRole を検索します。ロールが見つからない場合、次の手順を使用し

てロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

4. [Permissions] タブを選択します。5. [Managed Policies] セクションで、[AmazonEC2ContainerServiceRole] 管理ポリシーがロールにア

タッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS サービスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

a. [Attach Policy] を選択します。b. [フィルター] に AmazonEC2ContainerServiceRole と入力して、アタッチする利用可能なポリ

シーを絞り込みます。c. [AmazonEC2ContainerServiceRole] ポリシーの左にあるボックスをオンにし、[Attach Policy] を

選択します。6. [Trust Relationship]、[Edit Trust Relationship] を選択します。7. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する

場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

{ "Version": "2008-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

サービススケジューラロードバランサーの IAM ロールを作成するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。3. [Select type of trusted entity (信頼されたエンティティの種類を選択)] で [AWS サービス] を選択しま

す。4. [このロールを使用するサービスを選択] で、[Elastic Container Service] を選択します。5. [ユースケースの選択] セクションで、[Elastic Container Service]、[次の手順: アクセス許可] の順に選

択します。

API バージョン 2014-11-13245

Amazon ECS AWS Fargate 用ユーザーガイドサービスにリンクされたロール

6. [アタッチされたアクセス権限ポリシー] セクションで、[AmazonEC2ContainerServiceRole] ポリシー、[Next: Review (次の手順: 確認)] の順に選択します。

7. [ロール名] ページで、ecsServiceRole と入力し、[ロールの説明] に入力してから [ロールの作成] を選択します。

サービスの Auto Scaling IAM ロール

Amazon ECS は、サービスの Auto Scaling IAM ロールに使用するAmazonEC2ContainerServiceAutoscaleRole という名前のマネージド IAM ポリシーを提供します。AmazonEC2ContainerServiceAutoscaleRole のポリシーを次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DescribeServices", "ecs:UpdateService" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:DescribeAlarms", "cloudwatch:PutMetricAlarm" ], "Resource": [ "*" ] } ]}

IAM コンソールで サービスの Auto Scaling を確認するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles (ロール) ] を選択します。3. ロールのリストで ecsAutoscaleRole を検索します。ロールが見つからない場合、次の手順を使用

してロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

4. [アクセス許可] タブを選択します。5. [アクセス許可ポリシー] セクションで、[AmazonEC2ContainerServiceAutoscaleRole] 管理ポリシーが

ロールにアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECSサービスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

a. [Attach policies (ポリシーをアタッチします)] を選択します。b. [フィルター] に AmazonEC2ContainerServiceAutoscaleRole と入力して、アタッチする利

用可能なポリシーを絞り込みます。c. [AmazonEC2ContainerAutoscaleRole] ポリシーの左にあるボックスをオンにし、[Attach Policy

(ポリシーのアタッチ)] を選択します。6. [信頼関係]、[信頼関係の編集] の順に選択します。

API バージョン 2014-11-13246

Amazon ECS AWS Fargate 用ユーザーガイドタスク実行 IAM ロール

7. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "application-autoscaling.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

サービスの Auto Scaling 用に IAM ロールを作成するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [ロール] を選択した後、[ロールの作成] を選択します。3. [Choose the service that will use this role (このロールを使用するサービスを選択)] で、[Elastic

Container Service] を選択します。4. [ユースケースの選択] セクションで、[Elastic Container Service Autoscale]、[Next: Permissions (次の

手順: アクセス許可)] の順に選択します。5. [タグの追加 (オプション)] で、IAM ロールに追加するキー値タグを入力します。終了したら、[次へ:

レビュー] を選択します。6. [ロール名] フィールドで、ロールの名前を ecsAutoscaleRole と入力し、[ロールの作成] を選択し

て終了します。

Amazon ECS タスク実行 IAM ロールAmazon ECS コンテナエージェントと Fargate タスクの Fargate エージェントは、ユーザーに代わってAmazon ECS API を呼び出します。エージェントは、エージェントがユーザーに属していることを知るために、サービスの IAM ロールを必要とします。この IAM ロールは、タスク実行 IAM ロールと呼ばれます。さまざまな目的の複数のタスク実行ロールを、アカウントに関連付けることができます。

以下に示しているのは、タスク実行 IAM ロールの一般的なユースケースです。

• タスクでは、Fargate 起動タイプを使用して ...• Amazon ECR からコンテナイメージをプルします。• awslogs ログドライバーを使用します。

• タスクは Fargate または EC2 のどちらかの起動タイプを使用して ...• プライベートレジストリ認証を使用しています。詳細については、「プライベートレジストリの認証

には IAM アクセス許可が必須 (p. 249)」を参照してください。• タスク定義は、Secrets Manager シークレットまたは AWS Systems Manager パラメータストアのパ

ラメータを使用して機密データを参照します。詳細については、「Amazon ECS シークレットで必須の IAM アクセス許可 (p. 250)」を参照してください。

Note

タスク実行ロールは Amazon ECS コンテナエージェントバージョン 1.16.0 以降でサポートされています。

API バージョン 2014-11-13247

Amazon ECS AWS Fargate 用ユーザーガイドタスク実行 IAM ロール

Amazon ECS は、AmazonECSTaskExecutionRolePolicy という管理ポリシーを提供します。このポリシーには、上記の一般的ユースケースで必要なアクセス許可が含まれています。以下に示す特殊なユースケースのために、タスク実行ロールへのインラインポリシーの追加が必要になる場合があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ]}

Amazon ECS タスク実行ロールは、Amazon ECS コンソールの最初の実行時に自動的に作成されます。ただし、タスクのためのマネージド型 IAM ポリシーを手動でアタッチして、 Amazon ECS に今後の新機能および機能拡張のためのアクセス許可を追加できるようにする必要があります。次の手順を使用してアカウントにすでに Amazon ECS タスク実行のロールが存在するか確認し、必要に応じてマネージド IAM ポリシーをアタッチすることができます。

IAM コンソールで ecsTaskExecutionRole を確認するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles (ロール) ] を選択します。3. ロールのリストで ecsTaskExecutionRole を検索します。ロールが存在しない場合は、「タスク実

行 IAM ロールの作成 (p. 249)」を参照してください。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

4. [アクセス許可] タブで、AmazonECSTaskExecutionRolePolicy マネージドポリシーがロールにアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECS タスク実行ロールは適切に設定されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

a. [Attach policies (ポリシーをアタッチします)] を選択します。b. [フィルター] に AmazonECSTaskExecutionRolePolicy と入力して、アタッチする利用可能なポリ

シーを絞り込みます。c. [AmazonECSTaskExecutionRolePolicy] ポリシーの左にあるボックスをオンにし、[Attach policy]

を選択します。5. [信頼関係]、[信頼関係の編集] の順に選択します。6. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する

場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": {

API バージョン 2014-11-13248

Amazon ECS AWS Fargate 用ユーザーガイドタスク実行 IAM ロール

"Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

タスク実行 IAM ロールの作成アカウントにまだタスク実行ロールがない場合は、次のステップに従ってロールを作成します。

ecsTaskExecutionRole IAM ロールを作成するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。3. [信頼されたエンティティの種類を選択] セクションで、[Elastic Container Service] を選択します。4. [ユースケースの選択] セクションで、[Elastic Container Service のタスク]、[次の手順: アクセス許可]

の順に選択します。5. [アクセス権限ポリシーをアタッチする] セクションで AmazonECSTaskExecutionRolePolicy を検索し

てポリシーを選択し、[Next: Review (次の手順: 確認)] を選択します。6. [Role Name] に ecsTaskExecutionRole と入力し、[Create role] を選択します。

プライベートレジストリの認証には IAM アクセス許可が必須プライベートレジストリ認証機能を使用するには、Amazon ECS タスクの実行ロールが必要です。このロールを使用して、コンテナエージェントでコンテナイメージをプルできます。詳細については、「タスクのプライベートレジストリの認証 (p. 89)」を参照してください。

作成したシークレットにアクセスできるように、インラインポリシーとして以下のアクセス許可をタスクの実行ロールに手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。

• secretsmanager:GetSecretValue

• kms:Decrypt— カスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須。そのカスタムキーの ARN はリソースとして追加されている必要があります。

アクセス許可を追加するインラインポリシーの例を以下に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ]}

API バージョン 2014-11-13249

Amazon ECS AWS Fargate 用ユーザーガイドタスク実行 IAM ロール

Amazon ECS シークレットで必須の IAM アクセス許可Amazon ECS シークレット機能を使用するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。このロールにより、必要な AWS Systems Manager またはSecrets Manager のリソースをコンテナエージェントがプルできます。詳細については、「機密データの指定 (p. 92)」を参照してください。

作成した AWS Systems Manager パラメータストア パラメータにアクセスできるように、タスク実行ロールに以下のアクセス許可をインラインポリシーとして手動で追加する必要があります。詳細については、「IAM ポリシーの追加と削除」を参照してください。

• ssm:GetParameters — Systems Manager パラメータストアのパラメータをタスク定義で参照する場合は必須です。

• secretsmanager:GetSecretValue — Secrets Manager シークレットを直接参照するか、SystemsManager パラメータストアのパラメータがタスク定義で Secrets Manager シークレットを参照している場合は必須です。

• kms:Decrypt— シークレットでカスタムの KMS キーを使用するが、デフォルトのキーは使用しない場合にのみ必須です。そのカスタムキーの ARN はリソースとして追加されている必要があります。

次の例のインラインポリシーでは必須アクセス許可を追加しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ]}

インターネットエンドポイントを介して Amazon ECR イメージをプルする Fargate タスク用の IAM アクセス許可 (オプション)Amazon ECR がインターフェイス VPC エンドポイントを使用するように設定されているときに、AmazonECR からイメージをプルする Fargate 起動タイプを使用するタスクを起動するときは、特定の VPC または VPC エンドポイントへのアクセスにタスクを制限できます。この操作を行うには、IAM 条件キーを使用するタスクのタスク実行ロールを作成します。

次の IAM グローバル条件キーを使用して、特定の VPC または VPC エンドポイントへのアクセスを制限します。詳細については、「AWS グローバル条件コンテキストキー」を参照してください。

• aws:SourceVpc — 特定の VPC へのアクセスを制限します。• aws:SourceVpce — 特定の VPC エンドポイントへのアクセスを制限します。

次のタスク実行ロールポリシーは、条件キーを追加する方法の例を示しています。

API バージョン 2014-11-13250

Amazon ECS AWS Fargate 用ユーザーガイドタスク用の IAM ロール

Important

ecr:GetAuthorizationToken API アクションには、aws:sourceVpc またはaws:sourceVpce 条件キーを適用することができません。これは、GetAuthorizationTokenAPI コールは、タスクの Elastic Network Interface ではなく、AWS Fargate が所有する ElasticNetwork Interface を経由するためです。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "vpce-xxxxxx", "aws:sourceVpc": "vpc-xxxxx" } } } ]}

タスク用の IAM ロールAmazon ECS タスク用の IAM ロールを使用すると、タスクのコンテナで使用できる IAM ロールを指定できます。アプリケーションは AWS 認証情報で AWS API リクエストに署名する必要があります。この機能により、アプリケーションを使用するための認証情報を管理する戦略を利用できます。これは、AmazonEC2 インスタンスプロファイルが EC2 インスタンスに認証情報を提供する方法と似ています。AWS 認証情報を作成してコンテナに配布したり、EC2 インスタンスのロールを使用したりする代わりに、IAM ロールを ECS のタスク定義または RunTask API オペレーションに関連付けることができます。タスクのコンテナにあるアプリケーションは、AWS SDK または CLI を使用して権限付与された AWS のサービスへのAPI リクエストを実行できます。

タスク定義で使用する IAM ロールを定義するか、RunTask API オペレーションでタスクを手動で実行するときに taskRoleArn の上書きを使用できます。Amazon ECS エージェントは、ロール認証情報を含む追加のフィールドを使用してタスクを開始するペイロードメッセージを受け取ります。Amazon ECS エージェントは、一意のタスク認証情報 ID を識別トークンとして設定し、内部認証情報のキャッシュを更新して、タスクの識別トークンがペイロードで受け取ったロールの認証情報を指すようにします。Amazon ECS エージェントでは、次の相対 URI を使用して、このタスクに属するすべてのコンテナの Env オブジェクト (docker inspect container_id コマンドで利用可能) に AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 環境変数を設定します。/credential_provider_version/credentials?id=task_credential_id

API バージョン 2014-11-13251

Amazon ECS AWS Fargate 用ユーザーガイドタスク用の IAM ロール

Note

タスク用の IAM ロールを指定すると、そのタスクのコンテナ内の AWS CLI または他の SDK は、タスクロールによって提供された AWS 認証情報を排他的に使用し、コンテナインスタンスからIAM アクセス権限を継承しなくなります。

コンテナ内から、以下のコマンドを使用して認証情報をクエリできます。

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

出力:

{ "AccessKeyId": "ACCESS_KEY_ID", "Expiration": "EXPIRATION_DATE", "RoleArn": "TASK_ROLE_ARN", "SecretAccessKey": "SECRET_ACCESS_KEY", "Token": "SECURITY_TOKEN_STRING"}

トピック• タスク用の IAM ロールの利点 (p. 252)• タスク用の IAM ロールとポリシーの作成 (p. 252)• サポートされる AWS SDK の使用 (p. 254)• タスク用の IAM ロールを指定する (p. 254)

タスク用の IAM ロールの利点• 認証情報の分離: コンテナは、コンテナが属するタスク定義で定義された IAM ロールの認証情報のみを

取得できます。コンテナは、別のタスクに属する別のコンテナを対象にした認証情報にアクセスすることはありません。

• 許可: 許可のないコンテナは別のタスク用に定義されている IAM ロール認証情報にアクセスできません。

• 監査性: 遡及的な監査を確実に行うため、CloudTrail を介してアクセスとイベントのロギングを利用できます。タスクの認証情報には、セッションにアタッチされている taskArn のコンテキストがあるため、CloudTrail ログではどのタスクがどのロールを使用しているかを表示できます。

タスク用の IAM ロールとポリシーの作成タスクで使用する IAM ポリシーを作成して、タスクのコンテナに含めるアクセス許可を指定する必要があります。IAM の新しい権限ポリシーを作成する方法は複数あります。目的の操作のいくつかをすでに実行できる完全な AWS 管理ポリシーをコピーし、特定の要件に応じてカスタマイズできます。詳細については、IAM ユーザーガイド の「新しいポリシーの作成」を参照してください。

また、タスク定義で指定する前に、使用するタスク用のロールを作成する必要があります。IAM コンソールで [Amazon Elastic Container Service Task Role (Amazon Elastic Container Service タスクロール)] サービスロールを使用して、ロールを作成できます。それから、タスクのコンテナに必要なアクセス許可を付与するロールに特定の IAM ポリシーをアタッチできます。次の手順では、これを行う方法について説明します。

IAM のアクセス許可を必要とする複数のタスク定義またはサービスがある場合は、各タスクに提供するアクセスを最小限に抑えるために、タスクを操作するために必要な最小限のアクセス許可で特定のタスク定義またはサービスごとにロールを作成することを検討してください。

Amazon ECS タスクロールの信頼関係を次に示します。

API バージョン 2014-11-13252

Amazon ECS AWS Fargate 用ユーザーガイドタスク用の IAM ロール

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

タスク用の IAM ポリシーを作成するには

この例では、Amazon S3 バケットへの読み取り専用アクセスを許可するポリシーを作成します。データベース認証情報または他の秘密情報をバケットに保存し、タスクのコンテナによってバケットからの認証情報の読み取りとアプリケーションへのロードを実行できます。

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで、[Policies (ポリシー)] を選択し、[Create Policy (ポリシーの作成)] を選択し

ます。3. 次のいずれかのタブの手順に従って、ビジュアルのエディタまたは JSON エディタの使用方法を示し

ます。

Using the visual editor

1. [Service] で、[S3] を選択します。2. [アクション] の [Read (読み取り)] オプションを展開し、[GetObject] を選択します。3. [Resources (リソース)] で [Add ARN (ARN を追加)] を選択し、Amazon S3 バケットの完全な

Amazon リソースネーム (ARN) を入力し、[Review policy (ポリシーの確認)] を選択します。4. [Review policy (ポリシーの確認)] ページで、[名前] には AmazonECSTaskS3BucketPolicy など

の独自の一意の名前を入力します。5. [Create policy (ポリシーの作成)] を選択して終了します。

Using the JSON editor

1. [Policy Document] フィールドに、タスクに適用するポリシーを貼り付けます。以下の例では、my-task-secrets-bucket Amazon S3 バケットにアクセス許可を付与します。ポリシードキュメントを特定のニーズに応じて変更できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::my-task-secrets-bucket/*" ] } ]}

API バージョン 2014-11-13253

Amazon ECS AWS Fargate 用ユーザーガイドタスク用の IAM ロール

2. [Create policy] を選択します。

タスク用の IAM ロールを作成するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。3. [Select type of trusted entity (信頼されたエンティティの種類を選択)] で [AWS サービス] を選択しま

す。4. [このロールを使用するサービスを選択] で、[Elastic Container Service] を選択します。5. [ユースケースの選択] セクションで、[Elastic Container Service Task (Elastic Container Service のタ

スク)]、[Next: Permissions (次の手順: アクセス許可)] の順に選択します。6. [アクセス権限ポリシーをアタッチする] セクションで、タスクで使用するポリシーを選択します (この

例では AmazonECSTaskS3BucketPolicy を選択し、[Next: Tags (次の手順: タグ)] を選択します)。7. [タグの追加 (オプション)] で、IAM ロールに関連付けるメタデータタグを入力し、[Next: Review (次の

手順: レビュー)] を選択します。8. [ロール名] に、ロールの名前を入力します。この例では、ロールの名前を

AmazonECSTaskS3BucketRole と入力し、[Create role (ロールの作成)] を選択して完了します。

サポートされる AWS SDK の使用タスクの IAM ロールのサポートは 2016 年 7 月 13 日に、AWS SDK に追加されました。タスクのコンテナは、その日付以降に作成されたバージョンの AWS SDK を使用する必要があります。Linux ディストリビューションのパッケージマネージャーに含まれている AWS SDK は、この機能をサポートするのに十分なほど新しくない可能性があります。

サポートされている SDK を使用していることを確認するには、コンテナを構築して最新バージョンを取得する際に、「アマゾン ウェブ サービスのツール」で、希望する SDK のインストール手順に従ってください。

タスク用の IAM ロールを指定するロールを作成し、そのロールにポリシーをアタッチした後、そのロールを引き受けるタスクを実行できます。これには複数の方法があります。

• タスク定義でタスク用の IAM ロールを指定します。新しいタスク定義または既存のタスク定義の新しいリビジョンを作成して、前に作成したロールを指定できます。コンソールを使用してタスク定義を作成する場合、[Task Role (タスクロール)] フィールドで IAM ロールを選択します。AWS CLI または SDK を使用する場合、taskRoleArn パラメータを使用してタスクロールの ARN を指定します。詳細については、「タスク定義の作成 (p. 33)」を参照してください。

Note

このオプションは、Amazon ECS サービスで IAM のタスクロールを使用する場合に必要です。• タスクを実行する際に、IAM タスクロールの上書きを指定します。タスクを実行する際に IAM タスク

ロールの上書きを指定できます。コンソールを使用してタスクを実行する場合、[詳細オプション] を選択し、[Task Role (タスクロール)] フィールドで IAM ロールを選択します。AWS CLI または SDK を使用する場合、overrides JSON オブジェクトの taskRoleArn パラメータを使用してタスクロールのARN を指定します。詳細については、「タスクの実行 (p. 114)」を参照してください。

Note

タスクおよびサービスを実行するために必要な標準の Amazon ECS アクセス権限を付与するだけでなく、IAM ユーザーにはタスクの IAM ロールを使用する iam:PassRole アクセス権限も必要です。

API バージョン 2014-11-13254

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy IAM ロール

Amazon ECS CodeDeploy IAM ロールAmazon ECS で CodeDeploy Blue/Green デプロイタイプを使用するには、Amazon ECS サービスを更新するためのアクセス許可を事前に CodeDeploy サービスに付与しておく必要があります。これらのアクセス権限は、CodeDeploy IAM ロール (ecsCodeDeployRole) によって付与されます。

Note

IAM ユーザーには CodeDeploy を使用するアクセス許可も必要です。これらの権限については、「IAM アクセス権限が必要な Blue/Green デプロイ (p. 153)」で説明しています。

2 つの管理ポリシーが用意されています。次に示している AWSCodeDeployRoleForECS ポリシーでは、関連付けられているアクションを使用してリソースを更新するためのアクセス許可が CodeDeploy に付与されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:UpdateServicePrimaryTaskSet", "ecs:DeleteTaskSet", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "cloudwatch:DescribeAlarms", "sns:Publish", "s3:GetObject", "s3:GetObjectMetadata", "s3:GetObjectVersion" ], "Resource": "*", "Effect": "Allow" } ]}

次に示している AWSCodeDeployRoleForECSLimited ポリシーでは、より限定されたアクセス許可がCodeDeploy に付与されます。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:UpdateServicePrimaryTaskSet", "ecs:DeleteTaskSet", "cloudwatch:DescribeAlarms" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "sns:Publish" ],

API バージョン 2014-11-13255

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy IAM ロール

"Resource": "arn:aws:sns:*:*:CodeDeployTopic_*", "Effect": "Allow" }, { "Action": [ "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:*:*:function:CodeDeployHook_*", "Effect": "Allow" }, { "Action": [ "s3:GetObject", "s3:GetObjectMetadata", "s3:GetObjectVersion" ], "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/UseWithCodeDeploy": "true" } }, "Effect": "Allow" } ]}

CodeDeploy 用に IAM ロールを作成するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles]、[Create role] の順に選択します。3. [Select type of trusted entity (信頼されたエンティティの種類を選択)] で [AWS サービス] を選択しま

す。4. [このロールを使用するサービスを選択] で [CodeDeploy] を選択します。5. [ユースケースの選択] で、[CodeDeploy - ECS]、[Next: Permissions (次の手順: アクセス許可)] の順に

選択します。6. [Next: Tags (次の手順: タグ)] を選択します。7. [タグの追加 (オプション)] で、オプションの IAM タグをロールに追加できます。完了したら、[Next:

Review (次の手順: 確認)] を選択します。8. [ロール名] に ecsCodeDeployRole と入力し、[ロールの説明] (省略可能) に説明を入力してから、

[ロールの作成] を選択します。

必要なアクセス許可を Amazon ECS CodeDeploy IAM ロールに追加します。

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ロールのリストで ecsCodeDeployRole を検索します。そのロールが見つからない場合は、次の手

順に従ってロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

API バージョン 2014-11-13256

Amazon ECS AWS Fargate 用ユーザーガイドCodeDeploy IAM ロール

3. [Permissions policies (アクセス許可ポリシー)] セクションで、そのロールに[AWSCodeDeployRoleForECS] または [AWSCodeDeployRoleForECSLimited] 管理ポリシーがアタッチされていることを確認します。そのポリシーがアタッチされている場合、Amazon ECSCodeDeploy サービスロールは適切に設定されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

a. [Attach policies (ポリシーをアタッチします)] を選択します。b. [フィルター] に AWSCodeDeployRoleForECS または AWSCodeDeployRoleForECSLimited と入

力して、アタッチする利用可能なポリシーを絞り込みます。c. AWS 管理ポリシーの左にあるボックスをオンにし、[ポリシーのアタッチ] を選択します。

4. [信頼関係]、[信頼関係の編集] の順に選択します。5. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する

場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codedeploy.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ]}

6. Blue/Green デプロイタイプを使用する Amazon ECS サービス内のタスクでタスク実行ロールまたはタスクロール上書きを使用する必要がある場合は、各タスクのタスク実行ロールまたはタスクロール上書きに対する iam:PassRole アクセス許可を、CodeDeploy IAM ロールにインラインポリシーとして追加する必要があります。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」および「タスク用の IAM ロール (p. 251)」を参照してください。

以下のサブステップに従ってインラインポリシーを作成します。

a. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。b. ロールのリストで ecsCodeDeployRole を検索します。そのロールが見つからない場合は、次

の手順に従ってロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

c. [Permissions policies (アクセス許可ポリシー)] セクションで [Add inline policy (インラインポリシーの追加)] を選択します。

d. [JSON] タブを選択して次のポリシーテキストを追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ]

API バージョン 2014-11-13257

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch イベント IAM ロール

}

Note

タスク実行ロールまたはタスクロール上書きの完全 ARN を指定します。e. [ポリシーの確認] を選択します。f. 追加したポリシーの名前を [Name (名前)] に入力してから [ポリシーの作成] を選択します。

Amazon ECS CloudWatch イベント IAM ロールAmazon ECS のスケジュールされたタスクを CloudWatch イベント のルールとターゲットで使用するには、Amazon ECS タスクを実行するためのアクセス許可が CloudWatch イベント サービスに必要です。これらのアクセス権限は、CloudWatch イベント IAM ロール (ecsEventsRole) によって付与されます。

CloudWatch イベント ロールは、スケジュールされたタスクを設定すると AWS マネジメントコンソールで自動的に作成されます。詳細については、「タスクのスケジューリング (cron) (p. 116)」を参照してください。

AmazonEC2ContainerServiceEventsRole のポリシーを次に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunTask" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "*" ], "Condition": { "StringLike": { "iam:PassedToService": "ecs-tasks.amazonaws.com" } } } ]}

スケジュールされたタスクでタスク実行ロールの使用、タスクロール、またはタスクロール上書きが必要な場合、タスク実行ロール、タスクロール、またはタスクロール上書きごとに iam:PassRole アクセス許可を CloudWatch イベント IAM ロールに追加する必要があります。タスクの実行ロールの詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

Note

タスク実行ロールまたはタスクロール上書きの完全 ARN を指定します。

{ "Version": "2012-10-17",

API バージョン 2014-11-13258

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch イベント IAM ロール

"Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ]}

以下の手順を使用して、アカウントにすでに CloudWatch イベント IAM ロールがあることを確認し、必要に応じて手動で作成します。

IAM コンソールで CloudWatch イベント IAM ロール を確認するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles (ロール) ] を選択します。3. ロールのリストで ecsEventsRole を検索します。ロールが見つからない場合、次の手順を使用し

てロールを作成します。ロールが存在する場合は、そのロールを選択して、アタッチされているポリシーを表示します。

4. [アクセス許可] を選択します。5. [アクセス許可ポリシー] セクションで、[AmazonEC2ContainerServiceEventsRole] 管理ポリシーが

ロールにアタッチされていることを確認します。ポリシーがアタッチされている場合、Amazon ECSサービスのロールが適切に構成されています。そうでない場合、次のサブステップに従ってポリシーをアタッチします。

a. [Attach policies (ポリシーをアタッチします)] を選択します。b. [フィルター] に AmazonEC2ContainerServiceEventsRole と入力して、アタッチする利用可

能なポリシーを絞り込みます。c. [AmazonEC2ContainerServiceEventsRole] ポリシーの左にあるチェックボックスをオンにし、[ポ

リシーのアタッチ] を選択します。6. [信頼関係]、[信頼関係の編集] の順に選択します。7. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する

場合、[Cancel] を選択します。信頼関係が一致しない場合、ポリシーを [Policy Document] ウィンドウにコピーし、[Update Trust Policy] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

CloudWatch イベント 用に IAM ロールを作成するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [ロール] を選択した後、[ロールの作成] を選択します。

API バージョン 2014-11-13259

Amazon ECS AWS Fargate 用ユーザーガイドCloudWatch イベント IAM ロール

3. [信頼されたエンティティの種類を選択] セクションで、[Elastic Container Service] を選択します。[ユースケースの選択]、[Elastic Container Service タスク] を選択します。[Next: Permissions (次へ: アクセス許可)] を選択します。

4. [アクセス権限ポリシーをアタッチする] セクションで、[AmazonEC2ContainerServiceEventsRole] ポリシー、[Next: Tags (次の手順: タグ)] の順に選択します。

5. [タグの追加 (オプション)] セクションに、ロールに関連付けるタグを入力し、[次へ: レビュー] を選択します。

6. [ロール名] で、ecsEventsRole と入力してロールに名前を付け、オプションで説明を入力してから、[ロールの作成] を選択します。

7. ロール情報を確認し、[ロールの作成] を選択します。8. ロールの一覧で ecsEventsRole を検索し、作成したロールを選択します。9. [信頼関係]、[信頼関係の編集] の順に選択します。10. [ポリシードキュメント] ウィンドウで、既存の信頼関係を次のテキストで置き換え、[信頼ポリシーの

更新] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

タスク実行ロールのアクセス許可を CloudWatch イベント IAM ロールに追加するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで、[Policies]、[Create policy] の順に選択します。3. [JSON] を選択し、次のポリシーを貼り付けて、[ポリシーの確認] を選択します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:aws:iam::<aws_account_id>:role/<ecsTaskExecutionRole_or_TaskRole_name>" ] } ]}

4. [名前] に AmazonECSEventsTaskExecutionRole と入力し、オプションで説明を入力してから、[ポリシーの作成] を選択します。

5. ナビゲーションペインで [Roles (ロール) ] を選択します。6. ロールの一覧で ecsEventsRole を検索し、ロールを選択してアタッチされたポリシーを表示しま

す。7. [Attach policy] を選択します。

API バージョン 2014-11-13260

Amazon ECS AWS Fargate 用ユーザーガイドトラブルシューティング

8. [ポリシーのアタッチ] セクションで、[AmazonECSEventsTaskExecutionRole] ポリシーを選択し、[ポリシーのアタッチ] を選択します。

Amazon Elastic Container Service の Identity andAccess のトラブルシューティング次の情報は、Amazon ECS と IAM の使用に伴って発生する可能性がある一般的な問題の診断や修復に役立ちます。

トピック• Amazon ECS でアクションを実行する権限がない (p. 261)• iam:PassRole を実行する権限がない (p. 261)• マイアクセスキーを表示したい (p. 262)• 管理者として Amazon ECS へのアクセスを他のユーザーに許可したい (p. 262)• 自分の AWS アカウント以外のユーザーに Amazon ECS リソースへのアクセスを許可した

い (p. 262)

Amazon ECS でアクションを実行する権限がないAWS マネジメントコンソール から、アクションを実行する権限がないと通知された場合、管理者に問い合わせ、サポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。

以下の例のエラーは、mateojackson IAM ユーザーがコンソールを使用して、 ウウウウウウの詳細を表示しようとしているが、ecs:GetWidget アクセス許可がない場合に発生します。

User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: ecs:GetWidget on resource: my-example-widget

この場合、マテオは、ecs:GetWidget アクションを使用して my-example-widget リソースにアクセスできるように、ポリシーの更新を管理者に依頼します。

iam:PassRole を実行する権限がないiam:PassRole アクションを実行する権限がないというエラーが表示された場合、管理者に問い合わせ、サポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。Amazon ECS にロールを渡すことができるようにポリシーを更新するよう、管理者に依頼します。

一部の AWS サービスでは、新しいサービスロールまたはサービスにリンクされたロールを作成せずに、既存のロールをサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

以下の例のエラーは、marymajor という IAM ユーザーがコンソールを使用して Amazon ECS でアクションを実行しようする場合に発生します。ただし、アクションでは、サービスロールによって付与されたアクセス許可がサービスにある必要があります。メアリーには、ロールをサービスに渡すアクセス許可がありません。

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

この場合、メアリーは担当の管理者に iam:PassRole アクションを実行できるようにポリシーの更新を依頼します。

API バージョン 2014-11-13261

Amazon ECS AWS Fargate 用ユーザーガイドトラブルシューティング

マイアクセスキーを表示したいIAM ユーザーアクセスキーを作成した後は、いつでもアクセスキー ID を表示できます。ただし、シークレットアクセスキーをもう一度表示することはできません。シークレットアクセスキーを紛失した場合は、新しいキーペアを作成する必要があります。

アクセスキーは、アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE) とシークレットアクセスキー (例:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) の 2 つの部分から構成されます。ユーザー名とパスワードと同様に、リクエストを認証するために、アクセスキー ID とシークレットアクセスキーの両方を使用する必要があります。ユーザー名とパスワードと同様に、アクセスキーをしっかり管理してください。

Important

正規ユーザー ID を確認するためであっても、アクセスキーをサードパーティーに提供しないでください。提供すると、第三者がアカウントへの永続的アクセスを取得する場合があります。

アクセスキーペアを作成する場合、アクセスキー ID とシークレットアクセスキーを安全な場所に保存するように求めるプロンプトが表示されます。このシークレットアクセスキーは、作成時にのみ使用できます。シークレットアクセスキーを紛失した場合、新しいアクセスキーを IAM ユーザーに追加する必要があります。最大 2 つのアクセスキーを持つことができます。すでに 2 つある場合は、新しいキーペアを作成する前に、いずれかを削除する必要があります。手順を表示するには、IAM ユーザーガイド の「アクセスキーの管理 」を参照してください。

管理者として Amazon ECS へのアクセスを他のユーザーに許可したいAmazon ECS へのアクセスを他のユーザーに許可するには、アクセスを必要とする人またはアプリケーションの IAM エンティティ (ユーザーまたはロール) を作成する必要があります。ユーザーは、このエンティティの認証情報を使用して AWS にアクセスします。次に、Amazon ECS の適切なアクセス許可を付与するポリシーを、そのエンティティにアタッチする必要があります。

すぐに開始するには、IAM ユーザーガイド の「IAM が委任した最初のユーザーおよびグループの作成」を参照してください 。

自分の AWS アカウント以外のユーザーに Amazon ECS リソースへのアクセスを許可したい他のアカウントのユーザーや組織外のユーザーが、リソースへのアクセスに使用できるロールを作成できます。ロールを引き受けるように信頼されたユーザーを指定することができます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください。

• Amazon ECS でこれらの機能がサポートされるかどうかを確認するには、「Amazon Elastic ContainerService と IAM の連携 (p. 216)」を参照してください。

• 所有している AWS アカウント間でリソースへのアクセスを付与する方法については、IAM ユーザーガイド の「所有している別の AWS アカウントへのアクセスを IAM ユーザーに許可」を参照してください。

• サードパーティーの AWS アカウントにリソースへのアクセスを提供する方法については、IAM ユーザーガイド の「第三者が所有する AWS アカウントへのアクセス権を付与する」を参照してください 。

• ID フェデレーションを介してアクセスを提供する方法については、IAM ユーザーガイド の「外部で認証されたユーザー (ID フェデレーション) へのアクセスの許可」を参照して ください 。

API バージョン 2014-11-13262

Amazon ECS AWS Fargate 用ユーザーガイドログ記録とモニタリング

• クロスアカウントアクセスでのロールとリソースベースのポリシーの使用の違いの詳細については、IAM ユーザーガイド の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

Amazon Elastic Container Service でのログ記録とモニタリング

モニタリングは、Amazon Elastic Container Service および AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。AWS では、Amazon ECS リソースをモニタリングし、起こり得るインシデントに対応するためのツールがいくつか用意されています。

Amazon CloudWatch アラーム

指定した期間にわたって単一のメトリクスを監視し、複数の期間にわたり特定のしきい値に関連するメトリクス値に基づいて 1 つ以上のアクションを実行します。アクションは、Amazon SimpleNotification Service (Amazon SNS) トピックまたは Amazon EC2 Auto Scaling ポリシーに送信される通知です。CloudWatch アラームは、単に特定の状態にあるというだけではアクションを呼び出しません。状態が変わり、それが指定した数の期間にわたって持続する必要があります。詳細については、「Amazon ECS CloudWatch のメトリクス (p. 193)」を参照してください。

Fargate 起動タイプを使用するタスクがあるサービスでは、CloudWatch アラームを使用して、CPUやメモリの使用率などの CloudWatch メトリクスに基づいてサービス内のタスクをスケールインおよびスケールアウトできます。詳細については、「サービスの Auto Scaling (p. 173)」を参照してください。

Amazon CloudWatch Logs

タスク定義で awslogs ログドライバーを指定することで、Amazon ECS タスクのコンテナからのログファイルをモニタリング、保存、およびアクセスできます。これは、Fargate 起動タイプを使用するタスクのログにアクセスするためのサポートされている唯一の方法です。詳細については、「awslogs ログドライバーを使用する (p. 74)」を参照してください。

Amazon CloudWatch Events

イベントを一致させ、イベントを 1 つ以上のターゲット関数やストリームにルーティングして、変更を加えたり、状態情報を取得したり、修正アクションを実行したりします。詳細については、このガイドの「Amazon ECS イベントと EventBridge (p. 198)」および Amazon CloudWatch Events ユーザーガイド の「Amazon CloudWatch Events とは」を参照してください。

AWS CloudTrail ログ

CloudTrail は、Amazon ECS のユーザー、ロール、または AWS のサービスによって実行されたアクションのレコードを提供します。CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、Amazon ECSに対してどのようなリクエストが行われたかを判断できます。詳細については、「AWS CloudTrail を使用した Amazon ECS API コールのログ作成 (p. 209)」を参照してください。

AWS Trusted Advisor

Trusted Advisor は、AWS の数十万のお客様にサービスを提供することにより得られた、運用実績から学んだベストプラクティスを活用しています。Trusted Advisor はお客様の AWS 環境を検査し、システムの可用性とパフォーマンスを向上させたりセキュリティギャップを埋めたりする機会がある場合には、推奨事項を作成します。すべての AWS のお客様は、Trusted Advisor の 5 つのチェックにアクセスできます。ビジネスまたはエンタープライズサポートプランをご利用のお客様は、すべてのTrusted Advisor チェックを表示できます。

API バージョン 2014-11-13263

Amazon ECS AWS Fargate 用ユーザーガイドコンプライアンス検証

詳細については、『AWS サポート ユーザーガイド』の「AWS Trusted Advisor」を参照してください。

Amazon ECS のモニタリングでもう 1 つ重要な点は、CloudWatch アラームの対象外の項目を手動でモニタリングすることです。CloudWatch、Trusted Advisor などの AWS コンソールダッシュボードには、AWS 環境の状態が一目でわかるビューが表示されます。コンテナインスタンスおよびタスクのコンテナのログファイルも確認することをお勧めします。

Amazon Elastic Container Service のコンプライアンス検証

サードパーティーの監査者は、複数の Amazon Elastic Container Service コンプライアンスプログラムの一環として AWS のセキュリティとコンプライアンスを評価します。このプログラムには、SOC、PCI、FedRAMP、HIPAA などがあります。

特定のコンプライアンスプログラムの範囲内にある AWS のサービスのリストについては、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact でレポートをダウンロードする」を参照してください。

Amazon ECS サービスを使用する際のお客様のコンプライアンス責任は、データの機密性、貴社のコンプライアンス目的、および適用法規や規則によって決まります。AWS ではコンプライアンスに役立つ以下のリソースを用意しています。

• セキュリティおよびコンプライアンスのクイックスタートガイド – これらのデプロイガイドでは、アーキテクチャ上の考慮事項について説明し、セキュリティとコンプライアンスに重点を置いたベースライン環境を AWS でデプロイするための手順を説明します。

• HIPAA のセキュリティとコンプライアンスに関するホワイトペーパーを作成する – このホワイトペーパーでは、企業が AWS を使用して HIPAA 準拠のアプリケーションを作成する方法について説明します。

• AWS コンプライアンスのリソース – このワークブックとガイドのコレクションは、お客様の業界や場所に適用される場合があります。

• AWS Config – この AWS サービスでは、自社プラクティス、業界ガイドライン、および規制に対するリソースの設定の準拠状態を評価します。

• AWS Security Hub – この AWS サービスでは、AWS 内のセキュリティ状態を包括的に表示しており、セキュリティ業界の標準およびベストプラクティスへの準拠を確認するのに役立ちます。

Amazon Elastic Container Service のインフラストラクチャセキュリティ

マネージド型サービスとして、Amazon Elastic Container Service は、ホワイトペーパー「Amazon WebServices: AWS セキュリティプロセスの概要」に記載されているAWS グローバルネットワークセキュリティの手順で保護されています。

AWS が公開している API コールを使用して、ネットワーク経由で Amazon ECS にアクセスします。クライアントで Transport Layer Security (TLS) 1.0 以降がサポートされている必要があります。TLS 1.2 以降が推奨されています。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman(ECDHE) などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされ

API バージョン 2014-11-13264

Amazon ECS AWS Fargate 用ユーザーガイドインターフェイス VPC エンドポイント (AWS PrivateLink)

ている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。

また、リクエストは、アクセスキー ID と、IAM プリンシパルに関連付けられているシークレットのアクセスキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

これらの API オペレーションは任意のネットワークの場所から呼び出すことができますが、Amazon ECSではリソースベースのアクセスポリシーがサポートされているため、送信元 IP アドレスに基づく制限を含めることができます。さらに、Amazon ECS ポリシーを使用して、特定の Amazon Virtual PrivateCloud エンドポイントや特定の VPC からアクセスをコントロールすることもできます。これにより、実質的にAWS ネットワーク内の特定の VPC からのみ特定の Amazon ECS リソースへのネットワークアクセスが分離されます。詳細については、「Amazon ECS インターフェイス VPC エンドポイント (AWSPrivateLink) (p. 265)」を参照してください。

トピック• Amazon ECS インターフェイス VPC エンドポイント (AWS PrivateLink) (p. 265)

Amazon ECS インターフェイス VPC エンドポイント(AWS PrivateLink)インターフェイス VPC エンドポイントを使用するように Amazon ECS を設定することで、VPC のセキュリティ体制を強化できます。インターフェイスエンドポイントは、プライベート IP アドレスを使用してAmazon ECS API にプライベートにアクセスできるテクノロジーである AWS PrivateLink を使用しています。PrivateLink は、VPC および Amazon ECS 間のすべてのネットワークトラフィックを Amazon ネットワークに限定します。インターネットゲートウェイ、NAT デバイス、または仮想プライベートゲートウェイは必要ありません。

PrivateLink の設定は要件ではありませんが、推奨されます。PrivateLink および VPC エンドポイントの詳細については、「AWS PrivateLink を介したサービスへのアクセス」を参照してください。

Amazon ECS VPC エンドポイントに関する考慮事項Amazon ECS 用のインターフェイス VPC エンドポイントを設定する前に、以下の考慮事項に注意してください。

• Fargate 起動タイプを使用するタスクでは、Amazon ECS 用のインターフェイス VPC エンドポイントは必要ありませんが、以下のように、Amazon ECR または Amazon CloudWatch Logs 用のインターフェイス VPC エンドポイントが必要になる場合があります。• タスクで Amazon ECR からプライベートイメージをプルできるようにするには、Amazon ECR 用の

インターフェイス VPC エンドポイントを作成する必要があります。詳細については、Amazon ElasticContainer Registry ユーザーガイド の「インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。

Important

インターフェイス VPC エンドポイントを使用するよう Amazon ECR を設定する場合、特定の VPC または VPC エンドポイントへのアクセスを制限する条件キーを含むタスク実行ロールを作成できます。詳細については、「インターネットエンドポイントを介して AmazonECR イメージをプルする Fargate タスク用の IAM アクセス許可 (オプション) (p. 250)」を参照してください。

• VPC にインターネットゲートウェイがなく、タスクで awslogs ログドライバーを使用してログ情報を CloudWatch Logs に送信する場合は、CloudWatch Logs 用のインターフェイス VPC エンドポイントを作成する必要があります。詳細については、Amazon CloudWatch Logs User Guide の「VPC エンドポイントでの CloudWatch Logs の使用」を参照してください。

API バージョン 2014-11-13265

Amazon ECS AWS Fargate 用ユーザーガイドインターフェイス VPC エンドポイント (AWS PrivateLink)

• 現在、VPC エンドポイントはクロスリージョンリクエストをサポートしていません。Amazon ECS に対して API コールを発行するリージョンと同じリージョンにエンドポイントを作成してください。

• VPC エンドポイントは、Amazon Route 53 を介した Amazon 提供の DNS のみをサポートします。独自の DNS を使用する場合には、条件付き DNS 転送を使用できます。詳細については、Amazon VPC ユーザーガイドの「DHCP オプションセット」を参照してください。

• VPC エンドポイントにアタッチされたセキュリティグループでは、VPC のプライベートサブネットから、ポート 443 で着信接続を許可する必要があります。

• エンドポイントポリシーを VPC エンドポイントにアタッチすることによる Amazon ECS へのアクセスのコントロールは、現在サポートされていません。デフォルトでは、サービスへのフルアクセスはエンドポイントを介して許可されます。詳細については、Amazon VPC ユーザーガイド の「VPC エンドポイントによるサービスのアクセスコントロール」を参照してください。

Amazon ECS 用の VPC エンドポイントの作成Amazon ECS サービス用の VPC エンドポイントを作成するには、Amazon VPC ユーザーガイド の「インターフェイスエンドポイントの作成」の手順を使用して、以下のエンドポイントを作成します。VPC 内に既存のコンテナインスタンスがある場合は、一覧表示されている順にエンドポイントを作成する必要があります。VPC エンドポイントが作成された後にコンテナインスタンスを作成する場合、順序は関係ありません。

• com.amazonaws.region.ecs-agent

• com.amazonaws.region.ecs-telemetry

• com.amazonaws.region.ecs

Note

region は、Amazon ECS によってサポートされている AWS リージョンのリージョン ID を表します (米国東部 (オハイオ) リージョン の us-east-2 など)。

API バージョン 2014-11-13266

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS CLI のインストール

Amazon ECS コマンドラインインターフェイスの使用

Amazon Elastic Container Service (Amazon ECS) コマンドラインインターフェース (CLI) には、ローカル開発環境からのクラスターおよびタスクの作成、更新、モニタリングを簡素化する高レベルコマンドが用意されています。Amazon ECS CLI は、マルチコンテナアプリケーションを定義および実行するための一般的なオープンソース仕様である、Docker Compose ファイルをサポートしています。AWS マネジメントコンソール の代わりに、毎日の開発およびテストのサイクルの一部として ECS CLI を使用します。

Important

現時点で、Amazon ECS CLI の最新バージョンは、Docker Compose ファイル構文バージョン1、2、および 3 のメジャーバージョンのみをサポートしています。構成ファイルで指定されたバージョンは、文字列 "1"、"1.0"、"2"、"2.0"、"3"、または "3.0" である必要があります。Docker Compose マイナーバージョンはサポートされていません。

Amazon ECS CLI の最新バージョンは 1.17.0 です。リリースノートについては、「Changelog」を参照してください。

Note

Amazon ECS CLI のソースコードは GitHub で入手できます。含めることを希望する変更について、プルリクエストを送信することをお勧めします。ただし、現在 Amazon Web Services はこのソフトウェアの修正されたコピーの実行をサポートしていません。

トピック• Amazon ECS CLI のインストール (p. 267)• Amazon ECS CLI の設定 (p. 273)• 設定ファイルの移行 (p. 274)• チュートリアル: Amazon ECS CLI を使用して Fargate タスクのクラスターを作成する (p. 275)• チュートリアル : Amazon ECS CLI を使用して サービス検出 を使用する Amazon ECS サービスを作

成する (p. 280)

Amazon ECS CLI のインストール次の手順に従って、macOS、Linux、または Windows システムに Amazon ECS CLI をインストールします。

ステップ 1: Amazon ECS CLI をダウンロードするAmazon ECS CLI バイナリをダウンロードします。

• macOS の場合:

sudo curl -o /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest

• Linux システムの場合:

API バージョン 2014-11-13267

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS CLI を検証する

sudo curl -o /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest

• Windows システムの場合:

Windows PowerShell を開き、次のコマンドを実行します。

PS C:\> New-Item -Path 'C:\Program Files\Amazon\ECSCLI' -ItemType DirectoryPS C:\> Invoke-WebRequest -OutFile 'C:\Program Files\Amazon\ECSCLI\ecs-cli.exe' https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.exe

Note

アクセス権限の問題が発生した場合は、管理者として PowerShell を実行していることを確認します。

ステップ 2: Amazon ECS CLI を検証するAmazon ECS CLI ファイルの有効性を検証するには、提供された MD5 サムまたは PGP 署名を使用します。これらのメソッドについては、後のセクションで説明します。

MD5 サムを使用した検証提供された MD5 サムを使用してダウンロードしたバイナリを検証します。

• macOS の場合 (2 つの出力文字列を比較し、一致することを確認します)。

curl -s https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest.md5 && md5 -q /usr/local/bin/ecs-cli

• Linux システムの場合 (出力文字列で OK を探します)。

echo "$(curl -s https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest.md5) /usr/local/bin/ecs-cli" | md5sum -c -

• Windows システムの場合:

Windows PowerShell を開き、ダウンロードした実行可能ファイルの md5 ハッシュを見つけます。

PS C:\> Get-FileHash ecs-cli.exe -Algorithm MD5

これを md5 ハッシュと比較してください。

PS C:\> Invoke-WebRequest -OutFile md5.txt https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.md5PS C:\> Get-Content md5.txt

PGP 署名を使用した検証Amazon ECS CLI の実行可能ファイルは、PGP 署名を使用して暗号で署名されます。GnuPG ツールを使用してこの署名を検証するには、次のステップを行います。

API バージョン 2014-11-13268

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS CLI を検証する

1. GnuPG をダウンロードし、インストールします。詳細については、GnuPG のウェブサイトを参照してください。

• macOS の場合は、Homebrew を使用することをお勧めします。製品ウェブサイトの手順に従って、Homebrew をインストールします。詳細については、「Homebrew」を参照してください。Homebrew がインストールされたら、macOS 端末から次のコマンドを使用します。

brew install gnupg

• Linux システムの場合は、お使いの Linux ディストリビューションでパッケージマネージャーを使用して gpg をインストールします。

• Windows システムの場合は、GnuPG ウェブサイトから Windows のシンプルなインストーラをダウンロードして使用します。詳細については、「GnuPG のダウンロード」を参照してください。

2. Amazon ECS PGP パブリックキーを取得します。コマンドを使用してこのキーを取得するか、手動でキーを作成してからインポートします。

a. オプション 1: 次のコマンドを使用してキーを取得します。

gpg --keyserver hkp://keys.gnupg.net --recv BCE9D9A42D51784F

b. オプション 2: 次の Amazon ECS PGP パブリックキーの内容でファイルを作成してからインポートします。

-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v2

mQINBFq1SasBEADliGcT1NVJ1ydfN8DqebYYe9ne3dt6jqKFmKowLmm6LLGJe7HUjGtqhCWRDkN+qPpHqdArRgDZAtn2pXY5fEipHgar4CP8QgRnRMO2fl74lmavr4Vg7K/KH8VHlq2uRw32/B94XLEgRbGTMdWFdKuxoPCttBQaMj3LGn6Pe+6xVWRkChQuBoQAhjBQ+bEm0kNy0LjNgjNlnL3UMAG56t8E3LANIgGgEnpNsB1UwfWluPoGZoTxN+6pHBJrKIL/1v/ETU4FXpYw2zvhWNahxeNRnoYj3uycHkeliCrw4kj0+skizBgO2K7oVX8Oc3j5+ZilhL/qDLXmUCb2az5cMM1mOoF8EKX5HaNuq1KfwJxqXE6NNIcOlFTrT7QwD5fMNld3FanLgv/ZnIrsSaqJOL6zRSq8O4LN1OWBVbndExk2Kr+5kFxn5lBPgfPgRj5hQ+KTHMa9Y8Z7yUc64BJiN6F9Nl7FJuSsfqbdkvRLsQRbcBG9qxX3rJAEhieJzVMEUNl+EgeCkxj5xuSkNU7zw2c3hQZqEcrADLV+hvFJktOz9Gm6xzbqlTnWWCz4xrIWtuEBA2qE+MlDheVd78a3gIsEaSTfQq0osYXaQbvlnSWOoc1y/5ZbzizHTJIhLtUyls9WisP2s0emeHZicVMfW61EgPrJAiupgc7kyZvFt4YwfwARAQABtCRBbWF6b24gRUNTIDxlY3Mtc2VjdXJpdHlAYW1hem9uLmNvbT6JAhwEEAECAAYFAlrjL0YACgkQHivRXs0TaQrg1g/+JppwPqHnlVPmv7lessB8I5UqZeD6p6uVpHd7Bs3pcPp8BV7BdRbs3sPLt5bV1+rkqOlw+0gZ4Q/ue/YbWtOAt4qY0OcEo0HgcnaXlsB827QIfZIVtGWMhuh94xzm/SJkvngml6KB3YJNnWP61A9qJ37/VbVVLzvcmazAMcWB4HUMNrhd0JgBCo0gIpqCbpJEvUc02Bjn23eEJsS9kC7OUAHyQkVnx4d9UzXF4OoISF6hmQKIBoLnRrAlj5Qvs3GhvHQ0ThYq0Grk/KMJJX2CSqt7tWJ8gk1n3H3YSReRXJRnv7DsDDBwFgT6r5Q2HW1TBUvaoZy5hF6maD09nHcNnvBjqADzeT8Tr/QubBCLzkNSYqqkpgtwv7seoD2P4n1giRvDAOEfMZpVkUr+C252IaH1HZFEz+TvBVQMY8OWWxmIJW+J6evjo3N1eO19UHv71jvoF8zljbI4bsL2c+QTJmOv7nRqzDQgCWypId/v2dUVVTk1j9omuLBBwNJzQCB+72LcIzJhYmaP1HC4LcKQG+/f41exuItenatKlEJQhYtyVXcBlh6Yn/wzNg2NWOwb3vqY/F7m6u9ixAwgtIMgPCDE4aJ86zrrXYFzN2HqkTSQh77Z8KPKmyGopsmN/reMuilPdINb249nA0dzoN+nj+tTFOYCIaLaFyjsZ0r1QAOJAjkEEwECACMFAlq1SasCGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRC86dmkLVF4T9iFEACEnkm1dNXsWUx34R3c0vamHrPxvfkyI1FlEUen8D1huX9xy6jCEROHWEp0rjGK4QDPgM93sWJ+s1UAKg214QRVzft0y9/DdR+twApA0fzyuavIthGd6+03jAAo6udYDE+cZC3P7XBbDiYEWk4XAF9I1JjB8hTZUgvXBL046JhGeM17+crgUyQeetkiOQemLbsbXQ40Bd9V7zf7XJraFd8VrwNUwNb+9KFtgAsc9rk+YIT/PEf+YOPysgcxI4sTWghtyCulVnuGoskgDv4v73PALU0ieUrvvQVqWMRvhVx10X90J7cC1KOyhlEQQ1aFTgmQjmXexVTwIBm8LvysFK6YXM41KjOrlz3+6xBIm/qebFyLUnf4WoiuOplAaJhK9pRY+XEnGNxdtN4D26Kd0F+PLkm3Tr3Hy3b1Ok34FlGrKVHUq1TZD7cvMnnNKEELTUcKX+1mV3an16nmAg/my1JSUt6BNK2rJpY1s/kkSGSEXQ4zuF2IGCpvBFhYAlt5Un5zwqkwwQR3/n2kwAoDzonJcehDw/C/cGos5D0aIU7IK2X2aTD3+pA7Mx3IMe2hqmYqRt9X42yF1PIEVRneBRJ3HDezAgJrNh0GQWRQkhIxgz6/cTR+ekr5TptVszS9few2GpI5bCgBKBisZIssT89aw7mAKWut0Gcm4qM9/yK6

API バージョン 2014-11-13269

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS CLI を検証する

1bkCDQRatUmrARAAxNPvVwreJ2yAiFcUpdRlVhsuOgnxvs1QgsIw3H7+Pacr9Hpe8uftYZqdC82KeSKhpHq7c8gMTMucIINtH25x9BCc73E33EjCL9Lqov1TL7+QkgHeT+JIhZwdD8Mx2K+LVVVu/aWkNrfMuNwyDUciSI4D5QHa8T+F8fgN4OTpwYjirzel5yoICMr9hVcbzDNv/ozKCxjx+XKgnFc3wrnDfJfntfDAT7ecwbUTL+viQKJ646s+psiqXRYtVvYInEhLVrJ0aV6zHFoigE/Bils6/g7ru1Q6CEHqEw++APs5CcE8VzJuWAGSVHZgun5Y9N4quR/M9Vm+IPMhTxrAg7rOvyRN9cAXfeSMf77I+XTifigNna8xt/MOdjXr1fjF4pThEi5u6WsuRdFwjY2azEv3vevodTi4HoJReH6dFRa6y8c+UDgl2iHiOKIpQqLbHEfQmHcDd2fix+AaJKMnPGNku9qCFEMbgSRJpXz6BfwnY1QuKE+IR6jA0frUNt2jhiGG/F8RceXzohaaC/Cx7LUCUFWc0n7z32C9/Dtj7I1PMOacdZzzbjJzRKO/ZDv+UN/c9dwAkllzAyPMwGBkUaY68EBstnIliW34aWm6IiHhxioVPKSpVJfyiXPO0EXqujtHLAeChfjcns3I12YshT1dv2PafG53fp33ZdzeUgsBo+EAEQEAAYkCHwQYAQIACQUCWrVJqwIbDAAKCRC86dmkLVF4T+ZdD/9x/8APzgNJF3o3STrFjvnV1ycyhWYGAeBJiu7wjsNWwzMFOv15tLjB7AqeVxZn+WKDD/mIOQ45OZvnYZuyX7DR0JszaH9wrYTxZLVruAu+t6UL0y/XQ4L1GZ9QR6+r+7t1Mvbfy7BlHbvX/gYtRwe/uwdibI0CagEzyX+2D3kTOlHO5XThbXaNf8AN8zha91Jt2Q2UR2X5T6JcwtMzFBvZnl3LSmZyE0EQehS2iUurU4uWOpGppuqVnbi0jbCvCHKgDGrqZ0smKNAQng54F365W3g8AfY48s8XQwzmcliowYX9bT8PZiEi0J4QmQh0aXkpqZyFefuWeOL2R94SXKzr+gRh3BAULoqF+qK+IUMxTip9KTPNvYDpiC66yBiT6gFDji5Ca9pGpJXrC3xeTXiKQ8DBWDhBPVPrruLIaenTtZEOsPc4I85yt5U9RoPTStcOr34s3w5yEaJagt6SGc5r9ysjkfH6+6rbi1ujxMgROSqtqr+RyB+V9A5/OgtNZc8llK6u4UoOCde8jUUWvqWKvjJB/Kz3u4zaeNu2ZyyHaOqOuH+TETcW+jsY9IhbEzqN5yQYGi4pVmDkY5vulXbJnbqPKpRXgM9BecV9AMbPgbDq/5LnHJJXg+G8YQOgp4lR/hC1TEFdIp5wM8AKCWsENyt2o1rjgMXiZOMF8A5oBLkCDQRatUuSARAAr77kj7j2QR2SZeOSlFBvV7oSmFeSNnz9xZssqrsm6bTwSHM6YLDwc7Sdf2esDdyzONETwqrVCg+FxgL8hmo9hS4crR6tmrP0mOmptr+xLLsKcaP7ogIXsyZnrEAEsvW8PnfayoiPCdc3cMCR/lTnHFGA7EuR/XLBmi7Qg9tByVYQ5Yj5wB9V4B2yeCt3XtzPqeLKvaxl7PNelaHGJQY/xo+mV0bndxf9IY+4oFJ4blD32WqvyxESo7vW6WBh7oqv3Zbm0yQrr8a6mDBpqLkvWwNI3kpJR974tg5o5LfDu1BeeyHWPSGm4U/G4JB+JIG1ADy+RmoWEt4BqTCZ/knnoGvwD5sTCxbKdmuOmhGyTssoG+3OOcGYHV7pWYPhazKHMPm201xKCjH1RfzRULzGKjD+yMLT1I3AXFmLmZJXikAOlvE3/wgMqCXscbycbLjLD/bXIuFWo3rzoezeXjgi/DJxjKBAyBTYO5nMcth1O9oaFd9d0HbsOUDkIMnsgGBE766Piro6MHo0T0rXl07Tp4pIrwuSOsc6XzCzdImj0Wc6axS/HeUKRXWdXJwno5awTwXKRJMXGfhCvSvbcbc2Wx+LIKvmB7EB4K3fmjFFE67yolmiw2qRcUBfygtH3eL5XZU28MiCpue8Y8GKJoBAUyvfKeM1rO8Jm3iRAc5a/D0AEQEAAYkEPgQYAQIACQUCWrVLkgIbAgIpCRC86dmkLVF4T8FdIAQZAQIABgUCWrVLkgAKCRDePL1hra+LjtHYD/9MucxdFe6bXO1dQR4tKhhQP0LRqy6zlBY9ILCLowNdGZdqorogUiUymgn3VhEhVtxTOoHcN7qOuM01PNsRnOeSEYjf8Xrb1clzkD6xULwmOclTb9bBxnBc/4PFvHAbZW3QzusaZniNgkuxt6BTfloSOf4inq71kjmGK+TlzQ6mUMQUg228NUQC+a84EPqYyAeY1sgvgB7hJBhYL0QAxhcW6m20Rd8iEc6HyzJ3yCOCsKip/nRWAbf0OvfHfRBp0+m0ZwnJM8cPRFjOqqzFpKH9HpDmTrC4wKP1+TL52LyEqNh4yZitXmZNV7giSRIkk0eDSko+bFy6VbMzKUMkUJK3D3eHFAMkujmbfJmSMTJOPGn5SB1HyjCZNx6bhIIbQyEUB9gKCmUFaqXKwKpF6rj0iQXAJxLR/shZ5Rk96VxzOphUl7T90m/PnUEEPwq8KsBhnMRgxa0RFidDP+n9fgtvHLmrOqX9zBCVXh0mdWYLrWvmzQFWzG7AoE55fkf8nAEPsalrCdtaNUBHRXA0OQxGAHMOdJQQvBsmqMvuAdjkDWpFu5y0My5ddU+hiUzUyQLjL5Hhd5LOUDdewlZgIw1jxrEAUzDKetnemM8GkHxDgg8koev5frmShJuce7vSjKpCNg3EIJSgqMOPFjJuLWtZvjHeDNbJy6uNL65ckJy6WhGjEADS2WAW1D6Tfekkc21SsIXk/LqEpLMR/0g5OUifwcEN1rS9IJXBwIy8MelN9qr5KcKQLmfdfBNEyyceBhyVl0MDyHOKC+7PofMtkGBq13QieRHv5GJ8LB3fclqHV8pwTTo3Bc8z2g0TjmUYAN/ixETdReDoKavWJYSE9yoMaaJu279ioVTrwpECse0XkiRyKToTjwOb73CGkBZZpJyqux/rmCV/fp4ALdSW8zbzFJVORaivhoWwzjpfQKhwcU9lABXi2UvVm14v0AfeI7oiJPSU1zM4fEny4oiIBXlRzhFNih1UjIu82X16mTm3BwbIga/s1fnQRGzyhqUIMii+mWra23EwjChaxpvjjcUH5ilLc5Zq781aCYRygYQw+hu5nFkOH1R+Z50Ubxjd/aqUfnGIAX7kPMD3Lof4KldDQ8ppQriUvxVo+4nPV6rpTy/PyqCLWDjkguHpJsEFsMkwajrAz0QNSAU5CJ0G2Zu4yxvYlumHCEl7nbFrm0vIiA75Sa8KnywTDsyZsu3XcOcf3g+g1xWTpjJqy2bYXlqz9uDOWtArWHOis6bq8l9RE6xr1RBVXS6uqgQIZFBGyq66b0dIq4D2JdsUvgEMaHbce7tBfeB1CMBdA64e9Rq7bFR7Tvt8gasCZYlNr3lydh+dFHIEkH53HzQe6l88HEic+0jVnLkCDQRa55wJARAAyLya2Lx6gyoWoJN1a6740q3o8e9d4KggQOfGMTCflmeqivuzgN+3DZHN+9ty2KxXMtn0mhHBerZdbNJyjMNT1gAgrhPNB4HtXBXum2wS57WKDNmade914L7FWTPAWBG2Wn448OEHTqsClICXXWy9IICgclAEyIq0Yq5mAdTEgRJSZ8t4GpwtDL9gNQyFXaWQmDmkAsCygQMvhAlmu9xOIzQG5CxSnZFk7zcuL60k14Z3Cmt49k4T/7ZU8goWi8tt+rU78/IL3J/fF9+1civ1OwuUidgfPCSvOUW1JojsdCQAL+RZJcoXq7lfOFj/eNjeOSstCTDPfTCL+kThE6E5neDtbQHBYkEX1BRiTedsV4+MucgiTrdQFWKf89G72xdv8ut9AYYQ2BbEYU+JAYhUH8rYYui2dHKJIgjNvJscuUWb+QEqJIRleJRhrO+/CHgMs4fZAkWF1VFhKBkcKmEjLn1f7EJJUUW84ZhKXjO/AUPX1CHsNjziRceuJCJYox1cwsoq6jTE50GiNzcIxTn9xUc0UMKFeggNAFys1K+TDTm3Bzo8H5ucjCUEmUm9lhkGwqTZgOlRX5eqPX+JBoSaObqhgqCa5IPinKRa6MgoFPHK

API バージョン 2014-11-13270

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS CLI を検証する

6sYKqroYwBGgZm6Js5chpNchvJMs/3WXNOEVg0J3z3vP0DMhxqWm+r+n9zlW8qsAEQEAAYkEPgQYAQgACQUCWuecCQIbAgIpCRC86dmkLVF4T8FdIAQZAQgABgUCWuecCQAKCRBQ3szEcQ5hr+ykD/4tOLRHFHXuKUcxgGaubUcVtsFrwBKma1cYjqaPms8u6Sk0wfGRI32G/GhOrp0Ts/MOkbObq6VLTh8N5Yc/53MEl8zQFw9Y5AmRoW4PZXERujs5s7p4oR7xHMihMjCCBn1bvrR+34YPfgzTcgLiOEFHYT8UTxwnGmXOvNkMM7mdxD3CV5q6VAte8WKBo/220II3fcQlc9r/oWX4kXXkb0v9hoGwKbDJ1tzqTPrp/xFtyohqnvImpnlz+Q9zXmbrWYL9/g8VCmW/NN2gju2G3Lu/TlFUWIT4v/5OPK6TdeNbVKJO4+S8bTayqSG9CML1S57KSgCo5HUhQWeSNHI+fpe5oX6FALPT9JLDce8OZz1icZZ0MELP37mOOQun0AlmHm/hVzf0f311PtbzcqWaE51tJvgUR/nZFo6Ta3O5Ezhs3VlEJNQ1Ijf/6DH87SxvAoRIARCuZd0qxBcDK0avpFzUtbJd24lRA3WJpkEiMqKvRDVZkE4b6TW61f0o+LaVfK6E8oLpixegS4fiqC16mFrOdyRk+RJJfIUyz0WTDVmtg0U1CO1ezokMSqkJ7724pyjr2xf/r9/sC6aOJwB/lKgZkJfC6NqL7TlxVA31dUgaLEOvEJTTE4gl+tYtfsCDvALCtqL0jduSkUo+RXcBItmXhA+tShW0pbS2Rtx/ixuaKohVD/0R4QxiSwQmICNtm9mw9ydIl1yjYXX5a9x4wMJracNY/LBybJPFnZnT4dYRz4XjqysDwvvYZByaWoIe3QxjX84V6MlI2IdAT/xImu8gbaCI8tmyfpIrLnPKiR9DVFYfGBXuAX7+HgPPSFtrHQONCALxxzlbNpS+zxt9r0MiLgcLyspWxSdmoYGZ6nQPRO5Nm/ZVS+u2imPCRzNUZEMa+dlE6kHx0rS0dPiuJ4O7NtPeYDKkoQtNagspsDvhcK7CSqAiKMq06UBTxqlTSRkm62eOCtcs3p3OeHu5GRZF1uzTET0ZxYkaPgdrQknxozjP5mC7X+45lcCfmcVt94TFNL5HwEUVJpmOgmzILCI8yoDTWzloo+i+fPFsXX4fkynhE83mSEcr5VHFYrTY3mQXGmNJ3bCLuc/jq7ysGq69xiKmTlUeXFm+aojcRO5izyShIRJZ0GZfuzDYFDbMV9amA/YQGygLw//zP5ju5SW26dNxlf3MdFQE5JJ86rn9MgZ4gcpazHEVUsbZsgkLizRp9imUiH8ymLqAXnfRGlU/LpNSefnvDFTtEIRcpOHcbhayG0bk51Bd4mioOXnIsKy4j63nJXA27x5EVVHQ1sYRN8Ny4Fdr2tMAmj2O+X+JqX2yy/UX5nSPU492e2CdZ1UhoU0SRFY3bxKHKB7SDbVeav+K5g===Gi5D-----END PGP PUBLIC KEY BLOCK-----

The details of the Amazon ECS PGP public key for reference:

Key ID: BCE9D9A42D51784FType: RSASize: 4096/4096Expires: NeverUser ID: Amazon ECSKey fingerprint: F34C 3DDA E729 26B0 79BE AEC6 BCE9 D9A4 2D51 784F

次のコマンドを使用して、Amazon ECS PGP パブリックキーをインポートします。

gpg --import <public_key_filename>

3. Amazon ECS CLI の署名をダウンロードします。署名は、ASCII でデタッチ済みの PGP 署名で、拡張子が .asc のファイルに保存されています。この署名ファイルには、対応する実行可能ファイルと同じ名前が付けられており、拡張子は .asc です。

• macOS システムの場合:

curl -o ecs-cli.asc https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest.asc

• Linux システムの場合:

curl -o ecs-cli.asc https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest.asc

• Windows システムの場合:

PS C:\> Invoke-WebRequest -OutFile ecs-cli.asc https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.exe.asc

4. 署名を検証します。API バージョン 2014-11-13

271

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: 実行アクセス権限をバイナリに適用する

• macOS および Linux システムの場合:

gpg --verify ecs-cli.asc /usr/local/bin/ecs-cli

• Windows システムの場合:

PS C:\> gpg --verify ecs-cli.asc 'C:\Program Files\Amazon\ECSCLI\ecs-cli.exe'

正常な出力:

gpg: Signature made Tue Apr 3 13:29:30 2018 PDTgpg: using RSA key DE3CBD61ADAF8B8Egpg: Good signature from "Amazon ECS <[email protected]>" [unknown]gpg: WARNING: This key is not certified with a trusted signature!gpg: There is no indication that the signature belongs to the owner.Primary key fingerprint: F34C 3DDA E729 26B0 79BE AEC6 BCE9 D9A4 2D51 784F Subkey fingerprint: EB3D F841 E2C9 212A 2BD4 2232 DE3C BD61 ADAF 8B8E

Important

出力に警告が表示されることがありますが、問題ありません。これは、個人 PGP キー (持っている場合) と Amazon ECS PGP キーの間に信頼チェーンがないために表示されます。詳細については、「Web of trust」を参照してください。

ステップ 3: 実行アクセス権限をバイナリに適用するバイナリへの実行アクセス権限を適用します。

• macOS および Linux システムの場合:

sudo chmod +x /usr/local/bin/ecs-cli

• Windows システムの場合:

環境変数を編集し、C:\Program Files\Amazon\ECSCLI を PATH 変数フィールドに追加します。その際に、セミコロンを使用して既存のエントリから区切ります。例:

PS C:\> C:\existing\path;C:\Program Files\Amazon\ECSCLI

変更が有効になるように、PowerShell (またはコマンドプロンプト) を再起動します。

Note

PATH 変数が設定されたら、Amazon ECS CLI を Windows PowerShell またはコマンドプロンプトから使用できます。

ステップ 4: インストールを完了させるCLI が適切に動作していることを確認します。

ecs-cli --version

API バージョン 2014-11-13272

Amazon ECS AWS Fargate 用ユーザーガイドAmazon ECS CLI の設定

Amazon ECS CLI の設定 (p. 273) に進みます。

Important

Amazon ECS CLI を使用する前に、AWS 認証情報、AWS リージョン、および Amazon ECS クラスター名で設定する必要があります。

Amazon ECS CLI の設定Amazon ECS CLI を使用するには、AWS 認証情報、クラスターを作成する AWS リージョン、および Amazon ECS クラスターで使用する名前などの基本設定情報がいくつか必要です。設定情報は macOS および Linux システムでは ~/.ecs ディレクトリに、Windows システムでは C:\Users\<username>\AppData\local\ecs に保存されます。

Amazon ECS CLI を構成するには

1. 次のコマンドを使用して CLI プロファイルを設定し、profile_name を希望のプロファイル名に、$AWS_ACCESS_KEY_ID および $AWS_SECRET_ACCESS_KEY 環境変数を AWS 認証情報に置き換えます。

ecs-cli configure profile --profile-name profile_name --access-key $AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY

2. 次のコマンドで設定を完了し、launch_type をデフォルトで使用するタスク起動タイプに、region_name を希望の AWS リージョンに、cluster_name を使用する既存の Amazon ECSクラスターまたは新しいクラスターの名前に、configuration_name をこの設定に付ける名前に置き換えます。

ecs-cli configure --cluster cluster_name --default-launch-type launch_type --region region_name --config-name configuration_name

CLI をインストールして設定すると、「チュートリアル: Amazon ECS CLI を使用して Fargate タスクのクラスターを作成する (p. 275)」を実行できます。詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

プロファイルAmazon ECS CLI は、ecs-cli configure profile コマンドを使用して、プロファイルという名前の複数のAWS 認証情報のセットの設定をサポートします。デフォルトのプロファイルは、ecs-cli configure profiledefault コマンドを使用して設定できます。これらのプロファイルは、--ecs-profile フラグを使用する認証情報を必要とする Amazon ECS CLI コマンドを実行するときに参照できます。それ以外の場合、デフォルトのプロファイルが使用されます。

詳細については、Amazon Elastic Container Service Developer Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

クラスター設定クラスター設定は、クラスターの名前とリージョンを含む、Amazon ECS クラスターを説明する一連のフィールドです。デフォルトのクラスタープロファイルは、ecs-cli configure default コマンドを使用して設定できます。Amazon ECS CLI は、--config-name オプションを使用した複数の名前付きクラスター設定の指定をサポートしています。

API バージョン 2014-11-13273

Amazon ECS AWS Fargate 用ユーザーガイド優先順位

詳細については、Amazon Elastic Container Service Developer Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

優先順位認証情報とリージョンの両方を Amazon ECS CLI コマンドで渡すには、複数の方法があります。以下に示しているのは、それぞれの優先順位です。

認証情報の優先順位は次のとおりです。

1. Amazon ECS CLI プロファイルフラグ:a. ECS プロファイル (--ecs-profile)b. AWS プロファイル (--aws-profile)

2. 環境変数:a. ECS_PROFILEb. AWS_PROFILEc. AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、および AWS_SESSION_TOKEN

3. ECS config ‐ デフォルトの ECS プロファイルから認証情報の取得を試みます。4. デフォルトの AWS プロファイル — AWS プロファイル名から認証情報

(aws_access_key_id、aws_secret_access_key) または assume_role(role_arn、source_profile) の使用を試みます。a. AWS_DEFAULT_PROFILE 環境変数 (デフォルトは default).

5. EC2 インスタンスロール

リージョンの優先順位は次のとおりです。

1. Amazon ECS CLI フラグ:a. リージョンフラグ (--region)b. クラスター config フラグ (--cluster-config)

2. ECS config ‐ デフォルトの ECS プロファイルからリージョンの取得を試みます。3. 環境変数—以下の環境変数からリージョンの取得を試みます。

a. AWS_REGIONb. AWS_DEFAULT_REGION

4. AWS プロファイル ‐ AWS プロファイル名からリージョンの使用を試みます。a. AWS_PROFILE 環境変数b. AWS_DEFAULT_PROFILE 環境変数 (デフォルトは default)

設定ファイルの移行Amazon ECS CLI を設定するプロセスは最新バージョン (v1.0.0) で大幅に変更され、新機能の追加が可能になりました。古い (v0.6.6 以前) 設定ファイルを最新の形式に変換する移行コマンドが導入されました。古い設定ファイルは廃止されているため、新しい機能を活用するには、設定を最新の形式に変換することをお勧めします。新しい YAML 形式の設定ファイルの v1.0.0 で導入された設定に関連する変更と新機能には以下があります。

• 認証情報とクラスター関連の設定情報の 2 つの個別のファイルへの分割。認証情報は ~/.ecs/credentials に保存され、クラスター設定情報は ~/.ecs/config に保存されます。

• 設定ファイルは YAML 形式でフォーマットされます。API バージョン 2014-11-13

274

Amazon ECS AWS Fargate 用ユーザーガイド古い設定ファイルの v1.0.0 以降の形式への移行

• 複数の名前付き設定を保存するサポート。• フィールド compose-service-name-prefix の廃止 (サービス<compose_service_name_prefix> + <project_name> を作成するために使用される名前)。このフィールドは引き続き設定できます。ただし、設定されていない場合、デフォルト値は割り当てられなくなりました。Amazon ECS CLI v0.6.6 以前では、デフォルトは ecscompose-service- でした。

• フィールド compose-project-name-prefix の削除 (タスク定義<compose_project_name_prefix> + <project_name> を作成するために使用される名前)。Amazon ECS CLI v1.0.0 以降では引き続き古い設定ファイルを読み取ることができるため、このフィールドが存在する場合は、引き続き読み取られて使用されます。ただし、ecs-cli configure コマンドを使用したこのフィールドの設定は v1.0.0 以降ではサポートされていないため、このフィールドを手動で v1.0.0 以降の設定ファイルに追加すると、Amazon ECS CLI はエラーをスローします。

• このフィールド cfn-stack-name-prefix (CFN スタック <cfn_stack_name_prefix> +<cluster_name> の作成に使用される名前) は cfn-stack-name に変更されました。プレフィックスを指定する代わりに、CloudFormation テンプレートの正確な名前を設定できます。

• Amazon ECS CLI v0.6.6 以前では、システムの ~/.aws/credentials ファイルから名前付き AWS プロファイルを使用して認証情報を設定することができました。この機能は削除されました。ただし、新しいフラグ --aws-profile が追加されました。これにより、認証情報を必要とするすべてのコマンドで、AWS プロファイルをインラインで参照できます。

Note

--project-name フラグを使用してプロジェクト名を設定できます。

古い設定ファイルの v1.0.0 以降の形式への移行すべてのバージョンの Amazon ECSCLI で古い設定ファイル形式からの読み取りがサポートされますが、いくつかの新機能 (複数の名前付きクラスタープロファイルの使用など) を利用するには、新しい形式へのアップグレードが必要です。レガシー設定ファイルの新しい形式への移行は、ecs-cli configuremigrate コマンドにより簡単に行うことができます。このコマンドは、古い形式で ~/.ecs/config に保存された設定情報を受け取り、新しい形式でファイルのペアに変換し、そのプロセスで古い設定ファイルを上書きします。

ecs-cli configure migrate コマンドを実行中に、古い設定ファイルとともに警告メッセージが表示され、新しい設定ファイルのプレビューが表示されます。移行を続行するには、ユーザーの確認が必要です。--force フラグが使用されている場合、警告メッセージは表示されず、確認なしで移行が続行します。cfn-stack-name-prefix がレガシーファイルで使用されている場合、cfn-stack-name が新しいファイルに <cfn_stack_name_prefix> + <cluster_name> として保存されます。

詳細については、Amazon Elastic Container Service Developer Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

チュートリアル: Amazon ECS CLI を使用してFargate タスクのクラスターを作成する

このチュートリアルでは、Fargate 起動タイプを使用してクラスターをセットアップし、サービスとタスクをデプロイする方法を示します。

前提条件以下の前提条件を満たしてください。

API バージョン 2014-11-13275

Amazon ECS AWS Fargate 用ユーザーガイドステップ 1: タスク実行 IAM ロールを作成する

• AWS アカウントをセットアップします。• Amazon ECS CLI のインストール詳細については、「Amazon ECS CLI のインストール (p. 267)」を

参照してください。• AWS CLI をインストールして設定します。詳細については、「AWS コマンドラインインターフェイ

ス」を参照してください。

ステップ 1: タスク実行 IAM ロールを作成するAmazon ECS コンテナエージェントはユーザーに代わって AWS API を呼び出すため、エージェントがユーザーに属していることをサービスに伝えるために、IAM ポリシーおよびロールが必要です。このIAM ロールは、タスク実行 IAM ロールと呼ばれます。使用するタスク実行ロールが既に作成されている場合は、このステップをスキップできます。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

AWS CLI を使用して IAM のタスク実行ロールを作成するには

1. 次の内容で、task-execution-assume-role.json というファイルを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

2. タスク実行ロールを作成する

aws iam --region us-west-2 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://task-execution-assume-role.json

3. タスク実行ロールのポリシーをアタッチします。

aws iam --region us-west-2 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

ステップ 2: Amazon ECS CLI; の設定Amazon ECS CLI では、ユーザーに代わって API リクエストを作成するために認証情報が必要です。これは、環境変数、AWS プロファイル、または Amazon ECS プロファイルから認証情報をプルできます。詳細については、「Amazon ECS CLI の設定 (p. 273)」を参照してください。

Amazon ECS CLI 設定を作成するには

1. クラスター設定を作成します。これは、使用する AWS リージョン、リソース作成プレフィックス、Amazon ECS CLI で使用するクラスター名を定義します。

ecs-cli configure --cluster tutorial --default-launch-type FARGATE --config-name tutorial --region us-west-2

API バージョン 2014-11-13276

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: クラスターを作成してセキュリティグループを設定する

2. アクセスキーとシークレットキーを使用して CLI プロファイルを作成します。

ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial-profile

ステップ 3: クラスターを作成してセキュリティグループを設定するECS クラスターとセキュリティグループを作成するには

1. ecs-cli up コマンドを使用して Amazon ECS クラスターを作成します。クラスター設定で Fargate をデフォルトの起動タイプとして設定したため、このコマンドは空のクラスターと 2 つのパブリックサブネットで構成された VPC を作成します。

ecs-cli up --cluster-config tutorial --ecs-profile tutorial-profile

このコマンドは、リソースが作成されるため、完了までに数分かかる場合があります。このコマンドの出力には、作成された VPC とサブネット ID が含まれます。これらの ID は後で使用されるため、書き留めておきます。

2. AWS CLI を使用して、VPC のデフォルトのセキュリティグループ ID を取得します。前の出力の VPCID を使用します。

aws ec2 describe-security-groups --filters Name=vpc-id,Values=VPC_ID --region us-west-2

このコマンドの出力には、次のステップで使用するセキュリティグループ ID が含まれています。3. AWS CLI を使用してセキュリティグループルールを追加し、ポート 80 でインバウンドアクセスを許

可します。

aws ec2 authorize-security-group-ingress --group-id security_group_id --protocol tcp --port 80 --cidr 0.0.0.0/0 --region us-west-2

ステップ 4: 構成ファイルを作成するこのステップでは、シンプルな PHP ウェブアプリケーションを作成するシンプルな Docker 構成ファイルを作成します。現時点で、Amazon ECS CLI では、Docker 構成ファイル構文 のバージョン 1、2、3 がサポートされています。このチュートリアルでは、Docker Compose v3 を使用します。

以下に示しているのが compose ファイルであり、docker-compose.yml という名前を付けています。web コンテナはウェブサーバーへのインバウンドトラフィック用にポート 80 を開きます。また、前に作成した CloudWatch ロググループに移動するようにコンテナログを設定します。これは Fargate タスクに推奨されるベストプラクティスです。

version: '3'services: web: image: amazon/amazon-ecs-sample ports: - "80:80" logging: driver: awslogs options:

API バージョン 2014-11-13277

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: クラスターに設定ファイルをデプロイする

awslogs-group: tutorial awslogs-region: us-west-2 awslogs-stream-prefix: web

Note

アカウントに us-west-2 リージョンの CloudWatch Logs tutorial という名前のロググループが既に含まれている場合は、一意の名前を選択して、ECS CLI がこのチュートリアルの新しいロググループを作成します。

Docker Compose の情報に加えて、サービスに指定する必要のある Amazon ECS 固有のパラメータがいくつかあります。前のステップの VPC、サブネット、およびセキュリティグループ ID を使用して、以下の内容とともに ecs-params.yml という名前のファイルを作成します。

version: 1task_definition: task_execution_role: ecsTaskExecutionRole ecs_network_mode: awsvpc task_size: mem_limit: 0.5GB cpu_limit: 256run_params: network_configuration: awsvpc_configuration: subnets: - "subnet ID 1" - "subnet ID 2" security_groups: - "security group ID" assign_public_ip: ENABLED

ステップ 5: クラスターに設定ファイルをデプロイする構成ファイルを作成した後は、ecs-cli compose service up を使用してクラスターにデプロイできます。デフォルトでは、コマンドは現在のディレクトリで docker-compose.yml および ecs-params.ymlというファイルを検索します。--file オプションを使用して別の Docker 構成ファイルを指定することや、--ecs-params オプションを使用して別の ECS Params ファイルを指定することができます。デフォルトでは、このコマンドで作成されたリソースはタイトルに現在のディレクトリが入っています。ただし、--project-name オプションを使用してこれを上書きできます。--create-log-groups オプションはコンテナログの CloudWatch ロググループを作成します。

ecs-cli compose --project-name tutorial service up --create-log-groups --cluster-config tutorial --ecs-profile tutorial-profile

ステップ 6: クラスターの実行中のコンテナを確認する構成ファイルをデプロイした後は、ecs-cli compose service ps を使用してサービスで実行されているコンテナを確認できます。

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-profile

API バージョン 2014-11-13278

Amazon ECS AWS Fargate 用ユーザーガイドステップ 7: コンテナログを表示する

出力:

Name State Ports TaskDefinition Healthtutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web RUNNING 34.222.202.55:80->80/tcp tutorial:1 UNKNOWN

上記の例では、構成ファイルから web コンテナ、およびウェブサーバーの IP アドレスとポートを確認できます。ウェブブラウザでそのアドレスを指定すると、PHP ウェブアプリケーションが表示されます。また、出力にはコンテナの task-id 値も含まれています。次のステップで使用するため、タスク ID をコピーします。

ステップ 7: コンテナログを表示するタスクのログを表示します。

ecs-cli logs --task-id 0c2862e6e39e4eff92ca3e4f843c5b9a --follow --cluster-config tutorial --ecs-profile tutorial-profile

Note

この --follow オプションは Amazon ECS CLI にログの継続的なポーリングを指示します。

ステップ 8: クラスターのタスクをスケーリングするecs-cli compose service scale を使用してタスクの数をスケールアップし、アプリケーションのインスタンス数を増やすことができます。この例では、アプリケーションの実行数を 2 に増やします。

ecs-cli compose --project-name tutorial service scale 2 --cluster-config tutorial --ecs-profile tutorial-profile

これでクラスターにさらに 2 つのコンテナが表示されます。

ecs-cli compose --project-name tutorial service ps --cluster-config tutorial --ecs-profile tutorial-profile

出力:

Name State Ports TaskDefinition Healthtutorial/0c2862e6e39e4eff92ca3e4f843c5b9a/web RUNNING 34.222.202.55:80->80/tcp tutorial:1 UNKNOWNtutorial/d9fbbc931d2e47ae928fcf433041648f/web RUNNING 34.220.230.191:80->80/tcp tutorial:1 UNKNOWN

ステップ 9: ウェブアプリケーションを表示するウェブブラウザにタスクの IP アドレスを入力すると、シンプルな PHP App ウェブアプリケーションを表示するウェブページが表示されます。

API バージョン 2014-11-13279

Amazon ECS AWS Fargate 用ユーザーガイドステップ 10: クリーンアップ

ステップ 10: クリーンアップこのチュートリアルを完了したら、余分な請求が発生しないようにリソースをクリーンアップします。まず、既存のコンテナを停止させてそれ以降のタスクを実行しないように、サービスを削除します。

ecs-cli compose --project-name tutorial service down --cluster-config tutorial --ecs-profile tutorial-profile

次に、クラスターを停止します。こうすることで、前に ecs-cli up コマンドで作成したリソースをクリーンアップします。

ecs-cli down --force --cluster-config tutorial --ecs-profile tutorial-profile

チュートリアル : Amazon ECS CLI を使用してサービス検出 を使用する Amazon ECS サービスを作成する

このチュートリアルでは、サービス検出 を使用するように設定された Amazon ECS サービスを作成作成する簡単なウォークスルーを示します。多くの サービス検出 設定値は、ECS パラメータファイルまたはフラグのいずれを使用して指定できます。両方が存在する場合、使用されているフラグは ECS パラメータファイルより優先されます。Amazon ECS CLI を使用する場合は、構成プロジェクト名が ECS サービスの名前として使用されます。

前提条件続行する前に、次の前提条件を満たしている必要があります。

• AWS アカウントをセットアップします。• Amazon ECS CLI のインストール詳細については、「Amazon ECS CLI のインストール (p. 267)」を

参照してください。

Amazon ECS CLI を設定するこのチュートリアルを開始する前に、Amazon ECS CLI をインストールして設定する必要があります。詳細については、「Amazon ECS CLI のインストール (p. 267)」を参照してください。

API バージョン 2014-11-13280

Amazon ECS AWS Fargate 用ユーザーガイドサービス検出 を使用するように設定された Amazon ECS サービスを作成する

Amazon ECS CLI では、ユーザーに代わって API リクエストを作成するために認証情報が必要です。これは、環境変数、AWS プロファイル、または Amazon ECS プロファイルから認証情報をプルできます。詳細については、「Amazon ECS CLI の設定 (p. 273)」を参照してください。

Amazon ECS CLI 設定を作成するには

1. クラスター設定を作成します。

ecs-cli configure --cluster ec2-tutorial --region us-east-1 --default-launch-type EC2 --config-name ec2-tutorial

2. アクセスキーとシークレットキーを使用してプロファイルを作成します。

ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name ec2-tutorial

Note

Amazon ECS CLI を初めて設定する場合は、これらの設定がデフォルトとしてマークされています。Amazon ECS CLI をすでに設定している場合は、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照して、これをデフォルト設定およびプロファイルとして設定します。

サービス検出 を使用するように設定された AmazonECS サービスを作成するAmazon ECS CLI で サービス検出 を使用するように設定された Amazon ECS サービスを作成するには、以下のステップを実行します。

サービス検出 を使用するように設定された Amazon ECS サービスを作成するには

1. backend という名前の Amazon ECS サービスを作成し、VPC 内で tutorial という名前のプライベート DNS 名前空間を作成します。この例では、タスクが awsvpc ネットワークモードを使用しているため、container_name と container_port の値は必須ではありません。

ecs-cli compose --project-name backend service up --private-dns-namespace tutorial --vpc vpc-04deee8176dce7d7d --enable-service-discovery

出力:

INFO[0001] Using ECS task definition TaskDefinition="backend:1"INFO[0002] Waiting for the private DNS namespace to be created...INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESSWARN[0033] Defaulting DNS Type to A because network mode was awsvpcINFO[0033] Waiting for the Service Discovery Service to be created...INFO[0034] Cloudformation stack status stackStatus=CREATE_IN_PROGRESSINFO[0065] Created an ECS service service=backend taskDefinition="backend:1"INFO[0066] Updated ECS service successfully desiredCount=1 serviceName=backendINFO[0081] (service backend) has started 1 tasks: (task 824b5a76-8f9c-4beb-a64b-6904e320630e). timestamp="2018-09-12 00:00:26 +0000 UTC"INFO[0157] Service status desiredCount=1 runningCount=1 serviceName=backendINFO[0157] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=backend

API バージョン 2014-11-13281

Amazon ECS AWS Fargate 用ユーザーガイドサービス検出 を使用するように設定された Amazon ECS サービスを作成する

2. 同じプライベート DNS 名前空間に frontend という名前の別のサービスを作成します。名前空間がすでに存在しているため、 Amazon ECS CLI は新しい名前空間を作成する代わりにそれを使用します。

ecs-cli compose --project-name frontend service up --private-dns-namespace tutorial --vpc vpc-04deee8176dce7d7d --enable-service-discovery

出力:

INFO[0001] Using ECS task definition TaskDefinition="frontend:1"INFO[0002] Using existing namespace ns-kvhnzhb5vxplfmlsWARN[0033] Defaulting DNS Type to A because network mode was awsvpcINFO[0033] Waiting for the Service Discovery Service to be created...INFO[0034] Cloudformation stack status stackStatus=CREATE_IN_PROGRESSINFO[0065] Created an ECS service service=frontend taskDefinition="frontend:1"INFO[0066] Updated ECS service successfully desiredCount=1 serviceName=frontendINFO[0081] (service frontend) has started 1 tasks: (task 824b5a76-8f9c-4beb-a64b-6904e320630e). timestamp="2018-09-12 00:00:26 +0000 UTC"INFO[0157] Service status desiredCount=1 runningCount=1 serviceName=frontendINFO[0157] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=frontend

3. 2 つのサービスが DNS を使用して VPC 内で互いを検出できることを確認します。DNS ホスト名は、<service_discovery_service_name>.<service_discovery_namespace> の形式を使用します。この例では、frontend サービスは frontend.tutorial で検出され、backend サービスは backend.tutorial で検出されます。これらはプライベート DNS 名前空間であるため、これらの DNS 名は指定された VPC 内でのみ解決されます。

4. サービス検出 設定を更新するには、frontend サービスの設定を更新します。更新可能な値は、DNSTTL およびヘルスチェックのカスタム設定失敗しきい値の値です。

ecs-cli compose --project-name frontend service up --update-service-discovery --dns-type SRV --dns-ttl 120 --healthcheck-custom-config-failure-threshold 2

出力:

INFO[0001] Using ECS task definition TaskDefinition="frontend:1"INFO[0001] Updated ECS service successfully desiredCount=1 serviceName=frontendINFO[0001] Service status desiredCount=1 runningCount=1 serviceName=frontendINFO[0001] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=frontendINFO[0002] Waiting for your Service Discovery resources to be updated...INFO[0002] Cloudformation stack status stackStatus=UPDATE_IN_PROGRESS

5. クリーンアップするには、Amazon ECS サービスと サービス検出 リソースを削除します。frontend サービスが削除されると、Amazon ECS CLI は関連する サービス検出 サービスを自動的に削除します。

ecs-cli compose --project-name frontend service rm

INFO[0000] Updated ECS service successfully desiredCount=0 serviceName=frontendINFO[0001] Service status desiredCount=0 runningCount=1 serviceName=frontend

API バージョン 2014-11-13282

Amazon ECS AWS Fargate 用ユーザーガイドサービス検出 を使用するように設定された Amazon ECS サービスを作成する

INFO[0016] Service status desiredCount=0 runningCount=0 serviceName=frontendINFO[0016] (service frontend) has stopped 1 running tasks: (task 824b5a76-8f9c-4beb-a64b-6904e320630e). timestamp="2018-09-12 00:37:25 +0000 UTC"INFO[0016] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=frontendINFO[0016] Deleted ECS service service=frontendINFO[0016] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=frontendINFO[0027] Waiting for your Service Discovery Service resource to be deleted...INFO[0027] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS

6. クリーンアップを完了するには、サービスを作成したプライベート DNS 名前空間と共に backendを削除します。Amazon ECS CLI は、プライベート DNS 名前空間の AWS CloudFormation スタックを、作成された Amazon ECS サービスと関連付けます。サービスが削除されると、名前空間も削除されます。

ecs-cli compose --project-name backend service rm --delete-namespace

API バージョン 2014-11-13283

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータエンドポイントバージョン 4

Amazon ECS タスクメタデータエンドポイント

Fargate での Amazon ECS は、タスクとコンテナに関するさまざまなメタデータ、ネットワークメトリクス、および Docker 統計情報を取得する方法を提供します。これは、タスクメタデータエンドポイントと呼ばれます。Fargate タスクでは、次のタスクメタデータエンドポイントバージョンを使用できます。

• タスクメタデータエンドポイントバージョン 4 – プラットフォームバージョン 1.4.0 以降で Fargate 起動タイプを使用するタスクで利用可能です。

• タスクメタデータエンドポイントバージョン 3 – プラットフォームバージョン 1.1.0 以降で Fargate 起動タイプを使用するタスクで利用可能です。

awsvpc ネットワークモードで起動されたタスクに属するすべてのコンテナには、事前定義されたリンクローカルアドレス範囲内のローカル IPv4 アドレスが割り当てられます。コンテナがメタデータエンドポイントにクエリを実行する場合、コンテナエージェントは、一意の IP アドレスに基づいてコンテナが属するタスクを判断し、そのタスクのメタデータと統計情報を返します。

トピック• タスクメタデータエンドポイントバージョン 4 (p. 284)• タスクメタデータエンドポイントバージョン 3 (p. 292)

タスクメタデータエンドポイントバージョン 4Fargate プラットフォームバージョン 1.4.0 以降、ECS_CONTAINER_METADATA_URI_V4 という環境変数がタスク内の各コンテナに挿入されます。タスクメタデータバージョン 4 エンドポイントに対してクエリを実行すると、さまざまなタスクメタデータおよび Docker 統計情報がタスクで利用可能になります。

タスクメタデータバージョン 4 のエンドポイントは、バージョン 3 と同じように動作しますが、コンテナとタスクに関する追加のネットワークメタデータを提供します。/stats エンドポイントにクエリを実行するときにも追加のネットワークメトリクスを使用できます。

Important

新しいタスクメタデータエンドポイントバージョンを将来作成する必要がないように、追加のメタデータをバージョン 4 の出力に追加できます。既存のメタデータが削除されたり、メタデータのフィールド名が変更されたりすることはありません。

タスクメタデータバージョン 4 のエンドポイントに対してクエリを実行する際に、次の追加のネットワークメタデータが含まれます。

• AttachmentIndex

• IPV4SubnetCIDRBlock

• MACAddress

• PrivateDNSName

• SubnetGatewayIPV4Address

• DomainNameServers

• DomainNameSearchList

API バージョン 2014-11-13284

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータの有効化

タスクメタデータの有効化タスクメタデータエンドポイントバージョン 4 機能は、プラットフォームバージョン 1.4 以降で Fargate起動タイプを使用するタスクに対してデフォルトで有効になります。

タスクメタデータエンドポイントバージョン 4 のパス次のタスクメタデータエンドポイントをコンテナで使用できます。

${ECS_CONTAINER_METADATA_URI_V4}

このパスはコンテナのメタデータ JSON を返します。${ECS_CONTAINER_METADATA_URI_V4}/task

このパスはタスクのメタデータ JSON を返します。これには、タスクに関連付けられたすべてのコンテナのコンテナ ID および名前のリストが含まれています。このエンドポイントのレスポンスの詳細については、「タスクメタデータ JSON レスポンス (p. 285)」を参照してください。

${ECS_CONTAINER_METADATA_URI_V4}/stats

このパスは特定の Docker コンテナの Docker 統計 JSON を返します。返される各統計の詳細については、Docker API ドキュメントの「ContainerStats」を参照してください。

${ECS_CONTAINER_METADATA_URI_V4}/task/stats

このパスはタスクに関連付けられたすべてのコンテナの Docker 統計 JSON を返します。返される各統計の詳細については、Docker API ドキュメントの「ContainerStats」を参照してください。

タスクメタデータ JSON レスポンス次の情報が、タスクメタデータエンドポイント (${ECS_CONTAINER_METADATA_URI_V4}/task) JSONレスポンスから返されます。

Cluster

コンテナが属している Amazon ECS クラスターの完全な Amazon リソースネーム (ARN)。TaskARN

コンテナが属しているタスクの完全な Amazon リソースネーム (ARN)。Family

タスクの Amazon ECS タスク定義のファミリー。Revision

タスクの Amazon ECS タスク定義のリビジョン。DesiredStatus

Amazon ECS からのタスクの目的のステータス。KnownStatus

Amazon ECS からのタスクの既知のステータス。Limits

タスクレベルで指定されたリソースの制限 (CPU やメモリなど)。リソースの制限が定義されていない場合はこのパラメータは省略されます。

API バージョン 2014-11-13285

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータ JSON レスポンス

PullStartedAt

最初のコンテナイメージのプル開始時のタイムスタンプ。PullStoppedAt

最後のコンテナイメージのプル終了時のタイムスタンプ。AvailabilityZone

タスクがあるアベイラビリティーゾーン。

Note

アベイラビリティーゾーンのメタデータは、プラットフォームバージョン 1.4 以降を使用する Fargate タスクでのみ使用できます。

Containers

タスクに関連付けられている各コンテナのコンテナメタデータのリスト。DockerId

コンテナの Docker ID。Name

タスク定義で指定されたコンテナの名前。DockerName

Docker に提供されたコンテナの名前。Amazon ECS コンテナエージェントはコンテナに一意の名前を生成し、同じタスク定義の複数のコピーが単一のインスタンスで実行されている場合に競合を回避します。

Image

コンテナのイメージ。ImageID

イメージの SHA-256 ダイジェスト。Ports

コンテナに対して公開されている任意のポート。公開ポートがない場合はこのパラメータは省略されます。

Labels

コンテナに適用された任意のラベル。ラベルが適用されていない場合はこのパラメータは省略されます。

DesiredStatus

Amazon ECS からのコンテナの目的のステータス。KnownStatus

Amazon ECS からのコンテナの既知のステータス。ExitCode

コンテナの終了コード。このパラメータは、コンテナが終了していない場合は省略されます。Limits

コンテナレベルで指定されたリソースの制限 (CPU やメモリなど)。リソースの制限が定義されていない場合はこのパラメータは省略されます。

API バージョン 2014-11-13286

Amazon ECS AWS Fargate 用ユーザーガイド例

CreatedAt

コンテナ作成時のタイムスタンプ。このパラメータは、コンテナがまだ作成されていない場合は省略されます。

StartedAt

コンテナ起動時のタイムスタンプ。このパラメータは、コンテナがまだ起動していない場合は省略されます。

FinishedAt

コンテナ停止時のタイムスタンプ。このパラメータは、コンテナがまだ停止していない場合は省略されます。

Type

コンテナのタイプ。タスク定義で指定されているコンテナのタイプは NORMAL です。他のコンテナタイプは無視してかまいません。これらは コンテナエージェントによってプロビジョニングされた内部タスクリソースで使用されます。

Networks

ネットワークモードや IP アドレスなど、コンテナのネットワーク情報。ネットワーク情報が定義されていない場合はこのパラメータは省略されます。

ExecutionStoppedAt

タスクの DesiredStatus が STOPPED に移行した時のタイムスタンプ。これは、必須コンテナがSTOPPED に移行したときに発生します。

例以下の例は、タスクメタデータエンドポイントからの出力を示しています。

コンテナメタデータレスポンスの例${ECS_CONTAINER_METADATA_URI_V4} エンドポイントにクエリを実行すると、コンテナ自体に関するメタデータのみが返されます。以下に出力例を示します。

{ "DockerId": "c7a6b9b237934e9999f319ea3ccc9da4query-metadata", "Name": "query-metadata", "DockerName": "query-metadata", "Image": "mreferre/eksutils", "ImageID": "sha256:1b146e73f801617610dcb00441c6423e7c85a7583dd4a65ed1be03cb0e123311", "Labels": { "com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:cluster/default", "com.amazonaws.ecs.container-name": "query-metadata", "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:task/default/c7a6b9b237934e9999f319ea3ccc9da4", "com.amazonaws.ecs.task-definition-family": "query-metadata", "com.amazonaws.ecs.task-definition-version": "3" }, "DesiredStatus": "RUNNING", "KnownStatus": "RUNNING", "Limits": { "CPU": 2 }, "CreatedAt": "2020-03-26T22:11:23.62831313Z", "StartedAt": "2020-03-26T22:11:23.62831313Z",

API バージョン 2014-11-13287

Amazon ECS AWS Fargate 用ユーザーガイド例

"Type": "NORMAL", "Networks": [ { "NetworkMode": "awsvpc", "IPv4Addresses": [ "10.0.0.61" ], "AttachmentIndex": 0, "IPv4SubnetCIDRBlock": "10.0.0.0/24", "MACAddress": "0a:d2:d0:80:b6:b4", "DomainNameServers": [ "10.0.0.2" ], "DomainNameSearchList": [ "us-west-2.compute.internal" ], "PrivateDNSName": "ip-10-0-0-61.us-west-2.compute.internal", "SubnetGatewayIpv4Address": "" } ]}

タスクメタデータレスポンスの例${ECS_CONTAINER_METADATA_URI_V4}/task エンドポイントにクエリを実行すると、コンテナが属しているタスクに関するメタデータが返されます。以下に出力例を示します。

{ "Cluster": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:cluster/default", "TaskARN": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:task/default/febee046097849aba589d4435207c04a", "Family": "query-metadata", "Revision": "7", "DesiredStatus": "RUNNING", "KnownStatus": "RUNNING", "Limits": { "CPU": 0.25, "Memory": 512 }, "PullStartedAt": "2020-03-26T22:25:40.420726088Z", "PullStoppedAt": "2020-03-26T22:26:22.235177616Z", "AvailabilityZone": "us-west-2c", "Containers": [ { "DockerId": "febee046097849aba589d4435207c04aquery-metadata", "Name": "query-metadata", "DockerName": "query-metadata", "Image": "mreferre/eksutils", "ImageID": "sha256:1b146e73f801617610dcb00441c6423e7c85a7583dd4a65ed1be03cb0e123311", "Labels": { "com.amazonaws.ecs.cluster": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:cluster/default", "com.amazonaws.ecs.container-name": "query-metadata", "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-west-2:&ExampleAWSAccountNo1;:task/default/febee046097849aba589d4435207c04a", "com.amazonaws.ecs.task-definition-family": "query-metadata", "com.amazonaws.ecs.task-definition-version": "7" }, "DesiredStatus": "RUNNING", "KnownStatus": "RUNNING", "Limits": { "CPU": 2 },

API バージョン 2014-11-13288

Amazon ECS AWS Fargate 用ユーザーガイド例

"CreatedAt": "2020-03-26T22:26:24.534553758Z", "StartedAt": "2020-03-26T22:26:24.534553758Z", "Type": "NORMAL", "Networks": [ { "NetworkMode": "awsvpc", "IPv4Addresses": [ "10.0.0.108" ], "AttachmentIndex": 0, "IPv4SubnetCIDRBlock": "10.0.0.0/24", "MACAddress": "0a:62:17:7a:36:68", "DomainNameServers": [ "10.0.0.2" ], "DomainNameSearchList": [ "us-west-2.compute.internal" ], "PrivateDNSName": "ip-10-0-0-108.us-west-2.compute.internal", "SubnetGatewayIpv4Address": "" } ] } ]}

タスク統計情報のレスポンス例${ECS_CONTAINER_METADATA_URI_V4}/task/stats エンドポイントにクエリを実行すると、コンテナが属しているタスクに関するネットワークメトリクスが返されます。以下に出力例を示します。

{ "1823e1f6-7248-43c3-bed6-eea1fa7501a5query-metadata": { "read": "2020-04-06T16:12:01.090148907Z", "preread": "2020-04-06T16:11:56.083890951Z", "pids_stats": { }, "blkio_stats": { "io_service_bytes_recursive": [ { "major": 202, "minor": 26368, "op": "Read", "value": 3452928 }, { "major": 202, "minor": 26368, "op": "Write", "value": 0 }, { "major": 202, "minor": 26368, "op": "Sync", "value": 3452928 }, { "major": 202, "minor": 26368, "op": "Async", "value": 0 },

API バージョン 2014-11-13289

Amazon ECS AWS Fargate 用ユーザーガイド例

{ "major": 202, "minor": 26368, "op": "Total", "value": 3452928 } ], "io_serviced_recursive": [ { "major": 202, "minor": 26368, "op": "Read", "value": 118 }, { "major": 202, "minor": 26368, "op": "Write", "value": 0 }, { "major": 202, "minor": 26368, "op": "Sync", "value": 118 }, { "major": 202, "minor": 26368, "op": "Async", "value": 0 }, { "major": 202, "minor": 26368, "op": "Total", "value": 118 } ], "io_queue_recursive": [ ], "io_service_time_recursive": [ ], "io_wait_time_recursive": [ ], "io_merged_recursive": [ ], "io_time_recursive": [ ], "sectors_recursive": [ ] }, "num_procs": 0, "storage_stats": { }, "cpu_stats": { "cpu_usage": { "total_usage": 410557100, "percpu_usage": [

API バージョン 2014-11-13290

Amazon ECS AWS Fargate 用ユーザーガイド例

410557100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "usage_in_kernelmode": 10000000, "usage_in_usermode": 250000000 }, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "precpu_stats": { "cpu_usage": { "total_usage": 0, "usage_in_kernelmode": 0, "usage_in_usermode": 0 }, "throttling_data": { "periods": 0, "throttled_periods": 0, "throttled_time": 0 } }, "memory_stats": { "usage": 4390912, "max_usage": 6488064, "stats": { "active_anon": 278528, "active_file": 344064, "cache": 3452928, "dirty": 0, "hierarchical_memory_limit": 536870912, "hierarchical_memsw_limit": 9223372036854772000, "inactive_anon": 0, "inactive_file": 3108864, "mapped_file": 2412544, "pgfault": 2800, "pgmajfault": 28, "pgpgin": 3144, "pgpgout": 2233, "rss": 278528, "rss_huge": 0, "total_active_anon": 278528, "total_active_file": 344064, "total_cache": 3452928, "total_dirty": 0, "total_inactive_anon": 0, "total_inactive_file": 3108864, "total_mapped_file": 2412544, "total_pgfault": 2800, "total_pgmajfault": 28, "total_pgpgin": 3144,

API バージョン 2014-11-13291

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータエンドポイントバージョン 3

"total_pgpgout": 2233, "total_rss": 278528, "total_rss_huge": 0, "total_unevictable": 0, "total_writeback": 0, "unevictable": 0, "writeback": 0 }, "limit": 9223372036854772000 }, "name": "query-metadata", "id": "1823e1f6-7248-43c3-bed6-eea1fa7501a5query-metadata", "networks": { "eth1": { "rx_bytes": 564655295, "rx_packets": 384960, "rx_errors": 0, "rx_dropped": 0, "tx_bytes": 3043269, "tx_packets": 54355, "tx_errors": 0, "tx_dropped": 0 } } }}

タスクメタデータエンドポイントバージョン 3Fargate プラットフォームバージョン 1.1.0 以降、ECS_CONTAINER_METADATA_URI という環境変数がタスク内の各コンテナに挿入されます。タスクメタデータバージョン 3 エンドポイントに対してクエリを実行すると、さまざまなタスクメタデータおよび Docker 統計 をタスクで利用できます。

タスクメタデータの有効化タスクメタデータエンドポイント機能は、デフォルトで、プラットフォームのバージョン v 1.1.0 以降でFargate 起動タイプを使用するタスクで利用可能です。詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

タスクメタデータエンドポイントのパス次の API エンドポイントをコンテナで使用できます。

169.254.170.2/v2/metadata

このエンドポイントはタスクのメタデータ JSON を返します。これには、タスクに関連付けられたすべてのコンテナのコンテナ ID および名前のリストが含まれています。このエンドポイントのレスポンスの詳細については、「タスクメタデータ JSON レスポンス (p. 293)」を参照してください。

169.254.170.2/v2/metadata/<container-id>

このエンドポイントは指定された Docker コンテナ ID のメタデータ JSON を返します。169.254.170.2/v2/stats

このエンドポイントはタスクに関連付けられたすべてのコンテナの Docker 統計 JSON を返します。返される各統計の詳細については、Docker API ドキュメントの「ContainerStats」を参照してください。

API バージョン 2014-11-13292

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータ JSON レスポンス

169.254.170.2/v2/stats/<container-id>

このエンドポイントは指定された Docker コンテナ ID の Docker 統計 JSON を返します。返される各統計の詳細については、Docker API ドキュメントの「ContainerStats」を参照してください。

タスクメタデータ JSON レスポンス次の情報が、タスクメタデータエンドポイント (169.254.170.2/v2/metadata) JSON レスポンスから返されます。

Cluster

コンテナが属している Amazon ECS クラスターの完全な Amazon リソースネーム (ARN)。TaskARN

コンテナが属しているタスクの完全な Amazon リソースネーム (ARN)。Family

タスクの Amazon ECS タスク定義のファミリー。Revision

タスクの Amazon ECS タスク定義のリビジョン。DesiredStatus

Amazon ECS からのタスクの目的のステータス。KnownStatus

Amazon ECS からのタスクの既知のステータス。Limits

タスクレベルで指定されたリソースの制限 (CPU やメモリなど)。リソースの制限が定義されていない場合はこのパラメータは省略されます。

PullStartedAt

最初のコンテナイメージのプル開始時のタイムスタンプ。PullStoppedAt

最後のコンテナイメージのプル終了時のタイムスタンプ。AvailabilityZone

タスクがあるアベイラビリティーゾーン。

Note

アベイラビリティーゾーンのメタデータは、プラットフォームバージョン 1.4 以降を使用する Fargate タスクでのみ使用できます。

Containers

タスクに関連付けられている各コンテナのコンテナメタデータのリスト。DockerId

コンテナの Docker ID。Name

タスク定義で指定されたコンテナの名前。

API バージョン 2014-11-13293

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータ JSON レスポンス

DockerName

Docker に提供されたコンテナの名前。Amazon ECS コンテナエージェントはコンテナに一意の名前を生成し、同じタスク定義の複数のコピーが単一のインスタンスで実行されている場合に競合を回避します。

Image

コンテナのイメージ。ImageID

イメージの SHA-256 ダイジェスト。Ports

コンテナに対して公開されている任意のポート。公開ポートがない場合はこのパラメータは省略されます。

Labels

コンテナに適用された任意のラベル。ラベルが適用されていない場合はこのパラメータは省略されます。

DesiredStatus

Amazon ECS からのコンテナの目的のステータス。KnownStatus

Amazon ECS からのコンテナの既知のステータス。ExitCode

コンテナの終了コード。このパラメータは、コンテナが終了していない場合は省略されます。Limits

コンテナレベルで指定されたリソースの制限 (CPU やメモリなど)。リソースの制限が定義されていない場合はこのパラメータは省略されます。

CreatedAt

コンテナ作成時のタイムスタンプ。このパラメータは、コンテナがまだ作成されていない場合は省略されます。

StartedAt

コンテナ起動時のタイムスタンプ。このパラメータは、コンテナがまだ起動していない場合は省略されます。

FinishedAt

コンテナ停止時のタイムスタンプ。このパラメータは、コンテナがまだ停止していない場合は省略されます。

Type

コンテナのタイプ。タスク定義で指定されているコンテナのタイプは NORMAL です。他のコンテナタイプは無視してかまいません。これらは コンテナエージェントによってプロビジョニングされた内部タスクリソースで使用されます。

Networks

ネットワークモードや IP アドレスなど、コンテナのネットワーク情報。ネットワーク情報が定義されていない場合はこのパラメータは省略されます。

ExecutionStoppedAt

タスクの DesiredStatus が STOPPED に移行した時のタイムスタンプ。これは、必須コンテナがSTOPPED に移行したときに発生します。

API バージョン 2014-11-13294

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータレスポンスの例

タスクメタデータレスポンスの例1 つのコンテナタスクの JSON レスポンスを次に示します。

{ "Cluster": "default", "TaskARN": "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3", "Family": "nginx", "Revision": "5", "DesiredStatus": "RUNNING", "KnownStatus": "RUNNING", "Containers": [ { "DockerId": "731a0d6a3b4210e2448339bc7015aaa79bfe4fa256384f4102db86ef94cbbc4c", "Name": "~internal~ecs~pause", "DockerName": "ecs-nginx-5-internalecspause-acc699c0cbf2d6d11700", "Image": "amazon/amazon-ecs-pause:0.1.0", "ImageID": "", "Labels": { "com.amazonaws.ecs.cluster": "default", "com.amazonaws.ecs.container-name": "~internal~ecs~pause", "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3", "com.amazonaws.ecs.task-definition-family": "nginx", "com.amazonaws.ecs.task-definition-version": "5" }, "DesiredStatus": "RESOURCES_PROVISIONED", "KnownStatus": "RESOURCES_PROVISIONED", "Limits": { "CPU": 0, "Memory": 0 }, "CreatedAt": "2018-02-01T20:55:08.366329616Z", "StartedAt": "2018-02-01T20:55:09.058354915Z", "Type": "CNI_PAUSE", "Networks": [ { "NetworkMode": "awsvpc", "IPv4Addresses": [ "10.0.2.106" ] } ] }, { "DockerId": "43481a6ce4842eec8fe72fc28500c6b52edcc0917f105b83379f88cac1ff3946", "Name": "nginx-curl", "DockerName": "ecs-nginx-5-nginx-curl-ccccb9f49db0dfe0d901", "Image": "nrdlngr/nginx-curl", "ImageID": "sha256:2e00ae64383cfc865ba0a2ba37f61b50a120d2d9378559dcd458dc0de47bc165", "Labels": { "com.amazonaws.ecs.cluster": "default", "com.amazonaws.ecs.container-name": "nginx-curl", "com.amazonaws.ecs.task-arn": "arn:aws:ecs:us-east-2:012345678910:task/9781c248-0edd-4cdb-9a93-f63cb662a5d3", "com.amazonaws.ecs.task-definition-family": "nginx", "com.amazonaws.ecs.task-definition-version": "5" }, "DesiredStatus": "RUNNING", "KnownStatus": "RUNNING", "Limits": { "CPU": 512, "Memory": 512

API バージョン 2014-11-13295

Amazon ECS AWS Fargate 用ユーザーガイドタスクメタデータレスポンスの例

}, "CreatedAt": "2018-02-01T20:55:10.554941919Z", "StartedAt": "2018-02-01T20:55:11.064236631Z", "Type": "NORMAL", "Networks": [ { "NetworkMode": "awsvpc", "IPv4Addresses": [ "10.0.2.106" ] } ] } ], "PullStartedAt": "2018-02-01T20:55:09.372495529Z", "PullStoppedAt": "2018-02-01T20:55:10.552018345Z", "AvailabilityZone": "us-east-2b"}

API バージョン 2014-11-13296

Amazon ECS AWS Fargate 用ユーザーガイド

Amazon ECS サービスクォータ次の表は、AWS アカウントの Amazon ECS の変更可能なデフォルトサービスクォータ (制限とも呼ばれます) を示しています。Elastic Load Balancing や Auto Scaling などの、Amazon ECS を使用できる、その他の AWS のサービス制限の詳細については、アマゾン ウェブ サービス全般のリファレンス の「AWSサービス制限」を参照してください。

クォータの増加をリクエストするには、サービスクォータ ユーザーガイドの「クォータ増加のリクエスト」を参照してください。

サービスクォータ 説明 デフォルトのクォータ値

アカウントあたりのクラスター数

アカウントあたりのクラスターの最大数 (リージョン単位)。

10,000

クラスターあたりのサービスの数

クラスターあたりのサービスの最大数。

1,000

アカウント別のリージョンあたりの Fargate 起動タイプを使用するタスクの数

リージョンあたりの Fargate 起動タイプを使用するタスクの最大数この制限は、スタンドアロンタスクと、サービスの一部として起動されるタスクの両方に適用されます。

100

リージョンごと、アカウントごとの Fargate Spot タスク

リージョンごとの Fargate Spotタスクの最大数。

250

Fargate 起動タイプを使用するタスクのパブリック IP アドレスの数

Fargate 起動タイプを使用するタスクによって使用されるパブリック IP アドレスの最大数(リージョン単位)。

100

次の表に、変更できない他の Amazon ECS の制限を示します。Note

Fargate タスクストレージのクォータは、タスクで使用するプラットフォームのバージョンによって異なります。詳細については、「タスクでのデータボリュームの使用 (p. 67)」を参照してください。

サービスクォータ 説明 デフォルトのクォータ値

サービスあたりの Classic LoadBalancer の数

サービスあたりの Classic LoadBalancerの最大数。

1

run-task あたりの起動されたタスクの数 (count)

RunTask API アクションあたりの起動できるタスクの最大数。

10

タスク定義ファミリーあたりのリビジョンの数

タスク定義ファミリーあたりのリビジョンの最大数タスク定義リビジョンを登録解除しても、この制限から除外することはできません。

1,000,000

API バージョン 2014-11-13297

Amazon ECS AWS Fargate 用ユーザーガイドサービスクォータ を使用する

サービスクォータ 説明 デフォルトのクォータ値

タスク定義サイズの制限 タスク定義の最大サイズ (KiB 単位)

32

タスク定義の最大コンテナ タスク定義内のコンテナ定義の最大数

10

awsvpcConfiguration で指定されるサブネットの数

awsvpcConfiguration 内で指定されるサブネットの最大数

16

awsvpcConfiguration で指定されるセキュリティグループの数

awsvpcConfiguration 内で指定されるセキュリティグループの最大数

5

リソースあたりのタグ リソースあたりのタグの最大数これは、タスク、サービス、タスク定義、クラスター、コンテナインスタンスに適用されます。

50

サービスクォータ を使用するAmazon Elastic Container Service (Amazon ECS) は、クォータを一元的な場所から表示および管理できるAWS のサービスである サービスクォータ と統合されています。サービスクォータは、制限とも呼ばれます。詳細については、サービスクォータ ユーザーガイドの「What Is Service Quotas?」を参照してください。

サービスクォータ を使用すると、すべての Amazon ECS サービスクォータの値を簡単に検索できます。

Amazon ECS サービスクォータを表示するには (AWS マネジメントコンソール)

1. サービスクォータ コンソール (https://console.aws.amazon.com/servicequotas/) を開きます。2. ナビゲーションペインで、[AWS サービス] を選択します。3. [AWS サービス] リストから、[Amazon Elastic Container Service (Amazon ECS)] を検索して選択しま

す。

[Service quotas (サービスクォータ)] の一覧には、サービスクォータ名、適用された値 (使用可能な場合)、AWS デフォルトのクォータ、クォータ値が調整可能かどうかが表示されます。

4. 説明など、サービスクォータに関する追加情報を表示するには、クォータ名を選択します。

クォータの増加をリクエストするには、サービスクォータ ユーザーガイドの「クォータ増加のリクエスト」を参照してください。

API バージョン 2014-11-13298

Amazon ECS AWS Fargate 用ユーザーガイド

Savings Plans、および AWS FargateSavings Plans は、AWS の使用料金を大幅に削減できる料金モデルです。この料金モデルでは、AWSFargate の使用料金を最も低く抑えることができます。 1〜3 年の期間、1 時間 につき USD 単位で一定の使用量を守ることにより、その使用に対する料金が低くなります。詳細については、Savings Plans ユーザーガイドを参照してください。

使用タイプごとに、オンデマンド料金と Savings Plans 料金があります。たとえば、コンピューティングの使用について 1 時間あたり 10 USD をコミットした場合、すべての使用に対する Savings Plans の料金は最大 10 USD になります。コミット額を超えた使用については、オンデマンド料金で課金されます。

Savings Plans は、1 年または 3 年の期間でご利用いただけます。[All Upfront (全前払い)]、[一部前払い]、[前払いなし] のいずれかを選択できます。

次の Savings Plans タイプが Fargate で利用できます。Amazon EC2 と Fargate の使用に関する SavingsPlans の完全なリストについては、Amazon Elastic Container Service Developer Guideの「Savings Plansおよび Amazon ECS」を参照してください。

• [Compute Savings Plans] は、最大限の柔軟性を実現し、最大 66% の割引を提供します。これらのプランは、Fargate の使用に自動的に適用されます。Amazon ECS タスクは、いつでも Amazon EC2 の使用から Fargate に移動でき、Compute Savings Plan で提供される割引料金を継続して受けることができます。

使用を開始するには、Savings Plansユーザーガイドの「Savings Plans の使用開始」を参照してください。

API バージョン 2014-11-13299

Amazon ECS AWS Fargate 用ユーザーガイドシナリオ

AWS App Meshこのトピックは、 で実行されている実際のサービスで AWS App Mesh を使用する場合に役立ちます。

シナリオApp Mesh で使用する方法を説明するために、次の特性を持つアプリケーションがあると仮定します。

• serviceA と serviceB という名前の 2 つのサービスを含めます。• どちらのサービスも、apps.local という名前の名前空間に登録されます。• ServiceA は、HTTP/2、ポート 80 を介して serviceB と通信します。• すでに serviceB のバージョン 2 をデプロイし、apps.local 名前空間に serviceBv2 という名前で

登録しました。

次の要件があります。

• トラフィックの 100% を serviceA から送信する前に、serviceBv2 にバグがないことを確認するため、トラフィックの 75% を serviceA から serviceB へ、25% を serviceBv2 へ送信する。

• トラフィックの重み付けを簡単に調整して、信頼性が証明されたら、トラフィックの 100% がserviceBv2 へ転送されるようにする。すべてのトラフィックが serviceBv2 に送信されたら、serviceB を非推奨にする。

• 上記の要件を満たすために、実際のサービスの既存のアプリケーションコードまたはサービス検出登録を変更する必要はありません。

要件を満たすために、仮想サービス、仮想ノード、仮想ルーター、およびルートを含む App Mesh サービスメッシュを作成することにしました。メッシュを実装した後、サービスのを更新し、Envoy プロキシを使用します。更新されると、サービスは相互に直接ではなく、Envoy プロキシを介して相互に通信します。

前提条件App Mesh は、DNS、AWS Cloud Map、またはその両方に登録された Linux サービスをサポートします。この入門ガイドを使用するには、DNS に登録されている既存のサービスが 3 つあることをお勧めします。サービスが存在しない場合でもサービスメッシュとそのリソースを作成できますが、実際のサービスをデプロイするまでメッシュを使用することはできません。

残りの手順では、実際のサービスが serviceA、serviceB、serviceBv2 という名前で、すべてのサービスが apps.local という名前の名前空間を通じて検出可能であることを前提としています。

ステップ 1: メッシュと仮想サービスを作成するサービスメッシュは、サービス間のネットワークトラフィックの論理的な境界であり、サービスはその中に存在します。詳細については、「サービスメッシュ) を参照してください。仮想サービスは、実際のサービスを抽象化したものです。詳細については、「仮想サービス) を参照してください。

API バージョン 2014-11-13300

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: 仮想ノードの作成

次のリソースを作成します。

• シナリオ内のすべてのサービスが apps.local 名前空間に登録されているため、apps という名前のメッシュ。

• serviceb.apps.local という名前の仮想サービス。仮想サービスは、その名前で検出可能なサービスを表しており、別の名前を参照するようにコードを変更したくないためです。servicea.apps.local という名前の仮想サービスが、後の手順で追加されます。

AWS マネジメントコンソール または AWS CLI バージョン 1.18.16 以降を使用して、次の手順を完了できます。AWS CLI を使用している場合は、aws --version コマンドを使用して、インストールされているAWS CLI のバージョンを確認します。バージョン 1.18.16 以降をインストールしていない場合は、AWSCLI をインストールまたは更新する必要があります。使用するツールのタブを選択します。

AWS マネジメントコンソール

1. https://console.aws.amazon.com/appmesh/get-startedで、App Mesh コンソールの初回実行ウィザードを開きます。

2. [メッシュ名] に「apps」と入力します。3. [仮想サービス名] に「serviceb.apps.local」と入力します。4. 続行するには、[Next] を選択します。

AWS CLI

1. create-mesh コマンドを使用してメッシュを作成します。

aws appmesh create-mesh --mesh-name apps

2. create-virtual-service コマンドを使用して仮想サービスを作成します。

aws appmesh create-virtual-service --mesh-name apps --virtual-service-name serviceb.apps.local --spec {}

ステップ 2: 仮想ノードの作成仮想ノードは、実際のサービスの論理ポインタとして機能します。詳細については、「仮想ノード) を参照してください。

仮想ノードの 1 つが serviceB という名前の実際のサービスを表すため、serviceB という名前の仮想ノードを作成します。仮想ノードが表す実際のサービスは、serviceb.apps.local というホスト名を使用して DNS から検出可能です。または、AWS Cloud Map を使用して実際のサービスを検出することもできます。仮想ノードは、ポート 80 で HTTP/2 プロトコルを使用してトラフィックをリッスンします。ヘルスチェックと同様に、その他のプロトコルもサポートされます。serviceA および serviceBv2 の仮想ノードは、後のステップで作成します。

AWS マネジメントコンソール

1. [仮想ノード名] に「serviceB」と入力します。2. [サービス検出方法] で [DNS] を選択し、[DNS ホスト名] に「serviceb.apps.local」と入力し

ます。3. [リスナー] で、[ポート] に「80」に入力し、[プロトコル] で [http2] を選択します。4. 続行するには、[Next] を選択します。

API バージョン 2014-11-13301

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: 仮想ルーターとルートを作成する

AWS CLI

1. 次の内容で、create-virtual-node-serviceb.json というファイルを作成します。

{ "meshName": "apps", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http2" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceB.apps.local" } } }, "virtualNodeName": "serviceB"}

2. JSON ファイルを入力として使用して、create-virtual-node コマンドで仮想ノードを作成します。

aws appmesh create-virtual-node --cli-input-json file://create-virtual-node-serviceb.json

ステップ 3: 仮想ルーターとルートを作成する仮想ルーターは、メッシュ内の 1 つ以上の仮想サービスのトラフィックをルーティングします。詳細については、 の「仮想ルーター」および「ルート」を参照してください。

次のリソースを作成します。

• serviceB という仮想ルーター。serviceB.apps.local 仮想サービスは、他のサービスとのアウトバウンド通信を開始しないためです。前に作成した仮想サービスは、実際の serviceb.apps.localサービスの抽象化であることに注意してください。仮想サービスは、仮想ルーターにトラフィックを送信します。仮想ルーターは、ポート 80 で HTTP/2 プロトコルを使用してトラフィックをリッスンします。その他のプロトコルもサポートされています。

• serviceB という名前のルート。このルートはトラフィックの 100% を serviceB 仮想ノードにルーティングします。serviceBv2 仮想ノードを追加したら、後の手順で重みを変更します。このガイドでは説明しませんが、ルートにフィルタ条件を追加したり、通信の問題が発生したときに Envoy プロキシが仮想ノードへのトラフィックの送信を複数回試行する再試行ポリシーを追加したりできます。

AWS マネジメントコンソール

1. [仮想ルーター名] に「serviceB」と入力します。2. [リスナー] で、[ポート] に [80] を指定し、[プロトコル] に[http2] を選択します。3. [ルート名] に「serviceB」と入力します。4. [ルートタイプ] で、[http2] を選択します。5. [仮想ノード名] で [serviceB] を選択し、[重み] に「100」と入力します。6. 続行するには、[Next] を選択します。

API バージョン 2014-11-13302

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: 確認と作成

AWS CLI

1. 仮想ルーターを作成します。

a. 次の内容で、create-virtual-router.json というファイルを作成します。

{ "meshName": "apps", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http2" } } ] }, "virtualRouterName": "serviceB"}

b. JSON ファイルを入力として使用し、create-virtual-router コマンドで仮想ルーターを作成します。

aws appmesh create-virtual-router --cli-input-json file://create-virtual-router.json

2. ルートを作成します。

a. 次の内容で、create-route.json というファイルを作成します。

{ "meshName" : "apps", "routeName" : "serviceB", "spec" : { "httpRoute" : { "action" : { "weightedTargets" : [ { "virtualNode" : "serviceB", "weight" : 100 } ] }, "match" : { "prefix" : "/" } } }, "virtualRouterName" : "serviceB"}

b. JSON ファイルを入力として使用し、create-route コマンドを使用でルートを作成します。

aws appmesh create-route --cli-input-json file://create-route.json

ステップ 4: 確認と作成前の手順と照らし合わせて設定を確認します。

API バージョン 2014-11-13303

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: 追加のリソースを作成する

AWS マネジメントコンソール

いずれかのセクションに変更を加える必要がある場合は、[Edit] を選択します。設定が適切であることを確認したら、[Create mesh service] を選択します。

AWS CLI

describe-mesh コマンドで作成したメッシュの設定を確認します。

aws appmesh describe-mesh --mesh-name apps

describe-virtual-service コマンドで作成した仮想サービスの設定を確認します。

aws appmesh describe-virtual-service --mesh-name apps --virtual-service-name serviceb.apps.local

describe-virtual-node コマンドで作成した仮想ノードの設定を確認します。

aws appmesh describe-virtual-node --mesh-name apps --virtual-node-name serviceB

describe-virtual-router コマンドで作成した仮想ルーターの設定を確認します。

aws appmesh describe-virtual-router --mesh-name apps --virtual-router-name serviceB

describe-route コマンドで作成したルートの設定を確認します。

aws appmesh describe-route --mesh-name apps \ --virtual-router-name serviceB --route-name serviceB

ステップ 5: 追加のリソースを作成するこのシナリオを完了するには、次のことを行う必要があります。

• serviceBv2 という名前の仮想ノードと、serviceA という名前の別の仮想ノードを作成します。両方の仮想ノードは、HTTP/2 ポート 80 経由でリクエストをリッスンします。serviceA 仮想ノードの場合は、serviceb.apps.local のバックエンドを設定します。serviceA 仮想ノードからのすべてのアウトバウンドトラフィックが、serviceb.apps.local という名前の仮想サービスに送信されるためです。このガイドでは説明しませんが、仮想ノードのアクセスログを書き込むファイルパスを指定することもできます。

• servicea.apps.local という名前の追加の仮想サービスを 1 つ作成します。これにより、すべてのトラフィックが serviceA 仮想ノードに直接送信されます。

• 前の手順で作成した serviceB ルートを更新して、トラフィックの 75% を serviceB 仮想ノードに送信し、25% を serviceBv2 仮想ノードに送信します。時間の経過とともに、serviceBv2 が 100%のトラフィックを受信するまで、継続して重みを変更することができます。すべてのトラフィックがserviceBv2 に送信されたら、serviceB 仮想ノードと実際のサービスを非推奨にできます。重みを変更しても、serviceb.apps.local 仮想サービス名および実際のサービス名は変更されないため、コードを変更する必要はありません。serviceb.apps.local 仮想サービスは仮想ルーターにトラフィックを送信し、仮想ルーターはトラフィックを仮想ノードにルーティングすることに注意してください。仮想ノードのサービス検出名は、いつでも変更できます。

AWS マネジメントコンソール

1. 左のナビゲーションペインで [メッシュ] を選択します。

API バージョン 2014-11-13304

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: 追加のリソースを作成する

2. 前の手順で作成した apps メッシュを選択します。3. 左側のナビゲーションペインで、[仮想ノード] を選択します。4. Create virtual node を選択します。5. [仮想ノード名] に「serviceBv2」と入力し、[Service discovery method (サービス検出方法)] で

[DNS] を選択して、[DNS ホスト名] に「servicebv2.apps.local」と入力します。6. [リスナー] で、[ポート] に「80」と入力し、[プロトコル] で [http2] を選択します。7. Create virtual node を選択します。8. もう一度 [Create virtual node] を選択し、[仮想ノード名] に「serviceA」と入力します。

[Service discovery method (サービス検出方法)] で [DNS] を選択し、[DNS ホスト名] に「servicea.apps.local」と入力します。

9. [Additional configuration (追加設定)] を展開します。10. 選択 Add backend.serviceb.apps.local と入力します。11. [ポート] に「80」を入力し、[プロトコル] で [http2] を選択して、[Create virtual node] を選択し

ます。12. 左側のナビゲーションペインで [仮想ルーター] を選択し、リストから [serviceB] 仮想ルーター

を選択します。13. [ルート] で、前のステップで作成した ServiceB という名前のルートを選択し、[Edit] を選択し

ます。14. [仮想ノード名] で、[serviceB] の [重み] の値を [75] に変更します。15. [Add target] を選択し、ドロップダウンリストから [serviceBv2] を選択して、[重み] の値を [25]

に設定します。16. Save を選択します。17. 左側のナビゲーションペインで、[仮想サービス] を選択し、[Create virtual service] を選択しま

す。18. [仮想サービス名] に「servicea.apps.local」と入力し、[プロバイダー] で [Virtual node]

を選択します。次に、[仮想ノード] で [serviceA] を選択し、[Create virtual service.] を選択します。

AWS CLI

1. serviceBv2 仮想ノードを作成します。

a. 次の内容で、create-virtual-node-servicebv2.json というファイルを作成します。

{ "meshName": "apps", "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http2" } } ], "serviceDiscovery": { "dns": { "hostname": "serviceBv2.apps.local" } } }, "virtualNodeName": "serviceBv2"}

b. 仮想ノードを作成します。

API バージョン 2014-11-13305

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: 追加のリソースを作成する

aws appmesh create-virtual-node --cli-input-json file://create-virtual-node-servicebv2.json

2. serviceA 仮想ノードを作成します。

a. 次の内容で、create-virtual-node-servicea.json というファイルを作成します。

{ "meshName" : "apps", "spec" : { "backends" : [ { "virtualService" : { "virtualServiceName" : "serviceb.apps.local" } } ], "listeners" : [ { "portMapping" : { "port" : 80, "protocol" : "http2" } } ], "serviceDiscovery" : { "dns" : { "hostname" : "servicea.apps.local" } } }, "virtualNodeName" : "serviceA"}

b. 仮想ノードを作成します。

aws appmesh create-virtual-node --cli-input-json file://create-virtual-node-servicea.json

3. 前の手順で作成した serviceb.apps.local 仮想サービスを更新して、そのトラフィックをserviceB 仮想ルーターに送信します。仮想サービスが最初に作成された時点では、serviceB仮想ルーターがまだ作成されていないため、トラフィックはどこにも送信されませんでした。

a. 次の内容で、update-virtual-service.json というファイルを作成します。

{ "meshName" : "apps", "spec" : { "provider" : { "virtualRouter" : { "virtualRouterName" : "serviceB" } } }, "virtualServiceName" : "serviceb.apps.local"}

b. update-virtual-service コマンドを使用して、仮想サービスを更新します。

API バージョン 2014-11-13306

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: 追加のリソースを作成する

aws appmesh update-virtual-service --cli-input-json file://update-virtual-service.json

4. 前のステップで作成した serviceB ルートを更新します。

a. 次の内容で、update-route.json というファイルを作成します。

{ "meshName" : "apps", "routeName" : "serviceB", "spec" : { "http2Route" : { "action" : { "weightedTargets" : [ { "virtualNode" : "serviceB", "weight" : 75 }, { "virtualNode" : "serviceBv2", "weight" : 25 } ] }, "match" : { "prefix" : "/" } } }, "virtualRouterName" : "serviceB"}

b. update-route コマンドを使用してルートを更新します。

aws appmesh update-route --cli-input-json file://update-route.json

5. serviceA 仮想サービスを作成します。

a. 次の内容で、create-virtual-servicea.json というファイルを作成します。

{ "meshName" : "apps", "spec" : { "provider" : { "virtualNode" : { "virtualNodeName" : "serviceA" } } }, "virtualServiceName" : "servicea.apps.local"}

b. 仮想サービスを作成します。

aws appmesh create-virtual-service --cli-input-json file://create-virtual-servicea.json

メッシュの概要

API バージョン 2014-11-13307

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: サービスを更新する

サービスメッシュを作成する前に、servicea.apps.local、serviceb.apps.local、およびservicebv2.apps.local という 3 つの実際のサービスがありました。実際のサービスに加えて、実際のサービスを表す次のリソースを含むサービスメッシュが作成されました。

• 2 つの仮想サービス。プロキシは、仮想ルーターを経由して、servicea.apps.local 仮想サービスからのすべてのトラフィックを serviceb.apps.local 仮想サービスに送信します。

• serviceA、serviceB、および serviceBv2 という 3 つの仮想ノード。Envoy プロキシは、仮想ノードに対して設定されたサービス検出情報を使用して、実際のサービスの IP アドレスを検索します。

• Envoy プロキシがインバウンドトラフィックの 75% を serviceB 仮想ノードに、25% を serviceBv2仮想ノードにルーティングするように指定する 1 つのルートを持つ仮想ルーター。

ステップ 6: サービスを更新するメッシュを作成したら、次のタスクを完了する必要があります。

• 各 でデプロイする Envoy プロキシが、1 つ以上の仮想ノードの設定を読み取ることを許可します。プロキシの認証方法の詳細については、「プロキシの認証」を参照してください。

• 既存の各 を更新して、Envoy プロキシを使用します。

API バージョン 2014-11-13308

Amazon ECS AWS Fargate 用ユーザーガイドチュートリアル: VPC の作成

Amazon ECS のチュートリアル以下のチュートリアルでは、Amazon ECS の使用時に一般的なタスクを実行する方法を示します。

トピック• チュートリアル: クラスターのパブリックサブネットとプライベートサブネットを持つ VPC を作成す

る (p. 309)• チュートリアル: AWS CLI を使用して Fargate タスクのクラスターを作成する (p. 311)• チュートリアル: Secrets Manager シークレットを使用した機密データの指定 (p. 316)• チュートリアル: サービス検出 を使用したサービスの作成 (p. 322)• チュートリアル: Blue/Green デプロイを使用するサービスの作成 (p. 331)• チュートリアル: CodePipeline を使用した継続的なデプロイ (p. 340)• チュートリアル: Amazon ECS CloudWatch イベント のリッスン (p. 345)• チュートリアル: タスク停止時のイベントに関する Amazon Simple Notification Service アラートを送

信する (p. 346)

チュートリアル: クラスターのパブリックサブネットとプライベートサブネットを持つ VPC を作成する

クラスターのコンテナインスタンスは、Amazon ECS サービスエンドポイントとの通信に外部ネットワークアクセスを必要とします。ただし、プライベートサブネットで実行するタスクとサービスがある場合があります。パブリックサブネットとプライベートサブネットの両方がある VPC を作成すると、パブリックサブネットまたはプライベートサブネットでタスクやサービスを起動する柔軟性が得られます。プライベートサブネット内のタスクとサービスは、NAT ゲートウェイ経由でインターネットにアクセスできます。パブリックサブネットとプライベートサブネットの両方のサービスは、ロードバランサーを使用して、パブリックインターネットから引き続きアクセス可能にできます。

このチュートリアルでは、2 つのパブリックサブネットと 2 つのプライベートサブネットを持つ VPC の作成を案内します。この VPC では、NAT ゲートウェイを介したインターネットアクセスが可能です。

ステップ 1: NAT ゲートウェイの Elastic IP アドレスを選択するNAT ゲートウェイでは、パブリックサブネットで Elastic IP アドレスが必要になりますが、VPC ウィザードによって自動的には作成されません。VPC ウィザードを実行する前に Elastic IP アドレスを作成します。

Elastic IP アドレスを作成するには

1. Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。2. 左のナビゲーションペインで [Elastic IP] を選択します。3. [新しいアドレスの割り当て]、[割り当て]、[閉じる] の順に選択します。

API バージョン 2014-11-13309

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: VPC ウィザードを実行する

4. 新しく作成した Elastic IP アドレスの [割り当て ID] を書き留めます。これは後で VPC ウィザードで入力します。

ステップ 2: VPC ウィザードを実行するVPC ウィザードにより、ほとんどの VPC リソースが自動的に作成および設定されます。

VPC ウィザードを実行するには

1. 左のナビゲーションペインの [VPC ダッシュボード] を選択します。2. [VPC ウィザードの開始]、[パブリックとプライベートサブネットを持つ VPC]、[Select (選択)] の順に

選択します。3. [VPC 名] に、VPC の一意の名前を入力します。4. [Elastic IP 割り当て ID] で、前に作成した Elastic IP アドレス の ID を選択します。5. [Create VPC] を選択します。6. ウィザードが終了したら、[OK] を選択します。VPC サブネットが作成されたアベイラビリティーゾー

ンを書き留めます。追加のサブネットは別のアベイラビリティーゾーンに作成します。

VPC ウィザードによって作成されたサブネットなど、デフォルト以外のサブネットは、自動割り当てされたパブリック IPv4 アドレスではありません。Amazon ECS サービスエンドポイントと通信するには、パブリックサブネットで起動されたインスタンスにパブリック IPv4 アドレスを割り当てる必要があります。

サブネットのパブリック IPv4 のアドレス指定動作を変更するには

1. 左側のナビゲーションペインで [サブネット] を選択します。2. VPC のパブリックサブネットを選択します。デフォルトでは、VPC ウィザードによって作成される

名前は [パブリックサブネット] です。3. [Actions (アクション)]、[自動割り当て IP 設定の変更] の順に選択します。4. [パブリック IPv4 アドレスの自動割り当てを有効にする] チェックボックスをオンにし、[Save (保存)]

を選択します。

ステップ 3: 追加のサブネットを作成するウィザードでは、1 つのパブリックサブネットと 1 つのプライベートサブネットを持つ VPC が 1 つのアベイラビリティーゾーンに作成されます。可用性を高めるため、別のアベイラビリティーゾーンに各サブネットタイプを少なくとも 1 つ作成し、VPC が 2 つのアベイラビリティーゾーンにまたがってパブリックサブネットとプライベートサブネットの両方を持つようにします。

追加のプライベートサブネットを作成するには

1. 左側のナビゲーションペインで [サブネット] を選択します。2. [Create Subnet] を選択します。3. [名前タグ] にサブネットの名前を入力します (Private subnet など)。4. [VPC] で、前の手順で作成した VPC を選択します。5. [アベイラビリティーゾーン] で、VPC の元のサブネットとは異なるアベイラビリティーゾーンを選択

します。6. [IPv4 CIDR ブロック] に、有効な CIDR ブロックを入力します。たとえば、ウィザードではデフォル

トで 10.0.0.0/24 や 10.0.1.0/24 に CIDR ブロックが作成される場合、2 つ目のプライベートサブネットに 10.0.3.0/24 を使用できます。

7. [Yes, Create] を選択します。

API バージョン 2014-11-13310

Amazon ECS AWS Fargate 用ユーザーガイド次のステップ

追加のパブリックサブネットを作成するには

1. 左のナビゲーションペインで [サブネット]、[サブネットの作成] の順に選択します。2. [名前タグ] にサブネットの名前を入力します (Public subnet など)。3. [VPC] で、前の手順で作成した VPC を選択します。4. [アベイラビリティーゾーン] で、前の手順で作成した同じアベイラビリティーゾーンを、追加のプラ

イベートサブネットとして選択します。5. [IPv4 CIDR ブロック] に、有効な CIDR ブロックを入力します。たとえば、ウィザードではデフォル

トで 10.0.0.0/24 や 10.0.1.0/24 に CIDR ブロックが作成される場合、2 つ目のパブリックサブネットに 10.0.2.0/24 を使用できます。

6. [Yes, Create] を選択します。7. 先ほど作成したパブリックサブネットを選択し、[ルートテーブル]、[編集] の順に選択します。8. デフォルトでは、プライベートルートテーブルが選択されます。他の使用可能なルートテーブルを選

択し、送信先 0.0.0.0/0 がインターネットゲートウェイ (igw-xxxxxxxx) にルーティングされるようにして、[保存] を選択します。

9. 2 つ目のパブリックサブネットを選択したままにし、[Subnet Actions]、[Modify auto-assign IPsettings] の順に選択します。

10. [パブリック IPv4 アドレスの自動割り当てを有効にする] を選択し、[保存]、[閉じる] の順に選択します。

次のステップVPC を作成したら、以下に示す、次のステップを検討します。

• パブリックリソースおよびプライベートリソースでインバウンドネットワークアクセスが必要な場合は、そのセキュリティグループを作成します。詳細については、Amazon VPC ユーザーガイドの「セキュリティグループを操作する」を参照してください。

• プライベートサブネットまたはパブリックサブネットで Amazon ECS クラスターを作成します。詳細については、「クラスターの作成 (p. 20)」を参照してください。Amazon ECS コンソールでクラスター作成ウィザードを使用する場合、先ほど作成した VPC と、ユースケースに応じて、インスタンスを起動するパブリックサブネットまたはプライベートサブネットを指定できます。• コンテナからインターネットに直接アクセス可能にするには、パブリックサブネットにインスタンス

を起動します。必ずコンテナインスタンスのセキュリティグループを適切に設定してください。• コンテナからインターネットに直接アクセス可能にしない場合は、プライベートサブネットにインス

タンスを起動します。• パブリックサブネットまたはプライベートサブネットのサービスにトラフィックをルーティングできる

ロードバランサーを、パブリックサブネットで作成します。詳細については、「サービスロードバランシング (p. 160)」を参照してください。

チュートリアル: AWS CLI を使用して Fargate タスクのクラスターを作成する

次のステップでは、AWS CLI を使用した、Amazon ECS でのクラスターのセットアップ、タスク定義の登録、タスクの実行、そのほかの一般的なシナリオの実行を説明します。最新バージョンの AWS CLIを使用していることを確認してください。最新バージョンへのアップグレード方法の詳細については、「AWS コマンドラインインターフェイスのインストール」を参照してください。

トピック• 前提条件 (p. 312)

API バージョン 2014-11-13311

Amazon ECS AWS Fargate 用ユーザーガイド前提条件

• ステップ 1: クラスターを作成する (p. 312)• ステップ 2: タスク定義を登録する (p. 313)• ステップ 3: タスク定義をリスト表示する (p. 314)• ステップ 4: サービスを作成する (p. 314)• ステップ 5: サービスをリスト表示する (p. 314)• ステップ 6: 実行中のサービスを記述する (p. 315)• ステップ 7: クリーンアップ (p. 316)

前提条件このチュートリアルでは、以下の前提条件をすでに満たしているものとします。

• AWS CLI の最新バージョンがインストールされ、設定されていること。AWS CLI のインストールまたはアップグレードの方法についての詳細は、「AWS コマンドラインインターフェイスのインストール」を参照してください。

• 「Amazon ECS でのセットアップ (p. 3)」のステップを完了していること。• AWS ユーザーに「Amazon ECS 初回実行ウィザードのアクセス許可 (p. 222)」の IAM ポリシー例で指

定されている必要なアクセス権限があること。• VPC およびセキュリティグループが使用できるように作成されていること。このチュートリアルで

は、Docker Hub でホストされているコンテナイメージを使用するため、タスクではインターネットにアクセスできる必要があります。タスクでインターネットへのルートを設定するには、以下のいずれかのオプションを使用します。• Elastic IP アドレスが割り当てられた NAT ゲートウェイでプライベートサブネットを使用する。• パブリックサブネットを使用してタスクにパブリック IP アドレスを割り当てる。

詳細については、「チュートリアル: クラスターにパブリックサブネットとプライベートサブネットを持つ VPC を作成する」を参照してください。

ステップ 1: クラスターを作成するデフォルトでは、アカウントは default クラスターを受け取ります。

Note

お客様に提供される default クラスターを使用する利点は、後続のコマンドで --clustercluster_name オプションを指定する必要がないことです。デフォルト以外の独自のクラスターを作成する場合は、そのクラスターで使用する予定のコマンドごとに --clustercluster_name を指定する必要があります。

以下のコマンドを使用して、一意の名前を付けた独自のクラスターを作成します。

aws ecs create-cluster --cluster-name fargate-cluster

出力:

{ "cluster": { "status": "ACTIVE", "statistics": [], "clusterName": "fargate-cluster", "registeredContainerInstancesCount": 0, "pendingTasksCount": 0,

API バージョン 2014-11-13312

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: タスク定義を登録する

"runningTasksCount": 0, "activeServicesCount": 0, "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/fargate-cluster" }}

ステップ 2: タスク定義を登録するECS クラスターでタスクを実行する前に、タスク定義を登録する必要があります。タスク定義とは、1 つにグループ化されたコンテナのリストです。以下の例は、Docker Hub でホストされている httpd コンテナイメージを使用して PHP ウェブアプリケーションを作成するシンプルなタスク定義です。使用できるタスク定義パラメータの詳細については、「Amazon ECS タスク定義 (p. 28)」を参照してください。

{ "family": "sample-fargate", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "fargate-app", "image": "httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512"}

上の JSON 例は次の 2 通りの方法で AWS CLI に渡すことができます。1 番目はタスク定義 JSON をファイルとして保存し、--cli-input-json file://path_to_file.json オプションで渡すことができます。2 番目は、以下の例のように、JSON の引用符をエスケープして JSON コンテナの定義をコマンドラインで渡すことができます。コマンドラインにコンテナ定義を渡す方法を選択した場合、追加で複数のバージョンのタスクを相互に関連付けたままにする --family パラメータが必要です。

コンテナの定義に JSON ファイルを使用するには。

aws ecs register-task-definition --cli-input-json file://$HOME/tasks/fargate-task.json

register-task-definition コマンドによって、タスク定義の登録が完了した後、その定義の説明が返されます。

API バージョン 2014-11-13313

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: タスク定義をリスト表示する

ステップ 3: タスク定義をリスト表示するlist-task-definitions コマンドを使用して、いつでもアカウントのタスク定義をリスト表示できます。このコマンドの出力は、run-task または start-task をコールするときに一緒に使用する、family 値およびrevision 値を表示します。

aws ecs list-task-definitions

出力:

{ "taskDefinitionArns": [ "arn:aws:ecs:region:aws_account_id:task-definition/sample-fargate:1" ]}

ステップ 4: サービスを作成するアカウントのタスクを登録したら、クラスターに登録されたタスク用のサービスを作成することができます。この例では、sample-fargate:1 タスク定義の 1 つのインスタンスを使用して、クラスターで実行されるサービスを作成します。このタスクにはインターネットへのルートが必要であり、そのために 2 つの方法のいずれかを使用します。1 つの方法は、パブリックサブネットに Elastic IP アドレスを持つ NATゲートウェイで構成されたプライベートサブネットを使用することです。もう 1 つの方法は、パブリックサブネットを使用してパブリック IP アドレスをタスクに割り当てることです。両方の例を以下に示します。

プライベートサブネットを使用した例。

aws ecs create-service --cluster fargate-cluster --service-name fargate-service --task-definition sample-fargate:1 --desired-count 1 --launch-type "FARGATE" --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234]}"

パブリックサブネットを使用した例。

aws ecs create-service --cluster fargate-cluster --service-name fargate-service --task-definition sample-fargate:1 --desired-count 1 --launch-type "FARGATE" --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234],assignPublicIp=ENABLED}"

create-service コマンドによって、タスク定義の登録が完了した後、その定義の説明が返されます。

ステップ 5: サービスをリスト表示するクラスターのサービスをリスト表示します。前のセクションで作成したサービスが表示されます。このコマンドでサービス名または完全 ARN を取得できます。これを後で説明するサービスに使用します。

aws ecs list-services --cluster fargate-cluster

出力:

{ "serviceArns": [ "arn:aws:ecs:region:aws_account_id:service/fargate-service" ]

API バージョン 2014-11-13314

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: 実行中のサービスを記述する

}

ステップ 6: 実行中のサービスを記述する先に取得したサービス名を使用してタスクを記述し、サービスに関する詳細情報を取得します。

aws ecs describe-services --cluster fargate-cluster --services fargate-service

このコマンドが正常に実行されると、サービスの障害とサービスの説明が返されます。たとえば、サービスセクションでは、タスクの実行中または保留中のステータスなど、デプロイに関する情報が見つかります。また、タスク定義、ネットワーク設定、タイムスタンプ付きのイベントに関する情報も見つかります。障害セクションでは、呼び出しに関連する障害がある場合にその情報が見つかります。トラブルシューティングについては、「サービスイベントメッセージ」を参照してください。サービスの説明取得の詳細については、「サービスの説明取得」を参照してください。

{ "services": [ { "status": "ACTIVE", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-fargate:1", "pendingCount": 2, "launchType": "FARGATE", "loadBalancers": [], "roleArn": "arn:aws:iam::aws_account_id:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS", "placementConstraints": [], "createdAt": 1510811361.128, "desiredCount": 2, "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "DISABLED" } }, "platformVersion": "LATEST", "serviceName": "fargate-service", "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/fargate-cluster", "serviceArn": "arn:aws:ecs:region:aws_account_id:service/fargate-service", "deploymentConfiguration": { "maximumPercent": 200, "minimumHealthyPercent": 100 }, "deployments": [ { "status": "PRIMARY", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "DISABLED" } },

API バージョン 2014-11-13315

Amazon ECS AWS Fargate 用ユーザーガイドステップ 7: クリーンアップ

"pendingCount": 2, "launchType": "FARGATE", "createdAt": 1510811361.128, "desiredCount": 2, "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/sample-fargate:1", "updatedAt": 1510811361.128, "platformVersion": "0.0.1", "id": "ecs-svc/9223370526043414679", "runningCount": 0 } ], "events": [ { "message": "(service fargate-service) has started 2 tasks: (task 53c0de40-ea3b-489f-a352-623bf1235f08) (task d0aec985-901b-488f-9fb4-61b991b332a3).", "id": "92b8443e-67fb-4886-880c-07e73383ea83", "createdAt": 1510811841.408 }, { "message": "(service fargate-service) has started 2 tasks: (task b4911bee-7203-4113-99d4-e89ba457c626) (task cc5853e3-6e2d-4678-8312-74f8a7d76474).", "id": "d85c6ec6-a693-43b3-904a-a997e1fc844d", "createdAt": 1510811601.938 }, { "message": "(service fargate-service) has started 2 tasks: (task cba86182-52bf-42d7-9df8-b744699e6cfc) (task f4c1ad74-a5c6-4620-90cf-2aff118df5fc).", "id": "095703e1-0ca3-4379-a7c8-c0f1b8b95ace", "createdAt": 1510811364.691 } ], "runningCount": 0, "placementStrategy": [] } ], "failures": []}

ステップ 7: クリーンアップこのチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

サービスを削除します。

aws ecs delete-service --cluster fargate-cluster --service fargate-service --force

クラスターを削除します。

aws ecs delete-cluster --cluster fargate-cluster

チュートリアル: Secrets Manager シークレットを使用した機密データの指定

Amazon ECS を使用すると、AWS Secrets Manager シークレットに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。詳細については、「機密データの指定 (p. 92)」を参照してください。

API バージョン 2014-11-13316

Amazon ECS AWS Fargate 用ユーザーガイド前提条件

以下のチュートリアルでは、Secrets Manager シークレットを作成して Amazon ECS タスク定義でシークレットを参照する方法を示し、コンテナ内の環境変数をクエリすることでシークレットの内容を表示して正しく動作することを確認します。

前提条件このチュートリアルでは、以下の前提条件が完了済みであることを前提としています。

• 「Amazon ECS でのセットアップ (p. 3)」のステップを完了していること。• AWS ユーザーに、このチュートリアルで説明される Secrets Manager と Amazon ECS リソースを作成

するために必要な IAM アクセス許可があること。

ステップ 1: Secrets Manager シークレットを作成するSecrets Manager コンソールを使用して、機密データ用のシークレットを作成できます。このチュートリアルでは、後にコンテナで参照するユーザー名とパスワードを保存するための基本的なシークレットを作成します。詳細については、AWS Secrets Manager ユーザーガイドの「基本的なシークレットの作成」を参照してください。

基本的なシークレットを作成するには

機密データのシークレットを作成するには、Secrets Manager を使用します。

1. Secrets Manager コンソール (https://console.aws.amazon.com/secretsmanager/) を開きます。2. [新しいシークレットの保存] を選択します。3. [Select secret type (シークレットタイプの選択)] で、[Other type of secrets (他の種類のシークレット)]

を選択します。4. [このシークレットに保存するキーと値のペアを指定します] で、[プレーンテキスト] タブを選択し、

既存のテキストを以下のテキストに置き換えます。ここで指定したテキストの値は、チュートリアルの最後にコンテナに存在する環境変数の値になります。

password_value

5. [Next] を選択します。6. [シークレット名] に「username_value」と入力し、[次へ] を選択します。ここで指定したシーク

レット名の値は、チュートリアルの最後にコンテナに存在する環境変数の名前になります。7. [自動ローテーションの設定] で [自動ローテーションを無効化] を選択したままにしておき、[次へ] を

選択します。8. 設定を確認し、次に [保存] を選択して、入力した内容すべてを Secrets Manager の新しいシークレッ

トとして保存します。9. 先ほど作成したシークレットを選択して [シークレット ARN] を保存し、後のステップのタスク実行

IAM ポリシーとタスク定義で参照できるようにします。

ステップ 2: タスク実行 IAM ロールを更新するAmazon ECS で Secrets Manager シークレットから機密データを取得するには、Amazon ECS タスク実行ロールを持っていて、タスク定義でそのロールを参照する必要があります。このロールにより、必要なSecrets Manager リソースをコンテナエージェントがプルできます。タスク実行 IAM ロールをまだ作成していない場合は、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

以下の手順は、タスク実行 IAM ロールが既に作成され、適切に設定されていることを前提としてます。

API バージョン 2014-11-13317

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: Amazon ECS タスク定義を作成する

タスク実行 IAM ロールを更新するには

IAM コンソールを使用して、必要なアクセス許可を持つタスク実行ロールを更新します。

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. ナビゲーションペインで [Roles (ロール) ] を選択します。3. ロールの一覧で ecsTaskExecutionRole を探し、選択します。4. [アクセス許可]、[Add inline policy (インラインポリシーの追加)] の順に選択します。5. [JSON] タブを選択して以下の JSON テキストを指定し、ステップ 1 で作成した Secrets Manager

シークレットの完全な ARN を指定していることを確認します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K" ] } ]}

6. [ポリシーの確認] を選択します。[名前] で ECSSecretsTutorial を指定し、[ポリシーの作成] を選択します。

ステップ 3: Amazon ECS タスク定義を作成するAmazon ECS コンソールを使用して、Secrets Manager シークレットを参照するタスク定義を作成します。

シークレットを指定するタスク定義を作成するには

IAM コンソールを使用して、必要なアクセス許可を持つタスク実行ロールを更新します。

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク

定義の作成)] の順に選択します。3. [Select launch type compatibility (起動タイプの互換性の選択)] ページで、[EC2]、[Next step (次のス

テップ)] の順に選択します。4. [Configure via JSON (JSON による設定)] を選択して以下のタスク定義 JSON テキストを入力し、ス

テップ 1 で作成した Secrets Manager シークレットの完全な ARN と、ステップ 2 で更新したタスク定義 IAM ロールを指定していることを確認します。[Save] を選択します。

Important

タスク定義のシークレット名の値は、シークレットを作成した際にシークレット名で指定した名前と一致する必要があります。

{ "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole", "containerDefinitions": [ { "entryPoint": [

API バージョン 2014-11-13318

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: Amazon ECS クラスターを作成する

"sh", "-c" ], "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "cpu": 10, "secrets": [ { "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K", "name": "username_value" } ], "memory": 300, "image": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial"}

5. 設定を確認し、[Create (作成)] を選択します。

ステップ 4: Amazon ECS クラスターを作成するAmazon ECS コンソールを使用してコンテナインスタンスを含むクラスターを作成し、タスクを実行します。利用可能なリソースを使用して登録された少なくとも 1 つのコンテナインスタンスを持つ既存のクラスターがあり、このチュートリアル用に作成されたタスク定義の 1 つのインスタンスを実行できる場合は、次のステップに進みます。

このチュートリアルでは Amazon ECS-optimized Amazon Linux 2 AMI を使用して、1 つの t2.micro コンテナインスタンスを持つクラスターを作成します。

クラスターを作成するには

Amazon ECS コンソールを使用してクラスターを作成し、1 つのコンテナインスタンスを登録します。

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションバーで、作成した Secrets Manager シークレットと Amazon ECS タスク定義の両方

が含まれるリージョンを選択します。3. ナビゲーションペインで [Clusters] を選択します。4. [Clusters] ページで、[Create Cluster] を選択します。5. [Select cluster compatibility (クラスターの互換性を選択)] で、[EC2 Linux + Networking (EC2 Linux +

ネットワーク)]、[Next Step (次のステップ)] の順に選択します。6. [Configure cluster (クラスターの設定)] ページの [Cluster name (クラスター名)] で「ecs-secrets-

tutorial」と入力します。

API バージョン 2014-11-13319

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: Amazon ECS タスクを実行する

7. [EC2 instance type (EC2 インスタンスタイプ)] で [t2.micro] を選択します。8. [Key pair (キーペア)] で、コンテナインスタンスに追加するキーペアを選択します。

Important

このチュートリアルを完了するにはキーペアが必要です。そのため、作成したキーペアをまだ持っていない場合は、EC2 コンソールのリンクをクリックしてキーペアを作成してください。

9. [Networking (ネットワーク)] セクションで、クラスター用の VPC を設定します。既存の VPC を選択するか、[Create a new VPC (新しい VPC の作成)] を選択してチュートリアルで使用します。

a. (オプション) 新しい VPC を作成することを選択した場合は、[CIDR ブロック] で VPC の CIDRブロックを選択します。詳細については、Amazon VPC ユーザーガイド の「VPC とサブネット」を参照してください。

b. [Subnets] で、VPC に使用するサブネットを選択します。デフォルト設定をそのまま使用するか、またはニーズを満たすように変更できます。

10. [Container instance IAM role (コンテナインスタンスの IAM ロール)] で、既存のコンテナインスタンスの IAM ロールを選択するか、[Create new role (新しいロールの作成)] を選択して作成します。

11. 他のすべてのフィールドはデフォルト値のままにして、[Create (作成)] を選択します。

ステップ 5: Amazon ECS タスクを実行するAmazon ECS コンソールを使用し、作成したタスク定義を使用してタスクを実行できます。このチュートリアルでは、前のステップで作成したクラスターを使用し、EC2 起動タイプを使用してタスクを実行します。

タスクを実行するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. ナビゲーションペインで [Task Definitions (タスク定義)] を選択し、作成した [ecs-secrets-tutorial] タ

スク定義を選択します。3. タスク定義の最新のリビジョンを選択し、[Actions (アクション)]、[Run Task (タスクの実行)] の順に

選択します。4. [起動タイプ] で、[EC2] を選択します。5. [Cluster (クラスター)] で、前のステップで作成した [ecs-secrets-tutorial] クラスターを選択します。6. [Task tagging configuration (タスクのタグ付け設定)] で [Enable ECS managed tags (ECS で管理され

たタグを有効にする)] を選択解除します。これらは、このチュートリアルでは必要ありません。7. タスク情報を確認し、[Run Task] を選択します。

Note

タスクが PENDING から STOPPED に移行した場合、または PENDING ステータスが表示された後、リストされているタスクから消えた場合、エラーで停止した可能性があります。詳細については、トラブルシューティングセクションの「停止されたタスクでのエラーの確認 (p. 350)」を参照してください。

ステップ 6: 確認する以下のステップを使用して、すべてのステップが正常に完了し、コンテナに環境変数が適切に作成されたことを確認できます。

環境変数が作成されたことを確認するには

1. コンテナインスタンスのパブリック IP アドレスまたは DNS アドレスを見つけます。

API バージョン 2014-11-13320

Amazon ECS AWS Fargate 用ユーザーガイドステップ 7: クリーンアップ

a. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。b. コンテナインスタンスをホストする ecs-secrets-tutorial クラスターを選択します。c. [Cluster] ページで、[ECS Instances] を選択します。d. [Container Instance] 列で、接続するコンテナインスタンスを選択します。e. [Container Instance] ページで、インスタンスの [Public IP] または [Public DNS] を記録します。

2. macOS または Linux コンピュータを使用している場合は、以下のコマンドでインスタンスに接続します (パスとアドレスはプライベートキーへのパスとインスタンスのパブリックアドレスに置き換えます)。

$ ssh -i /path/to/my-key-pair.pem [email protected]

Windows コンピュータを使用している場合は、Linux インスタンス用 Amazon EC2 ユーザーガイドの「PuTTY を使用した Windows からの接続」を参照してください。

Important

インスタンス接続時の問題の詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「インスタンスへの接続に関するトラブルシューティング」を参照してください。

3. インスタンスで実行するコンテナを一覧表示します。ecs-secrets-tutorial コンテナのコンテナID をメモしておきます。

docker ps

4. 前のステップの出力のコンテナ ID を使用して ecs-secrets-tutorial コンテナに接続します。

docker exec -it container_ID /bin/bash

5. echo コマンドを使用して環境変数の値を出力します。

echo $username_value

このチュートリアルが成功すると、次のような出力が表示されます。

password_value

Note

あるいは、env (または printenv) コマンドを使用して、コンテナ内の環境変数をすべて一覧表示できます。

ステップ 7: クリーンアップこのチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

リソースをクリーンアップするには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. 作成した [ecs-secrets-tutorial] クラスターを選択します。3. [Cluster (クラスター)] ページで [Delete Cluster (クラスターの削除)] を選択します。4. クラスターの削除を確認するフレーズを入力し、[Delete (削除)] を選択します。これには数分かかり

ますが、Amazon ECS クラスターのリソースがすべてクリーンアップされます。

API バージョン 2014-11-13321

Amazon ECS AWS Fargate 用ユーザーガイドチュートリアル: サービス検出 を使用したサービスの作成

5. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。6. ナビゲーションペインで [Roles (ロール) ] を選択します。7. ロールの一覧で ecsTaskExecutionRole を探し、選択します。8. [Permissions (アクセス許可)] を選択し、ECSSecretsTutorial の横にある [X] を選択します。

[Remove (削除)] を選択してインラインポリシーの削除を確定します。9. Secrets Manager コンソール (https://console.aws.amazon.com/secretsmanager/) を開きます。10. 作成した [username_value] シークレットを選択し、[Actions (アクション)]、[Delete secret (シーク

レットの削除)] の順に選択します。

チュートリアル: サービス検出 を使用したサービスの作成

サービス検出 は、Amazon ECS コンソールのサービス作成ウィザードに統合されています。詳細については、「サービスの作成 (p. 135)」を参照してください。

次のチュートリアルでは、AWS CLI で サービス検出 を使用する Fargate タスクを含む ECS サービスを作成する方法を説明します。

サービス検出 をサポートするリージョンのリストについては、「サービス検出 (p. 181)」を参照してください。

Fargate タスクは、次のリージョンのみでサポートされています。

リージョン名 リージョン

米国東部(バージニア北部) us-east-1

米国東部 (オハイオ) us-east-2

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

アジアパシフィック (ムンバイ) ap-south-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (フランクフルト) eu-central-1

アジアパシフィック (東京) ap-northeast-1

カナダ (中部) ca-central-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (シンガポール) ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

前提条件このチュートリアルでは、以下の前提条件が完了済みであることを前提としています。

API バージョン 2014-11-13322

Amazon ECS AWS Fargate 用ユーザーガイドステップ 1: サービス検出 リソースを作成する

• AWS CLI の最新バージョンがインストールされ、設定されていること。詳細については、「AWS コマンドラインインターフェイスのインストール」を参照してください。

• 「Amazon ECS でのセットアップ (p. 3)」のステップを完了していること。• AWS ユーザーに「Amazon ECS 初回実行ウィザードのアクセス許可 (p. 222)」の IAM ポリシー例で指

定されている必要なアクセス権限があること。• VPC およびセキュリティグループが使用できるように作成されていること。詳細については、「チュー

トリアル: クラスターにパブリックサブネットとプライベートサブネットを持つ VPC を作成する」を参照してください。

ステップ 1: サービス検出 リソースを作成するサービス検出 名前空間および サービス検出 サービスを作成するには、次の手順に従います。

サービス検出 リソースを作成するには

1. 既存のいずれかの VPC 内に tutorial という名前の サービス検出 プライベート名前空間を作成します。

aws servicediscovery create-private-dns-namespace --name tutorial --vpc vpc-abcd1234 --region us-east-1

出力:

{ "OperationId": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e"}

2. 以前の出力の OperationId を使用して、プライベート名前空間が正常に作成されたことを確認します。名前空間 ID をコピーします。これは後述のコマンドで使用されます。

aws servicediscovery get-operation --operation-id h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e

出力:

{ "Operation": { "Id": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e", "Type": "CREATE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1519777852.502, "UpdateDate": 1519777856.086, "Targets": { "NAMESPACE": "ns-uejictsjen2i4eeg" } }}

3. 前の出力で取得した NAMESPACE ID を使用して、myapplication という名前のサービス検出サービスを作成します。サービス検出 サービス ID をコピーします。これは後述のコマンドで使用されます。

aws servicediscovery create-service --name myapplication --dns-config 'NamespaceId="ns-uejictsjen2i4eeg",DnsRecords=[{Type="A",TTL="300"}]' --health-check-custom-config FailureThreshold=1 --region us-east-1

API バージョン 2014-11-13323

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS リソースを作成する

出力:

{ "Service": { "Id": "srv-utcrh6wavdkggqtk", "Arn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk", "Name": "myapplication", "DnsConfig": { "NamespaceId": "ns-uejictsjen2i4eeg", "DnsRecords": [ { "Type": "A", "TTL": 300 } ] }, "HealthCheckCustomConfig": { "FailureThreshold": 1 }, "CreatorRequestId": "e49a8797-b735-481b-a657-b74d1d6734eb" }}

ステップ 2: Amazon ECS リソースを作成するAmazon ECS クラスター、タスク定義、サービスを作成するには、次の手順に従います。

Amazon ECS リソースを作成するには

1. tutorial という名前の Amazon ECS クラスターを作成して使用します。

aws ecs create-cluster --cluster-name tutorial --region us-east-1

出力:

{ "cluster": { "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/tutorial", "clusterName": "tutorial", "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [] }}

2. Fargate と互換性のあるタスク定義を登録します。これには、awsvpc ネットワークモードを使用する必要があります。このチュートリアルで使用するタスク定義の例を以下に示します。

最初に、次のタスク定義の内容で、fargate-task.json というファイルを作成します。

{ "family": "tutorial-task-def", "networkMode": "awsvpc", "containerDefinitions": [

API バージョン 2014-11-13324

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS リソースを作成する

{ "name": "sample-app", "image": "httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512"}

次に、作成した fargate-task.json ファイルを使用して、タスク定義を登録します。

aws ecs register-task-definition --cli-input-json file://fargate-task.json --region us-east-1

3. 作成する ECS サービスの内容で、ecs-service-discovery.json という名前のファイルを作成します。この例では、前のステップで作成したタスク定義を使用します。このタスク定義の例ではawsvpc ネットワークモードを使用しているため、awsvpcConfiguration が必要となります。

{ "cluster": "tutorial", "serviceName": "ecs-service-discovery", "taskDefinition": "tutorial-task-def", "serviceRegistries": [ { "registryArn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk" } ], "launchType": "FARGATE", "platformVersion": "LATEST", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-abcd1234" ], "subnets": [ "subnet-abcd1234" ] } }, "desiredCount": 1}

API バージョン 2014-11-13325

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS リソースを作成する

Fargate 起動タイプおよび LATEST プラットフォームバージョンを指定して、サービス検出 をサポートする ECS サービスを作成します。

aws ecs create-service --cli-input-json file://ecs-service-discovery.json --region us-east-1

出力:

{ "service": { "serviceArn": "arn:aws:ecs:region:aws_account_id:service/ecs-service-discovery", "serviceName": "ecs-service-discovery", "clusterArn": "arn:aws:ecs:region:aws_account_id:cluster/tutorial", "loadBalancers": [], "serviceRegistries": [ { "registryArn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk" } ], "status": "ACTIVE", "desiredCount": 1, "runningCount": 0, "pendingCount": 0, "launchType": "FARGATE", "platformVersion": "LATEST", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/tutorial-task-def:1", "deploymentConfiguration": { "maximumPercent": 200, "minimumHealthyPercent": 100 }, "deployments": [ { "id": "ecs-svc/9223370516993140842", "status": "PRIMARY", "taskDefinition": "arn:aws:ecs:region:aws_account_id:task-definition/tutorial-task-def:1", "desiredCount": 1, "pendingCount": 0, "runningCount": 0, "createdAt": 1519861634.965, "updatedAt": 1519861634.965, "launchType": "FARGATE", "platformVersion": "1.1.0", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "ENABLED" } } } ], "roleArn": "arn:aws:iam::aws_account_id:role/ECSServiceLinkedRole", "events": [], "createdAt": 1519861634.965,

API バージョン 2014-11-13326

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: サービス検出 を確認する

"placementConstraints": [], "placementStrategy": [], "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-abcd1234" ], "securityGroups": [ "sg-abcd1234" ], "assignPublicIp": "ENABLED" } } }}

ステップ 3: サービス検出 を確認するサービス検出 情報をクエリして、すべてが正常に作成されたことを確認します。サービス検出 を設定したら、AWS Cloud Map API オペレーションまたは次に示すように VPC 内で dig を使用して、それにクエリを実行できます。

サービスの検出設定を確認するには

1. サービス検出 サービス ID を使用して、サービス検出 インスタンスを一覧表示します。

aws servicediscovery list-instances --service-id srv-utcrh6wavdkggqtk --region us-east-1

出力:

{ "Instances": [ { "Id": "16becc26-8558-4af1-9fbd-f81be062a266", "Attributes": { "AWS_INSTANCE_IPV4": "172.31.87.2" "AWS_INSTANCE_PORT": "80", "AVAILABILITY_ZONE": "us-east-1a", "REGION": "us-east-1", "ECS_SERVICE_NAME": "ecs-service-discovery", "ECS_CLUSTER_NAME": "tutorial", "ECS_TASK_DEFINITION_FAMILY": "tutorial-task-def" } } ]}

2. サービス検出 名前空間およびサービスを使用して、サービス検出 インスタンスに関する詳細のクエリを実行する追加のパラメータを使用します。

aws servicediscovery discover-instances --namespace-name tutorial --service-name myapplication --query-parameters ECS_CLUSTER_NAME=tutorial --region us-east-1

出力:

{ "Instances": [

API バージョン 2014-11-13327

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: サービス検出 を確認する

{ "InstanceId": "16becc26-8558-4af1-9fbd-f81be062a266", "NamespaceName": "tutorial", "ServiceName": "ecs-service-discovery", "HealthStatus": "HEALTHY", "Attributes": { "AWS_INSTANCE_IPV4": "172.31.87.2" "AWS_INSTANCE_PORT": "80", "AVAILABILITY_ZONE": "us-east-1a", "REGION": "us-east-1", "ECS_SERVICE_NAME": "ecs-service-discovery", "ECS_CLUSTER_NAME": "tutorial", "ECS_TASK_DEFINITION_FAMILY": "tutorial-task-def" } } ]}

3. Route 53 ホストゾーンに作成された サービス検出 サービス用の DNS レコードは、次の AWS CLI コマンドでクエリを実行できます。

名前空間 ID を使用して、名前空間に関する情報を取得します。これには Route 53 ホストゾーン IDが含まれます。

aws servicediscovery get-namespace --id ns-uejictsjen2i4eeg --region us-east-1

出力:

{ "Namespace": { "Id": "ns-uejictsjen2i4eeg", "Arn": "arn:aws:servicediscovery:region:aws_account_id:namespace/ns-uejictsjen2i4eeg", "Name": "tutorial", "Type": "DNS_PRIVATE", "Properties": { "DnsProperties": { "HostedZoneId": "Z35JQ4ZFDRYPLV" } }, "CreateDate": 1519777852.502, "CreatorRequestId": "9049a1d5-25e4-4115-8625-96dbda9a6093" }}

4. Route 53 ホストゾーン ID を使用して、ホストゾーンのリソースレコードセットを取得します。

aws route53 list-resource-record-sets --hosted-zone-id Z35JQ4ZFDRYPLV --region us-east-1

出力:

{ "ResourceRecordSets": [ { "Name": "tutorial.", "Type": "NS", "TTL": 172800, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk."

API バージョン 2014-11-13328

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: クリーンアップ

}, { "Value": "ns-0.awsdns-00.com." }, { "Value": "ns-1024.awsdns-00.org." }, { "Value": "ns-512.awsdns-00.net." } ] }, { "Name": "tutorial.", "Type": "SOA", "TTL": 900, "ResourceRecords": [ { "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ] }, { "Name": "myapplication.tutorial.", "Type": "A", "SetIdentifier": "16becc26-8558-4af1-9fbd-f81be062a266", "MultiValueAnswer": true, "TTL": 300, "ResourceRecords": [ { "Value": "172.31.87.2" } ] } ]}

5. DNS でクエリを実行するには、次のコマンドで VPC 内でインスタンスから dig を使用することもできます。

dig +short myapplication.tutorial

出力:

172.31.87.2

ステップ 4: クリーンアップこのチュートリアルが終了したら、未使用のリソースに対する料金が発生しないように、それに関連付けられたリソースをクリーンアップする必要があります。

サービス検出インスタンスと Amazon ECS リソースをクリーンアップするには

1. サービス検出 サービスインスタンスの登録を解除します。

aws servicediscovery deregister-instance --service-id srv-utcrh6wavdkggqtk --instance-id 16becc26-8558-4af1-9fbd-f81be062a266 --region us-east-1

API バージョン 2014-11-13329

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: クリーンアップ

出力:

{ "OperationId": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv"}

2. 以前の出力の OperationId を使用して、サービス検出 サービスインスタンスが正常に登録解除されたことを確認します。

aws servicediscovery get-operation --operation-id xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv --region us-east-1

出力:

{ "Operation": { "Id": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv", "Type": "DEREGISTER_INSTANCE", "Status": "SUCCESS", "CreateDate": 1525984073.707, "UpdateDate": 1525984076.426, "Targets": { "INSTANCE": "16becc26-8558-4af1-9fbd-f81be062a266", "ROUTE_53_CHANGE_ID": "C5NSRG1J4I1FH", "SERVICE": "srv-utcrh6wavdkggqtk" } }}

3. サービス検出 サービスを削除します。

aws servicediscovery delete-service --id srv-utcrh6wavdkggqtk --region us-east-1

4. サービス検出 名前空間を削除します。

aws servicediscovery delete-namespace --id ns-uejictsjen2i4eeg --region us-east-1

出力:

{ "OperationId": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj"}

5. 以前の出力の OperationId を使用して、サービス検出 名前空間が正常に削除されたことを確認します。

aws servicediscovery get-operation --operation-id c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj --region us-east-1

出力:

{ "Operation": { "Id": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj", "Type": "DELETE_NAMESPACE", "Status": "SUCCESS", "CreateDate": 1525984602.211,

API バージョン 2014-11-13330

Amazon ECS AWS Fargate 用ユーザーガイドチュートリアル: Blue/Green デ

プロイを使用するサービスの作成

"UpdateDate": 1525984602.558, "Targets": { "NAMESPACE": "ns-rymlehshst7hhukh", "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O" } }}

6. Amazon ECS サービスを更新して必要数を 0 にします。これによりサービスを削除できるようになります。

aws ecs update-service --cluster tutorial --service ecs-service-discovery --desired-count 0 --force-new-deployment --region us-east-1

7. Amazon ECS サービスを削除します。

aws ecs delete-service --cluster tutorial --service ecs-service-discovery --region us-east-1

8. Amazon ECS クラスターを削除します。

aws ecs delete-cluster --cluster tutorial --region us-east-1

チュートリアル: Blue/Green デプロイを使用するサービスの作成

Amazon ECS では、Blue/Green デプロイが Amazon ECS コンソールのサービスの作成ウィザードに統合されています。詳細については、「サービスの作成 (p. 135)」を参照してください。

以下のチュートリアルでは、AWS CLI で Blue/Green デプロイタイプを使用する Fargate タスクを含む、Amazon ECS サービスを作成する方法を示します。

前提条件このチュートリアルでは、以下の前提条件をすでに満たしているものとします。

• AWS CLI の最新バージョンがインストールされ、設定されていること。AWS CLI のインストールまたはアップグレードの詳細については、「AWS Command Line Interface のインストール」を参照してください。

• 「Amazon ECS でのセットアップ (p. 3)」のステップを完了していること。• AWS ユーザーに「Amazon ECS 初回実行ウィザードのアクセス許可 (p. 222)」の IAM ポリシー例で指

定されている必要なアクセス権限があること。• VPC およびセキュリティグループが使用できるように作成されていること。詳細については、「チュー

トリアル: クラスターにパブリックサブネットとプライベートサブネットを持つ VPC を作成する」を参照してください。

• Amazon ECS CodeDeploy IAM ロールが作成されます。詳細については、「Amazon ECS CodeDeployIAM ロール (p. 255)」を参照してください。

ステップ 1: Application Load Balancer を作成するBlue/Green デプロイタイプを使用する Amazon ECS サービスには、Application Load Balancer またはNetwork Load Balancer のいずれかを使用する必要があります。このチュートリアルでは Application LoadBalancer を使用しています。

API バージョン 2014-11-13331

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: Amazon ECS クラスターを作成する

Application Load Balancer を作成するには

1. Application Load Balancer を作成するには、create-load-balancer コマンドを使用します。異なるアベイラビリティーゾーンにある 2 つのサブネット、およびセキュリティグループを指定します。

aws elbv2 create-load-balancer \ --name bluegreen-alb \ --subnets subnet-abcd1234 subnet-abcd5678 \ --security-groups sg-abcd1234 \ --region us-east-1

出力には、次の形式でロードバランサーの Amazon リソースネーム (ARN) が含まれます。

arn:aws:elasticloadbalancing:region:aws_account_id:loadbalancer/app/bluegreen-alb/e5ba62739c16e642

2. ターゲットグループを作成するには、create-target-group コマンドを使用します。このターゲットグループは、サービスで設定されている元のタスクにトラフィックをルーティングします。

aws elbv2 create-target-group \ --name bluegreentarget1 \ --protocol HTTP \ --port 80 \ --target-type ip \ --vpc-id vpc-abcd1234 \ --region us-east-1

出力には、以下の形式でターゲットグループの ARN が含まれます。

arn:aws:elasticloadbalancing:region:aws_account_id:targetgroup/bluegreentarget1/209a844cd01825a4

3. ターゲットグループにリクエストを転送するデフォルトルールが関連付けられた、ロードバランサーのリスナーを作成するには、create-listener コマンドを使用します。

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:aws_account_id:loadbalancer/app/bluegreen-alb/e5ba62739c16e642 \ --protocol HTTP \ --port 80 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:aws_account_id:targetgroup/bluegreentarget1/209a844cd01825a4 \ --region us-east-1

出力には、以下の形式でリスナーの ARN が含まれます。

arn:aws:elasticloadbalancing:region:aws_account_id:listener/app/bluegreen-alb/e5ba62739c16e642/665750bec1b03bd4

ステップ 2: Amazon ECS クラスターを作成する使用する tutorial-bluegreen-cluster というクラスターを作成するには、create-cluster コマンドを使用します。

API バージョン 2014-11-13332

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: タスク定義を登録する

aws ecs create-cluster \ --cluster-name tutorial-bluegreen-cluster \ --region us-east-1

出力には、以下の形式でクラスターの ARN が含まれます。

arn:aws:ecs:region:aws_account_id:cluster/tutorial-bluegreen-cluster

ステップ 3: タスク定義を登録するFargate と互換性のあるタスク定義を登録するには、register-task-definition コマンドを使用します。これには、awsvpc ネットワークモードを使用する必要があります。このチュートリアルで使用するタスク定義の例を以下に示します。

まず、以下の内容で fargate-task.json というファイルを作成します。タスク実行ロールの ARN を使用していることを確認します。詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

{ "family": "tutorial-task-def", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512", "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"}

次に、作成した fargate-task.json ファイルを使用して、タスク定義を登録します。

aws ecs register-task-definition \ --cli-input-json file://fargate-task.json \ --region us-east-1

API バージョン 2014-11-13333

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: Amazon ECS サービスを作成する

ステップ 4: Amazon ECS サービスを作成するサービスを作成するには、create-service コマンドを使用します。

まず、以下の内容で service-bluegreen.json というファイルを作成します。

{ "cluster": "tutorial-bluegreen-cluster", "serviceName": "service-bluegreen", "taskDefinition": "tutorial-task-def", "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region:aws_account_id:targetgroup/bluegreentarget1/209a844cd01825a4", "containerName": "sample-app", "containerPort": 80 } ], "launchType": "FARGATE", "schedulingStrategy": "REPLICA", "deploymentController": { "type": "CODE_DEPLOY" }, "platformVersion": "LATEST", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-abcd1234" ], "subnets": [ "subnet-abcd1234", "subnet-abcd5678" ] } }, "desiredCount": 1}

次に、作成した service-bluegreen.json ファイルを使用してサービスを作成します。

aws ecs create-service \ --cli-input-json file://service-bluegreen.json \ --region us-east-1

出力には、以下の形式でサービスの ARN が含まれます。

arn:aws:ecs:region:aws_account_id:service/service-bluegreen

ステップ 5: AWS CodeDeploy リソースを作成する以下の手順を使用して、CodeDeploy アプリケーション、CodeDeploy デプロイグループ、CodeDeploy デプロイグループの Application Load Balancer ターゲットグループを作成します。

CodeDeploy リソースを作成するには

1. CodeDeploy アプリケーションを作成するには、create-application コマンドを使用します。ECS コンピューティングプラットフォームを指定します。

aws deploy create-application \ --application-name tutorial-bluegreen-app \ --compute-platform ECS \ --region us-east-1

API バージョン 2014-11-13334

Amazon ECS AWS Fargate 用ユーザーガイドステップ 5: AWS CodeDeploy リソースを作成する

出力には、以下の形式でアプリケーションの ID が含まれます。

{ "applicationId": "b8e9c1ef-3048-424e-9174-885d7dc9dc11"}

2. 2 番目の Application Load Balancer ターゲットグループを作成するには、create-target-group コマンドを使用します。このグループは、CodeDeploy デプロイグループの作成時に使用します。

aws elbv2 create-target-group \ --name bluegreentarget2 \ --protocol HTTP \ --port 80 \ --target-type ip \ --vpc-id "vpc-0b6dd82c67d8012a1" \ --region us-east-1

出力には、以下の形式でターゲットグループの ARN が含まれます。

arn:aws:elasticloadbalancing:region:aws_account_id:targetgroup/bluegreentarget2/708d384187a3cfdc

3. CodeDeploy デプロイグループを作成するには、create-deployment-group コマンドを使用します。

まず、以下の内容で tutorial-deployment-group.json というファイルを作成します。この例では、作成したリソースを使用します。serviceRoleArn には、Amazon ECS CodeDeploy IAM ロールの ARN を指定します。詳細については、「Amazon ECS CodeDeploy IAM ロール (p. 255)」を参照してください。

{ "applicationName": "tutorial-bluegreen-app", "autoRollbackConfiguration": { "enabled": true, "events": [ "DEPLOYMENT_FAILURE" ] }, "blueGreenDeploymentConfiguration": { "deploymentReadyOption": { "actionOnTimeout": "CONTINUE_DEPLOYMENT", "waitTimeInMinutes": 0 }, "terminateBlueInstancesOnDeploymentSuccess": { "action": "TERMINATE", "terminationWaitTimeInMinutes": 5 } }, "deploymentGroupName": "tutorial-bluegreen-dg", "deploymentStyle": { "deploymentOption": "WITH_TRAFFIC_CONTROL", "deploymentType": "BLUE_GREEN" }, "loadBalancerInfo": { "targetGroupPairInfoList": [ { "targetGroups": [ { "name": "bluegreentarget1" }, { "name": "bluegreentarget2" } ],

API バージョン 2014-11-13335

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: CodeDeploy デプロイを作成およびモニタリングする

"prodTrafficRoute": { "listenerArns": [ "arn:aws:elasticloadbalancing:region:aws_account_id:listener/app/bluegreen-alb/e5ba62739c16e642/665750bec1b03bd4" ] } } ] }, "serviceRoleArn": "arn:aws:iam::aws_account_id:role/ecsCodeDeployRole", "ecsServices": [ { "serviceName": "service-bluegreen", "clusterName": "tutorial-bluegreen-cluster" } ]}

次に、CodeDeploy デプロイグループを作成します。

aws deploy create-deployment-group \ --cli-input-json file://tutorial-deployment-group.json \ --region us-east-1

出力には、以下の形式でデプロイグループの ID が含まれます。

{ "deploymentGroupId": "6fd9bdc6-dc51-4af5-ba5a-0a4a72431c88"}

ステップ 6: CodeDeploy デプロイを作成およびモニタリングする以下の手順を使用して、アプリケーション仕様ファイル (AppSpec ファイル) と CodeDeploy デプロイを作成してアップロードします。

CodeDeploy デプロイを作成してモニタリングするには

1. 以下の手順を使用して、AppSpec ファイルを作成してアップロードします。

a. CodeDeploy デプロイグループの内容で appspec.yaml というファイルを作成します。この例では、チュートリアルの前半で作成したリソースを使用します。

version: 0.0Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "arn:aws:ecs:region:aws_account_id:task-definition/first-run-task-definition:7" LoadBalancerInfo: ContainerName: "sample-app" ContainerPort: 80 PlatformVersion: "LATEST"

b. AppSpec ファイルの Amazon S3 バケットを作成するには、s3 mb コマンドを使用します。

API バージョン 2014-11-13336

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: CodeDeploy デプロイを作成およびモニタリングする

aws s3 mb s3://tutorial-bluegreen-bucket

c. AppSpec ファイルを Amazon S3 バケットにアップロードするには、s3 cp コマンドを使用します。

aws s3 cp ./appspec.yaml s3://tutorial-bluegreen-bucket/appspec.yaml

2. 以下の手順を使用して、CodeDeploy デプロイを作成します。

a. CodeDeploy デプロイグループの内容で create-deployment.json というファイルを作成します。この例では、チュートリアルの前半で作成したリソースを使用します。

{ "applicationName": "tutorial-bluegreen-app", "deploymentGroupName": "tutorial-bluegreen-dg", "revision": { "revisionType": "S3", "s3Location": { "bucket": "tutorial-bluegreen-bucket", "key": "appspec.yaml", "bundleType": "YAML" } }}

b. デプロイを作成するには、create-deployment コマンドを使用します。

aws deploy create-deployment \ --cli-input-json file://create-deployment.json \ --region us-east-1

出力には、以下の形式でデプロイの ID が含まれます。

{ "deploymentId": "d-RPCR1U3TW"}

c. デプロイの詳細を取得するには、get-deployment-target コマンドで、前の出力からのdeploymentId を指定します。

aws deploy get-deployment-target \ --deployment-id "d-IMJU3A8TW" \ --target-id tutorial-bluegreen-cluster:service-bluegreen \ --region us-east-1

以下の出力に示しているように、ステータスが Succeeded になるまで、デプロイの詳細が取得され続けます。

{ "deploymentTarget": { "deploymentTargetType": "ECSTarget", "ecsTarget": { "deploymentId": "d-RPCR1U3TW", "targetId": "tutorial-bluegreen-cluster:service-bluegreen", "targetArn": "arn:aws:ecs:region:aws_account_id:service/service-bluegreen", "lastUpdatedAt": 1543431490.226, "lifecycleEvents": [

API バージョン 2014-11-13337

Amazon ECS AWS Fargate 用ユーザーガイドステップ 6: CodeDeploy デプロイを作成およびモニタリングする

{ "lifecycleEventName": "BeforeInstall", "startTime": 1543431361.022, "endTime": 1543431361.433, "status": "Succeeded" }, { "lifecycleEventName": "Install", "startTime": 1543431361.678, "endTime": 1543431485.275, "status": "Succeeded" }, { "lifecycleEventName": "AfterInstall", "startTime": 1543431485.52, "endTime": 1543431486.033, "status": "Succeeded" }, { "lifecycleEventName": "BeforeAllowTraffic", "startTime": 1543431486.838, "endTime": 1543431487.483, "status": "Succeeded" }, { "lifecycleEventName": "AllowTraffic", "startTime": 1543431487.748, "endTime": 1543431488.488, "status": "Succeeded" }, { "lifecycleEventName": "AfterAllowTraffic", "startTime": 1543431489.152, "endTime": 1543431489.885, "status": "Succeeded" } ], "status": "Succeeded", "taskSetsInfo": [ { "identifer": "ecs-svc/9223370493425779968", "desiredCount": 1, "pendingCount": 0, "runningCount": 1, "status": "ACTIVE", "trafficWeight": 0.0, "targetGroup": { "name": "bluegreentarget1" } }, { "identifer": "ecs-svc/9223370493423413672", "desiredCount": 1, "pendingCount": 0, "runningCount": 1, "status": "PRIMARY", "trafficWeight": 100.0, "targetGroup": { "name": "bluegreentarget2" } } ] } }}

API バージョン 2014-11-13338

Amazon ECS AWS Fargate 用ユーザーガイドステップ 7: クリーンアップ

ステップ 7: クリーンアップこのチュートリアルが終了したら、使用していないリソースに対する料金が発生しないように、チュートリアルに関連付けられたリソースをクリーンアップします。

チュートリアルに関連付けられたリソースのクリーンアップ

1. CodeDeploy デプロイグループを削除するには、delete-deployment-group コマンドを使用します。

aws deploy delete-deployment-group \ --application-name tutorial-bluegreen-app \ --deployment-group-name tutorial-bluegreen-dg \ --region us-east-1

2. CodeDeploy アプリケーションを削除するには、delete-application コマンドを使用します。

aws deploy delete-application \ --application-name tutorial-bluegreen-app \ --region us-east-1

3. Amazon ECS サービスを削除するには、delete-service コマンドを使用します。--force フラグを使用すると、タスクがゼロになっていなくてもサービスを削除できます。

aws ecs delete-service \ --service arn:aws:ecs:region:aws_account_id:service/service-bluegreen \ --force \ --region us-east-1

4. Amazon ECS クラスターを削除するには、delete-cluster コマンドを使用します。

aws ecs delete-cluster \ --cluster tutorial-bluegreen-cluster \ --region us-east-1

5. AppSpec ファイルを Amazon S3 バケットから削除するには、s3 rm コマンドを使用します。

aws s3 rm s3://tutorial-bluegreen-bucket/appspec.yaml

6. Amazon S3 バケットを削除するには、s3 rb コマンドを使用します。

aws s3 rb s3://tutorial-bluegreen-bucket

7. Application Load Balancer を削除するには、delete-load-balancer コマンドを使用します。

aws elbv2 delete-load-balancer \ --load-balancer-arn arn:aws:elasticloadbalancing:region:aws_account_id:loadbalancer/app/bluegreen-alb/e5ba62739c16e642 \ --region us-east-1

8. 2 つの Application Load Balancer ターゲットグループを削除するには、delete-target-group コマンドを使用します。

aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:region:aws_account_id:targetgroup/bluegreentarget1/209a844cd01825a4 \ --region us-east-1

API バージョン 2014-11-13339

Amazon ECS AWS Fargate 用ユーザーガイドチュートリアル: CodePipeline を使用した継続的なデプロイ

aws elbv2 delete-target-group \ --target-group-arn arn:aws:elasticloadbalancing:region:aws_account_id:targetgroup/bluegreentarget2/708d384187a3cfdc \ --region us-east-1

チュートリアル: CodePipeline を使用した継続的なデプロイ

このチュートリアルでは、Amazon ECS と CodePipeline を使用して、完全なエンドツーエンドの継続的なデプロイ (CD) パイプラインを作成します。

前提条件このチュートリアルで CD パイプラインを作成する前に、いつくかのリソースを用意する必要があります。使用を開始するために必要なものは以下のとおりです。

Note

これらのすべてのリソースを、同じ AWS リージョン内に作成する必要があります。

• Dockerfile およびアプリケーションリソースを使用するソースコントロールリポジトリ (このチュートリアルでは CodeCommit を使用します)。詳細については、『AWS CodeCommit ユーザーガイド』の「CodeCommit リポジトリを作成する」を参照してください。

• Dockerfile およびアプリケーションソースから作成したイメージを含む Docker イメージリポジトリ(このチュートリアルでは Amazon ECR を使用します)。詳細については、Amazon Elastic ContainerRegistry ユーザーガイド の「リポジトリの作成」および「イメージのプッシュ」を参照してください。

• イメージリポジトリでホストされた Docker イメージを参照する Amazon ECS タスク定義。詳細については、Amazon Elastic Container Service Developer Guide の「タスク定義の作成」を参照してください。

• 前に説明したタスク定義を使用するサービスを実行する Amazon ECS クラスター。詳細については、Amazon Elastic Container Service Developer Guide の「クラスターの作成」および「サービスの作成」を参照してください。

これらの前提条件を満たした後、チュートリアルに進んで CD パイプラインを作成できます。

ステップ 1: ビルド仕様ファイルをソースリポジトリに追加するこのチュートリアルでは、CodeBuild を使用して Docker イメージを構築し、Amazon ECR にイメージをプッシュします。buildspec.yml ファイルをソースコードリポジトリに追加して CodeBuild に処理方法を指示します。ビルド仕様の以下の例では、次のように動作します。

• プレビルドステージ:• Amazon ECR にログインします。• リポジトリ URI を ECR イメージに設定して、ソースの Git コミット ID の最初の 7 文字を使用するイ

メージタグを追加します。• ビルドステージ:

API バージョン 2014-11-13340

Amazon ECS AWS Fargate 用ユーザーガイドステップ 1: ビルド仕様ファイルをソースリポジトリに追加する

• Docker イメージを作成し、イメージに latest と Git コミット ID の両方をタグ付けします。• ポストビルドステージ:

• 両方のタグを持った ECR リポジトリにイメージをプッシュします。• Amazon ECS サービスのコンテナ名およびイメージとタグがあるビルドのルートにimagedefinitions.json という名前のファイルを作成します。CD パイプラインのデプロイステージでこの情報を使用してサービスのタスク定義の新しいリビジョンを作成し、新しいタスク定義を使用してサービスを更新します。imagedefinitions.json ファイルは ECS ジョブワーカーに必須です。

version: 0.2

phases: install: runtime-versions: docker: 18 pre_build: commands: - echo Logging in to Amazon ECR... - aws --version - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email) - REPOSITORY_URI=012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $REPOSITORY_URI:latest . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $REPOSITORY_URI:latest - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.jsonartifacts: files: imagedefinitions.json

ビルド仕様が以下のタスク定義に書き込まれ、このチュートリアルの Amazon ECS サービスによって使用されます。REPOSITORY_URI 値は image リポジトリ (イメージタグなし) に対応し、ファイルの末尾近くの hello-world 値はサービスのタスク定義のコンテナ名に対応します。

{ "taskDefinition": { "family": "hello-world", "containerDefinitions": [ { "name": "hello-world", "image": "012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world:latest", "cpu": 100, "portMappings": [ { "protocol": "tcp", "containerPort": 80, "hostPort": 80 } ],

API バージョン 2014-11-13341

Amazon ECS AWS Fargate 用ユーザーガイドステップ 2: 継続的デプロイパイプラインを作成する

"memory": 128, "essential": true } ] }}

ソースリポジトリに buildspec.yml ファイルを追加するには

1. テキストエディタを開き、上記のビルド仕様をコピーして新しいファイルに貼り付けます。2. REPOSITORY_URI の値 (012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world)

を、Docker イメージの自分の Amazon ECR リポジトリ URI (イメージタグなし) に置き換えます。hello-world を、Docker イメージを参照するサービスのタスク定義のコンテナ名に置き換えます。

3. ソースリポジトリに buildspec.yml ファイルをコミットし、プッシュします。

a. ファイルを追加します。

git add .

b. 変更をコミットします。

git commit -m "Adding build specification."

c. コミットをプッシュします。

git push

ステップ 2: 継続的デプロイパイプラインを作成するCodePipeline ウィザードを使用してパイプラインステージを作成し、ソースリポジトリを ECS サービスに接続します。

パイプラインを作成するには

1. CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/) を開きます。2. [Welcome (ようこそ)] ページで、[Create pipeline (パイプラインの作成)] を選択します。

CodePipeline を初めて使用する場合は、[Welcome (ようこそ)] の代わりに紹介ページが表示されます。[Get Started Now] を選択します。

3. [Step 1: Name (ステップ 1: 名前)] ページの [パイプライン名] ボックスにパイプラインの名前を入力し、[Next (次へ)] を選択します。このチュートリアルでは、パイプライン名は hello-world です。

4. [Step 2: Add source stage (ステップ 2: ソースステージの追加)] ページの、[ソースプロバイダ] で[AWS CodeCommit] を選択します。

a. [Repository name (リポジトリ名)] で、パイプラインのソース場所として使用する CodeCommitリポジトリの名前を選択します。

b. [ブランチ名] で使用するブランチを選択し、[Next (次へ)] を選択します。5. [Step 3: Add build stage (ステップ 3: ビルドステージの追加)] ページの、[ビルドプロバイダ] で [AWS

CodeBuild] を選択し、[Create project (プロジェクトの作成)] を選択します。

a. [Project name] では、ビルドプロジェクトに一意の名前を選択します。このチュートリアルでは、プロジェクト名は hello-world です。

b. [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

API バージョン 2014-11-13342

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: Amazon ECR アクセス権限を CodeBuild ロールに追加する

c. [オペレーティングシステム] で、[Amazon Linux 2] を選択します。d. [ランタイム] で、[Standard (標準)] を選択します。e. [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:2.0] を選択します。f. [イメージバージョン] と [環境タイプ] には、既定値を使用します。g. [Enable this flag if you want to build Docker images or want your builds to get elevated privileges

(Docker イメージを構築する場合、またはビルドで昇格された権限を取得する場合は、このフラグを有効にする)] を選択します。

h. [CloudWatch logs] の選択を解除します。i. [Continue to CodePipeline (CodePipeline に進む)] を選択します。j. [Next] を選択します。

Note

ウィザードによって、[code-build-build-project-name-service-role] という名前のビルドプロジェクト用の CodeBuild サービスロールが作成されます。このロール名を書き留めます。これには後で Amazon ECR アクセス権限を追加します。

6. [Step 4: Add deploy stage (ステップ 4: デプロイステージの追加)] の [デプロイプロバイダ] に、[Amazon ECS] を選択します。

a. [Cluster name (クラスター名)] で、サービスが実行されている Amazon ECS クラスターを選択します。このチュートリアルでは、クラスターは default です。

b. [サービス名] で更新するサービスを選択し、[Next (次へ)] を選択します。このチュートリアルでは、サービス名は hello-world です。

7. [ステップ 5: レビュー] ページで、パイプラインの設定を確認し、[パイプラインの作成] を選択してパイプラインを作成します。

Note

これでパイプラインが作成され、さまざまなパイプラインステージを通して実行を試みます。ただし、ウィザードによって作成されたデフォルトの CodeBuild ロールには、buildspec.yml ファイルに含まれるコマンドのすべてを実行するアクセス権限がないため、ビルドステージは失敗します。次のセクションで、ビルドステージのアクセス権限を追加します。

ステップ 3: Amazon ECR アクセス権限を CodeBuildロールに追加するCodePipeline ウィザードによって、[code-build-build-project-name-service-role] という名前のCodeBuild ビルドプロジェクト用の IAM ロールが作成されます。このチュートリアルでは、名前は code-build-hello-world-service-role です。buildspec.yml ファイルは Amazon ECR API オペレーションの呼び出しを実行するため、これらの Amazon ECR コールを行うアクセス権限を許可するポリシーがロールに必要です。以下の手順では、適切なアクセス権限をロールにアタッチします。

Amazon ECR アクセス権限を CodeBuild ロールに追加するには

1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. 左のナビゲーションペインで、[Roles (ロール)] を選択します。3. 検索ボックスに 「codebuild-」と入力し、CodePipeline ウィザードによって作成されたロールを選択

します。このチュートリアルでは、ロール名は codebuild-hello-world-service-role です。4. [Summary (概要)] ページで、[Attach policy (ポリシーのアタッチ)] を選択します。5. [AmazonEC2ContainerRegistryPowerUser] ポリシーの左にあるボックスをオンにし、[Attach policy]

を選択します。API バージョン 2014-11-13

343

Amazon ECS AWS Fargate 用ユーザーガイドステップ 4: パイプラインのテスト

ステップ 4: パイプラインのテストパイプラインには、エンドツーエンドの AWS ネイティブな継続的デプロイを実行するために必要なすべてが含まれているはずです。次は、コードの変更をソースリポジトリにプッシュすることで機能をテストします。

パイプラインをテストするには

1. 設定済みソースリポジトリにコード変更を行い、変更をコミットしてプッシュします。2. CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/) を開きます。3. リストからパイプラインを選択します。4. ステージを通してパイプラインの進行状況を監視します。パイプラインが終了し、Amazon ECS サー

ビスがコード変更から作成された Docker イメージを実行することを確認します。

API バージョン 2014-11-13344

Amazon ECS AWS Fargate 用ユーザーガイドチュートリアル: Amazon ECS

CloudWatch イベント のリッスン

チュートリアル: Amazon ECS CloudWatch イベント のリッスン

このチュートリアルでは、Amazon ECS タスクイベントをリッスンして CloudWatch Logs ログストリームに書き込むシンプルな AWS Lambda 関数を設定します。

前提条件: テスト用クラスターを設定するイベントをキャプチャする実行中のクラスターがなければ、クラスターの作成 (p. 20) のステップに従ってクラスターを作成します。このチュートリアルの最後に、このクラスターでタスクを実行して Lambda 関数が正しく設定されていることをテストします。

ステップ 1: Lambda 関数を作成するこの手順では、Amazon ECS イベントストリームメッセージのターゲットとなるシンプルな Lambda 関数を作成します。

1. AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。2. [Create function] を選択します。3. [Author from scratch] 画面で、次の操作を行います。

a. [名前] に値を入力します。b. [Runtime] で [Python 2.7] を選択します。c. [Role] で、[Create a new role with basic Lambda permissions] を選択します。

4. [Create function] を選択します。5. [Function code] セクションで、以下の例に一致するようにサンプルコードを編集します。

import json

def lambda_handler(event, context): if event["source"] != "aws.ecs": raise ValueError("Function only supports input from events with a source type of: aws.ecs") print('Here is the event:') print(json.dumps(event))

これは、Amazon ECS から送信されたイベントを印刷するシンプルな Python 2.7 関数です。すべてが正しく設定されると、このチュートリアルの最後に、この Lambda 関数に関連付けられているCloudWatch Logs ログストリームにイベントの詳細が表示されます。

6. [Save] を選択します。

ステップ 2: イベントルールを登録する次に、Amazon ECS クラスターから送信されるタスクイベントをキャプチャする CloudWatch イベント イベントルールを作成します。このルールでは、それが定義されているアカウント内のすべてのクラスターから送信されるすべてのイベントがキャプチャされます。タスクメッセージ自体内に、イベントソースに関する情報 (イベントソースがあるクラスターの情報など) が含まれており、この情報を使用してプログラムでイベントをフィルタしてソートできます。

API バージョン 2014-11-13345

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ルールをテストする

Note

AWS マネジメントコンソール を使用してイベントルールを作成すると、CloudWatch イベントに Lambda 関数を呼び出す権限を付与するために必要な IAM アクセス権限がコンソールによって自動的に追加されます。AWS CLI を使用してイベントルールを作成する場合は、この権限を明示的に付与する必要があります。詳細については、『Amazon CloudWatch Events ユーザーガイド』の「イベントとイベントパターン」を参照してください。

Lambda 関数にイベントをルーティングするには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. ナビゲーションペインで、[Events]、[Rules]、[Create rule] の順に選択します。3. [Event Source] で、イベントソースとして [ECS] を選択します。デフォルトでは、すべての Amazon

ECS グループのすべての Amazon ECS イベントにルールが適用されます。または、特定のイベントや特定の Amazon ECS グループを選択することもできます。

4. [Targets (ターゲット)] で [Add target (ターゲットの追加)] を選択し、[Target type (ターゲットの種類)]で [Lambda function (Lambda 関数)] を選択して、Lambda 関数を選択します。

5. [Configure details] を選択します。6. [Rule definition] で、ルールの名前と説明を入力し、[Create rule] を選択します。

ステップ 3: ルールをテストする最後に、Amazon ECS クラスターから送信されるタスクイベントをキャプチャする CloudWatch イベント イベントルールを作成します。このルールでは、それが定義されているアカウント内のすべてのクラスターから送信されるすべてのイベントがキャプチャされます。タスクメッセージ自体内に、イベントソースに関する情報 (イベントソースがあるクラスターの情報など) が含まれており、この情報を使用してプログラムでイベントをフィルタしてソートできます。

ルールをテストするには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. [Clusters]、[default] の順に選択します。3. [Cluster : default] 画面で、[Tasks]、[Run new Task] の順に選択します。4. [Task Definition] で、最新バージョンの [console-sample-app-static] を選択し、[Run Task] を選択しま

す。5. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。6. ナビゲーションペインで、[Logs (ログ)] を選択して Lambda 関数 (/aws/lambda/ my-function など)

のロググループを選択します。7. イベントデータを表示するログストリームを選択します。

チュートリアル: タスク停止時のイベントに関するAmazon Simple Notification Service アラートを送信する

このチュートリアルでは、基本的なコンテナのいずれかの終了に伴ってタスクの実行が停止した場合に限り、タスクイベントをキャプチャする CloudWatch イベント イベントルールを設定します。イベントから

API バージョン 2014-11-13346

Amazon ECS AWS Fargate 用ユーザーガイド前提条件: テスト用クラスターを設定する

は、特定の stoppedReason プロパティを持つタスクイベントのみが、指定された Amazon SNS トピックに送信されます。

前提条件: テスト用クラスターを設定するイベントをキャプチャする実行中のクラスターがなければ、クラスターの作成 (p. 20) のステップに従ってクラスターを作成します。このチュートリアルの最後に、このクラスターでタスクを実行して AmazonSNS トピックと CloudWatch イベント イベントルールが正しく設定されていることをテストします。

ステップ 1: Amazon SNS トピックを作成してサブスクライブするこのチュートリアルでは、新しいイベントルールのイベントターゲットとして使用する Amazon SNS トピックを設定します。

Amazon SNS トピックを作成するには

1. Amazon SNS コンソール (https://console.aws.amazon.com/sns/v3/home) を開きます。2. [トピック]、[トピックの作成] の順に選択します。3. [トピックの作成] 画面で、[名前] に「TaskStoppedAlert」と入力し、[トピックの作成] を選択します。4. [TaskStoppedAlert] の詳細画面で、[サブスクリプションの作成] を選択します。5. [サブスクリプションの作成] 画面の [プロトコル] で、[E メール] を選択します。[Endpoint] に、現在利

用できるメールアドレスを入力し、[Create subscription] を選択します。6. メールアカウントを確認し、サブスクリプションの確認メールメッセージが届くのを待ちます。確認

メールが届いたら、[Confirm subscription] を選択します。

ステップ 2: イベントルールを登録する次に、コンテナが停止されたタスクについてのみ、タスク停止時のイベントをキャプチャするイベントルールを登録します。

イベントルールを作成するには

1. https://console.aws.amazon.com/cloudwatch/ にある CloudWatch コンソールを開きます。2. ナビゲーションペインで、[Events]、[Rules]、[Create rule] の順に選択します。3. [イベントソース] で [イベントパターン]、[カスタムイベントパターン] の順に選択し、既存のテキスト

を次のテキストに置き換えます。

{ "source":[ "aws.ecs" ], "detail-type":[ "ECS Task State Change" ], "detail":{ "lastStatus":[ "STOPPED" ], "stoppedReason":[ "Essential container in task exited" ] }

API バージョン 2014-11-13347

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ルールをテストする

}

このコードは、lastStatus フィールドと stoppedReason フィールドが指定された値と一致するイベントに一致する CloudWatch イベント イベントルールを定義します。イベントパターンの詳細については、イベントとイベントパターン (Amazon CloudWatch ユーザーガイド) を参照してください。

4. [Targets] で、[Add target] を選択します。[Target type] で [SNS topic] を選択し、[TaskStoppedAlert]を選択します。

5. [Configure details] を選択します。6. [Rule definition] で、ルールの名前と説明を入力し、[Create rule] を選択します。

ステップ 3: ルールをテストする開始直後に終了するタスクを実行して、ルールが機能していることを確認します。イベントルールが正しく設定されていれば、数分以内にイベントテキストが記載されたメールメッセージが届きます。ルールの要件を満たす既存のタスク定義がある場合は、それを使用してタスクを実行します。そうでない場合は、次の手順に従って Fargate タスク定義を登録し、その定義を使用してタスクを実行します。

ルールをテストするには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. [Task Definitions]、[Create new Task Definition] の順に選択します。3. [起動タイプの互換性の選択] で、[FARGATE]、[次のステップ] の順に選択します。4. [Configure via JSON (JSON 経由で設定)] を選択し、次のタスク定義 JSON をコピーしてフィールド

に貼り付け、[保存] を選択します。

{ "containerDefinitions":[ { "command":[ "sh", "-c", "sleep 5" ], "essential":true, "image":"amazonlinux:2", "name":"test-sleep" } ], "cpu":"256", "executionRoleArn":"arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family":"fargate-task-definition", "memory":"512", "networkMode":"awsvpc", "requiresCompatibilities":[ "FARGATE" ]}

5. [Create (作成)]、[View task definition (タスク定義の表示)] の順に選択します。6. [Actions (アクション)] で、[Run Task (タスクの実行)] を選択します。7. [Launch type (起動タイプ)] で、[FARGATE] を選択します。[VPC and security groups (VPC とセキュ

リティグループ)] で、使用するタスクの VPC とサブネットを選択し、[Run Task (タスクの実行)] を選択します。

8. [Container name] として [Wordpress]、[Image] として [wordpress]、[Maximum memory (MB)] として[128] を入力します。

API バージョン 2014-11-13348

Amazon ECS AWS Fargate 用ユーザーガイドステップ 3: ルールをテストする

9. クラスターの [Tasks] のタブで、タスクが実行されなくなるまで、更新アイコンを一定間隔で選択します。タスクが停止したことを確認するには、[Desired task status (必要なタスクのステータス)] で、[停止] を選択します。

10. 停止の通知に関するアラートのメールが届いていることを確認します。

API バージョン 2014-11-13349

Amazon ECS AWS Fargate 用ユーザーガイド停止されたタスクでのエラーの確認

Amazon ECS のトラブルシューティング

ロードバランサー、タスク、サービス、またはコンテナインスタンスの問題のトラブルシューティングが必要な場合があります。この章は、Amazon ECS コンソールで Amazon ECS コンテナエージェント、コンテナインスタンス上の Docker デーモン、サービスイベントログから診断情報を見つけるのに役立ちます。

トピック• 停止されたタスクでのエラーの確認 (p. 350)• 停止したタスクのエラーコード (p. 355)• CannotPullContainer task errors (p. 357)• サービスイベントメッセージ (p. 359)• 指定された CPU またはメモリの値が無効 (p. 360)• サービスロードバランサーのトラブルシューティング (p. 360)

停止されたタスクでのエラーの確認タスクの開始に問題がある場合、エラーのためにタスクが停止している可能性があります。たとえば、タスクを実行するとタスクが PENDING ステータスを表示して消えるとします。停止されたタスクを表示し、エラーメッセージを検査することで、Amazon ECS コンソールでこのようなエラーを表示できます。

停止されたタスクでエラーを確認するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. [クラスター] ページで、停止されたタスクが存在するクラスターを選択します。3. [クラスター: clustername] ページで、[タスク] を選択します。4. [必要なタスクのステータス] テーブルのヘッダーで、[停止] を選択して停止されたタスクを表示し、

その中から検査するタスクを選択します。直近の停止されたタスクが先頭に表示されます。5. [詳細] セクションで、[停止理由] フィールドを検査して、タスクが停止された理由を確認します。

API バージョン 2014-11-13350

Amazon ECS AWS Fargate 用ユーザーガイド停止されたタスクでのエラーの確認

6. 停止されたコンテナがある場合は、コンテナを展開し、[Status reason (状況の理由)] 行を検査して、タスクの状態が変わった原因を確認します。

前の例で、コンテナイメージ名が見つかりませんでした。イメージ名のスペルが正しくない可能性があります。

この検査で十分な情報が得られない場合は、「

Fargate タスクが予期せず停止したときに表示される可能性があるエラーメッセージを以下に示します。エラーメッセージはコンテナエージェントから返されます。プレフィックスは、タスクで使用しているプラットフォームバージョンに応じて異なります。

停止したタスクのエラーメッセージを AWS マネジメントコンソール で確認する方法については、「停止されたタスクでのエラーの確認 (p. 350)」を参照してください。

API バージョン 2014-11-13351

Amazon ECS AWS Fargate 用ユーザーガイド停止されたタスクでのエラーの確認

DockerTimeoutError ContainerRuntimeTimeoutErrorこのエラーは、タイムアウト期間

ContainerRuntimeTimeoutError:Could not

内にコンテナが transition toRUNNING 状態ま running; timedたは STOPPED out after状態に移行できなかった場合に発生 waiting 1m:

<reason>します。理由とタイムアウト値は、エラーメッセージに表示されます。

CannotStartContainerErrorCannotStartContainerErrorこのエラーは、コンテナを開始でき

CannotStartContainerError:failed toget container

ない場合に発生します。

status:<reason>

CannotStopContainerErrorCannotStopContainerErrorこのエラーは、コンテナを停止でき

CannotStopContainerError:failed sendingSIGTERM to

ない場合に発生します。

container:<reason>

CannotInspectContainerErrorCannotInspectContainerErrorこのエラーは、コンテナエージェン

CannotInspectContainerError:<reason>

トがコンテナランタイムを介してコンテナを記述できない場合に発生します。プラットフォームバージョン 1.3 以前を使用している場合、ECS エージェントは Dockerから理由を返します。プラットフォームバージョン 1.4 以降を使用している場合、Fargateエージェントはcontainerd から理由を返します。

API バージョン 2014-11-13352

Amazon ECS AWS Fargate 用ユーザーガイド停止されたタスクでのエラーの確認

ResourceInitializationErrorこのエラーは、コンテナの起動に

ResourceInitializationError:failed to

必要なリソース initializeやタスクの所属先 loggingのリソースを作成またはブートスト driver:

<reason>ラップすることにFargate エージェントが失敗した場合に発生します。このエラーは、プラットフォームバージョン 1.4 以降を使用している場合にのみ発生します。

CannotPullContainerErrorCannotPullContainerErrorこのエラーは、タスク定義に指定

CannotPullContainerError:<reason>

されているコンテナイメージをエージェントがプルできない場合に発生します。詳細については、「CannotPullContainertaskerrors (p. 357)」を参照してください。

CannotCreateVolumeErrorこのエラーは、タスク定義に指定さ

CannotCreateVolumeError:<reason>

れているボリュームマウントをエージェントが作成できない場合に発生します。このエラーは、プラットフォームバージョン 1.4 以降を使用している場合にのみ発生します。

API バージョン 2014-11-13353

Amazon ECS AWS Fargate 用ユーザーガイド停止されたタスクでのエラーの確認

ContainerRuntimeErrorこのエラーは、エージェントが

ContainerRuntimeError:failed

cotainerd からラ to createンタイム固有のオペレーションに container IO

set: <reason>関する予期しないエラーを受け取った場合に発生します。このエラーは通常、エージェントや containerd ランタイムの内部障害によって発生します。このエラーは、プラットフォームバージョン 1.4 以降を使用している場合にのみ発生します。

JVMOutOfMemoryError

JVMOutOfMemoryError

このエラーは、タスク定義で割り

OutOfMemoryError:container

当てられているよりも多くのメモリ killed due to

memory usageをコンテナ内のプロセスで消費しているためにコンテナーが終了したときに発生します。

InternalError このエラーは、エージェントが

InternalError:<reason>

予期しないランタイム関連でない内部エラーを検出した場合に発生します。このエラーは、プラットフォームバージョン 1.4 以降を使用している場合にのみ発生します。

プラットフォームバージョン 1.3 以前のエラーメッセージのプレフィックス

プラットフォームバージョン 1.4 以降のエラーメッセージのプレフィックス

詳細 例

(p. 355)」で詳細を参照してください。

API バージョン 2014-11-13354

Amazon ECS AWS Fargate 用ユーザーガイド停止したタスクのエラーコード

停止したタスクのエラーコードFargate タスクが予期せず停止したときに表示される可能性があるエラーメッセージを以下に示します。エラーメッセージはコンテナエージェントから返されます。プレフィックスは、タスクで使用しているプラットフォームバージョンに応じて異なります。

停止したタスクのエラーメッセージを AWS マネジメントコンソール で確認する方法については、「停止されたタスクでのエラーの確認 (p. 350)」を参照してください。

プラットフォームバージョン 1.3 以前のエラーメッセージのプレフィックス

プラットフォームバージョン 1.4 以降のエラーメッセージのプレフィックス

詳細 例

DockerTimeoutError ContainerRuntimeTimeoutErrorこのエラーは、タイムアウト期間内にコンテナが RUNNING 状態または STOPPED 状態に移行できなかった場合に発生します。理由とタイムアウト値は、エラーメッセージに表示されます。

ContainerRuntimeTimeoutError:Could nottransition torunning; timed outafter waiting 1m:<reason>

CannotStartContainerErrorCannotStartContainerErrorこのエラーは、コンテナを開始できない場合に発生します。

CannotStartContainerError:failed to getcontainer status:<reason>

CannotStopContainerErrorCannotStopContainerErrorこのエラーは、コンテナを停止できない場合に発生します。

CannotStopContainerError:failed sendingSIGTERM tocontainer:<reason>

CannotInspectContainerErrorCannotInspectContainerErrorこのエラーは、コンテナエージェントがコンテナランタイムを介してコンテナを記述できない場合に発生します。

プラットフォームバージョン 1.3 以前を使用している場合、ECS エージェントは Docker から理由を返します。

プラットフォームバージョン 1.4 以降を使用している場合、Fargate エージェントは containerd から理由を返します。

CannotInspectContainerError:<reason>

ResourceInitializationError このエラーは、コンテナの起動に必要なリ

ResourceInitializationError:failed to

API バージョン 2014-11-13355

Amazon ECS AWS Fargate 用ユーザーガイド停止したタスクのエラーコード

プラットフォームバージョン 1.3 以前のエラーメッセージのプレフィックス

プラットフォームバージョン 1.4 以降のエラーメッセージのプレフィックス

詳細 例

ソースやタスクの所属先のリソースを作成またはブートストラップすることに Fargateエージェントが失敗した場合に発生します。

このエラーは、プラットフォームバージョン1.4 以降を使用している場合にのみ発生します。

initialize loggingdriver: <reason>

CannotPullContainerError CannotPullContainerError このエラーは、タスク定義に指定されているコンテナイメージをエージェントがプルできない場合に発生します。詳細については、「CannotPullContainertask errors (p. 357)」を参照してください。

CannotPullContainerError:<reason>

CannotCreateVolumeErrorこのエラーは、タスク定義に指定されているボリュームマウントをエージェントが作成できない場合に発生します。

このエラーは、プラットフォームバージョン1.4 以降を使用している場合にのみ発生します。

CannotCreateVolumeError:<reason>

ContainerRuntimeError このエラーは、エージェントが cotainerdからランタイム固有のオペレーションに関する予期しないエラーを受け取った場合に発生します。このエラーは通常、エージェントやcontainerd ランタイムの内部障害によって発生します。

このエラーは、プラットフォームバージョン1.4 以降を使用している場合にのみ発生します。

ContainerRuntimeError:failed to createcontainer IO set:<reason>

API バージョン 2014-11-13356

Amazon ECS AWS Fargate 用ユーザーガイドCannotPullContainer task errors

プラットフォームバージョン 1.3 以前のエラーメッセージのプレフィックス

プラットフォームバージョン 1.4 以降のエラーメッセージのプレフィックス

詳細 例

JVM OutOfMemoryError JVM OutOfMemoryError このエラーは、タスク定義で割り当てられているよりも多くのメモリをコンテナ内のプロセスで消費しているためにコンテナーが終了したときに発生します。

OutOfMemoryError:container killeddue to memoryusage

InternalError このエラーは、エージェントが予期しないランタイム関連でない内部エラーを検出した場合に発生します。

このエラーは、プラットフォームバージョン1.4 以降を使用している場合にのみ発生します。

InternalError:<reason>

CannotPullContainer task errors次の Docker エラーは、タスクの作成時に指定されたコンテナイメージを取得できなかったことを示します。

接続タイムアウト

Fargate タスクが起動すると、その Elastic Network Interface はコンテナイメージを取得するためにインターネットへのルートを必要とします。タスクを起動する際に次のエラーが発生した場合は、インターネットへのルートが存在しません。

CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection"

この問題を解決するには、以下ができます。イメージが見つかりません

コンテナの定義で Amazon ECR イメージを指定する場合、ECR リポジトリの完全 ARN または URIを、そのリポジトリのイメージ名とともに使用する必要があります。リポジトリまたはイメージが見つからない場合は、以下のエラーが表示されます。

CannotPullContainerError: API error (404): repository 111122223333.dkr.ecr.us-east-1.amazonaws.com/<repo>/<image> not found

この問題を解決するには、リポジトリ ARN または URI とイメージ名を確認します。また、タスク実行 IAM ロールを使用して適切なアクセス権限がセットアップされていることを確認します。タスクの実行ロールの詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

API バージョン 2014-11-13357

Amazon ECS AWS Fargate 用ユーザーガイドCannotPullContainer task errors

ディスク容量の不足

コンテナイメージのプル時にコンテナインスタンスのルートボリュームにディスク容量が不足している場合、次のようなエラーが表示されます。

CannotPullContainerError: write /var/lib/docker/tmp/GetImageBlob111111111: no space left on device

この問題を解決するには、ディスク容量を解放します。

Amazon ECS-optimized AMI を使用している場合は、次のコマンドを使用してファイルシステムで 20個の最も大きいファイルを取得できます。

du -Sh / | sort -rh | head -20

出力例:

5.7G /var/lib/docker/containers/50501b5f4cbf90b406e0ca60bf4e6d4ec8f773a6c1d2b451ed8e0195418ad0d21.2G /var/log/ecs594M /var/lib/docker/devicemapper/mnt/c8e3010e36ce4c089bf286a623699f5233097ca126ebd5a700af023a5127633d/rootfs/data/logs...

場合によっては、上の例のように、実行中のコンテナによりルートボリュームが設定される可能性があります。コンテナが max-size 制限のないデフォルトの json-file ログドライバーを使用している場合、ログファイルが使用されているスペースの大半を占めている可能性があります。docker psコマンドを使用して、上記の出力からコンテナ ID にディレクトリ名をマッピングすることによって、どのコンテナが容量を使用しているかを確認します。例:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES50501b5f4cbf amazon/amazon-ecs-agent:latest "/agent" 4 days ago Up 4 days ecs-agent

デフォルトでは、json-file ログドライバーを使用する場合、Docker はすべてのコンテナの標準出力 (および標準エラー) をキャプチャし、JSON 形式を使用してファイルに書き込みます。ログドライバーオプションとして max-size を設定できます。これにより、ログファイルの容量が大きくなりすぎるのを防げます。詳細については、Docker ドキュメントの「ロギングドライバーの設定」を参照してください。

このオプションの使用方法を示すコンテナ定義のスニペットを次に示します。

{ "log-driver": "json-file", "log-opts": { "max-size": "256m" }}

コンテナログのディスク容量が大きすぎる場合、awslogs ログドライバーを使用することもできます。awslogs ログドライバーがログを CloudWatch に送信します。これによりコンテナインスタンスのコンテナログに使用されるディスク容量が解放されます。詳細については、「awslogs ログドライバーを使用する (p. 74)」を参照してください。

API バージョン 2014-11-13358

Amazon ECS AWS Fargate 用ユーザーガイドサービスイベントメッセージ

サービスイベントメッセージサービスの問題をトラブルシューティングする場合、最初に診断情報を確認する必要があるのは、サービスイベントログです。

Amazon ECS コンソールでサービスイベントメッセージを表示する際、重複したサービスイベントメッセージは、原因が解決するか、6 時間が経過するまで除外されます。問題が解決しない場合は、6 時間後に別のサービスイベントメッセージが送信されます。

Amazon ECS コンソールでサービスイベントログを検査するには

1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。2. [Clusters (クラスター)] ページで、サービスが存在するクラスターを選択します。3. [Cluster : clustername (クラスター: clustername)] ページで、検査するサービスを選択します。4. [Service : servicename (サービス : servicename)] ページで、[Events (イベント)] を選択します。

5. [Message (メッセージ)] 列で、エラーやその他の役立つ情報を調べます。

サービスイベントメッセージ以下は、コンソールに表示されることがあるサービスイベントメッセージの例です。

• service (service-name) is unable to consistently start tasks successfully. (p. 359)

service (service-name) is unable to consistently start taskssuccessfully.このサービスには、連続して試行された後開始に失敗したタスクがあります。この時点で、サービススケジューラによって再試行間隔が段階的に増加し始めます。タスクの起動に失敗している理由をトラブルシューティングする必要があります。詳細については、「サービスの調整ロジック (p. 184)」を参照してください。

API バージョン 2014-11-13359

Amazon ECS AWS Fargate 用ユーザーガイド指定された CPU またはメモリの値が無効

更新されたタスク定義などでサービスが更新された後、サービススケジューラは正常な動作を再開します。

指定された CPU またはメモリの値が無効タスクの登録時に cpu または memory に無効な値を指定した場合、次のエラーが発生します。

An error occurred (ClientException) when calling the RegisterTaskDefinition operation: Invalid 'cpu' setting for task. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.

この問題を解決するには、タスク定義でタスクの CPU とメモリにサポートされている値を指定する必要があります。

cpu 値はタスク定義では CPU ユニットまたは vCPU で表現できますが、タスク定義の登録時に CPU ユニットを示す整数に変換されます。EC2 起動タイプを使用している場合、サポートされる値は 128 CPUユニット (0.125 vCPUs) および 10240 CPU ユニット (10 vCPUs) です。Fargate 起動タイプを使用している場合、次の表のいずれかの値を使用する必要があります。この値により memory パラメータでサポートされる値の範囲が決まります。

memory 値はタスク定義では MiB または GB で表現できますが、タスク定義の登録時に MiB を示す整数に変換されます。EC2 起動タイプを使用している場合は、整数を指定する必要があります。Fargate 起動タイプを使用している場合、次の表のいずれかの値を使用する必要があります。この値により cpu パラメータでサポートされる値の範囲が決まります。

Fargate タスクでサポートされているタスク CPU とメモリの値は次のとおりです。

CPU の値 メモリの値 (MiB)

256 (.25 vCPU) 512 (0.5 GB)、1024 (1 GB)、2048 (2 GB)

512 (.5 vCPU) 1024 (1 GB)、2048 (2 GB)、3072 (3 GB)、4096 (4GB)

1024 (1 vCPU) 2048 (2 GB)、3072 (3 GB)、4096 (4 GB)、5120 (5GB)、6144 (6 GB)、7168 (7 GB)、8192 (8 GB)

2048 (2 vCPU) 4096 (4 GB) ~ 16384 (16 GB) (1024 (1 GB) のインクリメント)

4096 (4 vCPU) 8192 (8 GB) ~ 30720 (30 GB) (1024 (1 GB) のインクリメント)

サービスロードバランサーのトラブルシューティング

Amazon ECS サービスではタスクを Elastic Load Balancing ロードバランサーに登録できます。ロードバランサーの設定エラーは、タスクが停止された一般的な原因です。ロードバランサーを使用するサービスによって停止されたタスクが開始された場合は、以下の原因が考えられます。

Important

コンテナヘルスチェックは、Classic Load Balancer を使用するように設定されたサービスの一部であるタスクではサポートされていません。Amazon ECS サービススケジューラでは、ClassicLoad Balancer の背後で実行されている UNHEALTHY 状態のタスクは無視されます。

API バージョン 2014-11-13360

Amazon ECS AWS Fargate 用ユーザーガイドサービスロードバランサーのトラブルシューティング

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

コンテナがコンテナインスタンスのポート 80 にマッピングされている場合、コンテナインスタンスのセキュリティグループでは、ロードバランサーのヘルスチェックに合格するように、ポート 80 上の受信トラフィックを許可する必要があります。

すべてのアベイラビリティーゾーンを使用するように Elastic Load Balancing ロードバランサーが設定されていない

リージョン内のすべてのアベイラビリティーゾーンを使用するように、または少なくとも、コンテナインスタンスが存在するすべてのアベイラビリティーゾーンを使用するように、ロードバランサーを設定する必要があります。サービスでロードバランサーを使用している場合、ロードバランサーを使用するように設定されていないアベイラビリティーゾーンにあるコンテナインスタンスでタスクが開始されると、そのタスクはヘルスチェックに合格せず、強制終了されます。

Elastic Load Balancing ロードバランサーのヘルスチェックの設定が正しくない

ロードバランサーのヘルスチェックパラメータが過度に制限されているか、存在しないリソースを参照している可能性があります。コンテナインスタンスが異常であると判断されると、そのコンテナインスタンスはロードバランサーから削除されます。以下のパラメータがサービスロードバランサーに対して正しく設定されていることを確認してください。ping ポート

ロードバランサーのヘルスチェックの [Ping Port (ping ポート)] 値は、ロードバランサーが正常であるかどうかを判断するために確認するコンテナインスタンス上のポートです。このポートの設定が正しくないと、多くの場合、ロードバランサーからコンテナインスタンスが登録解除されます。このポートは、サービスのタスク定義内のヘルスチェック用のコンテナで hostPort 値を使用するように設定する必要があります。

ping パス

この値は index.html に設定されることがよくありますが、サービスがそのリクエストに応答しない場合、ヘルスチェックは失敗します。コンテナに index.html ファイルがない場合は、このファイルを / に設定して、コンテナインスタンスのベース URL をターゲットにすることができます。

応答タイムアウト

これは、コンテナがヘルスチェック ping に対する応答を返す必要のある時間です。この値が応答に必要な時間よりも短い場合、ヘルスチェックは失敗します。

ヘルスチェック間隔

これは、ヘルスチェック ping 間の時間です。ヘルスチェックの間隔が短くなるほど、コンテナインスタンスが [Unhealthy Threshold (非正常のしきい値)] に達するのが速くなります。

非正常のしきい値

これは、コンテナインスタンスが異常と見なされるまでに、ヘルスチェックが失敗できる回数です。異常と見なされるまでのしきい値が 2、ヘルスチェックの間隔が 30 秒の場合、コンテナインスタンスが異常と見なされるまでに、タスクはヘルスチェック ping に 60 秒間応答します。異常と見なされるまでのしきい値を増やすか、ヘルスチェックの間隔を長くすると、タスクが ping に応答する時間が長くなります。

Unable to update the service servicename: Load balancer container name or port changed in taskdefinition

サービスでロードバランサーを使用する場合、サービスの作成時に定義したロードバランサー設定は変更できません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。

ロードバランサー名、コンテナ名、またはサービスロードバランサー設定に関連付けられたコンテナポートを変更するには、新しいサービスを作成する必要があります。

API バージョン 2014-11-13361

Amazon ECS AWS Fargate 用ユーザーガイド

ドキュメント履歴次の表は、『AWS Fargate 用 Amazon ECS ユーザーガイド』の主な更新や新機能の一覧です。また、お客様からいただいたフィードバックに対応するために、ドキュメントを頻繁に更新しています。

変更 説明 日付

サービスクォータが更新されました

次のサービスクォータが更新されました。

• アカウントあたりのクラスターが 2,000 から 10,000に引き上げられました。

詳細については、「Amazon ECS サービスクォータ (p. 297)」を参照してください。

2020 年 4 月17 日

AWS Fargate プラットフォームバージョン 1.4.0

AWS Fargate プラットフォームバージョン 1.4.0 がリリースされました。このバージョンには、次の機能が含まれています。

• 永続的なタスクストレージとして Amazon EFS ファイルシステムボリュームを使用するサポートを追加しました。詳細については、「Amazon EFS ボリューム (p. 69)」を参照してください。

• エフェメラルタスクストレージを 20 GB に増加しました。詳細については、「タスクでのデータボリュームの使用 (p. 67)」を参照してください。

• タスクとの間のネットワークトラフィック動作を更新しました。プラットフォームバージョン 1.4.0 以降、すべての Fargate タスクは、単一の Elastic NetworkInterface (タスク ENI と呼ばれる) を受け取ります。すべてのネットワークトラフィックは、VPC 内でこの ENIを通過し、VPC フローログに表示されます。詳細については、「Fargate タスクネットワーキング (p. 72)」を参照してください。

• タスク ENI は、ジャンボフレームのサポートを追加しています。ネットワークインターフェイスは、最大転送単位 (MTU) で設定されます。MTU は、1 つのフレームに収まるペイロードの最大サイズです。MTU が大きいほど、1 つのフレームに収まるアプリケーションペイロードが大きくなり、フレームごとのオーバーヘッドが減少し、効率が向上します。ジャンボフレームをサポートすると、オーバーヘッドが減ります。タスクと転送先とのネットワークパスでジャンボフレームをサポートすると、VPC 内に残っているすべてのトラフィックなどのオーバーヘッドが軽減されます。

• CloudWatch Container Insights には、Fargate タスクのネットワークパフォーマンスメトリクスが含まれます。詳細については、「Amazon ECS CloudWatchContainer Insights (p. 207)」を参照してください。

• タスクメタデータエンドポイント v4 のサポートを追加しました。これにより、タスクのネットワーク統計情報や、タスクが実行されているアベイラビリティーゾーンなど、Fargate タスクに関する追加情報が提供されま

2020 年 4 月8 日

API バージョン 2014-11-13362

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付す。詳細については、「タスクメタデータエンドポイントバージョン 4 (p. 284)」を参照してください。

• コンテナの定義に SYS_PTRACE Linux パラメータのサポートを追加しました。詳細については、「Linux パラメータ (p. 54)」を参照してください。

• Fargate コンテナエージェントは、すべての Fargate タスクで Amazon ECS コンテナエージェントの代わりに使用されます。この変更は、タスクの実行方法には影響しません。

• コンテナランタイムは Docker の代わりに Containerd を使用するようになりました。この変更は、タスクの実行方法には影響しません。コンテナランタイムで発生するいくつかのエラーメッセージは、より一般的な内容になり、Docker については言及されないことがあります。

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

タスクボリュームとしてのAmazon EFS ファイルシステムのサポート

Amazon EFS ファイルシステムは、Fargate タスクのデータボリュームとして使用できます。詳細については、「Amazon EFS ボリューム (p. 69)」を参照してください。

2020 年 4 月8 日

Amazon ECS タスクメタデータエンドポイントバージョン 4

Fargate プラットフォームバージョン 1.4.0 以降、ECS_CONTAINER_METADATA_URI_V4 という環境変数がタスク内の各コンテナに挿入されます。タスクメタデータバージョン 4 エンドポイントに対してクエリを実行すると、さまざまなタスクメタデータおよび Docker統計情報がタスクで利用可能になります。詳細については、「タスクメタデータエンドポイントバージョン4 (p. 284)」を参照してください。

2020 年 4 月8 日

Fargate Spot Amazon ECS では、Fargate Spot を使用したタスクの実行のサポートが追加されました。詳細については、「AWSFargate キャパシティープロバイダーの使用 (p. 22)」を参照してください。

2019 年 12月 3 日

サービスアクションイベント

Amazon ECS では、特定のサービスアクションが発生したときに Amazon EventBridge にイベントを送信するようになりました。詳細については、「サービスアクションイベント (p. 202)」を参照してください。

2019 年 11月 25 日

Savings Plans Savings Plans は、AWS の使用料金を大幅に削減できる料金モデルです。詳細については、「Savings Plans、および AWS Fargate (p. 299)」を参照してください。

2019 年 11月 6 日

Amazon ECS 対応 FireLens Amazon ECS 対応 FireLens は一般提供となります。Amazon ECS 対応 FireLens では、タスク定義パラメータを使用して、ログのストレージと分析のためにAWS サービスまたはパートナーの宛先にログをルーティングできます。詳細については、「カスタムログルーティング (p. 79)」を参照してください。

2019 年 9 月30 日

API バージョン 2014-11-13363

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

AWS Fargate リージョンの拡張

Amazon ECS を搭載した AWS Fargate が 欧州 (パリ)、欧州 (ストックホルム)、中東 (バーレーン) の各リージョンに拡張されました。

2019 年 9 月30 日

Amazon ECS 対応 FireLens Amazon ECS 対応 FireLens はパブリックプレビューです。Amazon ECS 対応 FireLens では、タスク定義パラメータを使用して、ログのストレージと分析のためにAWS サービスまたはパートナーの宛先にログをルーティングできます。詳細については、「カスタムログルーティング (p. 79)」を参照してください。

2019 年 8 月30 日

CloudWatch ContainerInsights

CloudWatch Container Insights は一般利用可能です。コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集計、要約できます。詳細については、「Amazon ECS CloudWatch ContainerInsights (p. 207)」を参照してください。

2019 年 8 月30 日

AWS Fargate リージョンの拡張

AWS Fargate を搭載した Amazon ECS が アジアパシフィック (香港) リージョンに拡張されました。

2019 年 8 月6 日

サービスに複数のターゲットグループを登録する

サービス定義で複数のターゲットグループを指定するためのサポートが追加されました。詳細については、「サービスに複数のターゲットグループを登録する (p. 171)」を参照してください。

2019 年 7 月30 日

CloudWatch ContainerInsights

Amazon ECS は、CloudWatch Container Insights のサポートを追加しました。詳細については、「Amazon ECSCloudWatch Container Insights (p. 207)」を参照してください。

2019 年 7 月9 日

Amazon ECS サービスおよびタスクセットのリソースレベルのアクセス許可

Amazon ECS で、Amazon ECS のサービスおよびタスクセットのリソースレベルのアクセス許可が拡張されました。詳細については、Amazon Elastic Container Serviceと IAM の連携 (p. 216) を参照してください。

2019 年 6 月27 日

AWS Fargate プラットフォームのバージョン 1.3.0の更新

2019 年 5 月 1 日以降、開始される新しい Fargate タスクでは、awslogs ログドライバーに加えて splunk ログドライバーがサポートされます。詳細については、「ストレージとログ記録 (p. 48)」を参照してください。

2019 年 5 月1 日

AWS Fargate プラットフォームのバージョン 1.3.0の更新

2019 年 5 月 1 日以降、開始される新しい Fargate タスクでは、secretOptions コンテナ定義パラメータを使用してコンテナのログ設定内の機密データを参照できます。詳細については、「機密データの指定 (p. 92)」を参照してください。

2019 年 5 月1 日

AWS Fargate プラットフォームのバージョン 1.3.0の更新

2019 年 4 月 2 日以降、開始される新しい Fargate タスクでは、AWS Secrets Manager シークレットまたは AWSSystems Manager パラメータストアのパラメータに機密データを保存してコンテナの定義でそれを参照することにより、コンテナに機密データを挿入できます。詳細については、「機密データの指定 (p. 92)」を参照してください。

2019 年 4 月2 日

API バージョン 2014-11-13364

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

AWS Fargate プラットフォームのバージョン 1.3.0更新

2019 年 3 月 27 日以降、開始される新しい Fargate タスクでは、プロキシ設定、コンテナの起動およびシャットダウンの依存関係、コンテナ別の起動および停止のタイムアウト値を定義できる、追加タスク定義パラメータを使用できます。詳細については、「プロキシ設定 (p. 62)」、「コンテナの依存関係 (p. 55)」、および「コンテナのタイムアウト (p. 56)」を参照してください。

2019 年 3 月27 日

Amazon ECS、外部デプロイタイプを導入

外部デプロイタイプでは、Amazon ECS サービスのデプロイプロセスを完全に制御するためのサードパーティーのデプロイコントローラーを使用できます。詳細については、「外部デプロイ (p. 155)」を参照してください。

2019 年 3 月27 日

Amazon ECS でPutAccountSettingDefaultAPI を導入

Amazon ECS では、PutAccountSettingDefault APIが導入されました。これにより、ユーザーはアカウントのすべての IAM ユーザーおよびロールに対して、デフォルトの ARN/ID 形式のオプトインステータスを設定できるようになりました。以前は、アカウントのデフォルトのオプトインステータスを設定するには、root ユーザーを使用する必要がありました。

詳細については、「Amazon リソースネーム (ARN) とID (p. 109)」を参照してください。

2019 年 2 月8 日

インターフェイス VPCエンドポイント (AWSPrivateLink)

AWS PrivateLink を使用したインターフェイス VPC エンドポイントの設定のサポートが追加されました。これにより、インターネット、NAT インスタンス、VPN 接続、または AWS Direct Connect を経由せずに、VPC と AmazonECS とをプライベートに接続できます。

詳細については、「インターフェイス VPC エンドポイント (AWS PrivateLink)」を参照してください。

2018 年 12 月 26 日

AWS Fargate プラットフォームバージョン 1.3.0

以下を含むリリースされた新しい AWS Fargate プラットフォームバージョン。

• AWS Systems Manager パラメータストアパラメータを使用して、コンテナに機密データを挿入する機能のサポートが追加されました。

詳細については、「機密データの指定 (p. 92)」を参照してください。

• Fargate タスクのタスクリサイクルが追加されました。これは、Amazon ECS サービスの一部であるタスクを更新するプロセスです。

詳細については、「Fargate タスクリサイクル (p. 120)」を参照してください。

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

2018 年 12月 17 日

API バージョン 2014-11-13365

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

AWS Fargate リージョンの拡張

AWS Fargate を搭載した Amazon ECS が アジアパシフィック (ムンバイ) および カナダ (中部) の各リージョンに拡張されました。

2018 年 12月 7 日

Amazon ECS Blue/Green デプロイ

CodeDeploy を使用した Blue/Green デプロイのサポートが Amazon ECS に追加されました。このデプロイタイプでは、本番稼働用トラフィックを送信する前にサービスの新しいデプロイメントを検証することができます。

詳細については、「CodeDeploy を使用した Blue/Greenデプロイ (p. 150)」を参照してください。

2018 年 11月 27 日

リソースへのタグ付け サービス、タスク定義、タスク、クラスター、コンテナインスタンスにメタデータタグを追加する機能のサポートがAmazon ECS に追加されました。

詳細については、「リソースとタグ (p. 186)」を参照してください。

2018 年 11月 15 日

AWS Fargate リージョンの拡張

AWS Fargate を搭載した Amazon ECS が 米国西部 (北カリフォルニア) および アジアパシフィック (ソウル) の各リージョンに拡張されました。

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

2018 年 11月 7 日

サービスの制限を更新しました

次のサービスの制限が更新されました。

• アカウント別のリージョンごとに、Fargate 起動タイプを使用するタスクの数が 20 から 50 に引き上げられました。

• Fargate 起動タイプを使用するタスクのパブリック IP アドレスの数が 20 から 50 に引き上げられました。

詳細については、「Amazon ECS サービスクォータ (p. 297)」を参照してください。

2018 年 10月 31 日

AWS Fargate リージョンの拡張

AWS Fargate を搭載した Amazon ECS が 欧州 (ロンドン)リージョンに拡張されました。

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

2018 年 10月 26 日

AWS Fargate を使用したAmazon ECS のプライベートレジストリ認証のサポート

Amazon ECS では、AWS Secrets Manager で、プライベートレジストリ認証を使用した Fargate タスクのサポートが導入されました。この機能では、認証情報を安全に保管してコンテナの定義で参照できるため、タスクでプライベートイメージを使用することができます。

詳細については、「タスクのプライベートレジストリの認証 (p. 89)」を参照してください。

2018 年 9 月10 日

API バージョン 2014-11-13366

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

Amazon ECS CLI v1.8.0 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• Docker 構成ファイルに、Docker ボリュームのサポートが追加されました。

• タスク配置の制約事項と戦略のサポートが Docker 構成ファイルで追加されました。

• Docker 構成ファイルに、プライベートレジストリ認証のサポートが追加されました。

• compose up 上でタスクの再起動を強制する --force-update のサポートが追加されました。

詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

2018 年 9 月7 日

Amazon ECS サービス検出リージョンの拡大

Amazon ECS サービス検出のサポートが、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、欧州 (フランクフルト)、および 欧州 (ロンドン) の各リージョンに拡張されました。

詳細については、「サービス検出 (p. 181)」を参照してください。

2018 年 8 月30 日

Fargate タスクのサポートでスケジュールされたタスク

Amazon ECS では Fargate 起動タイプのスケジュールされたタスクのサポートが導入されました。

詳細については、「タスクのスケジューリング(cron) (p. 116)」を参照してください。

2018 年 8 月28 日

AWS Fargate リージョンの拡張

AWS Fargate を搭載した Amazon ECS が、欧州 (フランクフルト)、アジアパシフィック (シンガポール)、およびアジアパシフィック (シドニー) の各リージョンに拡張されました。

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

2018 年 7 月19 日

Amazon ECS CLI v1.7.0 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• Docker 構成ファイルに、コンテナ healthcheck および devices のサポートが追加されました。詳細については、Amazon ECS の「 コマンドラインリファレンス」を参照してください。

2018 年 7 月18 日

API バージョン 2014-11-13367

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

Amazon ECS サービススケジューラ戦略を追加しました。

Amazon ECS にサービススケジューラ戦略の概念を導入しました。

利用できる 2 つのサービススケジューラ戦略があります。

• REPLICA — レプリカスケジュール戦略では、クラスター全体で必要数のタスクを配置して維持します。デフォルトでは、サービススケジューラによってタスクはアベイラビリティーゾーン間で分散されます。タスク配置の戦略と制約を使用すると、タスク配置の決定をカスタマイズできます。詳細については、「レプリカ (p. 123)」を参照してください。

• DAEMON — デーモンのスケジュール戦略では、指定したすべてのタスク配置制約を満たすクラスター内のアクティブなコンテナインスタンスごとに、1 つのタスクのみをデプロイします。この戦略を使用する場合、タスクの必要数や配置戦略、サービスの Auto Scaling ポリシーを指定する必要はありません。詳細については、「???」を参照してください。

Note

Fargate タスクは DAEMON スケジューリング戦略をサポートしていません。

詳細については、「サービススケジューラの概念 (p. 122)」を参照してください。

2018 年 6 月12 日

Amazon ECSCLI v1.6.0 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• Docker Compose ファイル構文バージョン 3 のサポートを追加しました。詳細については、Amazon ElasticContainer Service Developer Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

2018 年 6 月5 日

AWS Fargate リージョンの拡張

AWS Fargate を搭載した Amazon ECS が 米国東部 (オハイオ)、米国西部 (オレゴン)、および欧州西部 (アイルランド) の各リージョンに拡張されました。

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

2018 年 4 月26 日

API バージョン 2014-11-13368

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

Amazon ECSCLI v1.5.0 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• クラスターリソースの作成プロセス時に SystemsManager パラメータストア API をクエリすることで、安定している最新の Amazon ECS に最適化された AMIを自動的に取得する ECS CLI のサポートを追加しました。このためには、使用しているユーザーアカウントに、必要な Systems Manager アクセス権限を付与する必要があります。

• 構成ファイルの shm_size パラメータおよび tmpfs パラメータのサポートを追加しました。

詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

2018 年 4 月19 日

Amazon ECS CLI ダウンロードの検証

Amazon ECS CLI のインストールファイルを検証する新しい PGP 署名メソッドを追加しました。詳細については、「Amazon ECS CLI のインストール (p. 267)」を参照してください。

2018 年 4 月5 日

AWS Fargate プラットフォームのバージョン

以下を含むリリースされた新しい AWS Fargate プラットフォームバージョン。

• Amazon ECS タスクメタデータエンドポイント (p. 284)のサポートが追加されました。

• ヘルスチェック (p. 43) のサポートが追加されました。• サービス検出 (p. 181) のサポートの追加

詳細については、「AWS Fargate プラットフォームのバージョン (p. 16)」を参照してください。

2018 年 3 月26 日

Amazon ECS サービスの検出

Amazon ECS サービスの検出をサポートする Route 53 への統合を追加しました。詳細については、「サービス検出 (p. 181)」を参照してください。

2018 年 3 月22 日

Amazon ECS CLI v1.4.2 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• AMI を amzn-ami-2017.09.k-amazon-ecs-optimized に更新しました。

詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

2018 年 3 月20 日

API バージョン 2014-11-13369

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

Amazon ECS CLI v1.4.0 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• us-gov-west-1 リージョンのサポートを追加。• compose service コマンドの --force-deployment フ

ラグを追加しました。• ECS プロフィールに追加された aws_session_token

のサポート。• AMI を amzn-ami-2017.09.j-amazon-ecs-optimized に更新しました。

詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

2018 年 3 月09 日

コンテナヘルスチェック コンテナ定義に追加された Docker ヘルスチェックのサポート。詳細については、「ヘルスチェック (p. 43)」を参照してください。

2018 年 3 月08 日

Amazon ECS タスクメタデータエンドポイント

Amazon ECS コンテナエージェントのバージョン 1.17.0から、さまざまなタスクメタデータおよび Docker 統計を、Amazon ECS コンテナエージェントによって指定される HTTP エンドポイントで awsvpc ネットワークモードを使用するタスクで利用できます。詳細については、「Amazon ECS タスクメタデータエンドポイント (p. 284)」を参照してください。

2018 年 2 月8 日

ターゲット追跡ポリシーを使用した Amazon ECSService Auto Scaling

Amazon ECS コンソールにターゲット追跡ポリシーを使用した ECS Service Auto Scaling のサポートが追加されました。詳細については、「ターゲット追跡スケーリングポリシー (p. 175)」を参照してください。

ECS の初回実行ウィザードの前段階チュートリアルのステップスケーリングが削除されていること。これはターゲット追跡用の新しいチュートリアルに置き換えられます。

2018 年 2 月8 日

Amazon ECSCLI v1.3.0 新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• up コマンドで空のクラスターを作成する機能。• compose service up コマンドの --health-check-grace-period フラグを追加しました。

• AMI を amzn-ami-2017.09.g-amazon-ecs-optimized に更新しました。

詳細については、Amazon Elastic Container ServiceDeveloper Guide の「Amazon ECS コマンドラインリファレンス」を参照してください。

2018 年 1 月19 日

API バージョン 2014-11-13370

Amazon ECS AWS Fargate 用ユーザーガイド

変更 説明 日付

新しいサービススケジューラの動作

起動に失敗するサービスタスクの動作に関する情報を更新しました。サービスタスクが連続して失敗する場合にトリガーされる新しいサービスイベントメッセージについて文書化しました。更新されたこの動作の詳細については、「その他のサービスの概念 (p. 123)」を参照してください。

2018 年 1 月11 日

タスクレベルの CPU とメモリ

タスク定義でタスクレベルの CPU とメモリを指定するためのサポートを追加しました。詳細については、「TaskDefinition」を参照してください。

2017 年 12月 12 日

Amazon ECS コンソールのCodePipeline の統合

CodePipeline と Amazon ECS との統合が追加されました。CodePipeline は、デプロイパイプラインのセットアップに役立つデプロイオプションとして Amazon ECSをサポートします。詳細については、「チュートリアル:CodePipeline を使用した継続的なデプロイ (p. 340)」を参照してください。

2017 年 12月 12 日

タスク実行ロール Amazon ECS コンテナエージェントはユーザーに代わってAmazon ECS API アクションを呼び出すため、エージェントがユーザーに属していることをサービスに伝えるために、IAM ポリシーおよびロールが必要です。次のアクションがタスク実行ロールの対象になっています。

• コンテナイメージをプルするための Amazon ECR の呼び出し

• コンテナアプリケーションログを保存するためのCloudWatch の呼び出し

詳細については、「Amazon ECS タスク実行 IAM ロール (p. 247)」を参照してください。

2017 年 12月 7 日

Fargate サポートを使用した Amazon ECS CLI v1.1.0

新しいバージョンの Amazon ECS CLI がリリースされ、以下の機能が追加されました。

• タスクネットワーキングのサポート• AWS Fargate のサポート• タスクからの CloudWatch Logs データの表示のサポー

詳細については、ECS CLI 変更ログを参照してください。

2017 年 11月 29 日

AWS Fargate GA Fargate 起動タイプを使用した Amazon ECS サービスの起動のサポートを追加しました。詳細については、「Amazon ECS 起動タイプ (p. 64)」を参照してください。

2017 年 11月 29 日

API バージョン 2014-11-13371

Amazon ECS AWS Fargate 用ユーザーガイド

AWS の用語集最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してください。

API バージョン 2014-11-13372