1. ホーム
  2. 記事一覧
  3. 簡単ステップで学ぶ!Google CloudRunの基礎とデプロイ方法

2024.06.23

簡単ステップで学ぶ!Google CloudRunの基礎とデプロイ方法

はじめに

こんにちは!クラウド学習、捗っていますか?エンベーダー編集部です。今回はGoogle CloudのサーバーレスサービスであるGoogle CloudRunについて学びます。

Google CloudRunは、Google Cloudが提供するサーバーレスのコンテナ実行環境です。これにより、開発者はインフラストラクチャの管理を気にせずに、コードをデプロイし実行できます。この記事では、CloudRunの基本的な概念と機能を理解し、簡単な「Hello World」アプリをデプロイする方法を紹介します。対象読者は、CloudRunやサーバーレスコンピューティングに初めて触れる方です。

CloudRunとは?

CloudRunは、Google Cloudが提供するフルマネージドのコンテナホスティングサービスです。Dockerコンテナを使用してアプリケーションを実行し、オートスケーリングや従量課金モデルを特徴とします。

一言で例えると

CloudRunは「コンテナを使ったサーバーレスホスティングプラットフォーム」です。これにより、開発者はインフラ管理の手間を省き、アプリケーション開発に集中できます。

AWSの類似サービス

AWSのサービスで言うと、CloudRunは「AWS Fargate」に相当します。AWS Fargateは、コンテナをサーバーレスで実行するためのサービスであり、インフラストラクチャの管理を必要とせず、リクエストに応じて自動的にスケールします。これにより、開発者はインフラ管理の手間を省き、アプリケーション開発に集中できます。

他のサーバーレスプラットフォームとの比較

サーバーレスプラットフォームには、コンテナタイプと関数タイプの2つの主要な実現方法があります。それぞれの特徴を理解することで、CloudRunの強みと特定のユースケースに適した選択が可能になります。

コンテナタイプ

コンテナタイプのサーバーレスプラットフォームは、コンテナ化されたアプリケーションをサーバーレスで実行します。

  • Google CloudRun
    フルマネージドのコンテナホスティングサービスであり、Dockerコンテナを使用してアプリケーションを実行します。オートスケーリングや従量課金モデルを特徴とし、任意のコンテナ化されたアプリケーションを長時間実行できます。

  • AWS Fargate
    コンテナをサーバーレスで実行するためのサービスで、インフラストラクチャの管理を必要とせず、リクエストに応じて自動的にスケールします。これにより、開発者はインフラ管理の手間を省き、アプリケーション開発に集中できます。

  • Azure Container Instances
    Microsoft Azureが提供するフルマネージドのコンテナ実行サービスで、簡単にコンテナをデプロイし、スケーリングできます。これにより、開発者はインフラの管理をせずに、アプリケーションの実行に集中できます。

特徴CloudRunAWS FargateAzure Container Instances
実行モデルコンテナコンテナコンテナ
サーバーレス
オートスケーリング
実行時間の制限長時間実行可能長時間実行可能長時間実行可能
利用ケース任意のコンテナアプリケーション任意のコンテナアプリケーション任意のコンテナアプリケーション
トリガーの柔軟性高い(任意のHTTPリクエスト等)高い(多様なAWSサービス)高い(多様なAzureサービス)
関数タイプ

関数タイプのサーバーレスプラットフォームは、コードを関数として実行し、イベント駆動型の処理に適しています。

  • AWS Lambda
    イベント駆動型の関数実行サービスであり、コードを関数としてデプロイし、様々なAWSサービスからのイベントによってトリガーされます。短時間で完了するタスクに適しています。

  • Azure Functions
    Microsoft Azureが提供するサーバーレスコンピューティングサービスで、多くのトリガーとバインディングをサポートし、Azureの他のサービスと統合しやすいのが特徴です。

  • Google Cloud Functions
    Google Cloudが提供する関数実行サービスで、他のGoogle Cloudサービスとシームレスに連携できます。イベント駆動型の短時間タスクに適しています。

