サードパーティーのコントローラーを使用して Amazon ECS サービスをデプロイする - Amazon Elastic Container Service

サードパーティーのコントローラーを使用して Amazon ECS サービスをデプロイする

この外部デプロイタイプでは、Amazon ECS サービスのデプロイプロセスを完全に制御するために、すべてのサードパーティーのデプロイコントローラーを使用できます。サービスの詳細はサービス管理 API アクション (CreateServiceUpdateServiceDeleteService) または タスク設定管理 API アクション (CreateTaskSetUpdateTaskSetUpdateServicePrimaryTaskSetDeleteTaskSet) のいずれかにより管理されます。各 API アクションは、サービス定義パラメータのサブセットを管理します。

UpdateService API アクションは、サービスの必要数およびヘルスチェック猶予期間パラメータを更新します。起動タイプ、プラットフォームバージョン、ロードバランサーの詳細、ネットワーク構成、またはタスク定義を更新する必要がある場合、新しいタスクセットを作成する必要があります。

UpdateTaskSet API アクションは、タスクセットのスケールパラメータのみを更新します。

UpdateServicePrimaryTaskSet API アクションは、サービス内のどのタスクセットをプライマリタスクセットであるかを変更します。DescribeServices API アクションを呼び出すと、プライマリタスクセットに指定されたすべてのフィールドが返されます。サービスのプライマリタスクセットが更新されると、サービスの新しいプライマリタスクセットに存在し、古いプライマリタスクセットとは異なるタスクセットのパラメータ値はどれでも、新しいプライマリタスクセットが定義されるときに新しい値に更新されます。サービスにプライマリタスクセットが定義されていない場合にサービスを定義するとき、タスクセットフィールドは null になります。

外部デプロイに関する考慮事項

外部デプロイタイプを使用するときは、以下の点を考慮します。

  • サポートされているロードバランサーのタイプは、Application Load Balancer または Network Load Balancer です。

  • Fargate 起動タイプ、または EXTERNAL デプロイコントローラータイプは、DAEMON スケジューリング戦略をサポートしません。

外部デプロイワークフロー

以下に示しているのは、Amazon ECS で外部デプロイを管理する基本的なワークフローです。

