ECS Fargate タスクで AWS SDK を使用するときに発生するメタデータエラーをトラブルシューティングする方法を教えてください。

所要時間2分
0

AWS Fargate タスクの Amazon Elastic Container Service (Amazon ECS) で AWS ソフトウェア開発キット (AWS SDK) を使用したときに発生するメタデータエラーをトラブルシューティングしたいです。

簡単な説明

Fargate タスクに Amazon ECS の AWS SDK を使用するときに発生するメタデータエラーを、次のシナリオに基づいてトラブルシューティングします。

  • Fargate タスクでインスタンスメタデータを取得できない。
  • 設定に認証情報が不足しているか、認証情報を読み込めなかったというエラーが発生した。
  • 断続的なメタデータエラー
  • インスタンスメタデータサービスからタイムアウトエラーが発生した。

解決策

Fargate タスクでインスタンスメタデータを取得できない

Fargate タスクでインスタンスメタデータを取得できない場合は、次の手順を実行してください。

  1. Amazon ECS Exec を使用してタスク内のコンテナにアクセスします。
    注: お使いのものでそれぞれ、example-clustername をクラスター名、example-taskid を必要なタスク ID、example-containername をコンテナ名に置き換えます。

    aws ecs execute-command --cluster $example-clustername \
        --task $example-taskid \
        --container $example-containername \
        --interactive \
        --command "/bin/sh"
  2. 次のようにメタデータを取得します。
    プラットフォームバージョン 1.4.0 以降を使用する Fargate タスクの場合、タスクメタデータエンドポイントバージョン 4 を使用します。

    curl ${ECS_CONTAINER_METADATA_URI_V4}/task

    1.4.0 より前のプラットフォームバージョンを使用する Fargate タスクの場合、次のコマンドを使用します。

    curl ${ECS_CONTAINER_METADATA_URI}/task

設定に認証情報が不足しているか、認証情報を読み込めなかったというエラーが発生した

次のエラーメッセージまたは同様のエラーメッセージが表示されていないか確認してください。

「設定に認証情報が不足しているか、どのプロバイダーからも認証情報を読み込めなかったか、トークンの取得に失敗しました」

このエラーは、タスク定義にタスクロールを追加せずに Fargate タスクを起動した場合に発生します。このエラーは、手動の RunTask API 操作でタスクロールのオーバーライドが指定されておらず、他の AWS 認証情報も指定されていない場合にも発生します。

このエラーを解決するには、次の手順を実行してください。

  1. Amazon ECS Exec を使用してタスク内のコンテナにアクセスします。
    注: お使いのものでそれぞれ、example-cluster-name をクラスター名、example-task-id を必要なタスク ID、example-container-name をコンテナ名に置き換えます。

    aws ecs execute-command --cluster $example-cluster-name \
        --task $example-task-id \
        --container $example-container-name \
        --interactive \
        --command "/bin/sh"
  2. タスクに関連付けられているタスクの AWS Identity and Access Management (IAM) ロールを確認します。

    curl -s 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

    出力例:

    {
      "RoleArn": "arn:aws:iam::ACCOUNT_ID:role/<task_role_name>",
      "AccessKeyId": "XXXXXXXXXXXXXXXXX",
      "SecretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "Token": "IQoJb......",
      "Expiration": "2024-03-29T19:19:25Z"
    }

    注: Fargate タスクのタスク定義にタスクの IAM ロールがない場合は、404 page not found エラーが返されます。

  3. AWS SDK が Fargate タスクアプリケーションコード内のコンテナメタデータの、デフォルトの認証情報プロバイダーチェーンを使用していることを確認してください。これにより、AWS_CONTAINER_CREDENTIALS_RELATIVE_URI システム環境変数から認証情報を読み込むことができます。

断続的なメタデータエラー

メタデータエンドポイントにアクセスしたときに断続的にメタデータエラーが発生する原因には、次のものが考えられます。

  • 高い CPU やメモリ使用率などによるリソースの枯渇
  • 同時に実行されているスレッドまたはプロセスの数が多い
  • CPU スパイク
  • アプリケーションで実行される集中的な操作が原因で、タスクのボリュームに高いディスク負荷がかかっている
  • API 呼び出しを行うとコンテナ内でタスクメタデータサービスが頻繁にクエリされる

断続的に発生するメタデータエラーを解決するには、次の操作を行います。

  • タスク定義で、適切な量の CPU とメモリ容量を使用して Fargate タスクを設定します。コンテナ化されたアプリケーションのメトリクスを追跡するように CloudWatch Container Insights を設定します。
  • CloudWatch Container Insights と Amazon ECS タスクのメタデータエンドポイントを使用して、タスクストレージの使用状況を監視します。ディスク使用率をチェックして、増加させる必要があるかどうかを判断します。
  • アプリケーションコードがタスクのメタデータサービスをクエリする頻度を減らします。たとえば、AWS オブジェクトを 1 回作成します。その後、アプリケーションコードで後続の API 呼び出しを行うときに、そのインスタンスを再利用します。
  • 最新の AWS SDK バージョンを使用してください。AWS SDK の新しいバージョンでは、API コールを行うと、AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 環境変数から認証情報が自動的に取得されます。

インスタンスメタデータサービスからタイムアウトエラーが発生した

インスタンスメタデータサービスでタイムアウトエラーが発生した場合は、アプリケーションコードで定義されているタイムアウトしきい値を超えています。これは、CPU やメモリが不足しているためにメタデータサービスのリクエストがキューに入っている場合や、実行中のプロセスの数が多い場合に発生します。

このエラーを解決するには、次の手順を実行します。

  • アプリケーションコードで定義されているタイムアウトを確認します。インスタンスメタデータサービスのタイムアウト値が適切であることを確認します。
  • 認証情報を取得するために、再試行を実装します。メタデータサービスを呼び出す頻度も減らします。
  • タスク定義で適切な量の CPU とメモリを使用して Fargate タスクを設定します。

関連情報

Amazon ECS タスクの ロール

AWS公式
AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