Google Cloud Platformに戻る

App Engine

App Engineとは

App Engineは、Google Cloud Platform (GCP) が提供するフルマネージドのPaaS(Platform as a Service)サービスです。インフラストラクチャの管理なしに、高いスケーラビリティを持つWebアプリケーションやバックエンドサービスを開発・デプロイ・実行できます。App Engineは、自動スケーリング、高可用性、バージョン管理、トラフィック分割などの機能を提供し、開発者がアプリケーションのコードに集中できる環境を実現します。

App Engineの主な特徴

App Engineの環境

App Engineは、2つの異なる環境を提供しています:

環境 特徴 最適な用途
スタンダード環境
  • サンドボックス化された環境
  • 迅速な起動時間
  • 無料枠あり
  • 特定のランタイムバージョンのみサポート
シンプルなWebアプリケーション、APIサーバー、小規模なバックエンド
フレキシブル環境
  • Dockerコンテナベース
  • より柔軟なランタイムとライブラリ
  • バックグラウンドプロセスのサポート
  • より長いリクエスト処理時間
カスタムランタイム、長時間実行プロセス、メモリ集約型アプリケーション

App Engineのアーキテクチャ

App Engineは以下の主要コンポーネントで構成されています:

コンポーネント 説明
アプリケーションインスタンス アプリケーションコードを実行するコンテナインスタンス。トラフィックに応じて自動的に作成・削除される
フロントエンド HTTPリクエストを受け取り、適切なアプリケーションインスタンスにルーティングする
ロードバランサー トラフィックを複数のインスタンスに分散する
バージョン管理 アプリケーションの複数のバージョンを管理し、トラフィックを制御する
組み込みサービス Memcache、Task Queue、Cron Jobsなどのサービス

App Engine と他のコンピューティングサービスの違い

Google Cloudには他のコンピューティングサービスもありますが、以下のような違いがあります:

App Engineの使用方法

App Engineは、Google Cloud Console、gcloud CLIツール、またはCloud Build/Cloud DeployなどのCI/CDツールを使用してデプロイできます。

アプリケーションの構造

App Engineアプリケーションは、以下の要素で構成されます:

app.yamlの例(Python)

runtime: python39
service: default
instance_class: F2
automatic_scaling:
  min_instances: 1
  max_instances: 10
  target_cpu_utilization: 0.65
  target_throughput_utilization: 0.65
  max_concurrent_requests: 50
env_variables:
  DEBUG: 'False'
  DATABASE_URL: 'postgresql://user:password@host:port/database'
handlers:
- url: /static
  static_dir: static
- url: /.*
  script: auto

app.yamlの例(Node.js)

runtime: nodejs14
service: api
instance_class: F2
automatic_scaling:
  min_instances: 1
  max_instances: 15
  target_cpu_utilization: 0.7
env_variables:
  NODE_ENV: 'production'
  API_KEY: 'your-api-key'

デプロイ方法

gcloud CLIを使用したデプロイ

# アプリケーションのディレクトリに移動
cd my-app

# アプリケーションのデプロイ
gcloud app deploy

# 特定のバージョンとしてデプロイ
gcloud app deploy --version=v1

# トラフィックを分割してデプロイ
gcloud app deploy --version=v2 --no-promote

# 特定のサービスのデプロイ
gcloud app deploy services/api/app.yaml

App Engineの高度な機能

トラフィック分割

複数のバージョン間でトラフィックを分割して、A/Bテストやカナリアリリースを実現できます:

# トラフィックの分割
gcloud app services set-traffic default --splits=v1=0.9,v2=0.1

# IPベースの分割
gcloud app services set-traffic default --splits=v1=0.9,v2=0.1 --split-by=ip

# Cookieベースの分割
gcloud app services set-traffic default --splits=v1=0.9,v2=0.1 --split-by=cookie

カスタムドメインの設定

App Engineアプリケーションにカスタムドメインを設定できます:

# カスタムドメインの追加
gcloud app domain-mappings create example.com

# SSLサーティフィケートの管理
gcloud app ssl-certificates create --display-name="My Certificate" \
  --certificate=cert.pem --private-key=key.pem

