ローカルでウェブの B&A をエンドツーエンドでテストする

1. はじめに

入札およびオークション サービス(B&A)は、購入者と販売者が Protected Audience オークションを実施するための 4 つのサービスで構成されています。

購入者のスタック:

  • 購入者のフロントエンド サービス
  • 入札サービス

販売者のスタック:

  • 販売者のフロントエンド サービス
  • オークション サービス

この Codelab では、ローカル環境でエンドツーエンドの設定とテストを行います。チュートリアルの所要時間は、最初のサービスのビルド時間を除いて約 1 時間です。

購入側のコードまたは販売側のコードのみを扱う場合でも、ローカル環境でエンドツーエンドのフローを設定すると、購入側と販売側のスタックがどのように連携するかをより深く理解できます。両方のスタックを設定しておけば、後で他社の購入者または販売者のスタックと統合する際に安心できます。サービスをローカルでテストすると、開発費用も削減できます。

この Codelab では、B&A ローカル テストアプリをチュートリアル コンパニオンとして使用します。

コンパニオンのローカル テストアプリには、B&A オークションで使用されるさまざまな購入者と販売者のリソースがホストされています。また、http://localhost:3000 には、さまざまなオークション構成をシミュレートできる UI も用意されています。

2. 環境設定

2.1 Linux マシンを準備する

ローカルの Linux マシンを使用するか、任意のクラウド プロバイダの Linux VM をプロビジョニングします。ビルド時間を短縮するには、少なくとも 16 コア、できれば 32 コア以上を推奨します。

このマシンの http://localhost:3000 から HTML ページを読み込むことに注意してください。VM に GUI がない場合は、ローカルマシンからポート 3000 にアクセスして接続できるようにします。

2.2 Docker をインストールする

Docker を使用して、サービスとローカル テスト アプリケーションを実行します。

便利なスクリプトを使用して、テスト環境に Docker をインストールします。

# Install Docker
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh

# Set up sudo-less Docker
> sudo groupadd docker
> sudo usermod -aG docker $USER
> newgrp docker

# Test
> docker run hello-world

警告: sudo を使用しない設定では、Docker グループがユーザーに root レベルの権限を付与します。詳細については、sudo を使用しない Docker ガイドをご覧ください。

2.3 コンパニオンのローカル テストアプリを起動する

コンパニオン アプリには、モック入札/スコアリング スクリプトやモック K/V BYOS エンドポイントなどのリソースが用意されています。リソースをサービスに読み込むことができるように、B&A サービスを実行する前にアプリを起動する必要があります。

ローカル テストアプリ リポジトリを pull ダウンします。

git clone https://github.com/privacysandbox/bidding-auction-local-testing-app.git

リポジトリのルートから設定スクリプトを実行します。

./setup

設定スクリプトは、ba-dev Docker ネットワークを作成し、SSL 証明書を生成し、テストアプリ イメージをビルドします。

ビルドが成功したら、起動スクリプトを実行します。

./start

3. B&A をローカルでビルドして実行する

3.1 B&A サービスをプルダウンする

同じマシンで 2 セットの B&A サービスを実行するため、リポジトリを 2 つの異なるフォルダに pull ダウンします。

セット A:

B&A リポジトリを pull します。

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-a

セット B

