web-dev-qa-db-ja.com

Cloudwatchが失敗しました呼び出しエラー利用可能なログがありません

以前のタスク定義が完了したときにECSタスク定義が開始されるCloudwatchルールイベントを設定しました。

イベントはタスク定義をトリガーしますが、失敗します。

この失敗の唯一の可視性は、ルールのメトリックにあります。ここでは、失敗したメトリックが表示されます。

質問、トリガーが失敗した理由を確認するためのログはありますか?

管理コンソールを介して手動でルールを設定でき、すべてが正常に動作します。

Cloudformationテンプレートを使用してルールを設定すると、エラーが発生します。

私は2つのルールを比較しましたが、役割を除いてどちらも同じです。ただし、両方の役割には同じ権限があります。

22
Nathan B

これは何年もの間私たちを困らせました、主な問題はネイサンBが言及する役割の問題ですが、私たちをつまずかせた他の何かは、スケジュールされたコンテナーがawsvpcモードで(そして拡張によりFargate)機能しないことです。 CloudFormationテンプレートのサンプルを次に示します。

---
AWSTemplateFormatVersion: 2010-09-09
Description: Fee Recon infrastructure

Parameters:

  ClusterArn:
    Type: String
    Description: The Arn of the ECS Cluster to run the scheduled container on

Resources:

  TaskRole:
    Type: AWS::IAM::Role
    Properties:
      Path: /
      AssumeRolePolicyDocument:
        Statement:
          - Action:
              - sts:AssumeRole
            Effect: Allow
            Principal:
              Service:
                - ecs-tasks.amazonaws.com
        Version: 2012-10-17
      Policies:
       - PolicyName: TaskPolicy
         PolicyDocument:
           Version: 2012-10-17
           Statement:
             - Effect: Allow
               Action:
                 - 'ses:SendEmail'
                 - 'ses:SendRawEmail'
               Resource: '*'

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      TaskRoleArn: !Ref TaskRole
      ContainerDefinitions:
        - Name: !Sub my-container
          Essential: true
          Image: !Sub <aws-account-no>.dkr.ecr.eu-west-1.amazonaws.com/mycontainer
          Memory: 2048
          Cpu: 1024

  CloudWatchEventECSRole:
   Type: AWS::IAM::Role
   Properties:
     AssumeRolePolicyDocument:
       Version: 2012-10-17
       Statement:
         - Effect: Allow
           Principal:
             Service:
               - events.amazonaws.com
           Action:
             - sts:AssumeRole
     Path: /
     Policies:
       - PolicyName: CloudwatchEventsInvokeECSRunTask
         PolicyDocument:
           Version: 2012-10-17
           Statement:
             - Effect: Allow
               Action: 'ecs:RunTask'
               Resource: !Ref TaskDefinition

  TaskSchedule:
    Type: AWS::Events::Rule
    Properties:
      Description: Runs every 10 minutes
      Name: ScheduledTask
      ScheduleExpression: cron(0/10 * * * ? *)
      State: ENABLED
      Targets:
        - Id: ScheduledEcsTask
          RoleArn: !GetAtt CloudWatchEventECSRole.Arn
          EcsParameters:
            TaskDefinitionArn: !Ref TaskDefinition
            TaskCount: 1
          Arn: !Ref ClusterArn

注:ClusterArnをパラメーターとしてスクリプトに追加しましたが、もちろん、CloudFormation ImportValueステートメントを使用してこれを行うことをお勧めします。

注意する必要がある2つの役割があります。1つ目はタスク自体の役割(TaskRole)です。この例では、コンテナーはSESを使用して電子メールを送信するだけなので、必要な権限を持っています。 2番目の役割(CloudWatchEventECSRole)は、すべてを機能させる役割です。Policies配列の原則はevents.amazonaws.comであり、リソースはテンプレートで定義されたECSタスクです。 。

8
Stefano

この問題は、主要サービスにevents.amazonaws.comを含めるように設定していないことが原因でした。タスクが役割を引き受けることができませんでした。

Shame awsは、失敗した呼び出しに対するより優れたロギングを備えていません。

3
Nathan B

ルールが正常にトリガーされたが、ターゲットでの呼び出しが失敗した場合、errorCodeプロパティとerrorMessageプロパティを調べて、AWS CloudTrail内のイベント履歴にAPI呼び出しのトレースが表示されます。 :

{
   [..]
   "errorCode": "InvalidInputException",
   "errorMessage": "Artifacts type is required",
   [..]
}
1
Nicolas Barbé

他の人がここに来てFargateのタスクでこれを機能させるために必要なセットアップを探している場合。ステファノの答えに加えていくつかの追加の構成があります。 Fargateでタスクを実行するには、実行ロールを設定する必要があるため、CloudWatchEventECSRoleがそれを使用できるようにする必要があります。このステートメントをその役割に追加します。

{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": [
        "arn:aws:iam::<account>:role/<executionRole>"
    ]
}
1
Jonny Cundall

Fargateでスケジュールされたタスクの設定に苦労していて、Terraformを使用してクラウドを設定しようとしている人は、このモジュールをご覧ください。 https://github.com/dxw/terraform-aws-ecs-scheduled-task

CloudEventsを介してスケジュールされたタスクを設定し、正しいIAMロールを設定するのに役立ちます。

1
bo-oz

コマンドラインからECSのスケジュールされたタスクを作成すると、タスクは作成されたが開始されなかったため、これをトラブルシューティングしようと何年も費やしました。この投稿をありがとう、CloudTrailのEventHistoryを調べたところ、ECSインスタンスがすべて停止していて、EC2インスタンスが実行されていないことがわかりました。

{
   [..]
 "errorCode": "InvalidParameterException",
 "errorMessage": "No Container Instances were found in your cluster.",
   [..]
}
0
Bisquite