サードパーティーのコントローラーを使用して Amazon ECS サービスをデプロイする
この外部デプロイタイプでは、Amazon ECS サービスのデプロイプロセスを完全に制御するために、すべてのサードパーティーのデプロイコントローラーを使用できます。サービスの詳細はサービス管理 API アクション (CreateService
、UpdateService
、DeleteService
) または タスク設定管理 API アクション (CreateTaskSet
、UpdateTaskSet
、UpdateServicePrimaryTaskSet
、DeleteTaskSet
) のいずれかにより管理されます。各 API アクションは、サービス定義パラメータのサブセットを管理します。
UpdateService
API アクションは、サービスの必要数およびヘルスチェック猶予期間パラメータを更新します。起動タイプ、プラットフォームバージョン、ロードバランサーの詳細、ネットワーク構成、またはタスク定義を更新する必要がある場合、新しいタスクセットを作成する必要があります。
UpdateTaskSet
API アクションは、タスクセットのスケールパラメータのみを更新します。
UpdateServicePrimaryTaskSet
API アクションは、サービス内のどのタスクセットをプライマリタスクセットであるかを変更します。DescribeServices
API アクションを呼び出すと、プライマリタスクセットに指定されたすべてのフィールドが返されます。サービスのプライマリタスクセットが更新されると、サービスの新しいプライマリタスクセットに存在し、古いプライマリタスクセットとは異なるタスクセットのパラメータ値はどれでも、新しいプライマリタスクセットが定義されるときに新しい値に更新されます。サービスにプライマリタスクセットが定義されていない場合にサービスを定義するとき、タスクセットフィールドは null になります。
外部デプロイに関する考慮事項
外部デプロイタイプを使用するときは、以下の点を考慮します。
-
サポートされているロードバランサーのタイプは、Application Load Balancer または Network Load Balancer です。
-
Fargate 起動タイプ、または
EXTERNAL
デプロイコントローラータイプは、DAEMON
スケジューリング戦略をサポートしません。
外部デプロイワークフロー
以下に示しているのは、Amazon ECS で外部デプロイを管理する基本的なワークフローです。
外部デプロイコントローラーを使用して Amazon ECS サービスを管理するには
-
Amazon ECS サービスを作成する 必須のパラメータは、サービス名のみです。サービスを作成するときに、外部デプロイコントローラーを使用して以下のパラメータを指定できます。その他すべてのサービスパラメータは、サービス内でタスクセットが作成されるときに指定されます。
serviceName
-
タイプ: 文字列
必須: はい
サービスの名前。最大 255 文字の英字 (大文字と小文字)、数字、ハイフン、アンダースコアを使用できます。サービス名は同じクラスター内で一意になるようにしてください。ただし、リージョン内の複数のクラスター間や複数のリージョンにまたがるクラスター間では、同様の名前のサービスがあっても構いません。
desiredCount
-
指定したタスクセットのタスク定義のインスタンスをサービス内で実行状態に保つ数を設定します。
deploymentConfiguration
-
デプロイ時に実行されるタスクの数と、タスクの停止および開始の順序を制御するオプションのデプロイパラメータ。
-
タイプ: オブジェクトの配列
必須: いいえ
サービスに適用し、サービスの分類と整理に役立つメタデータ。タグはそれぞれ、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" }
-
最初のタスクセットを作成します。タスクセットには、サービスに関する次の詳細が含まれています。
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": "" }
-
サービスの変更が必要な場合、更新するパラメータに応じて
UpdateService
、UpdateTaskSet
、またはCreateTaskSet
のいずれかの API アクションを使用します。タスクセットを作成した場合は、サービスの各タスクセットにscale
パラメータを使用して、サービス内で継続して実行するタスクの数を決定します。例えば、tasksetA
を含むサービスがありtasksetB
を作成した場合、本番トラフィックを移行する前にtasksetB
の有効性をテストする場合があります。両方のタスクのscale
を100
に設定し、すべての本番トラフィックをtasksetB
に移行する準備が整ったときに、tasksetA
のscale
を0
に更新して、スケールダウンすることもできます。