Amazon ECS タスクスケールイン保護のエンドポイント
Amazon ECS コンテナエージェントは、ECS_AGENT_URI
環境変数を Amazon ECS タスクのコンテナに自動的に挿入して、コンテナエージェント API エンドポイントとやり取りする方法を提供します。
保護の必要性を自己判断できるタスクには、Amazon ECS コンテナエージェントエンドポイントを使用することをお勧めします。
コンテナが処理を開始すると、コンテナ内からタスクスケールイン保護のエンドポイントパス「$ECS_AGENT_URI/task-protection/v1/state
」を使用して protectionEnabled
属性を設定できます。
コンテナ内からこの URI への PUT リクエストを使用すると、タスクのスケールイン保護が設定されます。この URI への GET リクエストは、タスクの現在の保護ステータスを返します。
タスクスケールイン保護のリクエストパラメータ
次のリクエストパラメータで、${ECS_AGENT_URI}/task-protection/v1/state
エンドポイントを使用してタスクスケールインプロテクションを設定できます。
ProtectionEnabled
-
true
を指定して、タスクを保護できるようにマークします。false
を指定して保護を解除し、タスクを終了できるようにします。型: ブール値
必須: はい
ExpiresInMinutes
-
タスクが保護されている時間 (分)。最小 1 分から最大 2,880 分 (48 時間) まで指定できます。この期間中、自動スケーリングサービスまたはデプロイからのスケールインイベントによってタスクが終了することはありません。この時間が経過すると、
protectionEnabled
パラメータはfalse
に設定されます。時間を指定しない場合、タスクは自動的に 120 分 (2 時間) 保護されます。
タイプ: 整数
必須: いいえ
次の例は、異なる継続時間を持つタスク保護を設定する方法を示します。
デフォルトの期間を使用してタスクを保護する方法の例
この例は、デフォルトの期間が 2 時間に設定されているタスクを保護する方法を示しています。
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true}'
タスクを 60 分間保護する方法の例
この例は、expiresInMinutes
パラメータを使用してタスクを 60 分間保護する方法を示しています。
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":60}'
タスクを 24 時間保護する方法の例
この例は、expiresInMinutes
パラメータを使用してタスクを 24 時間保護する方法を示しています。
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}'
PUT リクエストは次のレスポンスを返します。
{ "protection": { "ExpirationDate": "2023-12-20T21:57:44.837Z", "ProtectionEnabled": true, "TaskArn": "arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0" } }
タスクスケールイン保護のレスポンスパラメータ
次の情報が、JSON レスポンスタスクのスケールインプロテクションエンドポイント ${ECS_AGENT_URI}/task-protection/v1/state
から返されます。
ExpirationDate
-
タスクの保護が期限切れになるエポックタイム。タスクが保護されていない場合、この値は NULL です。
ProtectionEnabled
-
タスクのプロテクションステータス。タスクのスケールインプロテクションが有効になっている場合、値は
true
です。それ以外の場合は、false
です。 TaskArn
-
コンテナが属しているタスクの完全な Amazon リソースネーム (ARN)。
次の例は、保護されたタスクについて返される詳細を示しています。
curl --request GET ${ECS_AGENT_URI}/task-protection/v1/state
{ "protection":{ "ExpirationDate":"2023-12-20T21:57:44Z", "ProtectionEnabled":true, "TaskArn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0" } }
障害が発生すると、次の情報が返されます。
Arn
-
タスクの完全な Amazon リソースネーム (ARN)。
Detail
-
障害に関する詳細。
Reason
-
失敗の理由。
次の例は、保護されていないタスクについて返される詳細を示しています。
{ "failure":{ "Arn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0", "Detail":null, "Reason":"TASK_NOT_VALID" } }
例外が発生すると、次の情報が返されます。
requestID
-
例外が発生する Amazon ECS API 呼び出しの AWS リクエスト ID。
Arn
-
タスクまたはサービスの完全な Amazon リソースネーム (ARN)。
Code
-
エラーコードです。
Message
-
エラーメッセージです。
注記
RequestError
またはRequestTimeout
エラーが表示される場合は、ネットワークに問題がある可能性があります。Amazon ECS の VPC エンドポイントを使用してみてください。
次の例は、エラーが発生したときに返される詳細を示したものです。
{ "requestID":"12345-abc-6789-0123-abc", "error":{ "Arn":"arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0", "Code":"AccessDeniedException", "Message":"User: arn:aws:sts::444455556666:assumed-role/my-ecs-task-role/1234567890abcdef0 is not authorized to perform: ecs:GetTaskProtection on resource: arn:aws:ecs:us-west-2:555555555555:task/test/1234567890abcdef0 because no identity-based policy allows the ecs:GetTaskProtection action" } }
ネットワークの問題や Amazon ECS コントロールプレーンがダウンしているなどの理由で Amazon ECS エージェントが Amazon ECS エンドポイントから応答を得られない場合、次のエラーが表示されます。
{ "error": { "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0", "Code": "RequestCanceled", "Message": "Timed out calling Amazon ECS Task Protection API" } }
Amazon ECS エージェントが Amazon ECS からスロットリング例外を受け取ると、次のエラーが表示されます。
{ "requestID": "12345-abc-6789-0123-abc", "error": { "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0", "Code": "ThrottlingException", "Message": "Rate exceeded" } }