外部デプロイコントローラーを使用して Amazon ECS サービスを管理するには
  1. Amazon ECS サービスを作成する 必須のパラメータは、サービス名のみです。サービスを作成するときに、外部デプロイコントローラーを使用して以下のパラメータを指定できます。その他すべてのサービスパラメータは、サービス内でタスクセットが作成されるときに指定されます。

    serviceName

    型: 文字列

    必須: はい

    サービスの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。サービス名は同じクラスター内で一意になるようにしてください。ただし、リージョン内の複数のクラスター間や複数のリージョンにまたがるクラスター間では、同様の名前のサービスがあっても構いません。

    desiredCount

    指定したタスクセットのタスク定義のインスタンスをサービス内で実行状態に保つ数を設定します。

    deploymentConfiguration

    デプロイ時に実行されるタスクの数と、タスクの停止および開始の順序を制御するオプションのデプロイパラメータ。

    tags

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

    必須:いいえ

    サービスに適用し、サービスの分類と整理に役立つメタデータ。タグはそれぞれ、1 つのキーとオプションの 1 つの値で設定されており、どちらもお客様側が定義します。サービスが削除されると、タグも削除されます。サービスには最大 50 個のタグを適用できます。詳細については、「Amazon ECS リソースにタグ付けする」を参照してください。

    key

    型: 文字列

    長さの制限: 最小長は 1 です。最大長は 128 です。

    必須:いいえ

    タグを構成するキーと値のペアの一部。キーは、より具体的なタグ値のカテゴリのように動作する、一般的なラベルです。

    value

    型: 文字列

    長さの制限: 最小長は 0 です。最大長は 256 です。

    必須:いいえ

    タグを構成するキーと値のペアのオプションの一部。値はタグカテゴリ (キー) の記述子として機能します。

    enableECSManagedTags

    サービス内のタスクに Amazon ECS マネージドタグを使用するか否かを指定します。詳細については、「請求にタグを使用する」を参照してください。

    propagateTags

    型: 文字列

    有効な値: TASK_DEFINITION | SERVICE

    必須:いいえ

    タグをタスク定義またはサービスからサービスのタスクへコピーするかどうかを指定します。値を指定しない場合、タグはコピーされません。タグは、サービス作成中のサービス内のタスクにのみコピーすることができます。タグをサービス作成後またはタスク作成後のタスクに追加するには、TagResource API アクションを使用します。

    schedulingStrategy

    使用するスケジュール戦略。外部デプロイコントローラーを使用するサービスは、REPLICA スケジューリング戦略のみをサポートします。

    placementConstraints

    サービスのタスクに使用する、配置制約オブジェクトの配列。タスクごとに最大 10 個の制約を指定できます (この制限数には、タスク定義内の制約と、実行時に指定される制約が含まれます)。Fargate 起動タイプを使用している場合、タスク配置の制約事項はサポートされません。

    placementStrategy

    サービスのタスクで使用する配置戦略オブジェクト。サービスごとに最大 4 つの戦略ルールを指定できます。

    次の例は、外部デプロイコントローラーを使用するサービスを作成するためのサービス定義です。

    { "cluster": "", "serviceName": "", "desiredCount": 0, "role": "", "deploymentConfiguration": { "maximumPercent": 0, "minimumHealthyPercent": 0 }, "placementConstraints": [ { "type": "distinctInstance", "expression": "" } ], "placementStrategy": [ { "type": "binpack", "field": "" } ], "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }
  2. 最初のタスクセットを作成します。タスクセットには、サービスに関する次の詳細が含まれています。

    taskDefinition

    使用するタスクセットのタスクのタスク定義。

    launchType

    型: 文字列

    有効な値: EC2 | FARGATE | EXTERNAL

    必須:いいえ

    サービスを実行する起動タイプ。起動タイプを指定しない場合は、デフォルトで capacityProviderStrategy が使用されます。詳細については、「Amazon ECS 起動タイプ」を参照してください。

    launchType を指定した場合、capacityProviderStrategy パラメータを省略する必要があります。

    platformVersion

    型: 文字列

    必須:いいえ

    サービス内のタスクが実行されているプラットフォームのバージョン。プラットフォームのバージョンは、Fargate 起動タイプを使用するタスクに対してのみ指定されています。指定されない場合、デフォルトで最新バージョン (LATEST) が使用されます。

    AWS Fargate プラットフォームのバージョンを使って、Fargate タスクインフラストラクチャの特定のランタイム環境を参照できます。プラットフォームのバージョンに LATEST を指定してタスクを実行またはサービスを作成すると、プラットフォームの最新バージョンをタスクで利用できるようになります。サービスをスケールアップする場合は、これらのタスクには、サービスの最新のデプロイで指定されたプラットフォームのバージョンが提供されます。詳細については、「Amazon ECS 向け Fargate プラットフォームバージョン」を参照してください。

    注記

    プラットフォームのバージョンは、EC2 起動タイプを使用するタスクには指定されません。

    loadBalancers

    サービスで使用するロードバランサーを表すロードバランサーオブジェクト。外部デプロイコントローラーを使用する場合、Application Load Balancer と Network Load Balancer のみがサポートされます。Application Load Balancer を使用している場合、タスクセットあたり 1 つの Application Load Balancer ターゲットグループのみが許可されます。

    次のスニペットは、使用する loadBalancer オブジェクトの例を示しています。

    "loadBalancers": [ { "targetGroupArn": "", "containerName": "", "containerPort": 0 } ]
    注記

    loadBalancer オブジェクトを指定する場合は、targetGroupArn を指定し、loadBalancerName パラメータを省略する必要があります。

    networkConfiguration

    サービスのネットワーク構成。このパラメータは awsvpc ネットワークモードを使用して独自の Elastic Network Interface を受け取るタスク定義の場合に必要です。その他のネットワークモードではサポートされていません。Fargate 起動タイプのネットワークの詳細については、「Fargate 起動タイプの Amazon ECS タスクのネットワークオプション」を参照してください。

    serviceRegistries

    このサービスに割り当てるサービス検出レジストリの詳細。詳細については、「サービス検出を使用して Amazon ECS サービスを DNS 名で接続する」を参照してください。

    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" }, "clientToken": "" }
  3. サービスの変更が必要な場合、更新するパラメータに応じて UpdateServiceUpdateTaskSet、または CreateTaskSet のいずれかの API アクションを使用します。タスクセットを作成した場合は、サービスの各タスクセットに scale パラメータを使用して、サービス内で継続して実行するタスクの数を決定します。例えば、tasksetA を含むサービスがあり tasksetB を作成した場合、本番トラフィックを移行する前に tasksetB の有効性をテストする場合があります。両方のタスクの scale100 に設定し、すべての本番トラフィックを tasksetB に移行する準備が整ったときに、tasksetAscale0 に更新して、スケールダウンすることもできます。