RenderにデプロイしたRails APIをIaC化する | Tomoyuki Kato's Blog

RenderにデプロイしたRails APIをIaC化する

Engineering
この記事を書いた人

PharmaXというオンライン薬局のスタートアップで薬剤師・エンジニアとして働いています。Rails・React・TypeScriptなどを書きます。英語が得意でTOEIC900点・通訳案内士資格取得。主に薬剤師の働き方やプログラミング、英語学習について書きます。当サイトではアフィリエイトプログラムを利用して商品を紹介しています。
>> 詳しいプロフィール

Tomoyuki Katoをフォローする

個人開発で作っているRails APIをRender.comにデプロイしているのだが、Renderでの設定をコード化したのでその時のメモ。

 

RenderではBlueprintと呼ばれるIaCするための機能を無料で使うことができる。

どのようにやるかというと、render.yamlというファイルに設定を記述して、それをデプロイするだけ。

 

ではさっそくIaC化していく。

 

*TerraformでのIaCもできないことはないが、オフィシャルなプロバイダーが2023年3月時点ではないようなので、素直にBlueprintを使ってIaCした方が良さそうです

Terraform Registry

 

 

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は↓の記事に貼ってあるので、もしよければ参考にしてください。

RenderにデプロイしたRails APIをIaC化する
個人開発で作っているRails APIをRender.comにデプロイしているのだが、Renderでの設定をコード化したのでその時のメモ。 RenderではBlueprintと呼ばれるIaCするための機能を無料で使うことができ

 

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を参考に設定をしてみてください。

Deploying Ruby on Rails on Render | Render Docs
This guide demonstrates how to set up a local Ruby on Rails environment, create a simple view, and deploy it to Render.

 

 

おしまい。

タイトルとURLをコピーしました