Amazon ECS를 사용하여 Ruby on Rails를 시작하고 운영 중에 발생한 문제 해결

3322 단어 RailsECScron도커AWS

쓴 것


  • Amazon ECS를 사용하여 Ruby on Rails를 이동하는 구성 소개
  • 거기서 나온 과제와 ​​해결 방법의 소개

  • ECS를 사용하여 Ruby on Rails를 움직이는 구성 소개


  • Amazon ECS란?
  • Amazon Elastic Container Service
  • 컨테이너 오케스트레이션 서비스


  • Docker 컨테이너화 된 응용 프로그램을 ECS에서 정의하고 배포 규모를 만들 수 있습니다.

    ECS에서의 정의 예



    크게 나누어 이하 3개의 정의를 ECS상에서 정의하면 환경을 구축할 수 있다


    1. 클러스터 정의


  • 그룹 정의
  • "프로덕션 환경"등


  • 2. 서비스 정의


  • 클러스터 내에서 게시할 서비스 정의
  • Rails에서 움직이고있는 00 서비스 등


  • 3. 작업 정의


  • 서비스를 실행하기 위한 Docker 컨테이너와, 컨테이너를 이동하기 위한 조건등의 정의
  • Nginx + Rails로 이동하기 위해 각각의 Docker 컨테이너를 준비하고 지정
  • 각 가장 CPU 및 가상 메모리 지정
  • 필요한 환경 변수 설정
  • 시작을위한 명령 지정


  • 인프라 구성



    클러스터 서비스 지정 및 배포
    $ ecs deploy [クラスタ] [サービス] ...
    

    그러면 ECS 에이전트가 작업 정의에 따라 Docker 컨테이너를 배포합니다.


    운영 개시, 그리고 ··


  • 스키마 변경, 기타 Rake Task
  • bundle exec rails db:migrate
  • 등과 같은 웹 액세스를 통한 별도의 무거운 처리도 Rails docker 내에서 수행되었습니다.

  • 정기 실행
  • 정말 실행되었을까


  • => 명령으로 CPU, 메모리 부하 상승, 최악의 경우 액세스 할 수 없습니다.
    => 정기 실행 모니터링 불확실성

    태스크 실행 전용 서비스를 만들자



    클러스터 정의 예


  • 새로운 서비스 정의
  • 웹에서 액세스 할 수없는 서비스이므로 Rails의 컨테이너 만 정의합니다




  • 인프라 구성


    $ ecs deploy [クラスタ] [サービス] ...
    $ ecs run [クラスタ] [サービス] -c [コマンド]
    

    서비스 배포 및 명령 실행



    명령 실행 후 서비스가 종료됩니다.

    정기 실행 수행


  • 작업 스케줄러가 정의 가능
  • 어떤 서비스가 얼마나 자주 또는 어떤 시점에서 무엇을 수행하는지 지정

  • 런타임에 서비스가 배포되고 명령을 실행합니다.
  • 명령 실행 후 서비스 종료

  • 실행 로그 및 트리거 결과는 CloudWatch에서 확인

  • 무슨 일이야?


  • 서비스가 웹과 분리되어 무거운 명령을 실행해도 클러스터의 다른 가장 환경에서 실행됩니다.
  • 웹 측이 명령으로 인해 액세스 할 수 없게되지 않습니다

  • 정기 실행 모니터링이 쉬워졌습니다.
  • CloudWatch 이벤트 알림을 사용하여 모니터링 할 수 있습니다.
  • 웹에서 독립 CloudWatch 로그를 볼 수 있습니다


  • 좋은 웹페이지 즐겨찾기