コンテンツに移動
デベロッパー

Cloud Run: サーバーレス コンテナの話

2021年6月29日
https://storage.googleapis.com/gweb-cloudblog-publish/images/CR_blog_header_banner.max-2600x2600.png
Google Cloud Japan Team

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

Mindful Containers は、コンテナ化されたマイクロサービス アプリケーションを作成している架空の会社です。同社は、サーバーレスのコンテナ化されたマイクロサービスをデプロイしてスケールするために、フルマネージドのコンピューティング環境を必要としています。そこで Cloud Run を検討しています。

Cloud Run はクラスタの構成、モニタリング、管理を抽象化します。これにより、同社はアプリの機能の構築に集中できるようになるため、Cloud Run に期待しています。

Cloud Run は、サーバーレスのコンテナ化されたマイクロサービスをデプロイしてスケールするためのフルマネージド コンピューティング環境です。

Cloud Run とは

Cloud Run は、マシンのプロビジョニング、クラスタの構成、自動スケーリングについて心配することなく、サーバーレス HTTP コンテナをデプロイしてスケールするためのフルマネージド コンピューティング環境です。

  • ベンダー ロックインなし - Cloud Run は標準の OCI コンテナに対応し、標準の Knative Serving API を実装しているため、アプリケーションをオンプレミスやその他のクラウド環境に簡単に移行できます。

  • 高速自動スケーリング - Cloud Run にデプロイされたマイクロサービスは、本格的な Kubernetes クラスタを構成または管理しなくても、受信リクエストの数に基づいて自動的にスケールされます。Cloud Run はゼロへのスケーリングを行います。つまり、リクエストがない場合、リソースをまったく使用しません。

  • トラフィックの分割 - Cloud Run はトラフィックを複数のリビジョン間で分割できるため、カナリア デプロイや Blue/Green デプロイなど、段階的な展開を行うことができます。

  • カスタム ドメイン - Cloud Run でカスタム ドメイン マッピングを設定すると、ドメインの TLS 証明書がプロビジョニングされます。

  • 自動冗長化 - Cloud Run には自動冗長性が備わっているため、高可用性のために複数のインスタンスを作成する必要がありません。

Cloud Run の使い方

Cloud Run では、好きな言語でコードを記述でき、バイナリ ライブラリも自由に選択できます。次に、それを Cloud Build に push して、コンテナビルドを作成します。「gcloud run deploy」という 1 つのコマンドで、コンテナ イメージから、TLS 証明書を使用してドメイン上で実行し、リクエストを使用して自動スケーリングを行うフルマネージド ウェブ アプリケーションまで取り扱うことができます。

Cloud Run の仕組み

Cloud Run サービスは、次の方法で呼び出すことができます。

HTTPS: HTTPS リクエストを送信して、Cloud Run がホストするサービスをトリガーできます。なお、すべての Cloud Run サービスには永続的な HTTPS URL があります。ユースケースには、次のようなものがあります。

  • カスタム RESTful ウェブ API

  • 限定公開マイクロサービス

  • ウェブ アプリケーション用の HTTP ミドルウェアまたはリバース プロキシ

  • パッケージ化されたウェブ アプリケーション

gRPC: gRPC を使用して Cloud Run を他のサービスに接続し、たとえば、内部マイクロサービス間でシンプルかつ高性能な通信を提供できます。次の場合に gRPC は良い選択肢となります。

  • 内部マイクロサービス間で通信する

  • 高負荷のデータをサポートする(gRPC では、プロトコル バッファを使用します。これは REST 呼び出しの最大 7 倍の速度です)。

  • 単純なサービス定義のみが必要で、完全なクライアント ライブラリを作成しない

  • gRPC サーバーで gRPC ストリーミングを使用して、より応答性の高いアプリケーションと API を構築する

WebSockets: WebSockets は Cloud Run でサポートされ、追加の構成が必要ありません。考えられる活用方法には、チャット アプリケーションなど、ストリーミング サービスを必要とするすべてのアプリケーションがあります。

