Cloud Run でソースベースのデプロイを試す
Google Cloud Japan Team
※この投稿は米国時間 2021 年 10 月 19 日に、Google Cloud blog に投稿されたものの抄訳です。
最近まで、次の方法で Cloud Run にコードをデプロイしていました。
Dockerfile を使用してコンテナベースのアプリを定義する。
コンテナ イメージをビルドし、Container Registry に push する(通常は Cloud Build を使用)。
コンテナ イメージを Cloud Run にデプロイする。
去る 12 月に、Google は Cloud Run 用ソースベース デプロイのベータ版のリリースを発表しました。これは、上記の 2、3 の手順を、1 つのコマンドにまとめたものです。さらに重要なのは、サポートされている言語バージョンの Dockerfile も不要になることです。
これにより、ついに、複雑なコンテナ イメージの作成について心配することなく、1 つのコマンドでソースコードから実行中の Cloud Run サービスにデプロイできるようになりました。Cloud Run のデプロイ エクスペリエンスが Cloud Functions や App Engine と同等になったのは素晴らしいことです。
ソースベースのデプロイが一般提供されるようになったことを読み嬉しく思い、既存のサンプルを利用して、ソースベースのデプロイを使用するように変換することにしました。
従来のデプロイ エクスペリエンス
以前は、次のような方法でアプリをデプロイしました。シンプルな .NET Core 3.0 のウェブ アプリケーションでした。
まず、Dockerfile を書く必要がありました。これはより複雑なアプリケーションでは、容易なことではありません。
そして、Cloud Build でコンテナ イメージをビルドしました。
最後に、Cloud Run にデプロイしました。
新しいデプロイ エクスペリエンス
新しいデプロイ エクスペリエンスを試す前に、アプリを .NET Core 3.1 にアップデートし、Dockerfile を削除しました。
コマンド 1 つでアプリのデプロイができるようになりました。
この出力から、Cloud Run では、Google Cloud Buildpacks を使用してアプリの種類を検出し、Cloud Build でコンテナを構築して Cloud Run にデプロイするというすべての工程を 1 つの手順で行っているのがわかります。
まるで魔法です!
回避策
お使いのアプリが Google Cloud Buildpacks でサポートされている言語バージョンのものであれば、新しいデプロイ エクスペリエンスは優れたものになります。
しかし、お使いのアプリの言語バージョンが Buildpacks でサポートされていない場合はどうなるでしょうか?
確認するために、.NET 5.0 バージョンのアプリを作成し、デプロイを試しました。エラーが発生してビルドは失敗しました。そこで、Cloud Build のログが失敗した理由の手がかりになります。
このビルドには、.NET Core 3.1.413 の最新長期サポート(LTS)バージョンが使用されていて、こちらで使用したアプリは .NET 5.0 です。これは予期されたエラーです。すべてのビルダーがすべてのバージョンに対応できるわけではありません。
しかし幸いなことに、回避策があります。.NET 5.0 を使用するために Dockerfile を手動でビルドし、そのソースを使って再度ビルドを試みました。
これで Dockerfile がビルドに使用され、Cloud Run サービスが問題なくデプロイされていることがわかります。
お試しください
ソースから直接デプロイするまたは、カスタム Dockerfile を使ってデプロイするどちらの場合でも、新しいソースベースのデプロイでは、コードから実行中の Cloud Run サービスに非常に簡単に移行できます。ドキュメントをご覧になり、ご不明な点やフィードバックがございましたら、Twitter @meteatamel までお気軽にお寄せください。
- デベロッパー アドボケイト Mete Atamel