個人開発で作っている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を参考に設定をしてみてください。
おしまい。


