うさぎでもわかるGCPサーバレス入門 〜ホームページとWebアプリに最適な選択肢〜
はじめに
GCPにはサーバレスサービスがいくつもあって、どれを選べばいいのか悩みますよね。ホームページを作るなら何がいいのか、Webアプリを作るならどのサービスがベストなのか。
「サーバレスって結局どれを使えばいいの?」とお悩みのあなた、このガイドではGoogle Cloud Platform(GCP)のサーバレスサービスについて、特にホームページとWebアプリケーション構築に焦点を当てて紹介します。サーバーの管理から解放されて、アプリケーションの開発に集中したいですよね。
この記事を読めば、GCPのサーバレスサービスの特徴、料金体系、そして用途に応じた最適な選択方法がわかるようになります。うさぎでも理解できるよう、できるだけシンプルに解説しますので、最後までお付き合いください!
サーバレスとは?
サーバレスとは「サーバーがない」という意味ではなく、「サーバーの管理から解放される」という意味です。アプリケーションを動かすためのサーバーは存在しますが、その調達、構成、スケーリング、メンテナンスなどの面倒な作業はクラウドプロバイダーにお任せできます。
開発者はコードを書いてデプロイするだけで、後はクラウドプロバイダーが自動的にリソースを割り当ててくれます。使った分だけ料金を支払う従量課金制なので、トラフィックがない時間帯はほぼコストゼロになるというメリットもあります。まさに「コードだけ書いて、あとはGCPにおまかせぴょん!」という仕組みなのです。
GCPサーバレスサービスの種類と特徴
GCPには主に4つのサーバレスサービスがあります。それぞれの特徴を見ていきましょう。
Cloud Run
Cloud Runは、コンテナ化されたアプリケーションを実行するためのサーバレス実行環境です。
特徴
- 言語・フレームワークの自由度: 任意の言語やフレームワークを使用可能で、コンテナ化できるものであれば何でも実行できます。
- スケーラビリティ: トラフィックに応じて自動的にスケールし、トラフィックがないときはゼロインスタンスまでスケールダウンします。
- HTTPリクエスト処理: HTTPリクエストを受け取り、処理するアプリケーションに最適です。
- 移植性: Dockerコンテナを使用するため、ローカル開発からクラウドへの移行がスムーズです。
料金体系
Cloud Runは「リクエストベース」と「インスタンスベース」の2つの課金モデルがあります。
- リクエストベース: リクエスト数、CPUやメモリの使用時間、ネットワーク転送量に基づいて課金
- インスタンスベース: インスタンスの実行時間に基づいて課金
フリーティアには、月間200万リクエスト、360,000 GBs(ギガバイト秒)のメモリ使用量、180,000 vCPU秒のCPU使用量が含まれています。
詳細はCloud Runの料金ページをご覧ください。
Cloud Functions
Cloud Functionsは、イベント駆動型のサーバレス関数実行環境で、小さな単一目的の関数を実行するのに適しています。
特徴
- イベント駆動: HTTPリクエスト、Cloud Storage、Pub/Subなどのイベントをトリガーに関数を実行
- 短時間処理向け: 短時間で完了する処理に最適
- シンプルな開発: 関数単位で開発・デプロイが可能
- 自動スケーリング: トラフィックに応じて自動的にスケール
料金体系
Cloud Functionsは、以下の要素に基づいて課金されます:
- 関数の呼び出し回数: 最初の200万回は無料
- コンピューティング時間: 関数の実行時間(メモリ使用量も考慮)
- ネットワーク転送: アウトバンドデータ転送量(最初の5GBは無料)
詳細はCloud Functionsの料金ページをご覧ください。
App Engine
App Engineは、フルマネージドのPaaS(Platform as a Service)で、ウェブアプリケーション向けのプラットフォームです。「標準環境」と「フレキシブル環境」の2つの環境があります。
標準環境
- 限定された言語: Python、Java、Go、Node.js、PHP、Rubyをサポート
- 高速スケール: 素早く起動し、自動スケーリングが可能
- サンドボックス環境: セキュリティのため制限された環境で実行
- コスト効率: 完全なオートスケーリングとフリーティアあり
フレキシブル環境
- カスタムランタイム: Dockerコンテナによる任意の言語やライブラリのサポート
- 標準的なスケール: 起動に数分かかるが、柔軟なスケール
- 完全アクセス: ディスクへの書き込みやサードパーティ製ソフトウェアのインストールが可能
- より高いコスト: 標準環境より高額
料金体系
App Engineの標準環境には、毎日28インスタンス時間のフリーティアがあり、アウトバウンドネットワーク(1GB/日)やCloud Storage(5GB)なども含まれます。それ以降は、以下の項目で課金されます:
- インスタンス時間: アプリケーションを実行するインスタンスの時間
- ストレージ: データストアやCloud Storageの使用量
- ネットワーク: アウトバウンドネットワーク転送量
詳細はApp Engineの料金ページをご覧ください。
Firebase Hosting
Firebase Hostingは静的ウェブサイトのホスティングサービスです。高速でセキュア、かつ簡単に使える特徴があります。
特徴
- 高速配信: グローバルCDNによる高速配信
- HTTPSによるセキュリティ: 自動SSL証明書の設定
- 簡単なデプロイ: CLIツールによる簡単なデプロイとロールバック
- 連携機能: Cloud FunctionsやFirebase Authenticationとの連携
料金体系
Firebase Hostingのフリーティアには、ストレージ10GB、データ転送360MB/日が含まれます。それ以降は、以下の項目で課金されます:
- ストレージ: ホスティングするファイルのサイズ
- データ転送: サイトの閲覧で消費されるデータ量
詳細はFirebase Hostingの料金ページをご覧ください。
料金比較
各サービスのフリーティアと課金体系を比較してみましょう。
どのサービスもフリーティアが充実しているため、小規模なプロジェクトや個人開発であれば、ほぼ無料で利用できることが多いです。また、サーバレスサービスはゼロインスタンスまでスケールダウンするため、トラフィックがないときはほとんど料金が発生しません(最小インスタンス数を設定している場合を除く)。
あなたのうさぎ耳にひそひそと教えますが、料金を抑えるコツは「使わないときはゼロインスタンスに設定する」「適切なメモリサイズを選ぶ」「長時間実行される処理は避ける」などがあります。静的コンテンツであれば、Firebase HostingやCloud Storageが最もコスト効率が良いでしょう。
ホームページ構築に最適なサーバレスオプション
ホームページを構築する場合、どのサーバレスサービスが最適なのでしょうか?ホームページの種類によって選択肢が異なります。
静的ウェブサイト
会社の紹介や製品情報など、頻繁に更新しない情報を掲載する静的ウェブサイトの場合は、Firebase Hostingが最適です。
Firebase Hostingの活用方法
- Firebase CLIをインストール:
npm install -g firebase-tools
- プロジェクトの初期化:
firebase init hosting
- HTMLやCSS、JavaScriptを作成
- デプロイ:
firebase deploy --only hosting
これだけで、グローバルCDNネットワークを使った高速なウェブサイトが公開できます。HTTPSも自動的に設定されるため、セキュリティ面でも安心です。ドメインの設定も簡単で、カスタムドメインも使用できます。
あるいは、Cloud Storage + Cloud Load Balancerの組み合わせも静的ウェブサイトのホスティングに使えます。Cloud Storageでウェブサイトをホスティングし、Cloud Load Balancerで外部IPとSSLを設定します。この方法は、より高度なネットワーク制御が必要な場合に適しています。
軽量な動的ウェブサイト
お問い合わせフォームやシンプルなコンテンツ管理機能など、軽量な動的要素を含むウェブサイトの場合は、App Engine標準環境がおすすめです。
App Engine標準環境の活用方法
- アプリケーションコードの作成(Python、Node.js、Javaなど)
- app.yamlの設定
- デプロイ:
gcloud app deploy
標準環境は、短時間で起動し、トラフィックに応じて自動的にスケールします。また、無料枠が充実しているため、小〜中規模のウェブサイトなら無料〜低コストで運用できることが多いです。
「ぴょんぴょん!」App Engineは構築が簡単で、かつ自動スケーリングもしてくれるので、うさぎのように素早く動きたい開発者に最適なサービスなのです。
Webアプリケーション構築に最適なサーバレスオプション
より複雑なWebアプリケーションの場合、いくつかのサーバレスサービスを組み合わせて使うことになります。
バックエンドAPIの構築
Webアプリケーションのバックエンドには、Cloud RunまたはCloud Functionsが適しています。
Cloud Runの活用
Cloud Runは、以下のような特徴を持つバックエンドに最適です:
- 複雑なAPIロジック: マイクロサービスアーキテクチャに適している
- 長時間実行処理: 最大15分(制限あり)の処理が可能
- 既存のコンテナアプリケーション: Dockerコンテナとして既に実装されているアプリ
Cloud Functionsの活用
Cloud Functionsは、以下のような特徴を持つバックエンドに最適です:
- イベント駆動処理: Pub/Sub、Cloud Storage、Firestoreなどのイベントによるトリガー
- シンプルなエンドポイント: 単一の機能を提供するAPIエンドポイント
- 短時間処理: 短時間で完了するタスク
フロントエンドの配信
Webアプリケーションのフロントエンドには、Firebase Hostingが最適です。特にSingle Page Application(SPA)などのJavaScriptフレームワークを使用したフロントエンドでは、ビルドしたファイルをFirebase Hostingにデプロイするだけで、グローバルCDNの恩恵を受けられます。
Firebase HostingとCloud Runの連携
Firebase HostingとCloud Runを連携させることで、フロントエンドとバックエンドを一体化したWebアプリケーションを構築できます。firebase.jsonに以下のように設定します:
{
"hosting": {
"public": "dist",
"rewrites": [
{
"source": "/api/**",
"run": {
"serviceId": "my-service",
"region": "asia-northeast1"
}
}
]
}
}
これにより、/api/
パスへのリクエストがCloud Runサービスにルーティングされます。
フルスタックWebアプリ
より複雑なビジネスロジックを持つフルスタックアプリケーションには、App Engineフレキシブル環境が適しています。特に以下の場合におすすめです:
- モノリシックアプリケーション: 分離が難しい大規模なアプリケーション
- 特殊な依存関係: カスタムライブラリやバイナリが必要なアプリケーション
- バックグラウンド処理: バックグラウンドで動作する継続的なタスクがあるアプリケーション
App Engineフレキシブル環境は、Dockerコンテナベースなので、あらゆる言語やフレームワークでアプリケーションを構築できます。ただし、標準環境よりも起動時間が長く、コストも高くなる傾向があるので注意が必要です。
大きなうさぎさんにヒソヒソ…複雑なシステムになるほど、サービスの分離とマイクロサービス化を考えると、管理しやすくなりますよ。
サーバレスサービスの基本的な使い方
各サーバレスサービスの基本的な使い方を見ていきましょう。
デプロイメント手順
Cloud Run
# コンテナをビルド
docker build -t gcr.io/[PROJECT-ID]/[IMAGE] .
# Google Container Registryにプッシュ
docker push gcr.io/[PROJECT-ID]/[IMAGE]
# Cloud Runにデプロイ
gcloud run deploy [SERVICE-NAME] --image gcr.io/[PROJECT-ID]/[IMAGE] --platform managed --region [REGION]
Cloud Functions
# デプロイ
gcloud functions deploy [FUNCTION-NAME] --runtime [RUNTIME] --trigger-http --allow-unauthenticated
App Engine
# app.yamlの設定後、デプロイ
gcloud app deploy
Firebase Hosting
# プロジェクトの初期化
firebase init hosting
# デプロイ
firebase deploy --only hosting
スケーリング設定
各サーバレスサービスのスケーリング設定は以下のように行います:
Cloud Run
# 最小インスタンス数と最大インスタンス数を設定
gcloud run services update [SERVICE-NAME] --min-instances [MIN] --max-instances [MAX]
App Engine
app.yamlにスケーリング設定を記述します:
automatic_scaling:
min_instances: 0
max_instances: 10
target_cpu_utilization: 0.65
環境変数とシークレットの管理
サーバレスサービスでの環境変数の設定は、以下のように行います:
Cloud Run
gcloud run services update [SERVICE-NAME] --set-env-vars KEY1=VALUE1,KEY2=VALUE2
Cloud Functions
gcloud functions deploy [FUNCTION-NAME] --set-env-vars KEY1=VALUE1,KEY2=VALUE2
App Engine
app.yamlに環境変数を記述します:
env_variables:
KEY1: "VALUE1"
KEY2: "VALUE2"
シークレット(機密情報)の管理には、Secret Managerを利用することをおすすめします。これにより、APIキーやパスワードなどの機密情報を安全に管理できます。
まとめ
この記事では、GCPのサーバレスサービスについて解説しました。ホームページとWebアプリケーションのどちらを構築する場合も、サーバレスサービスを活用することで、サーバー管理の手間を省き、スケーラビリティと費用対効果を両立することができます。
用途別サーバレスサービス選択ガイド
- 静的ウェブサイト: Firebase Hosting
- 軽量な動的ウェブサイト: App Engine標準環境
- API開発: Cloud Functions(シンプルな処理)またはCloud Run(複雑な処理)
- フルスタックWebアプリ: App Engineフレキシブル環境またはCloud Run
- マイクロサービス: Cloud Run
各サービスにはそれぞれ特徴があり、用途によって最適な選択肢が異なります。まずはフリーティアを活用して、小規模なプロジェクトから始めてみることをおすすめします。
「うさぎでもわかる」と言ったからには、シンプルでわかりやすい説明を心がけましたが、いかがでしたか?サーバレスの世界は広大で、まだまだ紹介しきれていない機能もたくさんあります。ぜひ公式ドキュメントも参照しながら、あなたのプロジェクトに最適なサーバレスサービスを選んでください。
サーバレスでの開発は、ホップ・ステップ・ジャンプのように軽快に進めることができます。まずは小さなプロジェクトから始めて、サーバレスの世界を楽しんでください!
Discussion