LoginSignup
12
12

More than 3 years have passed since last update.

RailsのmigrateをAWS Fargateに移行した時の話

Last updated at Posted at 2019-10-09

前提

  • ECSでRailsアプリが起動されていること
  • migrateはfargateでやってなかった
  • テスト環境でやること

作業内容

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/ecs_run_task_fargate.html
これ見ながら作業する。実際は、コマンドでやると何をしているのかよくわからないので、まずはGUIでやる。把握した後にコード化するというのが良い。そうすることで、全てのオプションやらパラメータの世界が見えてくる。

念の為、新規DBを作成

t2.microなどで良い
何らかのエラーが出たときの切り分けにしたい。
インスタンスが作れたら、アプリケーションデプロイ用のタスクにDBの環境変数を設定する(Systems Managerが使えるなら ECS containerから valueFrom で呼び出せるのでjson自体をgit管理できる。AWSでマネージドされているのが良い。暗号化したいならKMSを利用する)

taskを定義する

実際は、コマンドなどを付与したりするのでENTRYPOINTで設定している。
これは、Initial,Migrate,Seedそれぞれリビジョンで分けるだけで良い。Initial,Seed,Migrateの順で作る。
※なお、実際の運用ではInitialやらSeedは使わない。これは、今回新規でRDSを立ち上げたので必要になっただけ。LATESTリビジョンだけがあれば良い。

key value
ネットワークモード awsvpc
互換性が必要 FARGATE
タスクメモリ(GB) 0.5GB
タスクCPU(vCPU) 0.25 vCPU

containerの環境設定(Initial)

key value
エントリポイント bundle,exec,rails,db:create
作業ディレクトリ /app(アプリがある場所)
  "containerDefinitions": [
    {
      "entryPoint": [
        "bundle",
        "exec",
        "rails",
        "db:create"
      ],
      "workingDirectory": "/app"
    }
  ]

containerの環境設定(Migrate)

key value
エントリポイント bundle,exec,rails,db:migrate
作業ディレクトリ /app(アプリがある場所)
  "containerDefinitions": [
    {
      "entryPoint": [
        "bundle",
        "exec",
        "rails",
        "db:migrate"
      ],
      "workingDirectory": "/app"
    }
  ]

containerの環境設定(Seed)

key value
エントリポイント bundle,exec,rails,db:seed,a=b
作業ディレクトリ /app(アプリがある場所)
  "containerDefinitions": [
    {
      "entryPoint": [
        "bundle",
        "exec",
        "rails",
        "db:seed",
        "a=b"
      ],
      "workingDirectory": "/app"
    }
  ]

taskを実行する

  • VPCを設定、subnetを設定
  • ネットに繋がるものを設定しておく

2つエラーが発生した

  • メモリ不足エラー → メトリクスをチェックして、スペックの問題ならスペックを上げる
    • コンテナインスタンスのリソースから、メモリ使用量を見る
  • ECRからイメージをpullしてこれず、エラー → インターネットにつながるネットワークを設定する

結果を見る

  • PROVISIONING→PENDING→RUNNING→STOPのようなフローだったような気がする
  • タスクのStoppedの中でログを確認する。
  • Migrateタスクならば、以下のようなログが吐かれているだろう。
2019-10-09 18:16:45D, [2019-10-09T09:16:45.290941 #1] DEBUG -- : [1m[35m (572.8ms)[0m [1m[35mCREATE DATABASE "test_database" ENCODING = 'unicode'[0m
2019-10-09 18:16:45Created database 'test_database'
  • 実際にアプリケーション側でも確認する。
  • 問題がなければCodeDeployやCIなどで連携する。
12
12
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
12
12