概要
Cloud Run はコンテナ化したアプリをデプロイすることができるプラットフォームです コンテナ化さえしていれば何でもデプロイできるので便利です (ローカルパスなどをマウントしていない場合) 今回は簡単な Web アプリを作成してデプロイしてみました
環境
- macOS 11.4
- docker
- Ruby 3.0.1p64
- Cloud Run
- Container Registry
サンプルアプリの作成
今回は Ruby アプリをデプロイしてみます まずはアプリを作成します
- mkdir test
- cd test
- bundle init
- vim Gemfile
gem "sinatra"
gem "thin"
- bundle config path vendor
- bundle install
- bundle lock --add-platform x86_64-linux
- vim app.rb
require 'sinatra/base'
class WebApp < Sinatra::Application
get '/' do
'ok'
end
end
- vim config.ru
require './app'
run WebApp
サンプルアプリのビルドとプッシュ
次に docker を使ってアプリをビルドします gcloud コマンドに専用のビルドコマンドがあるのでそれを使うとレジストリの認証をしてプッシュまでしてくれます
- vim Dockerfile
FROM ruby:3.0.0
WORKDIR /usr/src/app
COPY Gemfile Gemfile.lock ./
ENV BUNDLE_FROZEN=true
RUN gem install bundler && bundle install
COPY . ./
CMD ["bundle", "exec", "rackup", "config.ru", "-o", "0.0.0.0", "-p", "8080"]
デフォルトだと Cloud Run は 8080 でアプリがリッスンすることを想定しているので 8080 を指定します
- vim .dockerignore
Dockerfile
.bundle/
vendor/
dockerignore も作成します ビルドは Cloud Build を使うため不要なファイルはビルドに含めないようにします
-
gcloud builds submit --tag us.gcr.io/PROJECT_ID/test
PROJECT_ID の部分は gcloud projects list
で確認できます
またプッシュ可能なレジストリのリージョンは「gcr.io」「us.gcr.io」「eu.gcr.io」「asia.gcr.io」があり今回は us.gcr.io を選択しています
これは Cloud Run と Registry のリージョンを同じにするためでありそうすることでデプロイ時のネットワーク転送料が無料になります
gcloud build コマンドを使うとクラウドビルドしてくれるのでローカルで docker が動作している必要はありません
GCP の管理画面からコンテナレジストリの一覧を確認するとちゃんとイメージがプッシュされているのが確認できると思います
サンプルアプリのデプロイ
イメージがプッシュできたら Cloud Run にデプロイしてみます 今回は UI からデプロイしてみます
サービスの作成
まずはサービスを作成します Cloud Run の画面から「サービス作成」をクリックします
そしてサービス名とリージョンを指定します 今回は us-central-1 を指定します
次に先程プッシュしたイメージを選択します
最後のアプリを起動させるトリガーを選択します 今回は Web アプリなので Ingress で「すべてのトラフィックを許可する」を選択します また認証は「未認証の呼び出しを許可」にチェックを入れます
これで「作成」をクリックするとアプリのデプロイが完了します
動作確認
デプロイが完了すると以下のようにアクセス可能な URL が表示されます (何度かデプロイミスしたのでエラーの履歴があります)
あとは表示されている URL にアクセスするとアプリが動作しているのが確認できると思います
クリーンアップ
プロジェクトを作成できるのであればプロジェクトごと削除しましょう
プロジェクトを削除できないのであれば Cloud Run 上のサービスと Registry 上にプッシュしたイメージを削除しましょう
おまけ: コマンドでデプロイする
UI でやった作業をコマンドで行うこともできます いくつか質問されるので答える必要がありますが認証の部分の設定になるので UI でデプロイしていればわかると思います
-
gcloud run deploy --image us.gcr.io/PROJECT_ID/test --platform managed
最後に
Cloud Run に Web アプリをデプロイしてみました CPU やメモリの量を調整したり起動トリガーなどもいろいろ変更できるのでかなり使えるサービスだと思います
アプリをコンテナ化しているのであればプッシュするだけで起動できるのでわざわざインスタンスを構築する必要もなくなります
またクラウドストレージにクラウドビルドのリソースも残っているのでそれらも削除しておきましょう
トラブルシューティング
Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform is x86_64-linux. Add the current platform to the lockfile with `bundle lock --add-platform x86_64-linux` and try again.
が表示される場合は bundle lock --add-platform x86_64-linux してからビルド&プッシュしましょう クラウドビルドを使っているためプラットフォームが異なるのが原因です
Dockerfile の書き方にも少しくせがあります 自分が遭遇したエラーは
bundler: command not found: rackup
Install missing gem executables with `bundle install`
bundle config path vendor を Dockerfile から削除するとうまくパスが見えました
0 件のコメント:
コメントを投稿