Pub/Sub からトリガー:Pub/Sub を使用してメッセージを Cloud Run サービスのエンドポイントに push できます。そこでメッセージが HTTP リクエストとしてコンテナに配信されます。考えられるユースケースには、次のようなものがあります。

  • Cloud Storage バケットへのファイル アップロードのイベントを受信した後、データを変換する。

  • Google Cloud のオペレーション スイートのログを Pub/Sub にエクスポートして Cloud Run で処理する

  • Cloud Run サービスから独自のカスタム イベントをパブリッシュして処理する

スケジュールに沿ってサービスを実行する: Cloud Scheduler を使用して、スケジュールに沿って Cloud Run サービスを安全にトリガーできます。これは cron ジョブを使用するのと同様です。考えられるユースケースには、次のようなものがあります。

  • 定期的にバックアップを実行する

  • サイトマップの再生成や古いデータ、コンテンツ、構成、同期、リビジョンの削除など、定期的な管理タスクを実行する

  • 請求書またはその他のドキュメントを生成する

非同期タスクを実行する: Cloud Tasks を使用して、Cloud Run サービスによって非同期に処理されるタスクを安全にキューに入れることができます。主なユースケースとしては、次のようなものがあります。

  • 本番環境で予期しないインシデントが発生した場合にリクエストを処理する

  • ユーザーが操作していない作業を遅らせてトラフィックの急増を緩和する

  • データベースの更新やバッチ処理などの遅いバックグラウンド オペレーションを委任し、別のサービスで処理することで、ユーザーの応答時間を短縮する

  • データベースやサードパーティ API などのバックエンド サービスに対するコールレートを制限する

Eventrac からのイベント: 60 を超える Google Cloud ソースのイベントで Cloud Run をトリガーできます。次に例を示します。

  • Cloud Storage イベントから Cloud Audit Logs 経由でデータ処理パイプラインをトリガーする。

  • BigQuery イベント(Cloud Audit Logs 経由)を使用して、ジョブが完了するたびに Cloud Run でダウンストリーム処理を開始する。

Cloud Run と Cloud Functions の違い

Cloud Run と Cloud Functions はどちらも、Google Cloud のサーバーレス インフラストラクチャで実行され、自動スケーリングが行われて、HTTP リクエストまたはイベントを処理するフルマネージド サービスです。ただし、以下のような重要な違いがあります。

  • Cloud Functions では、限られたプログラミング言語のセットで記述されたコード(関数)のスニペットをデプロイできます。Cloud Run では、選択したプログラミング言語を使用してコンテナ イメージをデプロイ可能です。

  • Cloud Run は、アプリケーションからの任意のツールまたはシステム ライブラリの使用もサポートします。Cloud Functions は、カスタム実行可能ファイルを使用できません。

  • Cloud Run は、最大 60 分の長いリクエスト タイムアウト時間を提供します。一方で Cloud Functions のリクエスト タイムアウトは最大で 9 分です

  • Cloud Functions は、各関数インスタンスに一度に 1 つのリクエストのみを送信します。一方で Cloud Run は、デフォルトで、各コンテナ インスタンスで複数の同時リクエストを送信するように構成されています。これは、大量のボリュームが予想される場合に、レイテンシを改善し、コストを削減するのに役立ちます。

料金

Cloud Run には十分な無料枠があり、課金は従量制となっています。つまり、料金はコンテナ インスタンスでリクエストが処理される間のみ発生します。トラフィックがなくアイドル状態の場合は、課金は発生しません。

まとめ

Cloud Run のセットアップの容易さ、スケーラビリティ、管理機能についての情報を得た Mindful Containers のチームは、Cloud Run を使用してステートレス マイクロサービスをデプロイしています。詳細については、ドキュメントをご覧ください。

Video Thumbnail

#GCPSketchnote をさらにご覧になるには、GitHub リポジトリをフォローしてください。同様のクラウド コンテンツについては、Twitter で @pvergadia をフォローしてください。thecloudgirl.dev もぜひご覧ください。

-Google デベロッパー アドボケイト Priyanka Vergadia

投稿先