外部デプロイ - Amazon Elastic Container Service

外部デプロイ

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

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

    deploymentConfiguration

    デプロイ時に実行されるタスクの数と、タスクの停止および開始の順序を制御するオプションのデプロイパラメータ。詳細については、「deploymentConfiguration」を参照してください。

    tags

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

    必須: いいえ

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

    key

    型: 文字列

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

    必須: いいえ

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

    value

    型: 文字列

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

    必須: いいえ

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

    enableECSManagedTags

    サービスでタスクの Amazon ECS マネージドタグを有効にするかどうかを指定します。詳細については、「請求用のリソースにタグを付ける」を参照してください。

    propagateTags

    型: 文字列

    有効な値: TASK_DEFINITION | SERVICE

    必須: いいえ

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

    healthCheckGracePeriodSeconds

    タイプ: 整数

    必須: いいえ

    Amazon ECS サービススケジューラが、タスクが RUNNING 状態になった後で異常な Elastic Load Balancing ターゲットのヘルスチェック、コンテナのヘルスチェック、Route 53 のヘルスチェックを無視する期間 (秒単位)。これが有効であるのは、ロードバランサーを使用するようにサービスが設定されている場合のみです。サービスにロードバランサーを定義している場合、ヘルスチェックの猶予期間値を指定しないと、デフォルト値の 0 が使用されます。

    サービスのタスクで、ヘルスチェックを開始して応答するまでに時間がかかる場合は、ヘルスチェックの猶予期間として最大 2,147,483,647 秒まで指定できます。この間は、ECS サービススケジューラはヘルスチェックのステータスを無視します。この猶予期間により、ECS サービススケジューラがタスクを異常とマークして時間より前に停止することがなくなります。

    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": "" } ], "healthCheckGracePeriodSeconds": 0, "schedulingStrategy": "REPLICA", "deploymentController": { "type": "EXTERNAL" }, "tags": [ { "key": "", "value": "" } ], "enableECSManagedTags": true, "propagateTags": "TASK_DEFINITION" }
  2. 最初のタスクセットを作成します。タスクセットには、サービスに関する次の詳細が含まれています。

    taskDefinition

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

    launchType

    型: 文字列

    有効な値: EC2 | FARGATE | EXTERNAL

    必須: いいえ

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

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

    platformVersion

    型: 文字列

    必須: いいえ

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

    AWS Fargate プラットフォームのバージョンを使って、Fargate タスクインフラストラクチャの特定のランタイム環境を参照できます。プラットフォームのバージョンに LATEST を指定してタスクを実行またはサービスを作成すると、プラットフォームの最新バージョンをタスクで利用できるようになります。サービスをスケールアップする場合は、これらのタスクには、サービスの最新のデプロイで指定されたプラットフォームのバージョンが提供されます。詳細については、「AWS 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 を受け取るタスク定義の場合に必要です。その他のネットワークモードではサポートされていません。詳細については、「Amazon ECS タスクネットワーキング」を参照してください。。

    serviceRegistries

    このサービスに割り当てるサービス検出レジストリの詳細。詳細については、「サービス検出」を参照してください。

    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 に移行する準備が整ったときに、scaletasksetA0 に更新して、スケールダウンすることもできます。