Rubyアプリを手軽にCloud Runにする話


こんにちは妖精です。
Catallaxy Advent Calendar 4日目として、既存アプリケーションをGCPのCloud Runへ移行したことを簡潔に記録しようと思います。

元々のアプリケーションはVPS(さくらのVPS)1台にデプロイされていました。たまに突然Rubyサーバーが丸ごと落ちてしまうようで、そのたびに業務が止まってしまっていたようです。原因として最も考えられるのは単一のVPSに複数のサービスがただ単純にプロセスとしてデプロイ・稼働していたことでした。開発者は既にこの業務から離れており残されたのは必要最低限のドキュメントとわずかに継承された脳裏の記憶でした。

そんな状況だったので一気にGoogle CloudのCloud Runに移行することに決めました。ビルドの仕組みがなかったので、Google Cloud Buildを手順通り使うのは面倒なので、Cloud RunのDeploying from source code機能を利用することとしました。この機能は gcloud run でいうところの --source [DIR] フラグに該当します。
Rubyアプリケーションなので、Google Cloud Buildpacksではサポートされません(Cloud Run移行時も2021年12月現在も同じ)。しょうがないのでDockerfileを手で記述しました。と言ってもほとんどありのままのコピーに毛が生えた程度です。30秒でPRが作成され、瞬時にマージされていきました。
デプロイ(CD)はいつも通りGitHub Actionsを利用したのですが、利用するService Accountの設定の際、Google Cloud Buildの (Project number)@cloudbuild.gserviceaccount.com に対して roles/iam.serviceAccountUser ロールを追加する必要があるので、ハマりやすいポイントだと思います。

今回用いたActionsのコアの内容は以下です。

.github/workflows/deploy.yml
    - name: Deploy to Cloud Run
      id: deploy
      uses: google-github-actions/[email protected]
      with:
        credentials: ${{ secrets.GCP_SA_KEY }}
        source: .
        service: ${{ env.SERVICE }}
        region: ${{ env.REGION }}

参考リソース

以上、妖精でした。明日は信州の廻船問屋さんによる「私が本物の御老公様(仮)」です。