App Engine に関するよくある質問

App Engine アカウントにログインするにはどうすればよいですか?

Gmail ユーザーを含め、通常の Google アカウントの場合は Google Cloud Platform Console にアクセスすることで App Engine アカウントにログインできます。

App Engine の Cloud プロジェクトを作成するにはどうすればよいですか?

Google Cloud Platform Console を使用して Cloud プロジェクトを作成します。

Google App Engine ではどのプログラミング言語がサポートされていますか?

現在 App Engine のスタンダード環境では、JavaPythonPHPGoNode.js がサポートされています。また、ウェブサイトのテンプレートには、HTML と一緒に JavaScript を組み込むことができます。これによって、AJAX 対応のウェブ アプリケーションを作成できます。

App Engine が取得している認証について教えてください。

App Engine は、SAS70 Type IISSAE 16 Type IIISO 27001ISAE 3402 Type II の監査プロセスを無事完了しました。

自分で作成したプロジェクトに対する権利について教えてください。

Google と App Engine のお客様との間で、保存したデータ、アプリケーション、プロジェクト コードに対するすべての知的財産権は、お客様が保有します。Google は、App Engine と Google Cloud Platform のサービスとソフトウェアに関するすべての知的所有権を保有します。

これらの用語の定義も含め、詳細については Google Cloud 利用規約をご覧ください。

アカウントを持っていませんが、App Engine アプリを開発できますか?

はい、できます。App Engine アカウントがなくても、SDK をダウンロードして開発を始めることができます。

App Engine ではアプリケーションをいくつ作成できますか?

作成できる App Engine プロジェクトの数は、使用しているリソースや Google Cloud Platform での以前の使用履歴など、さまざまな要因によって決まります。お客様の割り当ては、これらの要因や他の要因によって異なることがあります。

プロジェクトの制限を超過しそうになると、GCP Console が、リクエスト フォームに記入するよう促します。これは、プロジェクトを作成しようとしたものの、すでに割り当てに達している場合に起こります。このフォームでは、必要な追加プロジェクトの数のほか、対応するメールアカウント、請求先アカウント、使用目的を指定する必要があります。

割り当て増加リクエストの詳細については、プロジェクト割り当てリクエストのページをご覧ください。

Google App Engine ではどのようなコンテンツが許可されていますか?

App Engine で許可されているコンテンツの種類について場合は、利用規約をご覧ください。

/favicon.ico の URI エラーが発生するのはなぜですか?

favicon.ico ファイルを含まないアプリケーションでは、URI のエラーリストに /favicon.ico の URI が記載されることがあります。Favicon.ico は、ページを読み込もうとしたときにユーザーのウェブブラウザから要求されるファイルです。Favicon.ico はウェブサイトのアイコンで、通常はユーザーのブラウザの URL バー内で、サイトのウェブアドレスの横に表示されます。

アプリケーションの favicon.ico は、静止画像である必要があります。アプリケーションに favicon.ico ファイルをアップロードしたうえで、url /favicon.ico が要求されたときに画像を提供するように app.yaml ファイルでアプリケーションを構成します。appengine-web.xml(Java)と app.yaml(Python / PHP / Go)のエントリ例を次に示します。Python / PHP / Go の例で、favicon.icostatic/images にあります。簡単にするため、Java の例では同じファイルがルート(war)ディレクトリにあるものとします。

Python / PHP / Go

app.yaml
- url: /favicon\.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon\.ico

Java

appengine-web.xml
<static-files>
  <include path="/favicon.ico" />
</static-files>

GQL とは何ですか?

GQL は、Datastore で使用されるクエリ言語です。これを使うと、Python アプリでエンティティのクエリを実行できます。SQL のような構文を使用して、アプリケーションの Datastore からエンティティ全体を取得し、プロパティのフィルタリング、結果の並び替え順序の指定、返されるエンティティ数の制限を行います。詳細な GQL 言語リファレンスについては、こちらをご覧ください。

GQL は Java に対応していますか?

GQL は Java SDK には含まれていませんが、Cloud Datastore API を通じて使用できます。Java デベロッパーは GQL ではなく JDOJPA を使用することをおすすめします。これらのインターフェースでは型安全性が保証されるからです。JDO / JPA を使用すると、デベロッパーはランタイムではなく IDE で間違いに気づくことができ、SQL インジェクション攻撃の余地がなくなります。

クエリでインデックスを使用する必要があるのはなぜですか?インデックスを含めるにはどうすればよいですか?

複数のエンティティ プロパティをフィルタリングするクエリを実行したり、複数のプロパティで結果を並べ替えたりする場合は、そのクエリのインデックスが必要です。インデックスは、アプリケーションで実行する種類のクエリごとに必要となります。クエリの Datastore インデックスは、キーのリストを維持し、更新します。このリストは、Datastore のデータにすばやくアクセスできるよう、クエリが指定した方法で並べ替えられています。Datastore インデックスの詳細については、ドキュメント(Java | Python | Go)をご覧ください。

Cloud SDK を使用してアプリケーションを開発する場合、クエリを実行するたびに必要に応じてインデックスが自動的に作成されます。アプリケーションをウェブサイトにアップロードする前に徹底的にテストを行うと、アプリケーションに必要なすべてのインデックスをアプリケーションの index.yaml ファイルに追加できます。開発テストでカバーされていないクエリが見つかった場合は、インデックスを手動で追加できます。アプリケーションにインデックスを記述する方法の詳細については、インデックスのドキュメントをご覧ください。

インデックスが「エラー」とマークされたのはなぜですか?

インデックス爆発の可能性があります(Python | Java | Go)。または、データストアに特定のエンティティを書くときに他の同様の問題が発生している可能性があります。クエリ(Python | Java | Go)とインデックス(Python | Java | Go)の手順に従ってバキュームし、ビルドを再試行できます。

インデックスが長時間ビルドや削除を続けているのはなぜですか?

対応する種類のエンティティが多くなくても、インデックスでビルドや削除にかかる時間は、Datastore のデータの総量、他のアプリ向けに現在ビルド中のインデックス、ユーザーのリクエストによる Datastore への負荷などによって、大きく異なることがあります。場合によっては、インデックス ジョブの完了に数時間から数日かかることがあります。

ただし、停止しているインデックスでも、Google が問題解決のお手伝いをできる場合があります。インデックスでこの現象を確認した場合は、Google App Engine グループに質問を投稿できます。

アプリケーションのユーザーを認証するにはどうすればよいですか?

ユーザー サービス(Java | Python | Go)では、Google アカウントや独自の G Suite ドメインのアカウントを持つユーザーを認証できます。アプリケーション向けに、これらの認証のうちの 1 つを選択します。

アプリで Google アカウントを使用する場合、アプリケーションでユーザーのログインをリクエストすると、ユーザーは Google のログインページに誘導されます。そこでユーザー名とパスワードを入力するか、新しいアカウントを作成します。ログインに成功すると、ユーザーはウェブサイトに戻り、ユーザー情報がユーザー プロパティを通じてアプリケーションで利用できるようになります。

App Engine でサポートされていないサードパーティのライブラリはありますか?

Python

ネイティブ C Python モジュールのごく一部、またネイティブ C Python モジュールのサブセットは、App Engine で使用できません。無効なモジュールは次のカテゴリに分類されます。

  • App Engine 用の Python では、ディスク上のデータベースを管理するライブラリが有効になっていない
  • システムでサブプロセスの呼び出しができず、その結果一部のモジュール OS メソッドが無効
  • スレッディングを使用できない
  • セキュリティ上の理由から、ほとんどの C ベースのモジュールが無効
  • 制限を受けるその他の機能:
    • マーシャルが無効
    • cPickle は pickle にエイリアスされる
    • システム呼び出しが無効

このような機能を使用するサードパーティ パッケージ(PostgreSQL などのパッケージ)は、App Engine で機能しません。

Go

純粋な Go パッケージの大部分は App Engine で動作します。次のいずれかの理由により、パッケージが動作しない場合があります。

  • パッケージが、syscallunsafe をインポートする。
  • パッケージが、cgo やアセンブリを使用する。
  • パッケージが、ディスクへの書き込みやネットワークへの直接アクセスなど、ロックダウンされたパッケージ内の機能を必要とする。

アプリが無効になったのはなぜですか?

アプリが利用規約に違反すると、無効になることがあります。また、非効率なリソース使用につながるバグやその他の問題によって、アプリケーションが過度のシステム リソースを使用していることが判明した場合も、アプリが無効になることがあります。デベロッパーは、開発用 SDK を使用して問題を修正し、App Engine でアプリケーションを再度有効にできます。

アプリが割り当てを超えているのはなぜですか?

App Engine では、アプリケーションが 1 日に消費できる各システム リソースの量に、割り当て制限が設定されます。すべてのアプリケーションにはデフォルトの割り当てとして「無料割り当て」があり、効率的なアプリケーションでは月に約 500 万ページビューが可能です。システムの割り当ての詳細については、割り当てのドキュメントをご覧ください。

アプリケーションが大きくなると、デフォルトの割り当て構成よりも高いリソース割り当てが必要になることがあります。アプリケーションの課金を有効にすると、追加のコンピューティング リソースを購入できます。課金により、すべてのシステム リソースの制限を引き上げることができます。たとえば、CPU、帯域幅、ストレージ、メールの使用量について制限を上げて、その分を支払うことができます。

利用規約に違反しているアプリケーションを報告するにはどうすればよいですか?

App Engine の利用規約に違反しているアプリケーションを報告する場合は、Google までご連絡ください。そのアプリケーションが違反しているかどうかを判断し、必要に応じて、違反についてアプリケーションのデベロッパーに連絡します。

外部リクエストを受け付けるために SDK を使用できますか?

dev_appserver はローカルテスト向けに設計されており、デフォルトでは外部接続が許可されていません。これは実行時に --host <hostname> フラグを使用してオーバーライドできますが、SDK はセキュリティ面が強化されておらず脆弱性が存在する可能性があるため、推奨しません。

圧縮されたコンテンツを提供するにはどうすればよいですか?

App Engine は、gzip をサポートするブラウザに gzip 圧縮されたコンテンツをなるべく提供するよう設計されています。この方式は自動で利用されるため、アプリケーションを変更する必要はありません。

Google では、リクエスト ヘッダー(Accept-Encoding、User-Agent)とレスポンス ヘッダー(Content-Type)を組み合わせて使用し、エンドユーザーが gzip 圧縮されたコンテンツを利用できるかどうかを判断しています。このアプローチで、gzip 圧縮されたコンテンツを一般的なブラウザで利用する際に起こる、よく知られているバグを回避します。gzip 圧縮されたコンテンツが提供されるようにするため、Accept-Encoding と User-Agent の両方のリクエスト ヘッダーの値として「gzip」を指定できます。Accept-Encoding ヘッダーが存在しない場合、コンテンツは gzip 圧縮されません。

詳細については、ランタイム環境のドキュメント(Python | Java | PHP | Go)をご覧ください。

App Engine は SSL(HTTPS)をサポートしていますか?

App Engine は、appspot.com ドメイン経由で SSL(HTTPS)トラフィックを配信します。トラフィックを保護したい URL の app.yaml ハンドラに、「secure」パラメータを追加するだけです。アプリケーションでトラフィックの保護を構成する方法については、アプリの構成に関するドキュメント(Java | Python | PHP | Go)をご覧ください。

また、カスタム ドメインを使用して SSL(HTTPS)トラフィックを提供することもできます。SSL でカスタム ドメインを使用する場合、独自ドメインも使用できます。

プロジェクトで Strict-Transport-Security ヘッダーを使用できますか?

Strict-Transport-Security は App Engine で使用できます。アプリケーションに HTTP Strict-Transport-Security ヘッダー(HSTS)を追加するには、アプリケーションの構成ファイル(app.yamlappengine-web.xml)ではなく、コード内にヘッダーを実装する必要があります。

App Engine では、カスタム ドメインで SSL(HTTPS)を使用できますか?

カスタム ドメインを通じて SSL を提供できます。

remote_api のようなツールは SSL(HTTPS)を使用しますか?

ログインを使用する SDK ツール(remote_api、appengine_rpc)は、メールアドレスとパスワードでの通信時に SSL を使用します。

Python SDK と Go SDK には、リモート接続を介して SSL 証明書を検証する機能があります。そのためには、システムに ssl Python モジュールをインストールしておく必要があります。Python 2.5 を使用している場合は、http://pypi.python.org/pypi/ssl/ からモジュールをインストールできます。SSL 証明書の検証中にエラーが発生した場合、InvalidCertificateException で何が問題になったのかが示されます。

Java SDK では、デフォルトで SSL も有効になります。SSL 証明書の検証中にエラーが発生した場合、javax.net.ssl.SSLHandshakeException がスローされます。