特徴AWS LambdaAzure FunctionsGoogle Cloud Functions
実行モデル関数関数関数
サーバーレス
オートスケーリング
実行時間の制限短時間(最大15分)短時間(最大5分)短時間(最大9分)
利用ケースイベント駆動の短時間タスクイベント駆動の短時間タスクイベント駆動の短時間タスク
トリガーの柔軟性高い(多様なAWSサービス)高い(多様なAzureサービス)高い(多様なGoogle Cloudサービス)

このように、プロジェクトの要件に応じてコンテナタイプと関数タイプを使い分けることができます。CloudRunは、特に長時間実行が必要なコンテナ化されたアプリケーションに適しており、AWS LambdaやAzure Functionsは短時間のイベント駆動型タスクに適しています。

CloudRunの概要

CloudRunは、コンテナ化されたアプリケーションを実行するためのサーバーレスプラットフォームです。サーバーレスコンピューティングとは、インフラストラクチャの管理をクラウドプロバイダーに任せることで、開発者がアプリケーション開発に専念できる仕組みです。CloudRunを使うことで、まるで「自動運転車」に乗っているかのように、インフラ管理の手間を省くことができます。

主要な機能

CloudRunには、開発者が効率的にアプリケーションをデプロイ・運用するための以下の主要な機能があります。

オートスケーリング

リクエストに応じて自動的にスケールアップ・スケールダウンします。トラフィックが増加すると自動的に新しいコンテナが起動し、トラフィックが減少するとコンテナが停止します。これにより、リソースの無駄を省き、効率的な運用が可能です。

従量課金

実行時間に応じた従量課金モデルを採用しており、使用した分だけ支払います。これにより、利用したリソースに対してのみ課金され、コストの最適化が図れます。

簡単なデプロイ

コンテナイメージをGoogle Container Registryにプッシュし、数クリックでデプロイできます。これにより、複雑なデプロイ手順を省略し、迅速にアプリケーションを公開することができます。

CloudRunのこれらの機能を利用することで、開発者はインフラ管理から解放され、アプリケーションの機能開発に集中できます。

CloudRunの利点とユースケース

CloudRunの主な利点には以下の点があります。

コスト効率

使用したリソースに対してのみ課金されるため、コストを最適化できます。例えば、小規模なスタートアップが限定的なリソースでウェブアプリケーションを運営する場合、トラフィックが少ないときには費用を抑え、高トラフィック時には自動的にリソースを増やせるため、無駄なコストをかけずに運用が可能です。

スケーラビリティ

リクエスト数に応じて自動的にスケールするため、高トラフィックにも対応可能です。例えば、大規模なオンラインイベントを開催する企業が、短期間で急増するアクセスに対してもスムーズに対応できるようになります。

迅速な開発

インフラ管理の手間が省けるため、アプリケーション開発に集中できます。開発チームがインフラの設定や管理に時間を取られることなく、新しい機能の開発や改善にリソースを投入できるため、開発スピードが向上します。

ユースケース

マイクロサービスのホスティング

CloudRunは、小さなサービスを独立してデプロイするマイクロサービスアーキテクチャに最適です。例えば、オンラインショッピングサイトの決済システムや在庫管理システムをそれぞれ独立して管理し、必要に応じてスケールさせることができます。

イベント駆動型アプリケーション

イベント発生時にのみ動作するアプリケーションにも適しています。例えば、ECサイトでの注文処理システムや、ユーザーの特定の操作に基づいて通知を送信するSNSのリアルタイム通知サービスに利用できます。

バックエンドAPIの構築

クラウドネイティブなバックエンドAPIの構築にも便利です。例えば、モバイルアプリのバックエンドとして、ユーザー認証やデータストレージを管理するAPIをCloudRunでホスティングすることができます。

デメリット

CloudRunには以下のデメリットもあります。

起動遅延

コンテナが起動するまでの時間(コールドスタート)が発生するため、初回リクエストの応答速度が遅くなることがあります。これは特にユーザーが頻繁にアクセスするアプリケーションでは問題となることがあります。

コスト予測の難しさ

従量課金モデルのため、予測が難しいトラフィックの場合、コストが不確定となり、予算管理が難しくなる可能性があります。

プラットフォーム依存

CloudRunはGoogle Cloudのサービスであるため、他のクラウドプロバイダーへの移行が必要になった場合、依存関係が課題となることがあります。

