TECH BLOG

エルカミーの技術ブログです

Cloud Run入門

Cloud Runとは?

👉
一言で

サーバーレスなコンテナ実行環境サービス

Cloud Runは、マシンをプロビジョニングしたり、クラスタを構成したり、オートスケーリングを心配することなく、サーバーレスHTTPコンテナを展開およびスケーリングするための完全に管理されたコンピュート環境です。

人気とその理由
  • ベンダーロックインなし:Cloud Runはコンテナイメージをデプロイできるため、アプリケーションをオンプレミスまたは他のクラウド環境に簡単に移植できます。
  • オートスケーリング:Cloud Runは受信リクエストの数に基づいて自動的にスケーリングされます。Cloud Runは、リクエストがない場合にゼロにスケーリングされます。
  • フルマネージド:Kubernetesクラスタを構成または管理する必要がありません。
    • トラフィックの分割:Cloud Runを使用すると、複数のリビジョン間でトラフィックを分割できるため、カナリアデプロイメントやブルーグリーンデプロイメントなどの段階的な展開を実行できます。
    • 自動冗長性:Cloud Runは自動冗長性を提供するため、高可用性のために複数のインスタンスを作成する必要はありません。
Cloud Runの使用方法

Cloud Runでは、任意の言語でコードを書いたり、選択したバイナリライブラリを使用したりします。

次に、デプロイしたコンテナイメージからリクエストでオートスケールするフルマネージドなWebアプリケーションに移行します。

Cloud Runの動作は?

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

HTTPS:Cloud Runホストされたサービスを呼び出すためにHTTPSリクエストを送信できます。すべてのCloud RunサービスにはHTTPS URLがあります。

ユースケース

  • RESTful Web API
  • マイクロサービス
  • Webアプリケーション
  • WebアプリケーションのHTTPミドルウェアまたはリバースプロキシ
gRPC:gRPCを使用して、Cloud Runサービスを他のサービスに接続できます。たとえば、内部マイクロサービス間の単純で高性能な通信を提供するために使用できます。

以下の場合にgRPCが適しています。

  • 内部マイクロサービス間で通信する必要がある場合
  • データロードが高い場合(gRPCはREST呼び出しよりも最大7倍高速なプロトコルバッファを使用するため)
  • 完全なクライアントライブラリを書きたくない場合
  • gRPCサーバーでストリーミングgRPCを使用して、応答性の高いアプリケーションとAPIを構築します。
WebSockets:WebSocketsアプリケーションは、追加の構成なしでCloud Runでサポートされています。

ユースケース

  • チャットアプリケーションなど、ストリーミングサービスが必要なアプリケーション
Pub/Sub:Pub/Subを使用して、Cloud Runサービスのエンドポイントにメッセージをプッシュし、メッセージがHTTPリクエストとしてコンテナに配信されるようにすることができます。

ユースケース

  • Cloud Storageバケットへのファイルのアップロードに対するイベントの受信後にデータを変換する
  • Cloud RunでGoogle Cloud Operations Suiteログを処理することで、Google Cloudオペレーションスイートログを処理する
  • Cloud Runサービスから独自のカスタムイベントを発行および処理する
スケジュール上のサービスの実行:Cloud Schedulerを使用して、スケジュールに従ってCloud Runサービスを呼び出せます。

ユースケース

  • 定期的にバックアップを実行する
  • サイトマップを再生成したり、古いデータ、コンテンツ、設定、同期、またはリビジョンを削除するなど、再発生する管理タスクを実行する
  • 請求書やその他の文書を生成する
非同期タスクの実行:Cloud Tasksを使用して、Cloud Runサービスに非同期に処理されるタスクを安全にエンキューできます。

ユースケース

  • 予期しない本番インシデントを介してリクエストを処理する
  • ユーザーに表示されない作業を遅延させてトラフィックスパイクを平滑化する
  • データベースの更新やバッチ処理など、遅延するバックグラウンド操作を他のサービスに委任してユーザーの応答時間を短縮する
  • データベースやサードパーティAPIなどのバックエンドサービスへの呼び出しレートを制限する
Eventracからのイベント:60以上のGoogle CloudソースからのイベントでCloud Runをトリガーできます。

ユースケース

  • Cloud Storageイベント(Cloud Audit Logs経由)を使用してデータ処理パイプラインをトリガーする
  • BigQueryイベント(Cloud Audit Logs経由)を使用して、ジョブが完了するたびにCloud Runで下流処理を開始する
導入ステップ

  1. 実行したいコードを含むコンテナイメージをビルドする。

    Dockerを使用して、実行したいコードを含むコンテナイメージを作成します。

  2. コンテナイメージを Artifact Registry にプッシュします。

    Artifact Registry はコンテナイメージを保存および管理するためのサービスです。

  3. Cloud Run サービスとそのデプロイメントを作成し、コンテナ イメージを指定します。

    Cloud Run サービスを作成するには、Console に移動し、[Cloud Run] をクリックします。サービスの名前とリージョンを指定し、Artifact Registryのコンテナイメージを指定します。サービスが作成されたら、開始してリクエストを受け入れることができます。

Cloud RunとCloud Functionsの共通点と違い

  • 共通点
    • Google Cloudのサーバーレスインフラストラクチャで実行され、HTTPリクエストまたはイベントを処理し、オートスケールされるフルマネージドのサービスです。
  • 違い
    • Cloud Functionsは、制限されたプログラミング言語の関数を実行できます。
    • Cloud Runは、任意のプログラミング言語を使用したコンテナイメージを実行できます。
料金

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

また、Cloud Run には無料枠があります。

ユースケース

  • データの変換:配信されたデータをデータに変換して保存する、Cloud Run データ処理アプリケーションを構築します。変換は Google Cloud ソースからトリガーできます。
  • REST API:Cloud Run で実行されている API サービスによって、Cloud SQL や Firestoreなどのマネージドなデータベース上にデータを保持できます。ログインしたユーザーは、Cloud データベースに保存されたアプリのリソースデータにアクセスできます。
  • バッチ処理:Cloud Scheduler と併用して、Cloud Run サービスで文章を生成するなど毎月のジョブをスケジュール化できます。コンテナを Cloud Run にデプロイできるため、任意のツールでサーバーレスで実行できます。課金されるのはバッチ処理を実行するときだけです。