web-dev-qa-db-ja.com

AWS FargateでECSタスクをスケジュールする方法

Elastic Container Serviceでタスク定義を作成し、Fargateクラスターで正常に実行しました。ただし、上記のクラスターでスケジュールされたタスクを作成すると、「起動タイプ」のオプションがEC2にハードコーディングされます。おそらくコマンドラインを介して、Fargateで実行するタスクをスケジュールする方法はありますか?

enter image description here

14
Jared S

注意喚起 !これは、AWSでサポートされるようになりました。

https://aws.Amazon.com/about-aws/whats-new/2018/08/aws-fargate-now-supports-time-and-event-based-task-scheduling/

一部の地域ではありませんが、4月19日の時点ではまだEU-west-2(ロンドン)でサポートされていませんでした。このページの上部にある表で、目的の地域でサポートされているかどうかを確認します。 https://docs.aws.Amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html

8
David Lin

FARGATEでタスクをスケジュールする方法はないようです。

今すぐできる唯一の方法は、ECSの外部に「スケジューラ」を置くことです。私はラムダでそれをやった。 jenkinsやECSにaws-cliコマンドを起動する単純なcronタスクのようなものを使用することもできますが、どちらの場合もインスタンスを常に実行する必要があります。

ECSタスクに送信されるパラメーター(オーバーライド)を受け入れるラムダを作成し、タスクが持つ予定のスケジュールを設定しました。

更新:FARGATEクラスタの詳細に[スケジュール]タブがあり、ECSタスクにcronスケジュールを設定できるようになりました。

7
NikhilWanpal

AWSドキュメントではCloudFormationを介してこれを行う方法が提供されていますが、いずれにしてもこの機能はまだリリースされていないようです。 似たようなこと をしようとしていて、同じ問題にぶつかりました。利用可能になったら、awsドキュメントの このリンク が役立つはずです。彼らがそれを行うことを提案する方法は次のとおりですが、NetworkConfigurationが認識されず、LaunchTypeが認識されないというエラーが発生し続けます。

 "EcsParameters": { 
        "Group": "string",
        "LaunchType": "string",
        "NetworkConfiguration": { 
           "awsvpcConfiguration": { 
              "AssignPublicIp": "string",
              "SecurityGroups": [ "string" ],
              "Subnets": [ "string" ]
           }
        },

更新:これは、aws events put-targets aws cliのコマンド!

AWS CLIが最新であることを確認してください。この方法は、古いバージョンのCLIでは失敗します。これを実行して更新:pip install awscli --upgrade --user

その後、あなたは行ってもいいはずです。使用 aws events put-targets --rule <value> --targets <value>コマンド。このコマンドを実行する前に、クラスターでルールが既に定義されていることを確認してください。そうでない場合は、aws events put-rule cmdも。 put-ruleのAWSドキュメント および put-targetsの を参照してください。

ドキュメントのルールの例を以下に示します。

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

私のために働いたput-targetsコマンドはこれです:

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"}'
5
tanvi

イベントソースとしてスケジュールを使用し、ターゲットとしてESCタスクを使用するCloudWatchルールを作成できます。

2
André

開示:Powerdown @ https://www.powerdown.io を提供するSenseDeepで働いています

他のサービスがこの機能を提供します。 PowerDownは、Fargateサービスをスケジュールする機能を提供します。これはタスクレベルではなくサービスレベルですが、タスク用のサービスを簡単に作成できます。たとえば、CICDパイプラインコンテナーをスケジュールして、9-5 M-Fを実行できます。

0
SenseDeep

EC2インスタンスとFargateインスタンスを同じクラスターに配置することはできません。

Fargateインスタンスをスケジュールすることは可能です。特定のサービスを作成し、awsツールから更新します。例:

aws ecs update-service --service my-http-service --task-definition

https://docs.aws.Amazon.com/cli/latest/reference/ecs/update-service.html

有用なリソース

ECS awsツールを使用して、ラムダまたはtravisで実行できます。

この中程度の投稿をチェックしてください:

https://medium.com/@joseignaciocastelli92/how-to-create-a-continuous-deployment-process-using-ecs-fargate-docker-travis-410d84b4d99e

ボタンには、awsコマンドがあるこのリポジトリがあります。

https://github.com/JicLotus/ecs-farate-scripts-to-deploy-and-build

ベスト

いいえ、残念ながらまだサポートされていません。未解決の問題があります here 。うまくいけば、私もそれを使いたいと思ってすぐに完了します!

0
coolboyjules