これらの利点とデメリットを理解することで、CloudRunがあなたのプロジェクトに適しているかどうかを判断する助けになるでしょう。例えば、オンラインショッピングサイトの運営やSNSの通知機能、モバイルアプリのバックエンドなど、さまざまな場面でCloudRunが役立つ反面、特定の状況ではデメリットも考慮する必要があります。

簡単ハンズオン:Hello Worldアプリをデプロイする

前提条件

  • Google Cloudアカウントを作成し、Google Cloud SDKをインストールします。
  • Google Cloud SDKのインストール手順は公式ドキュメントを参照してください。
  • インストール後、gcloud コマンドラインツールを設定します。

gcloudの設定手順

  1. Google Cloud SDKのインストール

    • 上記のリンクから、ご使用のOSに対応するインストーラをダウンロードし、インストールを行います。
  2. gcloudの初期化

    • インストール後、ターミナルまたはコマンドプロンプトを開き、以下のコマンドを実行して初期設定を行います。
gcloud init
  • コマンドを実行すると、以下のような対話型のセットアップが開始されます。
    1. 認証するGoogleアカウントを選択します。
    2. 使用するGoogle Cloudプロジェクトを選択または作成します。
    3. デフォルトの地域を設定します。
  1. 必要なコンポーネントのインストール
    • 一部の機能を利用するためには追加のコンポーネントが必要な場合があります。以下のコマンドでコンポーネントをインストールできます。
gcloud components install kubectl

プロジェクトとリソース名

項目内容
プロジェクト名cloudrun-hello-world-project
リソース名hello-world-service
リージョンasia-northeast1(東京)

ステップ1:プロジェクトの作成

  1. Google Cloud Consoleにログイン

  2. 新しいプロジェクトの作成

    • 左上の「プロジェクトを選択」をクリックします。
    • 「新しいプロジェクト」をクリックします。
  3. プロジェクトの設定

    • プロジェクト名を cloudrun-hello-world-project に設定します。
    • 必要に応じて、組織や場所を設定します(通常はデフォルトのままで問題ありません)。
    • 「作成」をクリックします。
  4. プロジェクトの選択

    • 作成したプロジェクトがリストに表示されるので、それを選択します。
  5. CloudRun APIの有効化

    • 左側のナビゲーションメニューから「APIとサービス」→「ダッシュボード」を選択します。
    • 「APIとサービスを有効化」をクリックします。
    • 「Cloud Run API」を検索し、クリックして有効にします。

ポイント

Google Cloudでは、プロジェクトIDは一意である必要があります。他のユーザーが既に使用しているIDを選ぶことはできません。

アプリケーションは、ローカルの開発環境で作成します。以下の手順で進めてください。

ステップ2:アプリケーションの準備

  1. ローカル環境のセットアップ
    • 任意のディレクトリに移動して、新しいディレクトリを作成し、その中にプロジェクトを構築します。
mkdir cloudrun-hello-world
cd cloudrun-hello-world
  1. Python仮想環境の設定(オプション)
    • Pythonの仮想環境を作成し、有効化することをお勧めします。これにより、プロジェクト固有の依存関係を隔離できます。
python -m venv venv
source venv/bin/activate  # Windowsの場合は `venv\Scripts\activate`
  1. 「Hello World」アプリケーションの作成

    • プロジェクトディレクトリに app.py ファイルを作成し、以下のコードを追加します。
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
  1. 依存関係の管理

    • requirements.txt ファイルを作成し、Flaskを依存関係として追加します。
Flask==2.1.1
  • 必要なパッケージをインストールします。
pip install -r requirements.txt
  1. Dockerfileの作成

    • プロジェクトディレクトリに Dockerfile を作成し、以下の内容を追加します。
# Use the official Python image.
# https://hub.docker.com/_/python
FROM python:3.10-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 8080 available to the world outside this container
EXPOSE 8080

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]
  1. ファイル構成

    • プロジェクトディレクトリ内のファイル構成は次のようになります。
cloudrun-hello-world/
├── app.py
├── Dockerfile
└── requirements.txt

次のステップ

アプリケーションがローカル環境で準備できたので、次はこのアプリケーションをコンテナイメージとしてビルドし、Google Container Registryにプッシュしてから、Cloud Runにデプロイします。