B&A リポジトリを pull します。

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-b
`

3.2 サービスをビルドする

各 B&A フォルダのルートフォルダから、次のコマンドを実行して 4 つのサービスをすべてビルドします。

production/packaging/build_and_test_all_in_docker \
  --service-path bidding_service \
  --service-path auction_service \
  --service-path buyer_frontend_service \
  --service-path seller_frontend_service \
  --platform gcp \
  --instance local \
  --no-precommit \
  --no-tests \
  --build-flavor non_prod \
  --gcp-skip-image-upload

上記のコマンドを実行すると、4 つのサービスの Google Cloud Platform(gcp)用開発ビルド(non_prod)の local インスタンスがビルドされます。必要に応じて、--platform フラグを任意のクラウド プロバイダに更新します。ビルドフラグの詳細については、build_and_test_all_docker ファイルをご覧ください。

64 コアのマシンを使用している場合、最初のビルドに 2 時間かかることがあります。ビルド時間はコア数に比例して増加します。32 コアのマシンを使用している場合は、4 時間かかることがあります。16 コアのマシンを使用している場合は、8 時間かかることがあります。

以降のビルドではキャッシュが使用され、各ビルドに 5 ~ 20 分ほどかかります。

関連する xkcd コミック:

2 人のプログラマーがオフィスでサボっているところをマネージャーが注意している様子。プログラマーはコードがコンパイル中だと言っており、マネージャーはそれを許可している。この漫画の作者はこのことをサボる正当な理由の 1 つと考えている

この Codelab の作成中に xkcd の Randall Munroe に会い、ここにこの漫画を追加したことを伝えました

3.3 サービスを実行する

テストでは、8 つのサービス(スタックごとに 4 つのサービス)を実行します。各コマンドは、ローカル テストアプリから提供されるリソースを使用するように設定されています。tmux などのウィンドウ マネージャーを使用することを強くおすすめします。

少なくとも 8 つのターミナル ウィンドウを開き、各セッションで次のコマンドを実行します。

入札スクリプトとスコアリング スクリプトはアプリによって提供されるため、ローカルテスト用アプリ サーバーはすでに別のプロセスで実行されている必要があります。

3.3.1 Set A コマンド

サービス

コマンド

DSP-X 入札サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.101 --network=ba-dev" \

BIDDING_JS_URL=https://192.168.84.100:5003/generate-bid.js \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

DSP-X BFE サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.102 --network=ba-dev" \

BUYER_KV_SERVER_ADDR=https://192.168.84.100:5003/kv \

BIDDING_SERVER_ADDR=192.168.84.101:50057 \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bfe

SSP-BA オークション サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.103 --network=ba-dev" \

AUCTION_JS_URL="https://192.168.84.100:6002/score-ad.js" \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_auction

SSP-BA SFE サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.104 --network=ba-dev" \

SELLER_ORIGIN_DOMAIN="https://localhost:6002" \

AUCTION_SERVER_ADDR="192.168.84.103:50061" \

KEY_VALUE_SIGNALS_ADDR="https://192.168.84.100:6002/kv" \

BUYER_SERVER_ADDRS_JSON='{"https://localhost:5003":{"url":"192.168.84.102:50051","cloudPlatform":"LOCAL"},"https://localhost:5004":{"url":"192.168.84.202:50051","cloudPlatform":"LOCAL"}}' \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_sfe

3.3.2 セット B コマンド

サービス

コマンド

DSP-X 入札サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.201 --network=ba-dev" \

BIDDING_JS_URL=https://192.168.84.100:5004/generate-bid.js \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

DSP-X BFE サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.202 --network=ba-dev" \

BUYER_KV_SERVER_ADDR=https://192.168.84.100:5004/kv \

BIDDING_SERVER_ADDR=192.168.84.201:50057 \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bfe

SSP-BA オークション サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.203 --network=ba-dev" \

AUCTION_JS_URL="https://192.168.84.100:6003/score-ad.js" \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_auction

SSP-BA SFE サービス

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.204 --network=ba-dev" \

SELLER_ORIGIN_DOMAIN="https://localhost:6003" \

AUCTION_SERVER_ADDR="192.168.84.203:50061" \

KEY_VALUE_SIGNALS_ADDR="https://192.168.84.100:6003/kv" \

BUYER_SERVER_ADDRS_JSON='{"https://localhost:5003":{"url":"192.168.84.102:50051","cloudPlatform":"LOCAL"},"https://localhost:5004":{"url":"192.168.84.202:50051","cloudPlatform":"LOCAL"}}' \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_sfe

3.3.2 ローカル起動スクリプトの環境変数

次の環境変数を使用して、起動時の動作を制御できます。

環境変数

対象

説明

DOCKER_RUN_ARGS_STRING

すべてのサービス

docker コマンドに設定するフラグ

SKIP_TLS_VERIFICATION

すべてのサービス

ローカルマシンでテストする場合は、curl の SSL ピア検証チェックに失敗する自己署名証明書を使用する必要があります。このフラグは、SSL ホスト名チェックとともにピア検証を無効にします。

デフォルトは false です。

PS_VERBOSITY

すべてのサービス

サービスログのレベル。レベルが高いほど、生成されるログが多くなります。0 が最低で、10 が最高です。デフォルトは 10 です。

BIDDING_PORT

入札サービス

入札サービスのポート。デフォルトは 50057 です

BIDDING_JS_URL

入札サービス

入札ロジックの URL

EGRESS_SCHEMA_URL

入札サービス

モデル トレーニングのデータ下り(外向き)

INFERENCE_ARGS

入札サービス

入札推論の引数

BFE_PORT

BFE サービス

BFE Service のポート。デフォルトは 50051 です

BUYER_KV_SERVER_ADDR

BFE サービス

購入者の BYOS K/V アドレス

BUYER_TKV_V2_SERVER_ADDR

BFE サービス

購入者の TEE K/V アドレス

BIDDING_SERVER_ADDR

BFE サービス

購入者の入札サービス住所

AUCTION_PORT

オークション サービス

オークション サービスのポート。デフォルトは 50061 です

AUCTION_JS_URL

オークション サービス

スコアリング ロジックの URL

BUYER_REPORT_WIN_URL

オークション サービス

購入者の落札レポートの URL

BUYER_REPORT_WIN_SCRIPT

オークション サービス

購入者の購入報告スクリプト

BUYER_PAS_REPORT_WIN_SCRIPT

オークション サービス

PAS の購入者の落札レポート スクリプト

SFE_PORT

SFE サービス

SFE サービスのポート。デフォルトは 50053 です

AUCTION_SERVER_ADDR

SFE サービス

販売者のオークション サービスの住所

KEY_VALUE_SIGNALS_ADDR

SFE サービス

販売者の BYOS K/V アドレス

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

SFE サービス

販売者の TEE K/V アドレス

SELLER_ORIGIN_DOMAIN

SFE サービス

販売者の所在地

BUYER_SERVER_ADDRS_JSON

SFE サービス

購入者の BFE 住所

4. コマンドラインから Secure Invoke でテストする

4.1 SFE テスト

B&A Services パッケージに含まれている Secure Invoke ツールを使用して、コマンドラインからサービスを直接呼び出すこともできます。

4.1.2 SFE SelectAd ペイロード

次の JSON リクエストには、SSP-BA の単一販売者の B&A オークション設定が入力されています。

{
  "auction_config": {
    "seller": "https://localhost:6002",
    "auction_signals": "{\"testKey\":\"someValue\"}",
    "seller_signals": "{\"testKey\":\"someValue\"}",
    "buyer_list": [
      "https://localhost:5003",
      "https://localhost:5004"
    ],
    "per_buyer_config": {
      "https://localhost:5003": { "buyer_signals": "{\"testKey\":\"someValue\"}" },
      "https://localhost:5004": { "buyer_signals": "{\"testKey\":\"someValue\"}" }
    }
  },
  "raw_protected_audience_input": {
    "publisher_name": "http://localhost:4001",
    "generation_id": "1210718540",
    "enable_debug_reporting": true,
    "raw_buyer_input": {
      "https://localhost:5003": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      },
      "https://localhost:5004": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      }
    }
  }
}

ファイルを Set A の B&A Services リポジトリのルートフォルダに sfe-test.json として保存します(B&A ビルド スクリプトは、リポジトリのルートフォルダにあるファイルを Docker イメージの /src/workspace フォルダにコピーします)。

4.1.2 Secure Invoke を使用して SFE を呼び出す

B&A Services リポジトリのルートフォルダから次のコマンドを実行します。

DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
  -- \
  -target_service=sfe \
  -input_file=/src/workspace/sfe-test.json \
  -host_addr=192.168.84.104:50053 \
  -client_ip=192.168.84.100 \
  -insecure=true

B&A スタックが正しく設定されていると、次の成功レスポンスが返されます。

{"adRenderUrl":"https://localhost:5004/ad.html","interestGroupName":"dsp-x-demo","interestGroupOwner":"https://localhost:5004","score":39,"bid":39,"biddingGroups":{"https://localhost:5003":{"index":[0]},"https://localhost:5004":{"index":[0]}}}

4.2 BFE テスト

4.2.1 BFE GetBids リクエスト

{
  "buyer_input": {
    "interest_groups": {
      "name": "dsp-x-demo",
      "ad_render_ids": ["1234"],
      "bidding_signals_keys": ["demo-key"],
      "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" }
    }
  },
  "auction_signals": "{\"testKey\":\"someValue\"}",
  "buyer_signals": "{\"testKey\":\"someValue\"}",
  "seller": "https://localhost:6002",
  "publisher_name": "http://localhost:4001",
  "enable_debug_reporting": true,
  "client_type": "CLIENT_TYPE_BROWSER"
}

ファイルを bfe-test.json として B&A Services リポジトリのルートフォルダに保存します。

4.2.2 セキュアな呼び出しで BFE を呼び出す

B&A Services リポジトリのルートフォルダから次のコマンドを実行します。

DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
  -- \
  -target_service=bfe \
  -input_file="/src/workspace/bfe-test.json" \
  -host_addr="192.168.84.102:50051" \
  -client_ip=192.168.84.100 \
  -insecure=true

B&A スタックが正しく設定されている場合、BFE は次のレスポンスを返します。

{"bids":[{"bid":6,"render":"https://localhost:5003/ad.html","interestGroupName":"dsp-x-demo"}],"updateInterestGroupList":{}}

4.3 SFE ログを確認する

ターミナルに移動して SFE ログを確認します。出力で注目すべきログをいくつか確認します。

4.3.1 SelectAd リクエストの暗号化されたペイロード

この SFE ログ出力には、navigator.getInterestGroupAdAuctionData() 呼び出しの暗号化されたペイロードが含まれています。このペイロードはブラウザによって生成され、タグから SAS に送信されます。SAS はそれを SFE に転送します。

I1210 21:20:47.266673      37 select_ad_reactor.cc:228] Protected auction ciphertext: AEAAIAABAAKg3OQSSLEBMR1MmJiwfOT8uef41iE+DQIvKUowsQvVcGbWZ+r17ff2r/iTbEnwqLPtpAxSTy77mi+cVV5cKjkKb4piaZnKiCDIMCyEvrQUD4+BG+HgrbUFhqiWPmQhNThvInMaHuYrXG7xushbRtvSPsVzEl6iBZcLZzD7W3CHMFK7bnJ+ufu52W6B7/8dOQ1gZW6SpwXMGNcrurTGoucbwbZRIPqCcbZk76J1gB69wrDYRo1wQ6jmBleLM36nulxbEj/sHhpQIgr895aKqEGQ3Fy+/HHPTO+zHphcX44YeF6mZ/I+WxZTDxCi1x27nI4yvzC8vI4a/giJN5XUlJZGb/fMrj3/Qly+gwJ8lbxdX+4GWTooDoS4MTtiBpJqh9wkIQ5XwfO54p8Kv6j/tk+51hOfVkOdtGwX0LvVrWT9PiJOJHa23nZ1fLg/22mTe05xdbR3WVeA+xiO9YwF4ozyCYDRUkDyWB/3k9RuaaT9H5S1szVpuOuD2nYSRpT9svmpfG4kipiS6BTPZPX2whDlukpuuoFgdiDtH6cFShNhZ5C47R0ayAvaZ1QSpOZMWfA6pdl4nhvNLpOKesKY/KFDEBzpUXRDsQWsfvmdqFl1mCeX9rOrEc9rodYVLXXhM8GPycehHmvqkccTBW6kipOQlmnSdIYaFmtWSFpUrzxajGkct3mZdTjVjOf...

4.3.2 復号されたペイロード

この出力には、navigator.getInterestGroupAdAuctionData() 呼び出しの復号されたペイロードが表示されます。

I1210 21:20:47.267590      37 select_ad_reactor.cc:347]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Decoded BuyerInput:
https://localhost:5003 : {interest_groups { name: "dsp-x-demo" bidding_signals_keys: "demo-key" browser_signals { join_count: 1 recency: 7 prev_wins: "[]" } }}

4.3.3 BFE への GetBids リクエスト

GetBids リクエストが SFE から BFE に送信されます。

I1210 21:20:47.267710      37 select_ad_reactor.cc:751]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Getting bid from a BFE
I1210 21:20:47.267729      37 buyer_frontend_async_client.cc:52] Raw request:
buyer_input {
  interest_groups {
    name: "dsp-x-demo"
    bidding_signals_keys: "demo-key"
    browser_signals {
      join_count: 1
      recency: 7
      prev_wins: "[]"
    }
  }
}
auction_signals: "{\"testKey\":\"someValue\"}"
buyer_signals: "{\"testKey\": \"someValue\"}"
seller: "https://localhost:6002"
publisher_name: "localhost"
enable_debug_reporting: true
log_context {
  generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
client_type: CLIENT_TYPE_BROWSER

4.3.4 BFE からの GetBids レスポンス

BFE は入札で応答します。

I1210 21:20:47.282549      41 select_ad_reactor.cc:856]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Received response from a BFE ...
I1210 21:20:47.282552      41 select_ad_reactor.cc:859]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252)
GetBidsResponse:
bids {
  bid: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
}
update_interest_group_list {
}

4.3.5 オークション サービスへの ScoreAds リクエスト

入札が受信されると、SFE は入札ごとにオークション サービスに対して ScoreAds 呼び出しを行います。

I1210 21:20:47.287898      18 select_ad_reactor.cc:1280]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) ScoreAdsRawRequest:
ad_bids {
  bid: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
  interest_group_owner: "https://localhost:5003"
  join_count: 1
  k_anon_status: true
}
seller_signals: "{\"testKey\":\"someValue\"}"
auction_signals: "{\"testKey\":\"someValue\"}"
scoring_signals: "{\"renderUrls\":{\"https://localhost:5003/ad.html\":[1,2,3],\"https://localhost:5004/ad.html\":[1,2,3]}}"
publisher_hostname: "localhost"
enable_debug_reporting: true
log_context {
  generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
per_buyer_signals {
  key: "https://localhost:5003"
  value: "{\"testKey\": \"someValue\"}"
}
per_buyer_signals {
  key: "https://localhost:5004"
  value: "{\"testKey\": \"someValue\"}"
}
seller: "https://localhost:6002"

4.3.6 オークション サービスからの ScoreAds レスポンス

販売者のオークション サービスは、次の好ましさスコアで応答します。

I1210 21:20:47.298029      33 default_async_grpc_client.h:134] Decrypting the response ...
I1210 21:20:47.298100      33 default_async_grpc_client.h:152] Decryption/decoding of response succeeded: ad_score {
  desirability: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
  buyer_bid: 9
  interest_group_owner: "https://localhost:5003"
  win_reporting_urls {
    top_level_seller_reporting_urls {
    }
  }
  ad_type: AD_TYPE_PROTECTED_AUDIENCE_AD
}

4.3.7 SFE からの SelectAd レスポンス

SFE の SelectAd レスポンスは暗号化され、SAS に送信されます。

I1210 21:20:47.298428      33 select_ad_reactor.cc:1413]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Encrypted SelectAdResponse:
auction_result_ciphertext: "\023\233\252\321\000\331M\327\216\201S\332kl?\322\255\247\312\375h\007W\367\016\366FR\364\275\377\326\027h\204\203\265\t\271-\333\266\tH\342\033F\001k\211C\026V\013\271\255(\236\273\353\260\275\007\346\027\340?\005|\235S\244\265\2563U\246\322\177%\200/\3175\034 \020\024\362\345\3263\356F.s\261\005\231\262Z\000\330x\0230\335>\"\217\254\010\254\330>\206\007\274\235\037`\370W\032\207\356\367\206\026\341.i\"$\370\367\2554i\247\354\304e\306\2466S\337\321w\327+!\316\035:\002\231\246\362\366qm\211\000\013\343\345\224{\365py\361\374\316\202\217-\244\302\331\216D\025W#.\304nH\235\315\311<#\342\344\324\257\354\2441\251\312\320\226\342\021\377>3`\347/\350\254h\306\273\023\365\340@\321\2412\254\323\213\0137,\013n\220|\211\323/\030)\314\263\223\355>\254\312aa`!\375\335\023Z\234p\206\037\001\355\261{$\025+\341\275\327Ny\342\342\264=\376\2138\224\026\2058\251\020\202\245*46\023\307)K\342\364k<\2104r\247\034\216}\034\001\374\215\363\210\026\275\371S>\031;f.b\260\363\257.\255\023I\341A\237*_T\355\262\005\344L\336D%\327\267@\302$\300\340\203c\350|\337>C\275c\260\202o\315xp\260\257\241\305U\nK\033\274L6\025\350\373a:\253\212&>p\210\215\017&^\327\005_\037\020\212\362\351\341\231@g\372\0037\275b:)\207\303d\243?\261O\266\343\214\200\004\247\372\022S\326\200\037\330\252r\257+e\273[\231\202\3625{\330\213\240\370\245\\\214\350/\313\ty/\004\313\0304k\223\354\374\305\233\264\224K\344\241\251\322?\323q6\314D\027\200\203\035]\023O\306\230?\203\237:\254\305\265\332\330\2641l\322\020\022\330O-\242\207>Q\364_{F\235\353tk\207\035\205\005\221\373\207\0143\035\014\322\240H\220\347%\262f\347\017\352\273\265\231\014\204\r\312\254z\000\340&\354\222\323\245\356\217(i\246"

