このドキュメントでは、Apigee、BigQuery ML、Spanner を使用して、顧客の購入傾向を予測するスマート API で説明するるアーキテクチャを構築する方法について説明します。このアーキテクチャでは、これらのプロダクトを使用して、お客様が購入を行う可能性を予測できる API をデプロイします。
この手順は、オムニチャネルや e コマースのプラットフォームを通じてよりパーソナライズされたエクスペリエンスを提供することで収益の向上を目指す、API デベロッパーとデータ スペシャリストを対象としています。対象読者が Apigee、BigQuery ML、Spanner、Google Cloud CLI、Apache Maven に精通していることを前提としています。
アーキテクチャ
次の図は、このソリューションで使用されるアーキテクチャとプロセスを示しています。
詳細については、Apigee、BigQuery ML、Spanner を使用してお客様の購入傾向を予測するスマート API をご覧ください。
目標
- BigQuery で顧客の購入傾向データセットを作成します。
- プロダクト カタログのデータを Spanner データベースにインポートします。
- Apigee API プロキシをインポートしてデプロイします。
- BigQuery から取得したお客様の購入傾向データと、Spanner データベースのプロダクト カタログおよび価格情報を統合します。
- プロダクトのレコメンデーションの集計ビューを作成します。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- BigQuery と BigQuery ML Flex Slots のスロット
- Spanner
- Apigee
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
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 API を有効にします。
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
-
Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。
- 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:EMAIL_ADDRESS" --role=ROLE
PROJECT_ID
は、実際のプロジェクト ID に置き換えます。EMAIL_ADDRESS
は実際のメールアドレスに置き換えます。ROLE
は、個々のロールに置き換えます。
- Apigee アカウントをまだお持ちでない場合は、Apigee を設定して Apigee インスタンスをプロビジョニングします。プロビジョニングには 1 時間ほどかかることがあります。
- 外部アクセスを許可するように Apigee 組織を構成します。
この手順の完了後にデプロイを維持しないことにした場合は、作成したリソースを削除すれば、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
BigQuery ML を使用して e コマース レコメンデーション データセットを作成する
このセクションでは、BigQuery ML で標準 SQL クエリを使用して ML モデルを作成し、BigQuery の顧客データでトレーニングを行ってからデプロイします。
使用する顧客データは、BigQuery で一般公開されている Google アナリティクス サンプル データセットからのものです。このデータセットは、Google ブランドの商品を販売する実在の e コマースストア、Google Merchandise Store の 12 か月間(2016 年 8 月から 2017 年 8 月)の難読化されたアナリティクス 360 データを提供します。
データのエクスポート、モデルのトレーニング、デプロイのパイプラインの作成などは必要ありません。BigQuery は、必要なコンピューティング リソースを処理するように自動スケーリングします。
このソリューション用に作成する ML モデルでは、行列分解を使用します。これは、ユーザーの好みのデータに基づいてレコメンデーション システムを作成する場合の、一般的で効果的な方法です。
サンプルデータの処理
行列分解を使用する場合は、明示的または暗黙的なユーザー フィードバックを評価し、お客様の好みを判断します。明示的なフィードバックを使用するには、データセットに 1~5 の評価など、商品に対するユーザーの好みに関するデータが含まれている必要があります。明示的なフィードバックがない場合は、他の行動指標を使用して、お客様の好みを推測します。たとえば、ユーザーが商品の詳細ページを閲覧した合計時間を調べます。このソリューションでは、セッション継続時間データを使用してお客様の好みを推測します。
行列分解モデルをトレーニングするには、お客様、評価対象のアイテム、暗黙的な評価を識別する列を含むテーブルが必要です。このセクションでは、userid
、itemId
、session_duration
列を使用してそのようなテーブルを作成します。session_duration
列には、該当アイテムの商品ページで費やされたユーザーのセッション継続時間が含まれます。
Analytics サンプル データセットのデータを使用してテーブルを作成する手順は次のとおりです。
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
Spanner データを設定する
以降のセクションでは、gcloud CLI と Maven を使用します。両方のツールのコマンドを Cloud Shell から実行します。これらのツールを使用するためにインストールは必要ありません。
Cloud Shell で、Spanner データベースにデータを設定するためのプロダクト レコメンデーション API プロキシ バンドルとスクリプトを含むプロダクト レコメンデーション GitHub リポジトリのクローンを作成します。
git clone https://github.com/apigee/devrel/tree/main/references/product-recommendations cd product-recommendations-v1
datareader
サービス アカウントを作成し、IAM ロールを割り当てます。サービス アカウントは、API プロキシから BigQuery と 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 Apigee export PROJECT_ID=APIGEE_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
次のように置き換えます。
APIGEE_PROJECT
: Apigee プロジェクトの名前。API_DOMAIN_NAME
: Apigee 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 | +-----------------------+----------------+--------------------------------------------+
Spanner のデータベースを作成し、プロダクト カタログデータをインポートする
Cloud Shell で、指定されたリージョンに Spanner インスタンスを作成してプロダクト カタログ データベースを作成し、データをインポートします。
./setup_spanner.sh
このスクリプトは、
CUSTOMER_USERID
環境変数を使用して、作成されたエントリを表示します。Spanner プロダクト カタログには、特定のユーザーの BigQuery トレーニング ステップで使用したアイテムのみが含まれています。そのため、Spanner データベースにプロダクト カタログデータを作成した後に
CUSTOMER_USERID
環境変数を変更した場合は、setup_spanner.sh
シェル スクリプトを再実行してデータを再設定する必要があります。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
ファイルの profile セクションには、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>
これらの値は、早い段階で、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 呼び出しの結果が表示されます。
/openapi
エンドポイントに対する呼び出しと/products
エンドポイントに対する呼び出しが 1 つずつあります。テスト結果では、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 サービスをトラフィックの急増から保護します。
- Quota
- コンシューマ アプリケーションとデベロッパーに基づいて API リクエストをスロットリングします。スロットル上限は API プロダクトで構成されます。
- ResponseCache - uri
- サービスからのレスポンスをキャッシュに保存することで、BigQuery データ ウェアハウスへのリクエストを減らします。
Products-flow
- AssignMessage - クエリ リクエストの作成
- SQL クエリを使用して、BigQuery データセットから商品のレコメンデーション リストを取得するための HTTP リクエストを設定します。
- JavaScript ポリシーと ExtractVariable ポリシー
- BigQuery サービスからのデータをフォーマットし、よりユーザー フレンドリーなレスポンス メッセージを作成します。
- LookupCache - Spanner セッション
- Apigee キャッシュから Spanner データベース セッション ID を検索します。
- ServiceCallout - Spanner セッション
- Apigee キャッシュにセッション ID がない場合や ID が期限切れの場合は、Spanner サービスに対してリクエストを行い、データベース セッションを作成します。
- PopulateCache - Spanner セッション
- Spanner セッション ID を Apigee キャッシュに入力します。
- ServiceCallout - プロダクト カタログの検索
- Spanner プロダクト カタログ データベースからプロダクトの詳細を取得します。
- JavaScript - プロダクト データのフォーマット
- 商品カタログ データベースのデータをフォーマットして、OAS に準拠した API レスポンス メッセージを作成します。
OpenAPI-flow
- AssignMessage - OAS JSON
- API の OAS JSON レスポンスを設定します。
省略可: Apigee をデータソースとして使用して AppSheet アプリを作成する
e コマース ウェブサイトのエンドユーザーとビジネス ユーザーに対して商品のレコメンデーションを表示するには、このセクションで説明するように AppSheet アプリを作成します。
AppSheet アカウントを作成する
メールアドレスを使用して AppSheet アカウントを作成します。
データソースを作成する
AppSheet は、新しいアプリのデータソースとして API プロキシを使用します。データソースを作成する手順は次のとおりです。
- AppSheet にログインします。
- [My Account] ページで、[Sources] > [New Data Source] をクリックします。
- [Add a new data source] ダイアログで、プロキシの名前(
product-recommendations-v1
)を入力し、[Apigee] をクリックします。 [Add Apigee API connection information] ダイアログで、次のオプションを設定します。
- [Manual] を選択します。
- [Apigee API Key] フィールドに、プロキシのテストに使用したアプリの API キーを入力します。API キーがない場合は、Cloud Shell で
echo $APIKEY.
を実行してキーを取得します。 [Apigee API Base Path] フィールドに、次のように入力します。
https://ENVGROUP_HOSTNAME/v1/recommendations
ENVGROUP_HOSTNAME は、Apigee UI の [Admin] > [Environments] > [Groups] で構成されたホスト名に置き換えます。
[API Resource Paths] フィールドに、パスの接尾辞「
products
」を入力します。[TEST] をクリックします。
テストが正常に完了したら、[Authorize Access] をクリックします。
アクセスを承認すると、AppSheet コンソールに product-recommendations-v1 の新しいタイルが表示されます。
アプリを作成する
- AppSheet の products-template app ページに移動します。
- [Copy and Customize] をクリックします。[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] を選択します。
- [Create a new table] ダイアログで [Read-Only] をクリックしてから、[Add This Table] をクリックします。
アプリが [products 2] タブと別のデータビューに表示されます。新しいデータビューでは、各アイテムの説明と価格の値が異なります。アイテムの順序は予測の順序と同じではありません。
AppSheet のデフォルトの並べ替えを解除して、データソースから返されるアイテムの順序を変更します。
- サイド ナビゲーション メニューで [UX] を選択します。
- [Primary View] セクションで [products 2] を選択します。
- [View Options] セクションで、[Sort by] の横にある [name, Ascending] のエントリを削除します。AppSheet に表示される順序が API 呼び出しの結果と同じになり、レスポンスの最後のアイテムが一番下になったことを確認します。
アプリを保存します。
オプションで、元の商品テーブルと UX を削除し、「products 2」のテーブルとビューの名前を「Product Recommendations」に変更することもできます。
クリーンアップ
この手順で使用したリソースについて、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 アーキテクチャ センターをご確認ください。