アプリをネイキッド ドメイン(http://example.com など)にマッピングしたいのですが、どうすればよいですか?

独自ドメインを使用すると、ユーザーは http://www.example.com や http://myapp.example.com などのサブドメインを必要とせずに、ドメイン名(http://example.com)で直接アプリにアクセスできます。Google Cloud Platform プロジェクト コンソールから、独自ドメインで App Engine アプリを設定できます。カスタム ドメインの使用をご覧ください。

独自ドメインは、SSL でカスタム ドメインを使用している場合にもサポートされます。

静的 IP アドレスと App Engine アプリ

App Engine では現在、アプリケーションに静的 IP アドレスをマッピングする方法は提供されていません。ISP や地域が異なるエンドユーザーは、エンドユーザーと App Engine アプリケーションの間のネットワーク パスを最適化するために、異なる IP アドレスを使用して同じ App Engine アプリケーションにアクセスする可能性があります。DNS は異なる IP アドレスを返し、時系列で、あるいは異なるネットワーク ロケーションから App Engine にアクセスする可能性があります。

URL 取得、Sockets API、Mail API などのアウトバウンド サービスは、IP アドレスの大きなプールを利用します。このプールの IP アドレス範囲は、定期的な変更の対象です。実際、同じアプリケーションからの 2 つの連続した API 呼び出しは、2 つの異なる IP アドレスから発生したように見えることがあります。

App Engine の現在の発信 IP アドレス範囲は、_cloud-netblocks.googleusercontent.com の Sender Policy Framework(SPF)レコードでエンコードされます。DNS SPF ルックアップを繰り返し実行して、IP 範囲のリスト全体を解決する必要が生じることがあります。まず、次のとおり _cloud-netblocks.googleusercontent.com を解決します。

nslookup -q=TXT _cloud-netblocks.googleusercontent.com 8.8.8.8

これから返されるレスポンスには、App Engine の現在の _cloud-netblocks がすべて含まれます(こうした結果は静的ではありません。Google はいつでも新しい _cloud-netblocks エントリを導入する可能性があります)。たとえば、このクエリは次のように返します。

Non-authoritative answer:
_cloud-netblocks.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks1.googleusercontent.com include:_cloud-netblocks2.googleusercontent.com include:_cloud-netblocks3.googleusercontent.com ?all

このクエリ レスポンスから、レスポンスにリストされている返された _cloud-netblocksN それぞれについてクエリを実行します。前の例のレスポンスを 3 つの _cloud-netblocksN エントリとともに使用して、次の 3 つのクエリを実行し、すべての IP 範囲を検索します。

nslookup -q=TXT _cloud-netblocks1.googleusercontent.com 8.8.8.8
nslookup -q=TXT _cloud-netblocks2.googleusercontent.com 8.8.8.8
nslookup -q=TXT _cloud-netblocks3.googleusercontent.com 8.8.8.8

上記の各エントリのクエリから返された SPF レコードが、App Engine の送信トラフィックに使用できる IP 範囲になります。たとえば上記の _cloud-netblocks1 のクエリは、次の値を返します。

Non-authoritative answer:
_cloud-netblocks1.googleusercontent.com	text = "v=spf1 ip4:8.34.208.0/20 ip4:8.35.192.0/21 ip4:8.35.200.0/23 ip4:108.59.80.0/20 ip4:108.170.192.0/20 ip4:108.170.208.0/21 ip4:108.170.216.0/22 ip4:108.170.220.0/23 ip4:108.170.222.0/24 ?all"

この例から、IP 範囲 8.34.208.0/208.35.192.0/21 の両方を App Engine トラフィックに使用できることがわかります。

静的 IP アドレス フィルタリングの使用は、安全かつ効果的な保護手段とはみなされないことに注意してください。たとえば、攻撃者はアプリケーションと同じ IP アドレス範囲を共有する可能性のある、悪意のある App Engine アプリを設定できます。代わりに OAuthCert を使用して、多層防御のアプローチを取ることをおすすめします。

プライベート IP アドレスで App Engine インスタンスにアクセスできますか?

App Engine は、Google ロードバランサの動的パブリック IP アドレスにサービスをホストします。プライベート IP アドレス(RFC 1918)でサービスにアクセスすることはできません。

アプリに cron ジョブを定義するにはどうすればよいですか?

アプリケーションに cron ジョブを定義するには、言語固有のドキュメント(Java | Python | Go | PHP)をご覧ください。

タスクキューとは何ですか。

タスクキューは、新しいリクエストを動的に追加して後で処理させるメカニズムを提供します。アプリがバックグラウンド処理を実行する必要がある場合は、Task Queue API を使用して、タスクという小さな独立した単位で作業を管理できます。タスクは、1 つ以上のキューに挿入されます。App Engine は新しいタスクを自動的に検出し、システム リソースが許す限りそれを実行します。詳細については、Task Queue API のドキュメント(Java | Python | Go | PHP)をご覧ください。

Google グループを使用して App Engine プロジェクトへのアクセスを許可できますか?

Google グループを App Engine プロジェクトに追加すると、そのグループのメンバーは、そのプロジェクトのリソース(Datastore、タスクキュー、Memcache など)にアクセスできるようになります。

ユーザー / サブネットがアプリにアクセスするのを防ぐにはどうすればよいですか?

App Engine には、IP アドレスやサブネットをブラックリストに登録できる DoS 攻撃防御サービスがあります。詳細については、DoS 攻撃防御サービスのドキュメント(Java | Python | Go | PHP)をご覧ください。

アプリケーションの停止やアクセシビリティに関する問題について、詳細情報を入手するにはどうすればよいですか?

Google Cloud ステータス ダッシュボードで、Google Cloud Platform に含まれるサービスのステータス情報を確認できます。

中国の場合、App Engine のアクセシビリティは断続的です。中国におけるその他の Google サービスのアクセシビリティに関する問題については、Google 透明性レポートをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

App Engine ドキュメント