5. ブラウザからローカル テストアプリでテストする

5.1 Chrome を開く

コマンドラインから Chrome を起動するに関する Chromium の記事を読み、次のフラグを使用して Chrome を起動します。

google-chrome --enable-privacy-sandbox-ads-apis --disable-features=EnforcePrivacySandboxAttestations,FledgeEnforceKAnonymity --enable-features=FledgeBiddingAndAuctionServerAPI,FledgeBiddingAndAuctionServer:FledgeBiddingAndAuctionKeyURL/https%3A%2F%2Fstorage.googleapis.com%2Fba-test-buyer%2Fcoordinator-test-key.json 

このフラグは、https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json でホストされているモック コーディネーター キーを読み込むように設定されています。

重要: B&A フラグを使用してコマンドラインから Chrome を開く前に、すべての Chrome インスタンスを完全に終了してください。すべての Chrome プロセスを終了するには、コマンドラインから ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 を実行してみてください。

5.2 ローカル テストアプリの UI にアクセスする

アプリの UI は、フラグを使用して開いた Chrome ブラウザ インスタンスの http://localhost:3000 にあります。ホスト名が異なる VM を使用している場合、アクセスする正確なアドレスが異なる場合があります。

ブラウザでアクセスしているローカル テストアプリのスクリーンショット