Cron Jobsの設定

定期的なタスクを実行するためのCron Jobsを設定できます:

cron.yamlの例

cron:
- description: "Daily backup job"
  url: /tasks/backup
  schedule: every 24 hours
  timezone: Asia/Tokyo
  
- description: "Weekly report generation"
  url: /tasks/generate-report
  schedule: every monday 09:00
  timezone: Asia/Tokyo

Cron Jobsのデプロイ

gcloud app deploy cron.yaml

App Engineのセキュリティ

App Engineは、アプリケーションのセキュリティを確保するための様々な機能を提供しています:

アクセス制御

IAMを使用して、App Engineリソースへのアクセスを制御できます:

# App Engine管理者ロールの付与
gcloud projects add-iam-policy-binding my-project \
  --member=user:user@example.com \
  --role=roles/appengine.appAdmin

# App Engine閲覧者ロールの付与
gcloud projects add-iam-policy-binding my-project \
  --member=user:user@example.com \
  --role=roles/appengine.viewer

ファイアウォールルール

App Engineファイアウォールルールを使用して、アプリケーションへのアクセスを制限できます:

# 特定のIPアドレスからのアクセスを許可
gcloud app firewall-rules create --action=allow --source-range=192.168.1.0/24 --description="Allow office IPs"

# 特定のIPアドレスからのアクセスを拒否
gcloud app firewall-rules create --action=deny --source-range=1.2.3.4/32 --description="Block suspicious IP"

シークレット管理

Secret Managerと統合して、機密情報を安全に管理できます:

# Secret Managerからシークレットを取得するコード例(Python)
from google.cloud import secretmanager

def access_secret(project_id, secret_id, version_id="latest"):
    client = secretmanager.SecretManagerServiceClient()
    name = f"projects/{project_id}/secrets/{secret_id}/versions/{version_id}"
    response = client.access_secret_version(request={"name": name})
    return response.payload.data.decode("UTF-8")

App Engineのモニタリングとロギング

App EngineはGoogle Cloud Monitoringおよびロギングと統合されており、アプリケーションの健全性とパフォーマンスを監視できます:

主なモニタリング機能

ログの出力

アプリケーション内でログを出力するには、言語に応じた標準的なロギング方法を使用します:

Pythonでのログ出力

import logging

logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')

Node.jsでのログ出力

console.log('This is a log message'); // 標準ログ
console.info('This is an info message'); // 情報ログ
console.warn('This is a warning message'); // 警告ログ
console.error('This is an error message'); // エラーログ

App Engineのコスト最適化

App Engineのコストを最適化するためのベストプラクティス:

コスト構造

App Engineのコストは主に以下の要素で構成されています:

App Engineのユースケース

App Engineは以下のようなユースケースに適しています:

App Engineとの統合サービス

App Engineは他のGoogle Cloudサービスと統合して、より強力なソリューションを構築できます:

サービス 統合の利点
Cloud SQL アプリケーションのデータを保存するためのマネージドリレーショナルデータベース
Cloud Storage 静的コンテンツやユーザーアップロードファイルの保存
Cloud CDN 静的コンテンツの高速配信
Cloud Tasks 非同期タスクの実行と管理
Pub/Sub イベント駆動型アーキテクチャの実装
Cloud Build 継続的インテグレーションと継続的デリバリー(CI/CD)
Cloud Monitoring アプリケーションのパフォーマンスと健全性の監視

まとめ

App Engine は、Google Cloud Platform上でのWebアプリケーションとバックエンドサービスの開発・デプロイ・実行を簡素化するフルマネージドのPaaSサービスです。インフラストラクチャの管理なしに、高いスケーラビリティと可用性を持つアプリケーションを構築できます。

App Engineの主な利点は以下の通りです:

App Engineを効果的に活用するには、アプリケーションの要件に基づいて適切な環境(スタンダードまたはフレキシブル)を選択し、自動スケーリングの設定を最適化し、組み込みサービスを活用することが重要です。また、他のGCPサービスと組み合わせることで、より強力なクラウドネイティブアプリケーションを構築することができます。