kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

aws cliからfargateのタスクを実行する

すでにタスク定義が存在するfargateタスクをaws cliから実行する方法です。
いろいろ探しましたが、fargateではなくインスタンスであったり、サービス前提のタスクだったりで
私の欲しい物がなかったので覚書を残します。

前提

  • fargateで動かす
  • タスク定義はすでに存在する
  • サービスでは動かさない
  • タスク定義はバッチのような動きをする

iam周り

aws cliを叩くときに指定するiamには以下のアクションを許可しています。

  • ecs:ListTaskDefinitions
  • ecs:ListTasks
  • ecs:DescribeTasks
  • ecs:RunTask
  • iam:PassRole

ecs:ListTaskDefinitions , ecs:ListTasks , ecs:DescribeTasks はタスク実行前、実行中に
list-task-definitions , list-tasks , wait tasks-stopped などを使うためです。
iam:PassRole はタスク定義で指定しているタスク実行ロールにわたすためです。

コマンド

$ aws ecs list-task-definitions #タスク定義のarnを確認する
$ aws ecs run-task \
    --cluster foo-cluster \
    --task-definition arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task-definition/foo-task-definision:9 \ #確認したarnをリビジョン含めて指定する
    --launch-type FARGATE \
    --network-configuration 'awsvpcConfiguration={subnets=[subnet-xxxx],securityGroups=[sg-xxxxxxxx],assignPublicIp=DISABLED}' #ネットワーク周りの設定を指定する
$ aws ecs list-tasks --cluster foo-cluster #タスク一覧で確認する
$ aws ecs wait tasks-stopped \ #タスクが終わるのを待つ
    --cluster foo-cluster \
    --tasks arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx #run-taskで返ってきたarnを指定する

参考