アプリの上部にある [コントロール] パネルには、さまざまなオークション設定をシミュレートするためのボタンがあります。他の 2 つのパネルには、広告主とパブリッシャーのサイトの iframe が含まれています。

広告主ページの iframe で [DSP タグを読み込む] ボタンをクリックすると、各 DSP のスクリプトがページに追加されます。これらのスクリプトは、ユーザーをインタレスト グループに追加します。Chrome DevTools を開き、[Application / Storage / Interest Groups] に移動して、DSP タグによって結合されたインタレスト グループを確認します。

Chrome DevTools のインタレスト グループのスクリーンショット

次に、[コントロール] パネルのボタンをクリックして、さまざまなオークション タイプをシミュレートします。

B&A のブラウザに表示された広告

B&A サービスとローカル テストアプリが正しく設定されている場合、上記の広告は [パブリッシャーのサイトの iframe] パネルにレンダリングされます。

5.3 ローカルテストアプリのオークション構成

コンパニオンのローカル テストアプリでは、次の参加者がポート番号で区別されてホストされます(異なるポートはクロスオリジンと見なされます)。

参加者

説明

ポート

広告主様

ページに DSP タグを読み込む

4001

パブリッシャー

ページに SSP タグを読み込む

4002

DSP-A

デバイス上の購入者

5001

DSP-B

デバイス上の購入者

5002

DSP-X

買収・合併の購入者

5003

DSP-Y

買収・合併の購入者

5004

SSP-TOP

トップレベルの販売者

6001

SSP-OD

デバイス上の販売者のみ

6002

SSP-BA

B&A のみの販売者

6003

SSP-MIX

混合モードの販売者

6004

次の 4 つの DSP があります。

  • DSP-ADSP-B がオンデバイス オークションに参加する
  • DSP-XDSP-Y が B&A オークションに参加する

SSP は 4 つあり、各販売者は異なるオークション構成を実行します。

  • SSP-OD はオンデバイス専用オークションを実行します。
  • SSP-BA は B&A のみのオークションを実施します
  • SSP-MIX は混合モードのオークションを実行します。
  • SSP-TOP はマルチセラー オークションを実施します。
    • SSP-OD/BA/MIX は、SSP-TOP の複数販売者オークションのコンポーネント販売者として参加します。

完全なアーキテクチャについては、設計図をご覧ください。

5.4 入札およびオークション サービスの設定

この Codelab では、2 つの A/B テストを同時に実施します。

用意

サービス

参加者

ba-dev ネットワーク アドレス

セット A

入札サービス

DSP-X

192.168.84.101:50057

BFE サービス

