サーバーレス

たった一つで Cloud Run にビルドしてデプロイするコマンドの紹介

Google Cloud Run blog.jpg

※この投稿は米国時間 2020 年 12 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。

Cloud Run に対する Google のビジョンはシンプルです。デベロッパーのソースコードを、HTTPS で保護されたドメイン名を使用したフルマネージドの自動スケーリング インフラストラクチャ上で実行できるようにすることです。しかし、従来は、Cloud Run へのデプロイには少なくとも次のような 2 段階のステップが必要でした。

  1. コードをコンテナ イメージへとパッケージ化する 

  2. このコンテナ イメージを Cloud Run にデプロイする

コンテナ イメージはソフトウェアのパッケージ化、デプロイ、スケーリングの業界基準となったものの、すべてのデベロッパーがコンテナの仕組みや、(それぞれの好みの言語で書かれた)アプリをコンテナ イメージへとビルドする方法を知りたい訳ではありません。

本日は、コードを Cloud Run にビルドおよびデプロイできる便利な 1 つのコマンドをご紹介します。

  gcloud beta run deploy --source=[DIRECTORY]

このコマンドは、ソースコードからコンテナ イメージを自動でビルドできる Google Cloud Buildpacks の機能と、Docker をマシンにインストールせずにリモートでコンテナ イメージをビルドできる Cloud Build を組み合わせたものです。

この新しいエクスペリエンスでは、2 つのビルドモードがサポートされています。どちらもリモートで行なわれ、マシンへの Docker のインストールは不要です。

  1. Dockerfile がディレクトリに存在する場合、それを使用して、アップロードされたソースコードをビルドします。

  2. Dockerfile がディレクトリに存在しない場合、Buildpacks は使用されている言語を自動で検出し、コードの依存関係を取得して、そこから本番環境対応のコンテナ イメージを作成します。

サンプルの Python アプリケーションを見てみましょう。(開発環境をお持ちでない場合は、shell.cloud.google.com にアクセスしてブラウザでシェルを起動してください。)まず、ソースコードを取得します。

  git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git

cd buildpack-samples/sample-python

次に、このアプリケーション(Dockerfile は含まれない)を 1 つのコマンドでビルドしてデプロイします。

  $ gcloud beta run deploy my-app --source .
Building using Buildpacks and deploying container to Cloud Run service.
✓ Building and deploying... Done.
  ✓ Uploading sources...
  ✓ Building Container...
  ✓ Creating Revision...
  ✓ Routing traffic...
Done.
Service URL: https://sample-python-[...]-uc.a.run.app

このコマンドにより、Cloud Run を使用して本番環境のトラフィックを受信する準備ができた URL が、ソースコードから生成されます。

仕組み

この新しいコマンドは、「gcloud builds submit」および「gcloud run deploy --image=[...]」へのショートカットです。

この例では、サンプルの Python アプリケーションに Dockerfile はありません。Buildpacks は自動で Python アプリケーションであることを検出し、requirements.txt ファイルからアプリケーションの依存関係を判断します。最後に、Procfile を参照してこの Python サーバーの開始方法を判断します。

このプロセスの一環として、Buildpacks はコンテナ イメージ用にセキュアなベースイメージを選択します。この方法では、ベースイメージは Google によって維持されているため、お客様は管理に煩わされることはありません。次回のデプロイでは、必要に応じてセキュリティ修正が自動で選択されます。

このコマンドを実行することで、gcloud は Cloud Build 上でリモートで実行するオンデマンドのビルドジョブを送信します。デベロッパーは、コンテナ イメージをローカルでビルドするためのツールや、コードをコンテナ イメージ化する方法について心配する必要はありません。

「docker build -t […]」の後に「docker push」をよく使用する場合は、次のコマンドを実行するだけで、ローカルの Docker ワークフローを Cloud Build に置き換えることができます。

  gcloud builds submit -t [...]

このコマンドは、得られたイメージをビルドして Artifact Registry に push します。マシンで Docker をローカルで実行する必要はありません。

ソースからの自動ビルド

ローカルマシンからソースコードをデプロイすることは、テストとしては優れた方法ですが、長期的に考えるとベスト プラクティスとは言えません。ローカルのソースにはバージョン化されていない変更が含まれる場合があるからです。変更が Git リポジトリに push された際に自動でデプロイすることをおすすめします。これをサポートするために、Cloud Run サービスへの継続的なデプロイを簡単に接続および構成する方法を以前にリリースしました。GitHub リポジトリを Cloud Run に接続することで、Dockerfile の記述やファイルのビルドなしで、ビルドを構成してリポジトリをデプロイできます。

自動ビルドを構成するには、新しい Cloud Run サービスのデプロイ中に、[ソース リポジトリから新しいリビジョンを継続的にデプロイする] を選択し、リポジトリを接続してから、Google Cloud Buildpacks を使用してソースをビルドするオプションを選択します。

source repository.jpg

これを設定すると、構成したブランチに push された変更が Cloud Build 上で自動でビルドされ、Cloud Run に安全にデプロイされます。Cloud Run サービスが表示される Google Cloud Console で、これらのビルドのステータスと履歴をモニタリングできます。

この新機能をぜひお試しいただき、Buildpacks がアプリケーション コードを Cloud Run にデプロイ可能なコンテナ イメージへ自動で変換する様子をご覧ください。もしかしたら、Dockerfile はもう不要となるかもしれません。GitHub から Google Cloud Buildpacks プロジェクトのフィードバックをぜひお寄せください。Google は Cloud Run の未来を皆様と一緒に作っていきたいと考えています。ぜひ調査研究にご参加ください

-シニア デベロッパー アドボケイト Ahmet Alp Balkan

-プロダクト マネージャー Steren Giannini