Help us understand the problem. What is going on with this article?

Amazon ECSを用いてRuby on Railsを起動し、運用時に起きた課題の解決案

書いたこと

  • Amazon ECSを用いてRuby on Railsを動かす構成の紹介
  • そこで出た課題と解決手法の紹介

ECSを用いてRuby on Railsを動かす構成の紹介

  • Amazon ECSとは
    • Amazon Elastic Container Service
      • コンテナオーケストレーションサービス
  • Dockerコンテナ化されたアプリケーションをECSで定義してデプロイ・スケールができる

ECSでの定義例

大きく分けて以下3つの定義をECS上で定義すれば環境が構築できる
スクリーンショット 2019-12-14 12.40.50.png

1. クラスタの定義

  • グループの定義
    • 「本番環境」など

2. サービスの定義

  • クラスタ内で公開したいサービスの定義
    • Railsで動いている〇〇サービスなど

3. タスクの定義

  • サービスを実行するためのDockerコンテナと、コンテナを動かすための条件等の定義
    • Nginx + Railsで動かすためにそれぞれのDockerコンテナを用意と指定
    • それぞれの仮装CPUと仮想メモリの指定
    • 必要な環境変数の設定
    • 起動のためのコマンドの指定

インフラ構成

クラスタ・サービスを指定してデプロイする

$ ecs deploy [クラスタ] [サービス] ...

そうすると、ECSのエージェントがタスク定義に従ってDockerコンテナをデプロイしていく
スクリーンショット 2019-12-14 12.39.40.png

運用開始、そして・・

  • スキーマ変更、その他Rake Task
    • bundle exec rails db:migrate
    • などなど、Webアクセス経由とは別の重い処理もRailsのdocker内で行った
  • 定期実行
    • 本当に実行されたのだろうか

=>コマンドによってCPU・メモリ負荷上昇・最悪の場合アクセス不能に :innocent:
=> 定期実行の監視の不確実さ :innocent:

タスク実行専用のサービスを作ろう

クラスタの定義例

  • 新しいサービスを定義した
    • Webからのアクセスがないサービスなので、Railsのコンテナのみ定義

スクリーンショット 2019-12-14 14.55.05.png

インフラ構成

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

サービスのデプロイと、コマンドの実行

スクリーンショット 2019-12-14 14.55.16.png

コマンド実行後はサービスは終了する

定期実行を行う

  • タスクスケジューラーが定義できる
    • どのサービスを・どれくらいの頻度で、もしくはどのような時に・何を実行するかを指定
  • 実行時にサービスがデプロイされ、コマンドを実行する
  • コマンド実行後はサービスは終了する スクリーンショット 2019-12-14 15.10.51.png
  • 実行ログやトリガーの結果はCloudWatchで確認

どうなったか

  • サービスがWebと別に切り出されたので、重いコマンドを実行してもクラスタ内の別の仮装環境の中で実行されるようになった
    • Web側がコマンドに起因してアクセス不能になることはなくなった
  • 定期実行の監視が容易になった
    • CloudWatchイベントの通知を利用し、監視できるようになった
    • Webから独立したCloudWatchログを確認できるようになった

:grin:

kehonda
theport
ポート株式会社 PORT INC.は、「世界中に、アタリマエとシアワセを。」をミッションに、新しい時代の1ページを創る会社です。【PORTもくもく会】https://freestyle-mokumoku.connpass.com/
https://www.theport.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした