GCP入門:App Engineについて

スポンサーリンク
GCP入門:App Engineについて 用語解説
GCP入門:App Engineについて
この記事は約9分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、App Engineについて解説しています。

スポンサーリンク

背景

App Engineについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。

App Engineとは

Google Cloud PlatformのApp Engineについて説明します。

App Engineは、Googleが提供するフルマネージドのPaaS(Platform as a Service)ソリューションです。開発者がインフラストラクチャの管理を気にすることなく、アプリケーションの開発と展開に集中できるようにするサービスです。

主な特徴と機能:

  1. 自動スケーリング:
  • トラフィックに応じて自動的にリソースを増減させます。
  • 瞬間的な負荷スパイクにも対応可能です。
  1. マルチ言語サポート:
  • Java, Python, Node.js, Go, PHP, Rubyなどの主要な言語をサポートしています。
  1. 2つの環境:
  • スタンダード環境:特定の言語バージョンと制限付きのライブラリで高速起動
  • フレキシブル環境:Dockerコンテナを使用してカスタム実行環境を構築可能
  1. バージョニングとトラフィック分割:
  • 複数のバージョンを同時に実行し、トラフィックを分割できます。
  • A/Bテストや段階的なロールアウトが容易です。
  1. 統合サービス:
  • Memcache, Task Queue, Scheduled Tasksなどのサービスと統合されています。
  1. セキュリティ機能:
  • SSL/TLSの自動管理
  • ファイアウォール、IAMによるアクセス制御
  1. モニタリングとロギング:
  • Cloud Monitoringと Cloud Loggingとの統合
  • アプリケーションのパフォーマンスと健全性の監視が可能
  1. データストレージオプション:
  • Cloud Datastore(NoSQLデータベース)
  • Cloud SQL(リレーショナルデータベース)
  • Cloud Storage(オブジェクトストレージ)
  1. カスタムドメイン:
  • 独自ドメインの使用が可能
  1. 地理的分散:
    • グローバルな展開が容易
  2. 課金モデル:
    • 使用したリソースに応じた従量課金制
    • 無料枠あり(一定量まで無料で使用可能)

App Engineの主なユースケース:

  • Webアプリケーション
  • モバイルバックエンド
  • RESTful API
  • IoTアプリケーション
  • 内部ツールやダッシボード

App Engineは、インフラストラクチャの管理を簡素化し、スケーラビリティを自動化することで、開発者が本質的なアプリケーション開発に集中できるようにします。特に、急速に成長するアプリケーションや、変動の大きいトラフィックパターンを持つアプリケーションに適しています。

種類

App Engineの具体例や種類について説明します。

App Engineには主に2つの環境があります:

  1. スタンダード環境
  2. フレキシブル環境

それぞれの環境の特徴と具体例を見ていきましょう。

  1. スタンダード環境:

特徴:

  • 迅速な起動
  • 自動スケーリング(ゼロインスタンスまで可能)
  • サンドボックス化された安全な環境
  • 特定のランタイムバージョンのみサポート

サポートされる言語/ランタイム:

  • Python (2.7, 3.7, 3.8, 3.9, 3.10)
  • Java (8, 11, 17)
  • Node.js (10, 12, 14, 16, 18)
  • PHP (5.5, 7.2, 7.3, 7.4, 8.0, 8.1)
  • Ruby (2.5, 2.6, 2.7, 3.0)
  • Go (1.11, 1.12, 1.13, 1.14, 1.15, 1.16)

具体例:
a) シンプルなWebアプリケーション(Python/Flask):

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, App Engine!'

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8080, debug=True)

b) RESTful API(Node.js/Express):

const express = require('express');
const app = express();

app.get('/api/users', (req, res) => {
  res.json([{ id: 1, name: 'User1' }, { id: 2, name: 'User2' }]);
});

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
  1. フレキシブル環境:

特徴:

  • Dockerコンテナを使用
  • より柔軟なランタイムとライブラリの選択が可能
  • バックグラウンドプロセスのサポート
  • SSHアクセス可能

