個人開発で作っているRails APIをRender.comにデプロイしているのだが、Renderでの設定をコード化したのでその時のメモ。
RenderではBlueprintと呼ばれるIaCするための機能を無料で使うことができる。
どのようにやるかというと、render.yamlというファイルに設定を記述して、それをデプロイするだけ。
ではさっそくIaC化していく。
*TerraformでのIaCもできないことはないが、オフィシャルなプロバイダーが2023年3月時点ではないようなので、素直にBlueprintを使ってIaCした方が良さそうです
Dockerで構築したRails APIをIaCする

まずはDockerを使っている場合のIaCについて。(Dockerを使っていない場合はこの項目は飛ばしてください)
1:render.yamlファイルをapp直下に作成する
まずapp直下にrender.yamlファイルを作る。
ここで注意したいのが、render.ymlではなく、『render.yaml』というファイル名にする必要があるということだ。
僕はrender.ymlだと設定が反映されないことにめちゃくちゃ時間がかかったので気をつけて。

render.yamlファイルを作成したら、↓みたいな感じで設定を記述する。
databases:
  - name: xxxxxx_db
    databaseName: xxxxxx_postgresql
    user: xxxxxx_service
    region: singapore
    plan: free
services:
  - type: web
    name: xxxxxx_service
    env: docker
    region: singapore
    branch: develop
    plan: free
    dockerfilePath: ./docker/deploy/staging/Dockerfile
    domains: # 独自ドメインを使う場合は設定する
      - xxxx.com 
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: xxxxxx_db
          property: connectionString
      - key: CORS_ORIGINS # フロントエンドバックエンドでオリジンが異なる場合は設定する
pushする
git add git commit -m "create render.yaml" git push origin develop
これでデプロイできていればOK。
正常に動かない場合は、
- Dockerfile
- Dockerfileのpath
あたりがおかしい可能性が高いので、そこらへんを重点的にチェックすると良いかも。
僕が書いたDockerfileは↓の記事に貼ってあるので、もしよければ参考にしてください。

Dockerを使っていないRails APIをIaCする

次にDockerを使っていない場合IaCについて。
1:render-build.shを作成する
binディレクトリ配下に、render-build.shファイルを作成する。

このファイルはrenderにデプロイしたとき、特定のコマンドを実行してくれる。
僕はRailsをAPIとして使っているので、render-build.shの中身はこんな感じで書いている。
#!/usr/bin/env bash # exit on error set -o errexit bundle install bundle exec rails db:migrate bundle exec rails db:seed_fu
2:render.yamlファイルをapp直下に作成する
次にapp直下にrender.yamlファイルを作る。
ここで注意したいのが、render.ymlではなく、『render.yaml』というファイル名にする必要があるということだ。
僕はrender.ymlだと設定が反映されないことにめちゃくちゃ時間がかかったので気をつけて。

render.yamlファイルを作成したら、↓のように設定を記述する。
databases:
  - name: xxxxxx_db
    databaseName: xxxxxx_postgreql
    user: xxxxxx_service
    region: singapore
services:
  - type: web
    name: xxxxxx_service
    env: ruby
    region: singapore
    plan: free
    buildCommand: "./bin/render-build.sh"
    startCommand: "bundle exec puma -C config/puma.rb"
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: xxxxxx_db
          property: connectionString
      - key: RAILS_MASTER_KEY
        sync: false
pushする
git add git commit -m "create render.yaml" git push origin main
これでデプロイできていればOK。
デプロイがうまくできない場合は、
- 環境変数のRAILS_MASTER_KEYがない
- database.ymlの設定が間違っている
- production.rbの設定が間違っている
- puma.rbの設定が間違っている
らへんがおかしい可能性が高いので、以下のURLを参考に設定をしてみてください。
おしまい。


