10. ソースデプロイ

最後に、今日学んだ手順を巻き戻すような機能を紹介します。

ソースコードだけで Cloud Run にデプロイする方法です。

1. ソースデプロイ

ソースデプロイでプラットフォーム側へ移るステップ

--image の代わりに --source を指定すると、Cloud Build がソースからイメージをビルドして GAR に push し、そのままデプロイまで行います。

cd ~/cloudrun-handson/app
gcloud run deploy handson-app-src \
  --source . \
  --region ${REGION} \
  --allow-unauthenticated

数分待つと、別の Service handson-app-src として同じアプリが公開されます。

成功していれば

ビルドとデプロイに数分かかったあと、Service URL: https://handson-app-src-... が表示されます。

開くと5章と同じレイアウトの画面が出ますが、色とメッセージは赤の v2 です(6章で書き換えた src/index.ts からビルドされます。

7章の v3 は handson-app に設定した環境変数で作ったもので、別の Service である handson-app-src には引き継がれません)。

Service の欄が handson-app-src になっていることも確認してください。初回はビルド済みイメージの置き場として cloud-run-source-deploy という Artifact Registry リポジトリが自動で作られます(確認を求められたらそのまま進めてください)。途中で出力が止まって見えても、ビルド待ちなので待って大丈夫です。

このディレクトリには Dockerfile があるのでそれが使われますが、Dockerfile を消しても動きます。

その場合は Google Cloud の Buildpacks が package.json を見て「Node.js アプリだな」と判断し、scripts.start(この教材では node src/index.ts)を起動コマンドにしたコンテナイメージを自動生成します。

Dockerfile を消して同じ gcloud run deploy handson-app-src --source . --region ${REGION} --allow-unauthenticated を実行しても、やはり数分後に同じ画面が返ってきます。

切り替わったかどうかは出力の1行目で分かります。Dockerfile があるときは Building using Dockerfile and deploying container to Cloud Run service [handson-app-src]、消したあとは Building using Buildpacks and deploying container to Cloud Run service [handson-app-src] になります。

Dockerfile を消したくない場合は、この節は読むだけで先に進んでも構いません。

2. では、なぜ今日 Dockerfile から始めたのか

「最初からコンテナイメージをbuild/pushせずにこれを教えてくれれば良かったのに」と思うかもしれません。

このハンズオンの順番には意図があります。

  1. ソースデプロイは中でやっていることが今日の手順そのものです
    • build → push → deploy。
    • 仕組みを知った上で使う自動化と、知らずに使う魔法は違います
  2. 実務では Dockerfile を書く場面が必ず来ます
    • 依存OSパッケージ、マルチステージビルド、社内ベースイメージ…
  3. 逆に、プロトタイプや社内ツールなら「Dockerfile なしでとりあえず公開」で十分なこともあります。

手軽さの階段を自分で選べるのが Cloud Run です:

gcloud run deploy --source .          # ソースだけ(Buildpacks におまかせ)
gcloud run deploy --source .          # ソース+ Dockerfile(ビルドはおまかせ)
docker build && push && deploy        # 全部自分で制御(今日やったこと)
+ Cloud Build トリガー                # git push で自動デプロイ(CI/CD)

まとめ

  • Cloud Runはコンテナイメージだけでなく、ソースコードのみでもデプロイ可能。
  • ソースコードデプロイはGoogle Cloudがかわりにコンテナ化をしてくれているラッパーのようなもの。
  • Cloud Runの実務ではDockerfile(そして今回取り扱わなかったCloud Runのyaml(IaC))を利用する。

results matching ""

    No results matching ""