サポートされる言語:任意(Dockerfileで指定)

具体例:
a) カスタムランタイム(Dockerfile):

FROM python:3.9

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD exec gunicorn --bind :$PORT main:app

b) バックグラウンドワーカー(Python):

import time

def background_task():
    while True:
        print("Performing background task...")
        time.sleep(60)

if __name__ == '__main__':
    background_task()

App Engineの種類(コンポーネント):

  1. サービス:異なる機能を持つ複数のマイクロサービスを1つのアプリケーション内で実行可能。
  2. バージョン:各サービスの異なるバージョンを同時に実行し、トラフィックを分割可能。
  3. インスタンス:アプリケーションを実行する実際の計算リソース。
  4. App Engine Cron サービス:定期的なタスクのスケジューリング。
  5. Task Queues:非同期タスクの実行。
  6. Memcache:高速なインメモリキャッシュ。

これらのコンポーネントを組み合わせることで、スケーラブルで柔軟なアプリケーションを構築できます。

Compute Engineとの違い

App EngineとCompute Engineの違いについて、主要な点を比較しながら説明します。

  1. サービスモデル:
  • App Engine: PaaS (Platform as a Service)
  • Compute Engine: IaaS (Infrastructure as a Service)
  1. 抽象化レベル:
  • App Engine: 高レベルの抽象化。インフラストラクチャの管理が不要
  • Compute Engine: 低レベルの抽象化。VMレベルでの制御が可能
  1. 管理の複雑さ:
  • App Engine: ほぼ全ての管理をGoogleが行う。開発者はアプリケーションコードに集中できる
  • Compute Engine: OS、ミドルウェア、ランタイムなどの管理が必要
  1. スケーリング:
  • App Engine: 自動スケーリングが組み込まれている
  • Compute Engine: 手動または自動スケーリングの設定が必要
  1. 言語とフレームワークのサポート:
  • App Engine: サポートされる言語とフレームワークが限定的
  • Compute Engine: どんな言語やフレームワークも使用可能
  1. カスタマイズ性:
  • App Engine: 制限がある(特にスタンダード環境)
  • Compute Engine: OSレベルから完全にカスタマイズ可能
  1. 起動時間:
  • App Engine: 非常に高速(特にスタンダード環境)
  • Compute Engine: App Engineと比べると起動に時間がかかる
  1. 料金モデル:
  • App Engine: リクエスト数、CPUとメモリの使用量に基づく
  • Compute Engine: インスタンスの稼働時間に基づく
  1. 永続性:
  • App Engine: ステートレスアーキテクチャを推奨
  • Compute Engine: ステートフルアプリケーションに適している
  1. アクセス制御:
    • App Engine: アプリケーションレベルのアクセス制御
    • Compute Engine: OSレベルでのアクセス制御が可能
  2. ネットワーキング:
    • App Engine: 制限付きのネットワーキング機能
    • Compute Engine: フルネットワーク制御が可能(ファイアウォール、VPCなど)
  3. 用途:
    • App Engine: Webアプリケーション、モバイルバックエンド、マイクロサービスに適している
    • Compute Engine: データベース、ゲームサーバー、レガシーアプリケーションの移行など、幅広い用途に適している
  4. バージョニングとトラフィック分割:
    • App Engine: 組み込みの機能として提供
    • Compute Engine: 手動で設定する必要がある
  5. デプロイメント:
    • App Engine: シンプルなコマンドやGUI操作でデプロイ可能
    • Compute Engine: イメージの作成とインスタンスの起動が必要

選択の基準:

  • 管理の手間を最小限にしたい場合、または標準的なWebアプリケーションを迅速に展開したい場合はApp Engine
  • 最大限の制御と柔軟性が必要な場合、または特殊なシステム要件がある場合はCompute Engine

両サービスは排他的ではなく、同じプロジェクト内で組み合わせて使用することも可能です。例えば、WebフロントエンドにApp Engineを使い、データベースやバッチ処理にCompute Engineを使うといった構成も可能です。

おわりに

今日は、 App Engineについて解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました