AWS Fargate에서 컨테이너 명령을 변경하고 정기적으로 실행하는 방법

3107 단어 rakeFargateECSAWS

실현하고 싶은 것


  • 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에 이미지가 푸시됨
  • AWS ECS 클러스터가 생성되었습니다.

  • 환경 구축



    이번 포인트는 여기입니다. ECS 태스크 정의 작성시 컨테이너 추가 화면에서 명령을 겹쳐쓸 수 있습니다. 이것을 이용해, foo, bar Rake 태스크를 실행하는 태스크 정의를 2개 준비합니다.



    태스크 정의를 2개 준비했습니다.



    마지막으로 각 태스크 정의용으로 태스크 스케줄링을 설정하면 완료.



    이제 여러 Rake 태스크 스크립트를 포함한 Docker 이미지를 이용하여 각 Rake 태스크를 별도의 스케줄로 정기 실행하는 것이 실현되었습니다.

    이번은 간단한 스크립트의 실현 예이지만, 다른 언어나 프레임워크의 배치 처리도 ECS+Fargate에 이식할 수 있게 될 것입니다.

    참고


  • 작업 정의 파라미터 - Amazon Elastic Container Service
  • Amazon ECS 작업 스케줄링 - Amazon Elastic Container Service
  • ECS 태스크에서 Rake 태스크 정기 실행
  • 좋은 웹페이지 즐겨찾기