DSP-X

192.168.84.102:50051

オークション サービス

SSP-BA

192.168.84.103:50061

SFE サービス

SSP-BA

192.168.84.104:50053

セット B

入札サービス

DSP-Y

192.168.84.201:50057

BFE サービス

DSP-Y

192.168.84.202:50051

オークション サービス

SSP-MIX

192.168.84.203:50061

SFE サービス

SSP-MIX

192.168.84.204:50053

アプリ

ローカルテスト用アプリ

すべて

https://192.168.84.100:PORT

  • セット A では、購入者サービスは DSP-X で使用され、販売者サービスは SSP-BA で使用されます。
  • セット B では、購入者サービスは DSP-Y によって使用され、販売者サービスは SSP-MIX によって使用されます。

ローカル テストアプリと B&A サービス間の通信には、Docker ブリッジ ネットワークが使用されます。ba-dev ブリッジ ネットワークは、ローカル テストアプリの設定スクリプトによって作成されます。B&A サービスには、192.168.84.0 のサブネット内の IP アドレスが割り当てられます。

たとえば、アプリケーションから Set A の SFE を呼び出す場合、192.168.84.104:50053 のネットワーク アドレスが使用されます。DSP-X から BFE にモック入札スクリプトを読み込む場合は、https://192.168.84.100:5003/generate-bid.js が使用されます。

6. まとめ

ここまでで、B&A Services スタックをローカルで実行し、サービス同士がどのように通信するかを理解できたと思います。

6.1. テクニカル サポート

6.2 詳細