
始める前に
- ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
- ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
- 画面左上の [ラボを開始] をクリックして開始します
Enables the Cloud Run API and creates the App Engine app
/ 10
Deploy the backend service
/ 10
Create a service account for the Apigee API proxy
/ 10
Create the Apigee proxy
/ 10
Enable use of the Google Cloud Geocoding API
/ 20
Create a shared flow to call the Geocoding API
/ 20
Add the ATM's address when retrieving a single ATM
/ 20
Google Cloud の Apigee API Platform を使用すると、既存の API に新しい機能を追加して既存のアプリケーションをモダナイズできます。
このラボでは、まず、Cloud Run にバックエンド サービスをデプロイします。このバックエンド サービスは、Firestore データベースで銀行データ(顧客、口座、ATM、取引)の保存 / 取得を行う REST API を実装します。次に、このバックエンド サービスをプロキシする Apigee API プロキシと、外部サービスからコンテンツを取得してキャッシュに保存する共有フローを作成します。その後、作成した API プロキシからその共有フローを呼び出して、API レスポンスを JavaScript コードで変更します。
このラボでは、次のタスクの実行方法について学びます。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] ペインでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] ペインでもパスワードを確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
ウィンドウで次の操作を行います。
接続した時点で認証が完了しており、プロジェクトに各自の Project_ID、
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
出力:
出力:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
このタスクでは、Cloud Run にバックエンド サービスをデプロイします。
このサービスは、SimpleBank の API を実装します。この API は、顧客、口座、取引、ATM を使用して銀行をシンプルに表現します。SimpleBank サービスは Node.js を使用して構築されており、データは Firestore に保存されます。コードは Docker コンテナにパッケージ化されているため、そのコンテナを Cloud Run にデプロイします。
SimpleBank サービスのコードを含むリポジトリのクローンを作成するには、Cloud Shell で次のコマンドを実行します。
作業ディレクトリへのソフトリンクを作成します。
REST バックエンドを含むディレクトリに移動するには、次のコマンドを実行します。
構成ファイルでリージョンを更新するには、次のコマンドを実行します。
プロジェクト初期化スクリプトの init-project.sh は、Cloud Run API をプロジェクトで有効にします。これらの API は、Cloud Run サービスをデプロイするために必要です。
このサービスのデータベースは、ネイティブ モードの Firestore です。1 つのプロジェクトで、1 つの Firestore データベースをネイティブ モードか Datastore モードでホストできます。このスクリプトは、ネイティブ モードの Firestore データベースを作成します。
init-project.sh スクリプトによって実行されるコマンドを表示するには、次のコマンドを入力します。
このスクリプトは、Cloud Run API を有効にし、ネイティブ モードの Firestore データベースを作成します。
スクリプトを実行するには、次のコマンドを入力します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
サービス初期化スクリプトの init-service.sh は、simplebank-rest という名前のサービス アカウントを作成します。このサービス アカウントは、Cloud Run サービスの ID として使用されます。roles/datastore.user ロールが付与されるため、Firestore でデータの読み取りと更新を行うことができます。
サービスを作成する際には、そのサービス用のサービス アカウントを作成して、最小権限の原則に従って権限を付与することをおすすめします。最小権限の原則とは、アカウントに付与する権限を、そのアカウントに固有の機能を実行するために不可欠な権限のみにする原則です。
init-service.sh スクリプトによって実行されるコマンドを表示するには、次のコマンドを入力します。
このスクリプトは、サービスによって使用されるサービス アカウントを作成して、roles/datastore.user ロールを追加します。
スクリプトを実行するには、次のコマンドを入力します。
デプロイ スクリプトの deploy.sh は、現在のディレクトリにあるコードを使用して simplebank サービス アプリケーションをビルドし、simplebank-rest サービス アカウントを使用して Cloud Run にデプロイします。このデプロイ スクリプトは、アプリケーション コードを更新する度に実行することになります。
このサービスは認証アクセスを必要とするようにデプロイされるため、有効な OpenID Connect ID トークンがなければ呼び出すことができません。
deploy.sh スクリプトによって実行されるコマンドを表示するには、Cloud Shell で次のコマンドを入力します。
このスクリプトは、Cloud Build を使用してサービスをビルドし、ビルドされた simplebank-grpc サービスを Cloud Run にデプロイします。
このスクリプトを Cloud Run にデプロイするには、次のコマンドを入力します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
サービスが実行されていることを確認するために、サービスを呼び出す curl リクエストを実行します。
RESTHOST 変数を設定するコマンドで、gcloud を使用して simplebank-rest Cloud Run サービスのホスト名を取得した後、この変数を .bashrc ファイルに追加しています。これにより、Cloud Shell が再起動した場合に RESTHOST 変数が再読み込みされるようになります。
GET /_status コマンドは、API が稼働していることを示す JSON レスポンスを返すだけです。この呼び出しでは、gcloud auth print-identity-token を使用して、Cloud Shell にログインしているユーザーの OpenID Connect ID トークンを取得しています。ここではプロジェクト オーナーのロールでログインしているため、非常に幅広い権限が付与されています。
Firestore への書き込みを行えることを確認するために、顧客を作成する curl リクエストを実行します。
POST /customers コマンドによって顧客が作成されます。lastName、firstName、email の各パラメータはいずれも必須です。メールアドレスは一意でなければならず、顧客の ID として使用されます。顧客レコードは Firestore に保存されます。
Firestore からの読み取りを行えることを確認するために、作成した顧客を取得する curl リクエストを実行します。
GET /customers/ コマンドによって Firestore から顧客レコードが取得されます。
Firestore に追加のサンプルデータを読み込むために、次のコマンドを入力します。
この gcloud コマンドは、Firestore のインポート / エクスポート機能を使用して、顧客、口座、ATM をデータベースにインポートします。
ATM のリストを取得するには、次の curl コマンドを実行します。
1 つの ATM を取得するには、次の curl コマンドを実行します。
このリクエストは、ATM を名前で取得します。レスポンスにはその ATM の緯度と経度が含まれますが、住所は含まれません。
後のタスクで、Apigee と Geocoding API を使用して、特定の ATM を取得した場合に返されるレスポンスに住所を追加します。
このタスクでは、バックエンド サービスのファサードとして機能する Apigee API プロキシを作成します。API プロキシでは、サービス アカウントを使用して、Cloud Run サービスに OpenID Connect ID トークンを提示できるようにします。
Apigee API プロキシが使用できるサービス アカウントを作成するには、次のコマンドを入力します。
この gcloud コマンドは、apigee-internal-access という名前のサービス アカウントを作成します。このサービス アカウントは、Apigee プロキシがバックエンド サービスを呼び出すときに使用されます。
サービスへのアクセスを許可するロールを付与するには、次のコマンドを入力します。
この gcloud コマンドは、simplebank-rest Cloud Run サービスに対する roles/run.invoker ロールをこのサービス アカウントに付与します。これにより、このサービス アカウントでこのサービスを呼び出せるようになります。
次のコマンドを使用して、バックエンド サービスの URL を取得します。
この URL を保存します。API プロキシの作成時に使用します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。付与されたロールが検出されるまでに少し時間がかかることがあります。
Apigee コンソールを開くには、次の手順に沿って操作します。
Apigee
」と入力し、検索結果で [Apigee API Management] をクリックします。Apigee コンソールが開き、よく使用される場所へのクイックリンクがランディング ページに表示されます。
Apigee がナビゲーション メニューに固定されます。
ナビゲーション メニューで、[プロキシ開発] > [API プロキシ] を選択します。
プロキシ ウィザードを使用して新しいプロキシを作成するには、[+Create] をクリックします。
バックエンド サービスのリバース プロキシを作成します。
[Proxy template] で、[General template] > [Reverse proxy (Most common)] を選択します。
[Proxy details] で次のように指定します。
プロパティ | 値 |
---|---|
Proxy name | bank-v1 |
Base path | /bank/v1 |
Target (Existing API) | バックエンド URL |
ターゲットには、このタスクですでに取得した次のようなバックエンド URL を指定する必要があります。
[Next] をクリックします。
[Deploy (optional)] の設定はデフォルトのままにして、[Create] をクリックします。
Cloud Shell で、次のコマンドセットを貼り付けて実行します。
この一連のコマンドでは、Apigee API を使用して、Apigee ランタイム インスタンスが作成されて eval 環境がアタッチされたことを確認します。
インスタンスが使用可能になるまで待ちます。
***ORG IS READY TO USE***
というテキストが表示されたら、インスタンスは使用可能です。ラボを開始する前にすでに Apigee 組織が作成されていることがあります。その場合はインスタンスが作成されるまで待つ必要はありません。
組織の準備ができるまで待つ場合は、その間に、Apigee、Apigee X のアーキテクチャ、API と API プロキシの詳細をご覧ください。
ナビゲーション メニューで、[プロキシ開発] > [API プロキシ] を選択し、[bank-v1] をクリックします。
[Deploy] をクリックします。
[Environment] で [eval] を選択します。
[Service account] に、サービス アカウントのメールアドレスを指定します。
[Deploy]、[Confirm] の順にクリックします。
eval のデプロイ ステータスを確認し、プロキシがデプロイされるまで待ちます。
Apigee 組織の eval 環境は、eval.example.com というホスト名を使用して呼び出すことができます。このホスト名を Apigee ランタイム インスタンスの IP アドレスに解決する DNS エントリは、すでにプロジェクト内に作成されています。この DNS エントリは限定公開ゾーンに作成されているため、内部ネットワーク上でのみ表示されます。
Cloud Shell は内部ネットワーク上に存在しないため、Cloud Shell のコマンドではこの DNS エントリを解決できません。プロジェクト内の仮想マシン(VM)は、限定公開ゾーンの DNS にアクセスできます。apigeex-test-vm という名前の仮想マシンが自動的に作成されています。このマシンを使用して API プロキシを呼び出すことができます。
Cloud Shell で、テスト VM への SSH 接続を開きます。
1 つ目の gcloud コマンドでテスト VM のゾーンを取得し、2 つ目のコマンドで VM への SSH 接続を開きます。
承認するよう求められた場合は、[承認] をクリックします。
Cloud Shell で確認されるすべての項目について、Enter キーまたは Return キーを押して、デフォルトの入力を指定します。
プロジェクトのオーナーとしてログインしているため、このマシンへの SSH は許可されます。
これで、Cloud Shell セッションが VM 内で実行できるようになります。
eval 環境にデプロイした bank-v1 API プロキシを呼び出します。
-k
オプションを指定すると、curl
は TLS 証明書の検証をスキップします。このラボの Apigee ランタイムでは、信頼できる認証局(CA)によって作成された証明書ではなく、自己署名証明書を使用します。
-k
オプションを使用して証明書の検証を省略しないでください。
403 Forbidden ステータス コードが返されて、クライアントに URL を取得する権限がないという内容のエラー メッセージが表示されます。クライアントが必要なトークンをリクエストで渡さなかったために、バックエンド サービスに対するリクエストが拒否されました。API プロキシは正しい ID で実行されていますが、それでも、リクエストで OpenId Connect ID トークンを強制的に送信する必要があります。
bank-v1 プロキシに戻り、[Develop] タブをクリックします。
プロキシの左側のメニューで、[Target endpoints] > [default] セクションの [PreFlow] をクリックします。
次のコードを探します(URL は異なります)。
[HTTPTargetConnection] セクションの URL の下に、次のような [Authentication] セクションを追加します。
AUDIENCE は、[HTTPTargetConnection] セクションにすでにある URL 値に置き換えます。コードは、URL 要素と Audience 要素のユーザー固有の URL を除いて、次のようになります。
[Save]、[Save As New Revision] の順にクリックします。
[Deploy] をクリックします。
[Environment] には eval を使用します。
[Service account] に、サービス アカウントのメールアドレスを指定します。
[Deploy]、[Confirm] の順にクリックします。
[Overview] タブをクリックして eval のデプロイ ステータスを確認し、新しいリビジョンがデプロイされるまで待ちます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
SSH ログインがタイムアウトした場合は、Cloud Shell で次のコマンドを実行して接続を再確立します。
VM 内でステータス コマンドを再実行します。
今度は、次のような成功のレスポンス(200)が表示されるはずです。
このレスポンスは、API プロキシがバックエンド サービスの呼び出しに成功したことを示しています。
コマンド exit
を入力して SSH セッションを終了し、Cloud Shell に戻ります。
このタスクでは、Geocoding API を有効にします。この API を API プロキシで使用して、SimpleBank サービスから ATM を取得する際にレスポンスに住所の情報を追加します。
Geocoding API を有効にするには、Cloud Shell で次のコマンドを実行します。
次に、Geocoding API にアクセスできる API キーを作成します。
この API キーを作成するには、次のコマンドを実行します。
この gcloud コマンドは、Geocoding API にリクエストを送信できる API キーを作成します。--format パラメータで response の keyString フィールドを選択して API_KEY シェル変数に格納し、その API_KEY 変数を Cloud Shell の .bashrc ファイルに格納しています。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
緯度と経度を指定してジオコーディング情報を取得するには、次の curl コマンドを実行します。
このコマンドは、Geocoding API を呼び出して、API キーと、目的の緯度および経度を渡します。レスポンスには、書式設定済みの住所を含む結果の配列が含まれます。その最初の結果の書式設定済み住所を API プロキシで使用して、1 つの ATM の詳細を取得する際に API レスポンスに住所を追加します。
このタスクでは、Google Geocoding API を呼び出すための共有フローを作成します。共有フローを使用すると、ポリシーとリソースを組み合わせて 1 つのフローを作成し、複数の API プロキシや他の共有フローから使用できます。
この共有フローでは次のパターンを使用します。
データベースに含まれている ATM の数は限られており、ATM の緯度と経度は変わりません。Geocoding API の過剰な呼び出しを防ぐために、取得した住所をキャッシュに保存して、緯度と経度をキャッシュキーとして使用します。指定された緯度と経度に対応する住所がキャッシュにない場合は、Geocoding API が呼び出されて、返された住所がキャッシュに保存されます。
get-address-for-location
に設定し、[Create] をクリックします。LookupCache ポリシーで、住所がすでにキャッシュに保存されている場合にその住所を取得します。
共有フローの左側のメニューで、[Shared Flows] セクションの [default] をクリックします。
[sharedflows/default.xml
] ペインで、[Add policy step]()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Traffic Management] > [Lookup Cache] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | LC-LookupAddress |
Display Name | LC-LookupAddress |
[Add]、[LC-LookupAddress] の順にクリックします。
ポリシーがフローに追加されて、ポリシーの構成 XML がフローの下のペインに表示されます。
LookupCache 構成がペインにあることを確認して、LookupCache 構成を次の内容に置き換えます。
このポリシーは、指定された緯度と経度に一致するエントリを AddressesCache で探して、見つかった場合はその値を変数 address に割り当てます。
Service Callout ポリシーで Google Geocoding API を呼び出します。
共有フローの左側のメニューで、[Shared Flows] セクションの [default] をクリックします。
[sharedflows/default.xml
] ペインで、[Add policy step]()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Extension] > [Service Callout] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | SC-GoogleGeocode |
Display Name | SC-GoogleGeocode |
[HTTP Target] フィールドは変更せず、[Add]、[SC-GoogleGeocode] の順にクリックします。
ServiceCallout 構成がペインにあることを確認して、ServiceCallout 構成を次の内容に置き換えます。
このポリシーは、geocoding.latitude、geocoding.longitude、geocoding.apikey の各変数を使用して Geocoding API を呼び出します。API 呼び出しのレスポンスは calloutResponse 変数に格納されます。
ExtractVariables ポリシーで、Google Geocoding API レスポンスから書式設定済み住所を抽出します。
共有フローの左側のメニューで、[Shared Flows] セクションの [default] をクリックします。
[sharedflows/default.xml
] ペインで、[Add policy step]()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Mediation] > [Extract Variables] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | EV-ExtractAddress |
Display Name | EV-ExtractAddress |
[Add]、[EV-ExtractAddress] の順にクリックします。
ExtractVariables 構成がペインにあることを確認して、ExtractVariables 構成を次の内容に置き換えます。
このポリシーは、JSONPath を使用して、calloutResponse メッセージの JSON ペイロードの最初の結果から formatted_addressを抽出します。抽出した住所は geocoding.address 変数に格納されます。
PopulateCache ポリシーで住所をキャッシュに保存します。
共有フローの左側のメニューで、[Shared Flows] セクションの [default] をクリックします。
[sharedflows/default.xml
] ペインで、[Add policy step]()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Traffic Management] > [PopulateCache] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | PC-StoreAddress |
Display Name | PC-StoreAddress |
[Add]、[PC-StoreAddress] の順にクリックします。
PopulateCache 構成がペインにあることを確認して、PopulateCache 構成を次の内容に置き換えます。
このポリシーは、address 変数の値を AddressesCache に格納します。その際、LookupCache ポリシーによって使用されるのと同じキー フラグメント(latitude と longitude)を同じ順序で使用します。ExpirySettings/TimeoutInSec の設定で、格納されたデータがキャッシュに保存される期間を 3600 秒(1 時間)に指定しています。
特定の緯度と経度に対応する住所がキャッシュで見つかった場合(キャッシュ ヒット)、ServiceCallout、ExtractVariables、PopulateCache の各ポリシーは不要になるため、スキップする必要があります。
共有フローの左側のメニューで、[Shared Flows] セクションの [default] をクリックします。
[Code] ペインに default フローが表示されます。このフローには 4 つのポリシーがアタッチされています。
各 Step は、アタッチされたポリシーを指定しています。Name は、アタッチされたポリシーの名前を指定しています。Condition 要素を追加して、ポリシーを実行するかどうかを決定するブール条件を指定することもできます。
このタスクの最初に確認した、この共有フローのパターンに示されているとおり、キャッシュで住所が見つかった場合は、サービスを呼び出す必要も、データをキャッシュに保存する必要もないため、2 番目から 4 番目までのポリシー ステップをスキップする必要があります。
LookupCache ポリシーは、キャッシュでアイテムが見つかったかどうかを示す変数を設定します。その lookupcache.{policyName}.cachehit
変数が false の場合は、アイテムが見つからなかったことになります。2 番目から 4 番目までのステップのポリシーは、キャッシュ ヒットがなかった場合にのみ実行する必要があります。
2 番目から 4 番目までのステップで、Step 要素に次の条件を追加します。
すべて追加し終わると、この共有フローは次のようになります。
[Save] をクリックします。
[Deploy] をクリックします。
[Environment] には eval を使用します。
[Service Account] は空白のままにして、[Deploy]、[Confirm] の順にクリックします。
この共有フローは API キーを使用して Geocoding API を呼び出すため、サービス アカウントは必要ありません。
共有フローをテストするには API プロキシから呼び出す必要があります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
このタスクでは、作成した共有フローを呼び出す FlowCallout ポリシーを API プロキシに追加します。この API プロキシでは、特定の ATM を取得する際に、Cloud Run サービスのレスポンスから緯度と経度を抽出して、それらに対応する住所を取得するためにこの共有フローを呼び出す必要があります。取得した住所は、JavaScript ポリシーによって API レスポンスに追加されます。
プロパティ セットを使用すると、無期限のデータを格納して、API プロキシ内から簡単にアクセスできます。プロパティ セットの値で API キーを保持します。
左側のナビゲーション メニューで、[プロキシ開発] > [API プロキシ] を選択します。
[bank-v1] をクリックし、[Develop] タブを選択します。
プロキシの左側のメニューの [Resources] セクションの [Add resource]()をクリックします。
[Resource type] のプルダウンで [Property Set] を選択します。
[Resource name] に geocoding.properties
を指定して、[Add] をクリックします。
[geocoding.properties
] ペインで、次のプロパティを追加します。
<APIKEY>
は、タスク 3 で作成した API_KEY に置き換えます。
API_KEY を取得するには、Cloud Shell で次のコマンドを使用します。
geocoding.properties ファイルが次のようになります。
プロキシの左側のメニューで、[Proxy endpoints] セクションの [default] をクリックします。
[proxy-endpoints/default.xml
] ペインの [Proxy endpoint: default] の横にある [Add conditional flow]()をクリックします。
[Add conditional flow] ダイアログで次の値を指定します。
プロパティ | 値 |
---|---|
Flow name | GetATM |
Description | retrieve a single ATM |
Condition type | [Path and Verb] を選択 |
Path | /atms/{name} |
Verb | [GET] を選択 |
[Target URL] は空白のままにします。
[Add] をクリックします。
API プロキシは多数のフローで構成されます。各フローは、ポリシーをステップとしてアタッチするための場を提供します。以下の図は API プロキシを表しています。
条件フローの構成は、条件が true の場合にのみ実行されます。この条件フローでは、proxy.pathsuffix 変数が /atms/{name}
という形式に一致し、request.verb 変数が GET
である必要があります。
このGetATM 条件フローにいくつかのポリシーをアタッチして、それらが GET /atms/{name}
リクエストに対してのみ実行されるようにします。それらのポリシーは、バックエンド サービスが呼び出された後に実行される必要があるため、Proxy Endpoint Response 条件フローにアタッチする必要があります。
[Proxy endpoint: default] フローにある [Response] セクションで、[GetATM] の右側にある [Add Policy Step](ポリシー ステップを追加)アイコン()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Mediation] > [Extract Variables] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | EV-ExtractLatLng |
Display name | EV-ExtractLatLng |
[Add]、[EV-ExtractLatLng] の順にクリックします。
ExtractVariables 構成がペインにあることを確認して、ExtractVariables 構成を次の内容に置き換えます。
このポリシーは、バックエンド サービスからの GET /atms/{name}
JSON レスポンスから latitude と longitude を抽出します。IgnoreUnresolvedVariables 要素が true に設定されているため、レスポンスに latitude と longitude が見つからない場合も処理が続行されます。
[Proxy endpoint: default] フローにある [Response] セクションで、[GetATM] の右側にある [Add Policy Step](ポリシー ステップを追加)アイコン()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Extension] > [Flow Callout] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | FC-GetAddress |
Display name | FC-GetAddress |
Shared flow | [get-address-for-location] を選択 |
Condition | latitude != null AND longitude != null |
ATM の緯度または経度が取得されなかった場合、住所を特定できないため、ポリシーの手順はスキップされます。
[Add]、[FC-GetAddress] の順にクリックします。
FlowCallout 構成がペインにあることを確認して、FlowCallout 構成を次のように置き換えます。
このポリシーは、latitude、longitude、apikey の各変数をパラメータとして設定して共有フローを呼び出します。共有フローによって geocoding.address 変数が設定されます。
[Proxy endpoint: default] フローにある [Response] セクションで、[GetATM] の右側にある [Add Policy Step](ポリシー ステップを追加)アイコン()をクリックします。
[Create new policy] を選択します。
[Select policy] で、[Extension] > [JavaScript] を選択します。
[詳細] セクションで、以下を指定します。
プロパティ | 値 |
---|---|
Name | JS-AddAddress |
Display name | JS-AddAddress |
Javascript file | [Create New Resource] を選択 |
[Add resource] セクションで、次の情報を指定します。
プロパティ | 値 |
---|---|
Source | [Create new file] を選択 |
Resource name | addAddress.js |
[Add] をクリックし、[addAddress.js] を選択します。
[Condition] に「latitude != null AND longitude != null
」を指定します。
[Add]、[JS-AddAddress] の順にクリックします。
プロキシの左側のメニューで、[Resources > jsc] セクションの [addAddress.js] をクリックします。
addAddress.js コードの [Code] ペインは空です。
レスポンスに住所を追加する次の JavaScript コードを追加します。
このコードは、JSON レスポンスのペイロードをオブジェクトに解析して住所のフィールドを追加し、そのオブジェクトを再度 JSON 文字列に変換してレスポンスに格納します。
JavaScript ポリシーの外に例外がスローされないようにするために try / catch ブロックが使用されています。例外がキャッチされない場合は障害が発生して、API プロキシの処理が中止されます。
プロキシの左側のメニューで、[Proxy endpoints > default] セクションの [GetATM] をクリックします。
[Code] ペインに GetATM フローが表示されます。このフローには 3 つのポリシーがアタッチされています。2 つ目のポリシーと 3 つ目のポリシーには条件が設定されています。
[Save]、[Save As New Revision] の順にクリックします。
[Deploy] をクリックします。
[Environment] には eval を使用します。
[Service account] に、サービス アカウントのメールアドレスを指定します。
[Deploy]、[Confirm] の順にクリックします。
[Overview] タブをクリックして eval のデプロイ ステータスを確認し、新しいリビジョンがデプロイされるまで待ちます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Shell で、テスト VM への SSH 接続を開きます。
次のコマンドを使用して、bank-v1 プロキシを呼び出してすべての ATM を取得します。
レスポンスに住所は含まれません。このリクエストでは GET /atms/{name}
のフローは使用されないからです。
1 つの ATM を取得します。
今度は、API プロキシで追加された住所がレスポンスに含まれます。
このラボでは、まず、Cloud Run にバックエンド サービスをデプロイし、そのバックエンド サービスをプロキシする Apigee API プロキシを作成しました。次に、外部サービスからコンテンツを取得してキャッシュに保存する共有フローを作成しました。その後、作成した API プロキシからその共有フローを呼び出して、API レスポンスを JavaScript コードで変更しました。
マニュアルの最終更新日: 2024 年 7 月 16 日
ラボの最終テスト日: 2024 年 7 月 16 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
1 回に 1 つのラボ
既存のラボをすべて終了して、このラボを開始することを確認してください