ステップ3:コンテナイメージのビルドとプッシュ

  1. プロジェクト設定の確認と変更

    プロジェクトを正しいプロジェクトIDに設定します。

PROJECT_ID=cloudrun-hello-world-project-123456  # あなたの正しいプロジェクトIDを使用
gcloud config set project $PROJECT_ID
  1. コンテナイメージのビルドとプッシュ

    プロジェクトIDを使用してコンテナイメージをビルドし、Google Container Registryにプッシュします。

gcloud builds submit --tag gcr.io/$PROJECT_ID/hello-world

ステップ4:Cloud Runサービスのデプロイ

  1. サービスアカウントに権限を付与

    サービスエージェントがコンテナイメージにアクセスできるように権限を付与します。

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')

# デフォルトサービスアカウントに権限を付与
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

# Cloud Runサービスエージェントに権限を付与
SERVICE_ACCOUNT="service-$PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/storage.objectViewer"
  1. デプロイコマンドの実行

    正しいイメージURLを使用してCloud Runサービスをデプロイします。

gcloud run deploy hello-world-service \
  --image gcr.io/$PROJECT_ID/hello-world \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated

具体的な手順の例

プロジェクトIDが cloudrun-hello-world-project-123456 であると仮定します。

# プロジェクト設定
PROJECT_ID=cloudrun-hello-world-project-123456
gcloud config set project $PROJECT_ID

# コンテナイメージのビルドとプッシュ
gcloud builds submit --tag gcr.io/$PROJECT_ID/hello-world

# サービスエージェントに権限を付与
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')

# デフォルトサービスアカウントに権限を付与
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

# Cloud Runサービスエージェントに権限を付与
SERVICE_ACCOUNT="service-$PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/storage.objectViewer"

# Cloud Runサービスのデプロイ
gcloud run deploy hello-world-service \
  --image gcr.io/$PROJECT_ID/hello-world \
  --platform managed \
  --region asia-northeast1 \
  --allow-unauthenticated

これにより、サービスアカウントに必要な権限が設定され、Cloud Runサービスを正しくデプロイできるはずです。

  1. デプロイ後、CloudRunはURLを提供します。そのURLをブラウザで開き、「Hello World!」と表示されることを確認します。

ポイント

CloudRunは、デプロイ後に自動でURLを生成し、そのURLを通じて公開されます。このURLを使って、世界中のどこからでもアプリケーションにアクセスできます。

まとめ

学習お疲れ様でした。手を動かすことで理解が深まったのではないかと思います。この記事では、Google CloudRunの基本的な概念と機能を紹介し、簡単な「Hello World」アプリをデプロイする方法を解説しました。

振り返り

  1. CloudRunの基本概念
    CloudRunは、サーバーレスのコンテナ実行環境であり、インフラ管理を自動化することで開発者がアプリケーション開発に集中できるようにします。AWS Fargateに相当するサービスとして、特に小規模なスタートアップやプロジェクトにとって効果的です。

  2. 主要な機能
    CloudRunのオートスケーリング、従量課金モデル、簡単なデプロイ機能について学びました。これらの機能により、リソースの効率的な利用と迅速な開発が可能になります。

  3. 利点とユースケース
    CloudRunは、コスト効率、スケーラビリティ、迅速な開発といった利点を提供します。具体的なユースケースとして、オンラインショッピングサイト、SNS通知サービス、モバイルアプリのバックエンドAPIの構築などが挙げられます。また、CloudRunのデメリットとして起動遅延やコスト予測の難しさがあることも理解しました。

  4. ハンズオン実践
    実際に「Hello World」アプリケーションをCloudRunにデプロイするステップを通じて、プロジェクトの作成からアプリケーションの準備、デプロイまでのプロセスを学びました。これにより、実際のアプリケーション開発においてCloudRunを活用する具体的な方法を理解できたと思います。

参考資料

さらに学びたい方は、以下の信頼性の高い資料を参考にしてください。

これらの資料を参考に、CloudRunの理解を深め、より高度なアプリケーションのデプロイに挑戦してください。今後は、この基礎を活かして、より複雑なアプリケーションの構築や運用を行うことができるでしょう。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事