お気に入り | 日本語 | ログイン

Google App Engine について

Google App Engine を使用すると、Google のインフラ上で自作の Web アプリケーションを実行できます。App Engine アプリケーションは、構築や維持管理も簡単です。またトラフィックやデータ ストレージの増大に合わせて容易なスケーリングが可能です。App Engine では、サーバーを維持管理する必要もありません。アプリケーションをアップロードするだけで、すぐユーザーが利用できるようになります。

作成したアプリケーションは、Google Apps を使用して任意のドメイン(たとえばhttp://www.example.com/)から提供できます。また、appspot.com ドメインから任意の名前で提供することも可能です。世界中の人々とアプリケーションを共有することも、特定のメンバーだけにアクセスを許可することもできます。

Google App Engine では、さまざまなプログラミング言語で記述したアプリケーションがサポートされます。App Engine の Java ランタイム環境を使用すると、JVM、Java サーブレット、Java プログラミング言語といった標準の Java 技術を使用してアプリケーションを構築できます。JVM ベースのインタープリタやコンパイラを使って、他の言語(JavaScript、Ruby など)のアプリケーションを構築することもできます。App Engine には、Python 高速インタープリタと Python 標準ライブラリを備えた専用の Python ランタイム環境も用意されています。Java および Python のランタイム環境は、作成したアプリケーションがシステム内の他のアプリケーションからの干渉を受けることなく、すばやく安全に動作するように構築されています。

App Engine は、使った分だけを支払う仕組みです。セットアップや自動更新の費用は必要ありません。ストレージや帯域幅など、アプリケーションで使用するリソースはギガバイト単位で測定され、他社に比べて割安な料金体系で課金されます。使用するリソース量に上限を設定し、常に予算内に収まるようにすることも可能です。

App Engine は無料で始めることができます。最大 500 MB の永続性ストレージに加え、月間約 500 万ページ ビューに対応できる十分な CPU と帯域幅を、すべてのアプリケーションで完全に無料で利用できます。アプリケーションへの課金を有効にすると、無料で使用できるリソース量の上限が引き上げられ、その上限を超えた分についてのみ料金が請求されます。

アプリケーション環境

Google App Engine を使用すれば、高負荷下でも、データが大量でも、高信頼性の動作を確保するアプリケーションの構築が容易になります。App Engine は、以下のような特徴を備えています。

  • 一般的な Web 技術を完全サポートする動的 Web サービング
  • クエリ、ソート、トランザクション機能付きの永続性ストレージ
  • 自動スケーリングと負荷分散
  • Google アカウントを使用したユーザー認証と、メール送信のための API
  • お使いのコンピュータで Google App Engine をシミュレーションする完全機能を装備したローカル開発環境
  • 特定の時間または一定の間隔でイベントをトリガするようにスケジュールされたタスク

アプリケーションは、Java ランタイム環境または Python ランタイム環境で実行できます。それぞれの環境は、Web アプリケーションを開発するための標準的なプロトコルと一般的な技術を提供します。

サンドボックス

アプリケーションは、基礎となるオペレーティング システムへの制限されたアクセスを提供する安全な環境で動作します。この制限を通じて App Engine は、Web リクエストを複数のサーバー間で分散し、トラフィック要求に合わせてサーバーを起動または停止します。サンドボックスは、アプリケーションをその安全で信頼できる環境に隔離するものであり、ハードウェアや OS、ウェブ サーバーの物理的場所から独立しています。

安全なサンドボックス環境には、たとえば次のような制限があります。

  • アプリケーションは、提供される URL フェッチおよびメール サービスを介してのみ、インターネット上の他のコンピュータにアクセスできます。他のコンピュータは、標準のポート上で HTTP(または HTTPS)リクエストを行うことによってのみ、アプリケーションに接続できます。
  • アプリケーションは、ファイル システムへの書き込みはできません。ファイルの読み取りはできますが、アプリケーション コードとともにアップロードされたファイルのみに限られます。アプリケーションがリクエスト間でデータを保持する必要がある場合には、App Engine のデータストア、Memcache、またはその他のサービスを使用する必要があります。
  • アプリケーション コードは、Web リクエストや cron ジョブに対する応答としてのみ実行し、いかなる場合でも 30 秒以内にレスポンス データを返す必要があります。リクエスト ハンドラは、サブプロセスを生成したり、応答送信後にコードを実行したりすることはできません。

Java ランタイム環境

Java ランタイム環境で実行するアプリケーションは、Java Web アプリケーション用の一般的な開発ツールと API 標準を使用して開発できます。アプリケーションと環境の間の対話には、Java サーブレット標準を使用します。JSP(JavaServer Pages)などの一般的な Web アプリケーション技術も使用できます。

Java ランタイム環境では Java 6 を使用します。App Engine Java SDK では、Java 5 または 6 でのアプリケーション開発がサポートされます。

この環境には、Java SE ランタイム環境(JRE)6 プラットフォームとライブラリが含まれています。サンドボックス環境の制限は、JVM に実装します。アプリケーションでは、サンドボックスの制限を超えない限り、どのような JVM バイトコードやライブラリ機能でも使用できます。たとえば、ソケットを開こうとするバイトコードやファイルに書き込みを行うバイトコードはランタイム例外をスローします。

アプリケーションから App Engine サービスにアクセスするには、ほとんどの場合 Java 標準 API を使用します。Java SDK には、App Engine データストアで使用する JDO(Java Data Objects)インターフェースと JPA(Java Persistence API)インターフェースの実装が含まれています。アプリケーションで JavaMail API を使用すると、App Engine Mail サービスを使ってメール メッセージを送信できます。java.net HTTP API は、App Engine の URL フェッチ サービスにアクセスします。App Engine サービス用の低レベル API も用意されており、追加アダプタの実装に使用したり、アプリケーションから直接使用したりできます。データストアMemcacheURL フェッチメール画像、および Google アカウントに対応する各 API のドキュメントをご覧ください。

Web アプリケーションを JVM に実装する場合は、Java プログラミング言語と Java API を使用するのが一般的です。JVM 互換のコンパイラやインタープリタを使用すれば、他の言語(JavaScript、Ruby、Scala など)でも Web アプリケーションを開発できます。

Java ランタイム環境に関する詳しい情報は、Java ランタイム環境をご覧ください。

Python ランタイム環境

App Engine の Python ランタイム環境では、アプリケーションを Python プログラミング言語で実装し、最適化された Python インタープリタで実行します。App Engine には、多機能なデータ モデリング API、使いやすい Web アプリケーション フレームワーク、アプリケーション データの管理やアクセスに使用するツールなど、Python Web アプリケーション開発用の API とツールが豊富に用意されています。また、Python Web アプリケーション開発用の充実したライブラリや、Django をはじめとする多彩なフレームワークも活用できます。

Python ランタイム環境では、Python バージョン 2.5.2 を使用します。Python 3 については、将来のリリースでサポートすることを検討しています。

Python 環境には、Python 標準ライブラリが含まれています。もちろん、サンドボックス環境で、ライブラリのすべての機能を実行できるわけではありません。たとえば、ソケットを開こうとするメソッドやファイルに書き込みを行うメソッドを呼び出すと例外がスローされます。利便性のため、標準ライブラリ内のモジュールの内、そのコア機能がランタイム環境でサポートされていないモジュールは無効化されています。したがって、これらのモジュールをインポートするコードはエラーになります。

Python 環境用に記述するアプリケーション コードは、Python のみで記述する必要があります。C 言語で記述された拡張はサポートされません。

Python 環境では、データストアGoogle アカウントURL フェッチメールにそれぞれ対応した豊富な Python API が用意されています。また、App Engine には、webapp と呼ばれるシンプルな Python Web アプリケーション フレームワークが含まれています。

サードパーティ製のライブラリをアプリケーションとともにアップロードすることができます。ただし、Python だけで実装されており、サポート対象でない標準のライブラリ モジュールを必要としないものに限ります。

Python ランタイム環境に関する詳しい情報は、Python ランタイム環境をご覧ください。

データストア

App Engine は、クエリ エンジンとトランザクション機能を備えた強力な分散型データ ストレージ サービスを提供します。分散 Web サーバーがトラフィックとともに成長するように、分散データベースもデータとともに大きくなります。

App Engine データストアは、従来のようなリレーショナル データベースではありません。データ オブジェクト(言い換えれば「エンティティ」)は、プロパティの種類とセットを持っています。クエリは、プロパティの値によってフィルタリングおよびソートされた特定の種類のエンティティを取り出すことができます。プロパティ値は、サポートされるプロパティ値の種別であれば、任意の値を使用できます。

データストア エンティティは「スキーマレス」です。データ エンティティの構造は、記述するアプリケーション コードによって提供および強制されます。Java JDO/JPA インターフェースや Python データストア インターフェースは、アプリケーション内で構造を適用および強制する機能を備えています。アプリケーションからデータストアに直接アクセスし、任意のサイズの構造を適用することもできます。

データストアは一貫性が高く、楽観的並行性制御を使用します。他のプロセスが同じエンティティを同時に更新しようとした場合、固定回数のトランザクション再試行で、エンティティの更新が発生します。アプリケーションは、複数のデータストア操作を 1 回のトランザクションで実行できます。結果はすべて成功するか、すべて失敗するかのいずれかになり、データの整合性が保証されます。

データストアは、「エンティティ グループ」を使用して、分散ネットワーク全体でトランザクションを実行します。トランザクションでは、エンティティは 1 つのグループ内で操作されます。トランザクションを効率的に実行するため、同じグループのエンティティは一緒に保存されます。アプリケーションは、エンティティが作成されるとき、エンティティをグループに割り当てることができます。

Google アカウント

App Engine では、アプリケーションに Google アカウントを統合してユーザー認証を行うことができます。ユーザーに、あなたのアプリケーションから Google アカウントにログインしてもらうことで、あなたのアプリケーションはユーザーのアカウントに関連付けられたメール アドレスや表示名にアクセスすることができます。Google アカウントを使用すれば、ユーザーは新しいアカウントを作成する必要がないため、あなたのアプリケーションをすぐに使い始めることができます。同時にあなたも、アプリケーション用のユーザー アカウント システムを実装する手間を省くことができます。

アプリケーションを Google Apps の配下で実行している場合、組織や Google Apps アカウントのメンバーで、同じ機能を使用できます。

さらに、User API では、現在のユーザーが、アプリケーションに登録された管理者権限を持っているかどうかを通知できます。これを使えば、サイト上に管理者専用の領域を作成するのが容易になります。

Google アカウントとの連携に関する詳しい情報は、User API リファレンスをご覧ください。

App Engine サービス

App Engine は、アプリケーションを管理する上での一般的操作を可能にするさまざまなサービスを提供しています。各サービスにアクセスするための API は次のとおりです。

URL フェッチ

App Engine の URL フェッチ サービスを使用して、インターネット上のリソース(Web サービスやその他のデータ)にアクセスすることができます。URL フェッチ サービスは、Google のサービスの大半がウェブページの取得に使用している高速の Google インフラを使って、Web リソースを取り出します。

メール

App Engine のメール サービスを使用して、メール メッセージを送信することができます。メール サービスでは、Google のインフラを使用して、メール メッセージを送信します。

Memcache

Memcache サービスでは、アプリケーションの複数のインスタンスでアクセスできる、高パフォーマンスなインメモリーのキー値キャッシングを提供します。Memcache が役に立つのは、データストアの永続性とトランザクション機能を必要としないデータ(例: 一時データ、高速アクセスのためにデータストアからキャッシュにコピーしたデータなど)を扱う場合です。

画像操作

画像サービスを使うと、アプリケーションで画像を操作できます。この API では、JPEG および PNG フォーマットで、画像のサイズ変更、切り取り、回転、反転が可能になります。

スケジュールされたタスク

cron サービスを使用すると、タスクのスケジュールを設定し、一定の間隔でタスクを実行できます。詳しくは、Python または Java の cron に関するドキュメントをご覧ください。

開発ワークフロー

App Engine ソフトウェア開発キット(SDK)の Java および Python の両バージョンは、ローカル コンピュータ上ですべての App Engine サービスをエミュレートするための Web サーバー アプリケーションが用意されています。それぞれの SDK には、App Engine で使用できるすべての API とライブラリが含まれています。この Web サーバーは、安全なサンドボックス環境もシミュレートします。たとえば、App Engine ランタイム環境で許可されていないシステム リソース アクセスをチェックできます。

これらの SDK には、アプリケーションを App Engine にアップロードするためのツールも含まれています。アプリケーション コード、静的ファイル、設定ファイルを作成したら、ツールを実行してデータをアップロードしてください。ツールのプロンプト画面で、Google アカウントのメール アドレスとパスワードを求められます。

App Engine ですでに実行しているアプリケーションの新しいメジャー リリースを作成したときは、この新しいリリースを新しいバージョンとしてアップロードできます。新しいバージョンに切り替えるまでは、古いバージョンが引き続きユーザーに提供されます。古いバージョンが稼働している間にも、App Engine 上で新しいバージョンをテストすることができます。

Java SDK は、Java 5 または Java 6 であればどのプラットフォームでも動作します。この SDK は zip ファイルで提供されます。Eclipse 開発環境を使用している場合は、Google Plugin for Eclipse を使用して App Engine アプリケーションを作成、テスト、アップロードできます。SDK には、開発サーバーを実行したり、作成したアプリケーションをアップロードしたりするためのコマンドライン ツールも含まれています。

Python SDK は Python のみで実装されており、Python 2.5 がインストールされていれば、Windows、Mac OS X、Linux などプラットフォームを問わずに動作します。SDK は zip ファイルで提供されており、Windows 用と Mac OS X.用のインストーラもあります。

管理コンソールは、App Engine で実行するアプリケーションを管理するための Web ベースのインターフェースです。管理コンソールは、新しいアプリケーションの作成、ドメイン名の設定、有効にするバージョンの変更、アクセス ログやエラー ログのチェック、データベースの閲覧などに使用できます。

割り当てと制限

App Engine アプリケーションを作成するのは容易なだけではなく、費用も一切かかりません。アカウントを作成してアプリケーションを公開すれば、ユーザーは今すぐあなたのアプリケーションを無料で利用できます。もちろん、義務を要求されることもありません。無料アカウントで利用できるストレージは 500 MB まで、ページビューは月間 500 万が上限です。必要に応じて課金を有効にし、日々の予算を設定して各リソースに割り当てることもできます。

1 つのデベロッパー用アカウントを使用して最大 10 個のアプリケーションを登録できます。

各アプリケーションには、制限内(「割り当て」の範囲内)でリソースが割り当てられます。この割り当てによって、アプリケーションで 1 日に使用できる各リソースの量が決まります。近い将来、追加のリソースを購入することで、これらの割り当てを調整できるようにする予定です。

一部の機能では、システムの安定性を確保するため、割り当てとは関係のない制限の強制があります。たとえば、アプリケーションが Web リクエストの処理のために呼び出された場合は、30 秒以内にレスポンスを発行しなくてはなりません。アプリケーションの処理が長引くと、プロセスは終了し、サーバーからエラー コードがユーザーに返されることになります。リクエスト タイムアウトは動的であり、短縮されることもあります。これは、リクエスト ハンドラが頻繁にタイムアウトに達する場合、リソースを節約するためです。

サービス制限のもう 1 つの例は、クエリによって返される結果の数です。1 つのクエリが返せる結果の数は 1,000 個までです。これ以上の結果を返せるクエリも、上限の 1,000 個しか返しません。この場合、そのようなクエリを実行するリクエストがタイムアウトになる前にリクエストが返される可能性は低いですが、データストアのリソースを節約するために制限が設けられています。

同時に複数のアカウントでアプリケーションを操作するなどして割り当てを侵害したり、悪用しようとしたりすることは、利用規約への違反となり、アプリケーションが無効になるか、アカウントが停止されることがあります。

割り当ての種類、および割り当てシステムの説明(課金を有効にして割り当てを増やす方法など)については、割り当てをご覧ください。

詳細情報

Google App Engine に関する詳しい情報は、次をご覧ください。

Google App Engine へようこそ