このチュートリアルでは、お客様が購入を行う可能性を予測する API の作成方法について説明します。API の作成には、Apigee、BigQuery ML、Cloud Spanner を使用します。
このチュートリアルは、オムニチャネルや e コマースのプラットフォームを通じてよりパーソナライズされたエクスペリエンスを提供することで収益の向上を目指す、API デベロッパーとデータ スペシャリストを対象としています。このドキュメントは、BigQuery、Apigee、Google Cloud CLI、Apache Maven に精通していることを前提としています。
作成する API は、オンライン予測を使用し、ウェブサイトでのユーザーの行動に基づいてリアルタイムのアクションを実行します。オンライン予測は、機械学習(ML)の分析情報を商品カタログやその他の情報と組み合わせることで、複数のチャネルでカスタマー エクスペリエンスを向上させます。作成した API のアーキテクチャを次の図に示します。
この図は次のアーキテクチャを示しています。
- モバイル アプリケーションが Apigee プラットフォームにデプロイされた API にリクエストを送信します。このリクエストでは、ログインしているユーザーに向けた商品のレコメンデーションのデータを取得します。
- API プロキシは、BigQuery データセットからそのユーザー ID 向けの商品のおすすめデータを取得します。
- API プロキシはコールアウトを行い、Cloud Spanner インスタンス上のプロダクト プライマリ データベースからデータを取得します。
- API プロキシは、商品のおすすめと商品のプライマリ データセットのデータを集計します。
- レスポンスがモバイルアプリに返されます。
目標
- BigQuery で顧客の購入傾向データセットを作成します。
- 商品カタログのデータを Cloud Spanner データベースにインポートします。
- Apigee API プロキシをインポートおよびデプロイします。
- BigQuery から取得したお客様の購入傾向データと、Cloud Spanner データベースの商品カタログおよび価格情報を統合します。
- 商品のレコメンデーションの集計ビューを作成します。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- BigQuery と BigQuery ML の Flex Slots のスロット
- Cloud Spanner
- Apigee
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
準備
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction, BigQuery, BigQuery Reservation, BigQuery Storage, Cloud Spanner, Cloud Storage, Cloud Storage API, Dataflow, Google Cloud, Cloud Storage JSON, Service Management, Service Usage APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
- roles/apigee.admin
- roles/bigquery.user
- roles/bigquery.dataViewer
- roles/spanner.admin
- roles/spanner.databaseAdmin
- roles/resourcemanager.projectIamAdmin
- roles/serviceusage.serviceUsageConsumer
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Apigee X アカウントをまだ持っていない場合は、Apigee を設定して、Apigee X インスタンスをプロビジョニングします。プロビジョニングには 1 時間ほどかかることがあります。
- 外部アクセスを許可するように Apigee X 組織を構成します。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
BigQuery ML を使用して e コマース レコメンデーション データセットを作成する
このセクションでは、BigQuery ML で標準 SQL クエリを使用して ML モデルを作成し、BigQuery の顧客データでトレーニングを行ってからデプロイします。データのエクスポート、モデルのトレーニング、デプロイのパイプラインの作成などは必要ありません。BigQuery は自動スケーリングを行い、必要なコンピューティング リソースを処理します。
このチュートリアルで作成する ML モデルは、行列分解を使用します。これは、ユーザーの好みのデータに基づいてレコメンデーション システムを作成する場合の、一般的で効果的な方法です。
このチュートリアルでは、BigQuery でホストされ、一般公開されている Google アナリティクスのサンプル データセットを使用します。このデータセットは、Google ブランドの商品を販売する実在の e コマースストア、Google Merchandise Store の 12 か月間(2016 年 8 月から 2017 年 8 月)の難読化されたアナリティクス 360 データを提供します。
サンプルデータの処理
行列分解を使用する場合は、明示的または暗黙的なユーザー フィードバックを評価し、お客様の好みを判断します。明示的なフィードバックを使用するには、データセットに 1~5 の評価など、商品に対するユーザーの好みに関するデータを含める必要があります。明示的なフィードバックがない場合、他の行動指標を使用して、お客様の好みを推測します。たとえば、ユーザーが商品の詳細ページを閲覧した合計時間を調べます。このチュートリアルでは、セッション継続時間データを使用してお客様の好みを推測します。
行列分解モデルをトレーニングするには、お客様、評価対象のアイテム、暗黙的な評価を識別する列を含むテーブルが必要です。このセクションでは、userid
、itemId
、session_duration
列を持つテーブルを作成します。session_duration
列には、指定した商品の商品ページでのユーザーのセッション継続時間が含まれます。
アナリティクスのサンプル データセットのデータを使用してテーブルを作成するには、次の操作を行います。
Google Cloud Marketplace で、アナリティクス サンプルページに移動します。
[データセットを表示] をクリックします。 BigQuery SQL ワークスペース ページが開き、アナリティクス サンプル データセットが選択されています。
[エクスプローラ] セクションで、プロジェクトの横にある
[アクションを表示] をクリックし、[データセットを作成] をクリックします。表示された [データセットを作成] ダイアログで、次の操作を行います。
- [データセット ID] フィールドに「
bqml
」と入力します。 - [データロケータ] リストで、[us(米国の複数のリージョン)] を選択します。
- [データセットを作成] をクリックします。
- [データセット ID] フィールドに「
[データセットに移動] をクリックし、[クエリを新規作成] をクリックします。
Query Editor で、次の SQL ステートメントを実行して、トレーニング データを含むテーブルを作成します。
CREATE OR REPLACE TABLE bqml.aggregate_web_stats AS ( WITH durations AS ( --calculate pageview durations SELECT CONCAT(fullVisitorId,'-', CAST(visitNumber AS STRING),'-', CAST(hitNumber AS STRING) ) AS visitorId_session_hit, LEAD(time, 1) OVER ( PARTITION BY CONCAT(fullVisitorId,'-',CAST(visitNumber AS STRING)) ORDER BY time ASC ) - time AS pageview_duration FROM `bigquery-public-data.google_analytics_sample.ga_sessions_2017*`, UNNEST(hits) AS hit ), prodview_durations AS ( --filter for product detail pages only SELECT CONCAT(fullVisitorId,'-',CAST(visitNumber AS STRING)) AS userId, productSKU AS itemId, IFNULL(dur.pageview_duration, 1) AS pageview_duration, FROM `bigquery-public-data.google_analytics_sample.ga_sessions_2017*` t, UNNEST(hits) AS hits, UNNEST(hits.product) AS hits_product JOIN durations dur ON CONCAT(fullVisitorId,'-', CAST(visitNumber AS STRING),'-', CAST(hitNumber AS STRING)) = dur.visitorId_session_hit WHERE eCommerceAction.action_type = "2" ), aggregate_web_stats AS( --sum pageview durations by userId, itemId SELECT userId, itemId, SUM(pageview_duration) AS session_duration FROM prodview_durations GROUP BY userId, itemId ) SELECT * FROM aggregate_web_stats );
bqml.aggregate_web_stats
テーブルが作成され、トレーニング データが入力されます。データのサンプルを表示するには、Query Editor で次の SQL ステートメントを実行します。
SELECT * FROM bqml.aggregate_web_stats LIMIT 10;
出力には、ユーザーID ごとに行があり、ユーザーが閲覧したアイテムのID とセッション継続時間が含まれるテーブルが表示されます。出力は次のようになります。
行 | userId | itemId | session_duration |
---|---|---|---|
1 | 6703373209489429228-1 | GGOEAXXX0808 | 19523 |
2 | 868731560082458910-1 | GGOEAXXX0808 | 8312 |
3 | 4805474958539278422-1 | GGOEAXXX0808 | 62892 |
4 | 8353360074725418910-3 | GGOEAXXX0808 | 4883 |
5 | 8253742246691621007-2 | GGOEAXXX0808 | 10 |
6 | 7211254729136975568-1 | GGOEAXXX0808 | 96090 |
7 | 66777488032155805-1 | GGOEAXXX0808 | 3893 |
8 | 0804312527321649470-1 | GGOEAXXX0808 | 7539 |
9 | 2965429397557124425-1 | GGOEAXXX0808 | 21776 |
10 | 8459600677575627508-1 | GGOEAXXX0808 | 6265 |
Flex Slots のスロットの購入
BigQuery のオンデマンド料金をご利用の場合、行列分解モデルをトレーニングするには、Flex Slots のスロットを購入してから、予約と割り当てを作成する必要があります。BigQuery で定額料金を利用している場合は、このセクションをスキップしてモデルの作成、トレーニング、デプロイに進みます。
Flex Slots のスロットを購入するには、bigquery.reservations.create
権限を含む IAM ロールが必要です。この権限はプロジェクト オーナーに付与され、BigQuery 管理者(roles/bigquery.admin
)と BigQuery リソース管理者(roles/bigquery.resourceAdmin
)の IAM ロールに含まれています。
Google Cloud コンソールで [BigQuery] ページに移動します。
[容量管理] をクリックし、[予約] をクリックします。
API を有効にするために [BigQuery Reservation API] ページにリダイレクトされた場合は、[有効にする] をクリックします。それ以外の場合は、次の手順に進みます。
[予約] タブで、[スロットの購入] をクリックします。
[スロットの購入] ページで、次の操作を行います。
- [コミット期間] リストで [Flex] を選択します。
- [ロケーション] リストで、[us(米国の複数のリージョン)] を選択します。
- [スロット数] リストで、[500] を選択します。
- [次へ] をクリックします。
[注文確認] フィールドに「
CONFIRM
」と入力し、[購入] をクリックします。
[スロット コミットメントを表示] をクリックします。
容量がプロビジョニングされるまでに、最大で 20 分間かかります。容量がプロビジョニングされると、スロット コミットメントの [ステータス] 列に
が表示されます。[予約を作成] をクリックして、次のオプションを設定します。
- [予約名] に「
model
」と入力します。 - [ロケーション] リストで、[us(米国の複数のリージョン)] を選択します。
- [スロット数] に「
500
」と入力します。 - [保存] をクリックします。[予約] ページに戻ります。
- [予約名] に「
model
予約の横にある [アクション] 列で [割り当ての作成] を選択します。[組織、フォルダ、プロジェクトを選択] で、[参照] をクリックします。
このチュートリアルを実施するプロジェクトの名前を入力するか、リストから選択します。
[選択]をクリックし、次に[作成]をクリックします。
モデルの作成、トレーニング、デプロイ
行列分解モデルを作成、トレーニング、デプロイするには、次の手順を行います。
- Google Cloud コンソール の BigQuery ページで、 [クエリを新規作成] をクリックします。
CREATE MODEL
SQL ステートメントを実行します。CREATE OR REPLACE MODEL bqml.retail_recommender` OPTIONS(model_type='matrix_factorization', user_col='userId', item_col='itemId', rating_col='session_duration', feedback_type='implicit' ) AS SELECT * FROM bqml.aggregate_web_stats;
トレーニングが完了すると、トレーニング済みのモデルが bqml.retail_recommender
モデルとしてデプロイされます。
トレーニング済みモデルを使用して予測を行う
このセクションでは、デプロイされた bqml.retail_recommender
モデルから予測を取得するために、ML.RECOMMEND
SQL 関数を使用します。
Google Cloud コンソール の BigQuery ページでクエリを作成し、指定された userId の上位 5 件のレコメンデーションを表す予測を取得します。
DECLARE MY_USERID STRING DEFAULT "0824461277962362623-1"; SELECT * FROM ML.RECOMMEND(MODEL `bqml.retail_recommender`, (SELECT MY_USERID as userID) ) ORDER BY predicted_session_duration_confidence DESC LIMIT 5;
出力には、予測されたセッション継続時間の信頼度(高いほど望ましい)、関連するユーザー ID、ユーザーが閲覧したアイテムのID の行が表示されます。出力は次のようになります。
行 predicted_session_duration_confidence userId itemId 1 29011.10454702254 0824461277962362623-1 GGOEGAAX0574 2 28212.99840462358 0824461277962362623-1 GGOEGDHQ015399 3 28126.79442866013 0824461277962362623-1 GGOEGETR014599 4 27303.60852083874 0824461277962362623-1 GGOEGAAX0338 5 25692.370609851147 0824461277962362623-1 GGOEGEFR024199 すべてのユーザーについて上位 5 件の予測を取得するには、次の SQL ステートメントを実行します。このステートメントでは多数の行が生成されるため、出力はテーブルに書き込まれます。その後、最初の 10 個のレコードが取得され、データの例が表示されます。
-- Create output table of top 5 predictions CREATE OR REPLACE TABLE bqml.prod_recommendations AS ( WITH predictions AS ( SELECT userId, ARRAY_AGG(STRUCT(itemId, predicted_session_duration_confidence) ORDER BY predicted_session_duration_confidence DESC LIMIT 5) as recommended FROM ML.RECOMMEND(MODEL bqml.retail_recommender) GROUP BY userId ) SELECT userId, itemId, predicted_session_duration_confidence FROM predictions p, UNNEST(recommended) ); -- Show table SELECT * FROM bqml.prod_recommendations ORDER BY userId LIMIT 10;
出力には、複数のユーザー ID、ユーザーが閲覧した商品アイテム ID、予測されるセッション継続時間の信頼度が表示されます。出力は次のようになります。
行 userId itemId predicted_session_duration_confidence 1 000170187170673177-6 GGOEGDHQ015399 15931.156936770309 2 000170187170673177-6 GGOEGAAX0574 20178.608474922632 3 000170187170673177-6 GGOEGAAX0338 20247.337545389437 4 000170187170673177-6 GGOEGETR014599 15524.355852692066 5 000170187170673177-6 GGOEGEFR024199 16443.307099088597 6 000338059556124978-1 GGOEGAAX0338 18143.067737280064 7 000338059556124978-1 GGOEGAAX0279 16531.718889063464 8 000338059556124978-1 GGOEGAAX0574 20916.672241880347 9 000338059556124978-1 GGOEGETR014599 16155.674211782945 10 000338059556124978-1 GGOEGEFR024199 18417.17554202264
Cloud Spanner のデータを設定する
このチュートリアルの以降のセクションでは、gcloud CLI と Maven を使用します。両方のツールのコマンドを Cloud Shell から実行します。ツールを使用するためにインストールは必要ありません。
Cloud Shell で、Cloud Spanner データベースにデータを設定するための プロダクト レコメンデーション API プロキシ バンドルとスクリプトを含むプロダクト レコメンデーション GitHut リポジトリのクローンを作成します。
git clone https://github.com/apigee/devrel/tree/main/references/product-recommendations cd product-recommendations-v1
datareader
サービス アカウントを作成し、IAM ロールを割り当てます。サービス アカウントは、API プロキシから BigQuery と Cloud Spanner データベースのデータにアクセスするために使用されます。gcloud iam service-accounts create datareader --display-name="Data reader for BigQuery and Spanner Demo" gcloud iam service-accounts list | grep datareader gcloud iam service-accounts create datareader --display-name="Data reader for Apigee, BigQuery, and Spanner Demo" gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/spanner.databaseUser" --quiet gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/spanner.databaseReader" --quiet gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/bigquery.dataViewer" --quiet gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA" --role="roles/bigquery.user" --quiet
環境変数を設定します。
# For ApigeeX export PROJECT_ID=APIGEEX_PROJECT export ORG=$PROJECT_ID export ENV=eval export ENVGROUP_HOSTNAME=API_DOMAIN_NAME export SA=datareader@$PROJECT_ID.iam.gserviceaccount.com # For Cloud Spanner export SPANNER_INSTANCE=product-catalog export SPANNER_DATABASE=product-catalog-v1 export REGION=regional-us-east1
以下を置き換えます。
APIGEEX_PROJECT
: Apigee X プロジェクトの名前。API_DOMAIN_NAME
: Apigee X UI の [Admin] > [Environments] > [Groups] ページで構成されたホスト名。
Google Cloud コンソール の BigQuery ページで
prod_recommendations
テーブルを選択し、[プレビュー] タブをクリックして結果を表示します。- 任意の
userId
値をコピーします。 Cloud Shell で、環境変数を設定します。
export CUSTOMER_USERID=USER_ID
USER_ID
は、前のステップでコピーしたuserId
値に置き換えます。
- 任意の
Cloud Shell で、指定された
CUSTOMER_USERID
値に対してオーダーされた商品のレコメンデーションの結果を表示します。bq query --nouse_legacy_sql \ "SELECT * FROM \`$PROJECT_ID.bqml.prod_recommendations\` AS A where A.userid = \"$CUSTOMER_USERID\"" \ ORDER BY A.predicted_session_duration_confidence DESC
出力には、個々のユーザー ID、ユーザーが閲覧した商品アイテム ID、予測されるセッション継続時間の信頼度が表示されます。出力は次のようになります。
+-----------------------+----------------+--------------------------------------------+ | userId | itemId | predicted_session_duration_confidence | +-----------------------+----------------+--------------------------------------------+ | 6929470170340317899-1 | GGOEGAAX0037 | 40161.10446942589 | | 6929470170340317899-1 | GGOEYDHJ056099 | 27642.28480729123 | | 6929470170340317899-1 | GGOEGAAX0351 | 27204.111219270915 | | 6929470170340317899-1 | GGOEGDWC020199 | 25863.861349754334 | | 6929470170340317899-1 | GGOEGAAX0318 | 24585.509088154067 | +-----------------------+----------------+--------------------------------------------+
Cloud Spanner のデータベースを作成し、商品カタログデータをインポートする
Cloud Shell で、指定されたリージョンに Cloud Spanner インスタンスを作成して商品カタログ データベースを作成し、データをインポートします。
./setup_spanner.sh
このスクリプトは、
CUSTOMER_USERID
環境変数を使用して、作成されたエントリを表示します。Cloud Spanner 商品カタログには、特定のユーザーの BigQuery トレーニング ステップで使用したアイテムのみが含まれています。したがって、Cloud Spanner データベースで商品カタログデータを作成した後、
CUSTOMER_USERID
環境変数を変更する場合は、setup_spanner.sh
シェル スクリプトを再実行してデータを再入力する必要があります。Cloud Spanner データベース内のデータを確認します。
gcloud spanner databases execute-sql $SPANNER_DATABASE --sql='SELECT * FROM products'
出力には、商品 ID と、Spanner の商品カタログ(価格や画像のパスなど)の記述情報が表示されます。出力は次のようになります。
productid name description price discount image GGOEGAAX0037 Aviator Sunglasses The ultimate sunglasses 42.42 0 products_Images/sunglasses.jpg GGOEGAAX0318 Bamboo glass jar Bamboo glass jar 19.99 0 products_Images/bamboo-glass-jar.jpg GGOEGAAX0351 Loafers Most comfortable loafers 38.99 0 products_Images/loafers.jpg GGOEGDWC020199 Hair dryer Hottest hair dryer 84.99 0 products_Images/hairdryer.jpg GGOEYDHJ056099 Coffee Mug Best Coffee Mug 4.2 0 products_Images/mug.jpg
Apigee プロキシをデプロイする
このセクションでは、Maven コマンドを実行して次のリソースを作成します。
product-recommendations-v1
という名前のプロキシproduct-recommendations-v1-$ENV
という名前の API プロダクトdemo@any.com
という名前のアプリ デベロッパー ユーザーproduct-recommendations-v1-app-$ENV
という名前のアプリ
リソースを作成するには、Maven から GitHub リポジトリの pom.xml
ファイルを使用します。このファイルには、インストール手順が含まれています。
pom.xml
ファイルのプロファイル セクションには、apigee.org
、apigee.env
、api.northbound.domain
、gcp.projectid
、googletoken.email
、api.userid
の値が含まれています。これらの値はプロジェクトによって異なり、コマンドラインを使用して設定できます。次の例は、値を含む pom.xml
ファイルのセクションを示しています。
<profile>
<id>eval</id>
<properties>
<apigee.profile>eval</apigee.profile>
<apigee.org>${apigeeOrg}</apigee.org>
<apigee.env>${apigeeEnv}</apigee.env>
<api.northbound.domain>${envGroupHostname}</api.northbound.domain>
<gcp.projectid>${gcpProjectId}</gcp.projectid>
<apigee.googletoken.email>${googleTokenEmail}</apigee.googletoken.email>
<api.userid>${customerUserId}</api.userid>
</properties>
</profile>
これらの値は、早い段階で、Cloud Spanner データを設定するときに設定します。
プロキシをデプロイするには、次のようにします。
Cloud Shell で、プロキシと関連アーティファクトをインストールして API をテストします。
mvn -P eval clean install -Dbearer=$(gcloud auth print-access-token) \ -DapigeeOrg=$ORG \ -DapigeeEnv=$ENV \ -DenvGroupHostname=$ENVGROUP_HOSTNAME \ -DgcpProjectId=$PROJECT_ID \ -DgoogleTokenEmail=$SA \ -DcustomerUserId=$CUSTOMER_USERID
出力には、インストール手順の実行と統合 API 呼び出しの結果が表示されます。1 つは
/openapi
エンドポイントへの呼び出し、もう 1 つは/products
エンドポイントへの呼び出しです。テスト結果により、API プロキシがインストール、デプロイされ、動作していることを確認します。出力には、以降の API テスト呼び出しに使用できるアプリの認証情報も表示されます。
Recommendations API をテストする
Cloud Shell で、Apigee API に対して curl 呼び出しを実行してアプリの API キーの環境変数を設定します。
APIKEY=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://apigee.googleapis.com/v1/organizations/$ORG/developers/demo@any.com/apps/product-recommendations-v1-app-$ENV \ | jq -r .credentials[0].consumerKey)
APIKEY
の値をメモします。この情報は、後で AppSheet アプリを作成する(オプション)場合に必要です。API プロキシのインストール時に指定した
CUSTOMER_USERID
値の結果を取得するには、テスト呼び出しを行います。curl -s https://$ENVGROUP_HOSTNAME/v1/recommendations/products \ -H "x-apikey:$APIKEY" | jq
OpenAPI 仕様(OAS)で定義されている API では、リクエストで次のヘッダーを指定できます。
x-apikey
: セキュリティ スキームのアプリ コンシューマ キー。x-userid
: リクエストを行っているユーザー ID。指定しない場合、この値はデフォルトでプロキシで構成されているCUSTOMER_USERID
値になります。cache-control
: レスポンスをキャッシュに保存する時間。このヘッダーを使用すると、300 秒間レスポンスをキャッシュに保存するか、no-cache
を指定してオーバーライドできます。
CUSTOMER_USERID
値の変更や、キャッシュ制御を行うには、次の呼び出し例のようにヘッダー値を設定します。
curl -s "https://$ENVGROUP_HOSTNAME/v1/recommendations/products" \
-H "x-apikey:$APIKEY" \
-H "x-userid:$CUSTOMER_USERID" \
-H "Cache-Control:no-cache" | jq
呼び出し例に対するレスポンスは次のようになります。
{
"products": [
{
"productid": "GGOEGAAX0037",
"name": "Aviator Sunglasses",
"description": "The ultimate sunglasses",
"price": "42.42",
"image": "products_Images/sunglasses.jpg"
},
{
"productid": "GGOEYDHJ056099",
"name": "Coffee Mug",
"description": "Best Coffee Mug",
"price": "4.2",
"image": "products_Images/mug.jpg"
},
{
"productid": "GGOEGAAX0351",
"name": "Loafers",
"description": "Most comfortable loafers",
"price": "38.99",
"image": "products_Images/loafers.jpg"
},
{
"productid": "GGOEGDWC020199",
"name": "Hairdryer",
"description": "Hotest hairdryer",
"price": "84.99",
"image": "products_Images/hairdryer.jpg"
},
{
"productid": "GGOEGAAX0318",
"name": "Bamboo glass jar",
"description": "Bamboo glass jar",
"price": "19.99",
"image": "products_Images/bamboo-glass-jar.jpg"
}
]
}
Apigee ポリシー
以降のセクションに示す Apigee ポリシーは、このチュートリアルの API プロキシ バンドルで使用されます。
Pre-flow
- SpikeArrest
- バックエンド BigQuery サービスをトラフィックの急増から保護します。
- 割り当て
- コンシューマ アプリケーションとデベロッパーに基づいて API リクエストを調整します。スロットル制限は API プロダクトで構成されます。
- ResponseCache - uri
- サービスからのレスポンスをキャッシュに保存することで、BigQuery データ ウェアハウスへのリクエストを減らします。
Products-flow
- AssignMessage - クエリ リクエストの作成
- BigQuery データセットから商品のレコメンデーションのリストを取得するための SQL クエリで HTTP リクエストを設定します。
- JavaScript と ExtractVariable ポリシー
- BigQuery サービスからデータをフォーマットし、よりユーザー フレンドリーなレスポンス メッセージを作成します。
- LookupCache - Cloud Spanner セッション
- Apigee キャッシュから Cloud Spanner データベースのセッション ID を検索します。
- ServiceCallout - Cloud Spanner セッション
- Apigee Spanner キャッシュにセッション ID がない場合、または ID の有効期限が切れている場合は、Cloud Spanner サービスへのリクエストを行い、データベース セッションを作成します。
- PopulateCache - Cloud Spanner セッション
- Cloud Spanner のセッション ID を Apigee キャッシュに入力します。
- ServiceCallout - 商品カタログ検索
- Cloud Spanner 商品カタログ データベースから商品の詳細を取得します。
- JavaScript - 商品データのフォーマット
- 商品カタログ データベースのデータをフォーマットすることで、OAS に準拠する API レスポンス メッセージを作成します。
OpenAPI-flow
- AssignMessage - OAS JSON
- API の OAS JSON レスポンスを設定します。
省略可: Apigee をデータソースとして使用して AppSheet アプリを作成する
e コマースサイトのエンドユーザーとビジネス ユーザーにおすすめの商品情報を表示するには、このセクションの説明に従って AppSheet アプリを作成します。
AppSheet アカウントを作成する。
メールアドレスを使用して AppSheet アカウントを作成します。
データソースを作成する
AppSheet では、API プロキシを新しいアプリのデータソースとして使用します。データソースを作成するには、次のようにします。
- AppSheet にログインする
- [マイアカウント] ページで、[ソース] > [新しいデータソース] をクリックします。
- [Add a new data source] ダイアログで、プロキシ
product-recommendations-v1
の名前を入力し、[Apigee] をクリックします。 [Add Apigee API connection information] ダイアログで、次のオプションを設定します。
- [手動] を選択します。
- [Apigee API Key] フィールドに、プロキシのテストに使用したアプリの API キーを入力します。API キーをお持ちでない場合は、
echo $APIKEY.
を実行して Cloud Shell で取得します。 [Apigee API Base Path] フィールドに、次のように入力します。
https://ENVGROUP_HOSTNAME/v1/recommendations
ENVGROUP_HOSTNAME は、次のように置き換えます。Apigee X UI for Admin で構成されたホスト名を使用する>環境>グループ。
[API リソースパス] フィールドに、パス接尾辞
products
を入力します。[テスト] をクリックします。
テストが正常に完了したら、[アクセスを承認] をクリックします。
アクセスを承認すると、AppSheet コンソールに product-recommendations-v1 の新しいタイルが表示されます。
アプリを作成する
- AppSheet の products-template app ページに移動します。
- [コピーしてカスタマイズ] をクリックします。[Clone your App] ダイアログが表示されます。
- [App name] フィールドに、プロキシの名前(
product-recommendations-v1
)を入力し、[Copy app] をクリックします。アプリが作成されるまで待ちます。 - [Welcome to your app] ページで、[Customize app] をクリックします。デフォルトでは、アプリは Google スプレッドシートのサンプル データソースを使用します。
前に作成した Apigee データソースと一致するようにデータソースを変更します。
- [+ New Table] をクリックし、[product recommendations v1] をクリックします。
- [Choose a Sheet/Table] ダイアログで [products] を選択します。
- [新しいテーブルの作成] ダイアログで、[読み取り専用] をクリックし、[このテーブルを追加] をクリックします。
アプリが products 2 タブと別のデータビューで表示されます。新しいデータビューでは、各項目の説明と価格が異なります。アイテムの順序は予測の順序と同じではないことに注意してください。
AppSheet のデフォルトの並べ替えを削除して、データソースからアイテムが返される順序を変更します。
- サイド ナビゲーション メニューで、[UX] を選択します。
- [Primary View]セクション で [products 2] を選択します。
- [表示オプション] セクションで、[並べ替え] の横にある [名前、昇順] のエントリを削除します。AppSheet に表示される順序が API 呼び出しの結果と同じになり、レスポンスの最後のアイテムが一番下になったことを確認します。
アプリを保存します。
オプションで、元の商品テーブルと UX を削除し、「商品 2」のテーブルとビューの名前を「商品のおすすめ」に変更することもできます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
個々のリソースの削除
繰り返し費用が発生しないようにするには、BigQuery Flex Slots のスロット の予約、BigQuery データセット、AI Platform モデルを削除します。
BigQuery Flex Slots のスロット の予約を削除する
- Google Cloud コンソール の BigQuery ページで [容量管理] を選択し、[予約] タブをクリックします。
- model エントリを開きます。
- 予約の横にある [アクションを表示] をクリックし、[削除] をクリックします。
- モデル エントリの横にある [アクションを表示] をクリックし、[削除] をクリックします。
Cloud Shell で、デプロイ、プロキシ、関連するアーティファクトを削除します。
mvn -P eval process-resources -Dbearer=$(gcloud auth print-access-token) \ -DapigeeOrg=$ORG -DapigeeEnv=$ENV -Dskip.integration=true \ apigee-config:apps apigee-config:apiproducts apigee-config:developers -Dapigee.config.options=delete \ apigee-enterprise:deploy -Dapigee.options=clean
Spanner リソースを削除します。
./cleanup_spanner.sh
BigQuery データセットの削除
- Google Cloud コンソール の BigQuery ページの [リソース] セクションで、このチュートリアルを完了したプロジェクトを展開します。
- bqml データセットを選択し、[データセットを削除] をクリックします。
- 上に重なったウィンドウで、「
bqml
」と入力して [削除] をクリックします。
AI Platform モデルの削除
Google Cloud コンソール で、[AI Platform モデル] ページに移動します。
モデルリストで、rpm_bqml_model をクリックします。
[モデルの詳細] ページで、V_1(デフォルト)バージョンのチェックボックスをオンにします。
[その他] をクリックし、[削除] をクリックします。
バージョンの削除が完了したら、[戻る] をクリックしてモデルの一覧に戻ります。
rpm_bqml_model モデルのチェックボックスをオンにします。
[その他] をクリックして、[削除] をクリックします。
Cloud Shell でサービス アカウントを作成します。
gcloud iam service-accounts delete $SA
次のステップ
- Apigee API プロキシから Google Cloud サービスを呼び出す方法を学習する。
- Cloud アーキテクチャ センターで、リファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。