LoginSignup
4
2

More than 3 years have passed since last update.

AWS Fargateでコンテナのコマンドを変えて定期実行する方法

Last updated at Posted at 2019-08-18

実現したいこと

  • Rakeタスクのスクリプトを内包したDockerイメージがあり、AWS ECRにpush済みである
  • 別々のRakeタスクをAWS Fargate上で定期実行したい
    • A Rakeタスクは毎分
    • B Rakeタスクは毎時

サンプルコードとして以下の foo、bar Rakeタスクを定期実行したいとします。

Rakeタスク

task default: %w[foo]

task :foo do
  puts "Hello Foo"
end

task :bar do
  puts "Hello Bar"
end

Dockerイメージ

FROM ruby:2.6.3

ENV LANG ja_JP.UTF-8

RUN gem install bundler
RUN mkdir /app
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
ADD Rakefile /app/Rakefile
RUN bundle install

CMD ["bundle", "exec", "rake", "foo"]

前提

  • AWS ECRにイメージはpush済みとする
  • AWS ECSクラスターは作成済みとする

環境構築

今回のポイントはここです。ECS タスクの定義作成時のコンテナ追加画面でコマンドの上書きをすることができます。これを利用して、foo, bar Rakeタスクを実行するタスク定義を2つ用意します。

image.png

タスク定義を2つ用意しました。

image.png

最後に各々のタスク定義用にタスクのスケジューリングを設定すれば完了。

image.png

これで複数Rakeタスクスクリプトを内容したDockerイメージを利用して、各々のRakeタスクを別々のスケジュールで定期実行することが実現でした。

今回は簡単なスクリプトの実現例だが、他の言語やフレームワークのバッチ処理もECS + Fargateに移植できるようになるはずです。

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2