Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20200528 - GCPでもサーバーレスでRubyりたい!

20200528 - GCPでもサーバーレスでRubyりたい!

Tweet

More Decks by Takuya Eguchi (Akagire)

Other Decks in Programming

Transcript

  1. 自己紹介 江口 拓弥 フロントエンドエンジニアです! Nuxt.js × TypeScript × GCP ここ最近のハイライト:

    自作 ESLint プラグインを npm に登録しました(低レベル) 2 akathea_
  2. 6

  3. どうしても GCP で Ruby を 使いたくなるケース ◦ サーバーサイドエンジニアが Ruby( oR

    ) 使いたい ◦ フロントエンドエンジニアは Firebase 使いたい ◦ BFF 構成を取りたい □ SSR したい □ バックエンドとフロントエンドを疎結合にしたい ◦ API を他のサービスからも使いたい ◦ のっぴきならない理由でAWSを利用できない 7
  4. あとは開発してデプロイ…なのか? 14 ◦ Cloud Run 特有の癖に注意 □ PORT 指定 (デフォルトは8080)

    ◦ PORT という環境変数が指定済みだったら そのポートで起動するようにしておくと幸せになれそう □ ファイルは永続化しない ◦ 必要なら Storage へ逃がす。これは AWS でも Fargate や ECS でも同じ。 □ デプロイ時に Cloud SQL 用の proxy オプションを渡す必要あり ◦ 正直 Cloud SQL の使い勝手は良くない… ◦ Cloud Run で VPC が使えない。必要なら GKE を使う。
  5. ◦ どうしても Rails を使いたい場合はいいかも □ Docker の知識が必要だけど Cloud Run なら小難しい構成は不要

    ◦ K8s知識があってペイしそうなら最初から GKE でいいのでは? □ Firebase.json の rewrite ルールで Cloud Run が指定できる Rails on Cloud Run が ベストプラクティス…? 15
  6. ◦ デメリットにもちゃんと目を向ける □ 通信料が意外と高いので内部処理や API モードで使う ◦ $0.12/GB (10TBまで)。Firebase Hosting

    なら $0.026/GB。 Hosting 用途なら Firebase を使ったほうがお得。 □ Sidekiq は使えない ◦ リクエストに対するレスポンスを返したらコンテナは閉じる ◦ Pub/Sub を使ったほうがいい ◦ どうしても Sidekiq でやりたいなら GKE で Rails on Cloud Run が ベストプラクティス…? 16
  7. ◦ これまではフレキシブル環境のみ □ 起動時間、デプロイ時間ともに大幅短縮 ◦ Rails 不要なら Sinatra で軽く使える □

    一応 Rails も使えるみたい □ 動かしてる人は少なそう 2019年9月からスタンダード環境で使える (知らなかった) 18
  8. あとは開発してデプロイ…なのか? 22 ◦ App Engine の癖に注意 □ 今の所、最新のバージョンは 2.5 □

    ファイルは永続化しない ◦ 必要なら Storage へ逃がす。これは (ry
  9. ◦ Ruby をお手軽に GCP 上で使いたい場合はいいかも □ Docker の知識不要! □ VPC

    も使えるので、アプリケーション層で考えることは減りそう ◦ デメリットもあんまりなさそう □ Firebase の rewrite ルールで App Engine を利用できないので API 利用時の CORS に注意 □ Docker ではないので、開発時の環境差分問題が出る ◦ 開発時も Docker で やればある程度対策できる(どこまでやるかが問題) Ruby on App Engine が ベストプラクティス…? 23
  10. 統括 24 ◦ 最新のRubyを使いたい、大規模化する予定なら Cloud Run / GKE □ 事前にロードマップを引いておく必要がありそう(App

    Engine が利用したいバー ジョンに対応したとか、お試しとして Cloud Run を使い、最終的に GKE(もしくは別 プラットフォームの K8s サービス)を使うとか) ◦ ちょっと古いバージョンの Ruby でよいなら App Engine □ Sinatra ではアーキテクチャがオレオレ化するので、 チーム開発時は事前の意識合わせが必要(これは軽量 F/W の問題) □ DB 使うときのマイグレーション等にも注意 ◦ Firestoreで十分ならそちらの利用も検討 Rails、最新のRubyじゃなきゃダメ→ Cloud Run ただ Ruby を使いたいだけなんだ…→ App Engine