web-dev-qa-db-ja.com

ECS Fargateのスケジュールされたタスクが実行されていない

ECS Fargateを使用してスケジュールされたタスクをセットアップしようとしていますが、実行されていない理由がわかりません。 RunTaskを使用してタスクが正常に動作することを確認できますが、スケジュールでそれをトリガーしようとすると、説明のない「FailedInvocations」が大量に表示されます。

しかし、ルールがトリガーされていることは知っているので、これは良い兆候です。以下のスクリーンショットを参照してください。

enter image description here

ただし、トリガーされるたびに「FailedInvocation」が発生します。スケジューリングルールは次のとおりです。

enter image description here

そして、ecs:runTaskだけでecsEventRoleのデフォルトの許可:

enter image description here

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

私の考えでは、このecsEventsRoleには十分な権限がありません。 ecsTaskExecutionRoleが持っているものを与えようとするべきですか?

ありがとう

編集:これはus-east-1リージョンでサポートされるようになりました。コメントを参照してください。

19
coolboyjules

通常のECSスケジュールタスクが実行されていない同様の問題が発生しました。

最終的に、CloudWatch EventsがIAMロールをECSタスクに渡すことを許可する追加ポリシーをecsEventsRoleに追加することで解決しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListInstanceProfiles",
                "iam:ListRoles",
                "iam:PassRole"
            ],
            "Resource": "*"
        }
    ]
}
8
Jason F.

考えられる回避策は次のとおりです。cloudwatchルールのターゲットとしてラムダ関数を使用し、ラムダ関数コードでタスクを作成します。

ラムダ関数のサンプルコードを次に示します。 https://lobster1234.github.io/2017/12/03/run-tasks-with-aws-fargate-and-lambda/

リンクにはラムダ関数を使用して新しいbotoバージョンをパックする方法が記載されていますが、AWSはすでにラムダbotoバージョンを1.4.8に更新しているため、これはもう必要ありません

私はテストしましたが、動作します。

3
Fred Liporace

1年以上が経過しましたが、AWSには呼び出しログを表示する適切な方法がまだありません。

すでにご存知のように、RunTaskによってタスクを手動で呼び出すことができます。スケジュールされたタスクも手動で呼び出すことができます。

唯一の違いは、スケジュールされたタスクがCloudWatchルールによってトリガーされることです。

CloudTrail Event historyの呼び出しログを簡単に確認し、そこに移動して、イベント名RunTaskでイベントをフィルターし、確認する時間範囲を選択し、イベントを見つけてView Eventをクリックします。 'エラーコードと応答が表示されます。

2
Greg

Aws cliを使用して、代わりに_aws events put-rule_に続いて_aws events put-targets --rule <value> --targets <value>_を実行しようとしましたか?私は同様の問題を抱えていましたが、aws cli(の最新バージョン)を使用してうまくいきました。

サンプルを次に示します。

aws events put-rule --name "DailyLambdaFunction" --schedule-expression "cron(0 9 * * ? *)"

次のコマンドがすべて1行で続きます。

_aws events put-targets --rule cli-RS-rule --targets '{"Arn":"arn:aws:ecs:1234/cluster/clustername","EcsParameters":{"LaunchType": "FARGATE","NetworkConfiguration": {"awsvpcConfiguration": {"AssignPublicIp": "ENABLED", "SecurityGroups": [ "sg-id1233" ], "Subnets": [ "subnet-1234" ] }},"TaskCount": 1,"TaskDefinitionArn": "arn:aws:ecs:1234:task-definition/taskdef"},"Id": "sampleID111","RoleArn": "arn:aws:iam:1234:role/eventrole"}'
_
0
tanvi