Amazon Elastic Container Service (Amazon ECS) タスクを定期的に実行するようにスケジュールしました。しかし、Amazon ECS タスクはトリガーされません。クラスター内の実行ログやタスクの履歴を取得できません。
解決方法
スケジュールされた Amazon ECS タスクを使用すると、Amazon CloudWatch Events は RunTask API を Amazon ECS に呼び出して、ユーザーに代わってタスクを実行します。
スケジュールされた Amazon ECS タスクは、次の理由により呼び出されない可能性があります。
- Amazon EventBridge の時間または cron 表現が正しく設定されていない。
- EventBridge ルールがターゲットを呼び出さない。
- RunTask API の実行に失敗した。
- アプリケーションの問題またはリソースの制約により、コンテナが終了する。
EventBridge の cron 表現が誤って設定されていないか確認する
EventBridge の cron 表現を取得するには、次の AWS Command Line Interface (AWS CLI) コマンドを実行します。
$ aws events describe-rule --name "example-rule" --region example-region
コマンドの出力では、ScheduleExpression パラメータで設定された EventBridge の cron 表現を表示できます。ルールのスケジュールは UTC+0 タイムゾーンで設定してください。
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
ルールがターゲットを呼び出しているか確認する
EventBridge によって生成された Amazon CloudWatch メトリクスを使用して、ルールのパフォーマンスを表示します。Invocation データポイントは、ターゲットがルールによって呼び出されたことを示します。FailedInvocations データポイントが存在する場合、ターゲットの呼び出しに問題があります。FailedInvocations は永続的な障害を表し、誤った許可またはターゲットの設定ミスが原因となっている場合があります。
EventBridge ルールの CloudWatch メトリクスを確認するには、次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [Metrics] (メトリクス) を選択し、[All metrics] (すべてのメトリクス) を選択します。
- [Events] (イベント) を選択します。
- [By Rule Name](ルール名別) を選択します。
- ECS タスクを実行するように設定された EventBridge ルールの TriggerRules、Invocations、および FailedInvocations (使用可能な場合) メトリクスを選択します。
- [Graphed metrics] (グラフ化したメトリクス) タブを選択します。
- リストされているすべてのメトリクスについて、[Statistic] (統計) で [SUM] を選択します。
FailedInvocations データポイントが存在する場合、不適切なターゲット許可に関連する問題が存在している可能性があります。EventBridge に ECS タスクを呼び出すためのアクセス権があることを確認します。EventBridge の AWS Identity and Access Management (IAM) ロールに必要な許可が付与されていることを確認します。詳細については、「Amazon ECS CloudWatch Events IAM ロール」を参照してください。
RunTask アクションが実行に失敗したかどうかを確認する
RunTask API が実行に失敗したかどうかを確認するには、AWS CloudTrail イベント履歴で、スケジュールされた ECS タスクの呼び出しの実行が想定されていた時間範囲内の RunTask を検索します。
RunTask アクションが失敗したことが、スケジュールされたタスクが呼び出されなかった理由となっているかどうかを確認するには、次の手順を実行します。
- AWS CloudTrail コンソールを開きます。
- ナビゲーションペインで、[Event history] (イベント履歴) を選択します。
- [Event history] (イベント履歴) ページの [Lookup attributes] (ルックアップ属性) で、[Event name] (イベント名) を選択します。
- [Enter an event name] (イベント名を入力) で、RunTask と入力します。
- スケジュールされた ECS タスクの実行が想定されていた時間に基づいて、時間範囲フィルターで時間範囲を選択します。
注: 時間範囲のプリセット値は、30 分、1 時間、3 時間、および 12 時間です。カスタム時間範囲を指定するには、[Custom] (カスタム) を選択します。
- 結果リストから、表示するイベントを選択します。
- [Details] (詳細) ページの [Event record] (イベントレコード) までスクロールして、JSON イベントレコードを表示します。
- JSON イベントレコードで errorMessage 要素または responseElements.failures.reason 要素を探します。
JSON イベントレコードのこれらの要素には、スケジュールされた ECS タスクが呼び出されない理由が表示されます。
RunTask API の失敗の理由とその原因の例については、「API の失敗の理由」を参照してください。
タスク実行後にコンテナが終了したかどうかを確認する
Amazon ECS タスクは、アプリケーションの問題やリソースの制約を理由として、タスクが正常に実行された後でも停止することがあります。詳細については、「Amazon ECS のタスクでコンテナが終了する問題をトラブルシューティングする方法を教えてください」を参照してください。
関連情報
予期せず停止する Fargate の Amazon ECS タスクのトラブルシューティング方法を教えてください