リージョン ID
REGION_ID
は、アプリの作成時に選択したリージョンに基づいて Google が割り当てる省略形のコードです。一部のリージョン ID は、一般的に使用されている国や州のコードと類似しているように見える場合がありますが、このコードは国または州に対応するものではありません。既存のアプリでは省略可能ですが、まもなく、新しいアプリのすべてにおいて App Engine の URL に REGION_ID.r
を含めることが必須となる予定です。
移行がスムーズに行われるように、リージョン ID を使用するよう App Engine を徐々に更新しています。Google Cloud プロジェクトがまだ更新されていない場合、アプリにリージョン ID は表示されません。ID は既存のアプリでは省略可能なため、リージョン ID が既存のアプリで使用可能になったときに、URL の更新や他の変更を行う必要はありません。
詳しくは、リージョン ID をご覧ください。
App Identity API は、アプリケーションがアプリケーション ID(「プロジェクト ID」)を見つけられるようにします。App Engine アプリケーションは ID を使用して、そのアプリケーションの識別情報を他の App Engine アプリ、Google API、サードパーティ製アプリケーションおよびサービスに表明します。アプリケーション ID は URL やメールアドレスの生成、ランタイムでの決定にも使用できます。
プロジェクト ID を取得する
プロジェクト ID は ApiProxy.getCurrentEnvironment().getAppId() メソッドで確認できます。
アプリケーションのホスト名を取得する
デフォルトでは、App Engine アプリは https://PROJECT_ID.REGION_ID.r.appspot.com
という形式の URL から提供され、プロジェクト ID はホスト名の一部になります。アプリがカスタム ドメインから提供される場合、ホスト名のコンポーネント全体の取得が必要となることがあります。これを行うには、CurrentEnvironment
の com.google.appengine.runtime.default_version_hostname
属性を使用します。
他の App Engine アプリに ID を表明する
App Engine アプリにリクエストを行っている App Engine アプリの ID を特定するには、リクエスト ヘッダー X-Appengine-Inbound-Appid
を使用します。このヘッダーは URLFetch サービスによりリクエストに追加され、ユーザーによる変更はできないため、リクエスト元のアプリケーション ID がある場合、その ID が安全に表示されます。
要件:
-
アプリの
appspot.com
ドメインへの呼び出しのみにX-Appengine-Inbound-Appid
ヘッダーが含まれます。カスタム ドメインへの呼び出しにはヘッダーが含まれません。 - リダイレクトに従わないようにリクエストを設定する必要があります。URLFetchService クラスを使用する場合、アプリでは doNotFollowRedirect を指定する必要があります。Java 8 ランタイムで実行されるアプリは、デフォルトでは URLFetch サービスを使用しません。URLFetch を有効にするには、こちらの手順に従ってください。
-
アプリで
java.net
を使用している場合は、リダイレクトに従わないようにコードを更新してください。connection.setInstanceFollowRedirects(false);
アプリケーション ハンドラでは、X-Appengine-Inbound-Appid
ヘッダーを読み取り、リクエストを行うことを許可された ID のリストと比較することで受信 ID を確認できます。
Google API に ID を表明する
Google API では、認証および承認に OAuth 2.0 プロトコルを使用しています。App Identity API は OAuth トークンを作成できます。これを使用して、リクエストのソースがアプリケーション自体であることを表明できます。getAccessToken()
メソッドは、スコープのアクセス トークンまたはスコープのリストを返します。その後、このトークンを呼び出しの HTTP ヘッダーに設定して、呼び出し元アプリケーションを特定できます。
アプリケーションの ID はサービス アカウント名で表されます。通常は applicationid@appspot.gserviceaccount.com となります。正確な値を取得するには、getServiceAccountName()
メソッドを使用します。ACL を提供するサービスでは、このアカウントのアクセスを許可することでアプリケーションにアクセスを許可します。
サードパーティのサービスに ID を表明する
getAccessToken()
によって生成されたトークンは、Google サービスでのみ有効です。ただし、基盤となる署名テクノロジーを使用してアプリケーションの ID をその他のサービスに表明できます。signForApp()
メソッドがアプリケーション固有の秘密鍵を使用してバイトに署名し、getPublicCertificatesForApp()
メソッドが署名の検証に使用できる証明書を返します。
デフォルトの Cloud Storage バケット名を取得する
各アプリケーションには 1 つのデフォルトの Cloud Storage バケットがあります。このバケットには無料のストレージ容量 5 GB と I/O オペレーションの無料の割り当てが含まれます。
デフォルトのバケットの名前を取得するには、App Identity API を使用して AppIdentityService.getDefaultGcsBucketName を呼び出します。