Amazon Elastic Container Service (Amazon ECS) のタスクを定期的に実行するようにスケジュールしたのですが、タスクが有効にならず、実行ログやクラスター内のタスクの履歴が表示されません。
解決策
スケジュールされた Amazon ECS タスクを使用すると、Amazon EventBridge は RunTask API を Amazon ECS に呼び出して、ユーザーに代わってタスクを実行します。
スケジュールされた Amazon ECS タスクは、以下の理由により呼び出されない可能性があります。
- Amazon EventBridge の時間または cron 式が正しく設定されていない。
- EventBridgeのルールまたはスケジュールがターゲットを呼び出していない。
- RunTask API の実行に失敗した。
- アプリケーションの問題またはリソースの制約により、コンテナが終了した。
EventBridge の cron 式が正しく設定されていることを確認する
EventBridge の cron 式を取得するには、次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを実行します。
If Eventbridge rules is used
$ aws events describe-rule --name "example-rule" --region example-region
If Eventbridge scheduler is used
$ aws scheduler get-schedule --name "example-schedule" --region example-region
コマンドの出力では、ScheduleExpression パラメーターに EventBridge の cron 式が表示されます。ルールのスケジュールは必ず UTC+0 タイムゾーンで設定してください。
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ルールによるターゲットの呼び出しを確認する
ルールのパフォーマンスを確認するには、EventBridge によって生成された Amazon CloudWatch メトリクスを使用します。呼び出しデータポイントには、ターゲットがルールによって呼び出されたことが示されます。FailedInvocations データポイントが存在する場合、ターゲットの呼び出しに問題があります。FailedInvocations は永続的な失敗を表し、権限の誤りやターゲットの構成ミスが原因である可能性があります。
EventBridge ルールの CloudWatch メトリクスを確認するには、以下を実行してください。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [メトリクス] を選択した後、[すべてのメトリクス] を選択します。
- [イベント] を選択します。
- **[ルール名別]**を選択します。
- ECS タスクを実行するように設定されている EventBridge ルールの TriggerRules、Invocations、FailedInvocations のメトリクスを選択します。
- [グラフ化したメトリクス] タブを選択します。
- 表示されているすべてのメトリクスで、[統計] に [合計] を選択します。
**FailedInvocations ** データポイントが存在する場合は、ターゲットの権限に関連する問題がある可能性があります。EventBridge に ECS タスクを呼び出すための権限があることと、EventBridge AWS Identity and Access Management (IAM) ロールに必要な権限があることを確認してください。詳細については、「Amazon ECS EventBridge IAM ロール」を参照してください。
スケジュールによるターゲットの呼び出しについて確認する
ルールのパフォーマンスを確認するには、EventBridge によって生成された Amazon CloudWatch メトリクスを使用します。InvocationAttemptCount データポイントは、EventBridge スケジューラがスケジュールを呼び出そうとしていることを示しています。**targetErrorCount ** データポイントが存在する場合は、ターゲットの呼び出しに問題があります。InvocationDroppedCount は永続的な失敗を表しており、権限が正しくないか、ターゲットの設定ミスが原因である可能性があります。
EventBridge ルールの CloudWatch メトリクスを確認するには、以下を実行してください。
- CloudWatch コンソールを開きます。
- ナビゲーションペインで [メトリクス] を選択した後、[すべてのメトリクス] を選択します。
- [スケジューラー] を選択します。
- [スケジュールグループメトリクス] を選択します。
- ECS タスクを実行するように設定されている EventBridge ルールの InvocationAttemptCount、TargetErrorCount、InvocationDroppedCount メトリクスを選択します。
- [グラフ化したメトリクス] タブを選択します。
- 表示されているすべてのメトリクスで、[統計] に [合計] を選択します。
InvocationDroppedCount データポイントが存在する場合、ターゲット権限が不十分であることに関連する問題が発生している可能性があります。EventBridge に ECS タスクを呼び出すための権限があることと、EventBridge AWS Identity and Access Management (IAM) ロールに必要な権限があることを確認してください。詳細については、「Amazon ECS EventBridge IAM ロール」を参照してください。
RunTask アクションの実行を確認する
RunTask API の実行に失敗したかどうかを確認するには、AWS CloudTrail のイベント履歴で RunTaskを検索します。スケジュールされた ECS タスクが呼び出されると予想される時間範囲内を調べます。
RunTask アクションが失敗したためにスケジュールされたタスクが呼び出されなかったかどうかを確認するには、次の操作を行います。
- AWS CloudTrail コンソールを開きます。
- ナビゲーションペインで [イベント履歴] を選択します。
- [イベント履歴]ページの [ルックアップ属性] で、[イベント名] を選択します。
- [イベント名を入力] に RunTask と入力します。
- スケジュールされた ECS タスクの実行予定日に基づいて、時間範囲フィルターで時間範囲を選択します。
注:時間範囲のプリセット値は、30 分、1 時間、3 時間、12 時間です。カスタムの時間範囲を指定するには、[カスタム] を選択します。
- 結果リストから、表示するイベントを選択します。
- JSON イベントレコードを表示するには、**[詳細]ページの ** [イベントレコード] までスクロールします。
- JSON イベントレコードの errorMessage 要素または responseElements.failures.reason 要素を探します。
JSON イベントレコードのこれらの要素には、スケジュールされた ECS タスクが呼び出されなかった理由が表示されます。
RunTask API の失敗の理由とその原因の例については、「Amazon ECS での API エラーの原因」を参照してください。
タスクの実行後にコンテナが終了したかどうかを確認する
アプリケーションの問題またはリソースの制約により、 Amazon ECS タスクは正常に実行された後でも停止することがあります。詳細については、「 コンテナの終了中に停止または開始に失敗する Amazon ECS タスクをトラブルシューティングするにはどうすればよいですか?」を参照してください。
関連情報
コンテナの終了中に Amazon ECS タスクが停止する、または開始できない場合のトラブルシューティングを行うにはどうすればよいですか?