在 Google Cloud Platform (GCP) 上使用匯總服務

1. 1. 必要條件

預計完成時間:1 到 2 小時

執行本程式碼研究室有 2 種模式:本機測試匯總服務。本機測試模式需要使用本機電腦和 Chrome 瀏覽器 (無須建立/使用 Google Cloud 資源)。「匯總服務」模式需要在 Google Cloud 上完整部署匯總服務。

如要在任一模式下執行本程式碼研究室,您必須具備一些先決條件。系統會根據各個條件標示需要執行「本機測試」或「匯總服務」。

1.1. 完成註冊和認證 (匯總服務)

如要使用 Privacy Sandbox API,請務必完成 Chrome 和 Android 的註冊和認證程序。

1.2. 啟用 Privacy Sandbox API (本機測試與匯總服務)

由於我們將使用 Privacy Sandbox,建議您啟用 Privacy Sandbox Ads API。

透過瀏覽器前往 chrome://flags/#privacy-sandbox-ads-apis 並啟用 Privacy Sandbox API。

啟用 Privacy Sandbox API

此外,也請確認已啟用第三方 Cookie

透過瀏覽器前往 chrome://settings/cookies。確認「未封鎖」第三方 Cookie。視 Chrome 版本而定,您可能會看到不同的設定選單,但可接受的設定如下:

  • 「封鎖所有第三方 Cookie」 = 已停用
  • 「封鎖第三方 Cookie」= 已停用
  • 「在無痕模式中封鎖第三方 Cookie」= 已啟用

啟用 Cookie

1.3. 下載本機測試工具 (本機測試)

本機測試將需要下載本機測試工具。這項工具會從未加密的偵錯報表中產生摘要報表。

本機測試工具可從 GitHub 中的 Cloud 函式 JAR 封存下載。路徑應命名為 LocalTestingTool_{version}.jar

1.4. 確保已安裝 JAVA JRE (本機測試與匯總服務)

開啟「終端機」並使用 java --version 檢查機器是否已安裝 Java 或 OpenJDK。

檢查 Java 版本

如果尚未安裝,請前往 Java 網站openJDK 網站下載並安裝。

1.5. 下載 aggregatable_report_converter (本機測試與匯總服務)

您可以從 Privacy Sandbox 示範 GitHub 存放區下載 aggregatable_report_converter 副本。

1.6. 設定 GCP 環境 (匯總服務)

「匯總服務」需要使用雲端供應商的「受信任的執行環境」。在本程式碼研究室中,匯總服務會部署在 GCP 中,但系統也支援 AWS

1.6.1. 部署作業

按照 GitHub 中的部署操作說明設定 gcloud CLI、下載 Terraform 二進位檔和模組,以及為匯總服務建立 GCP 資源。

部署作業操作說明中的重要步驟:

  1. 在環境中設定「gcloud」CLI 和 Terraform。
  2. 建立 Cloud Storage 值區以儲存 Terraform 狀態。
  3. 下載依附元件。
  4. 更新 adtech_setup.auto.tfvars 並執行 adtech_setup Terraform。如需 adtech_setup.auto.tfvars 檔案範例,請參閱附錄。
  5. 更新 dev.auto.tfvars、模擬部署服務帳戶,並執行 dev Terraform。如需 dev.auto.tfvars 檔案範例,請參閱附錄。
  6. 部署作業完成後,請從 Terraform 輸出內容擷取 frontend_service_cloudfunction_url,以便在後續步驟中向匯總服務發出要求。

1.6.2. 報表類別

專案設定完成後,您將在 Cloud Storage 中建立值區,以儲存這個程式碼研究室中的可匯總報表和摘要報表。以上是建立值區的 gcloud 指令範例。將預留位置替換成您選擇的名稱和位置。

gcloud storage buckets create gs://<bucket-name> --location=<location>

1.7. 完成匯總服務新手上路 (匯總服務)

「匯總服務」需要新手上路流程的協調人員才能使用這項服務。提供回報網站和其他資訊,選取「Google Cloud」,然後輸入服務帳戶地址,完成匯總服務新手上路表單。這個服務帳戶會按照先前的先決條件 (1.6. 設定 GCP 環境)。(提示:如果您使用提供的預設名稱,這個服務帳戶的開頭會是「worker-sa@」)。

新手上路流程最多可能需要 2 週才能完成。

1.8. 決定呼叫 API 端點 (匯總服務) 的方法

本程式碼研究室提供 2 種呼叫匯總服務 API 端點的選項:cURLPostman。透過 cURL 從終端機呼叫 API 端點最簡單快速,而且只需最少設定,也不需要其他軟體。不過,如果您不想使用 cURL,可以改用 Postman 執行並儲存 API 要求供日後使用。

第 3.2 節。「匯總服務使用情形」報表會提供同時使用這兩種選項的詳細操作說明。您現在可以預覽這些項目,確定要使用哪種方法。如果您選取 Postman,請執行以下初始設定。

1.8.1. 設定工作區

註冊 Postman 帳戶。申請完成後,系統會自動為您建立工作區,

郵政工作區

如未建立工作區,請前往「工作區」頂端導覽項目,然後選取「建立工作區」。

選取「空白工作區」,然後按一下下一步並命名為「GCP Privacy Sandbox」。選取「個人」,然後按一下「建立」。

下載預先設定的工作區 JSON 設定全域環境檔案

透過「Import」按鈕,將這兩個 JSON 檔案匯入「我的工作區」。

匯入按鈕

這項操作會為您建立「GCP Privacy Sandbox」集合,以及 createJobgetJob HTTP 要求。

1.8.2. 設定授權

按一下「GCP Privacy Sandbox」集合,然後前往「授權」分頁。

授權按鈕

您將使用「不記名權杖」方法。在終端機環境中執行下列指令,並複製輸出內容。

gcloud auth print-identity-token

接著,將這個權杖值貼到「Postman 授權」分頁的「權杖」欄位:

權杖欄位

1.8.3. 設定環境

前往右上角的「Environment Quick Look」:

環境按鈕

按一下「編輯」,然後更新「環境」、「區域」和「cloud-function-id」的「目前值」:

設定目前的值

您可以暫時將「request-id」留空,系統稍後會填入相關資訊。其他欄位則使用 frontend_service_cloudfunction_url 的值,也就是在 Prerequisite 1.6 中完成 Terraform 部署後傳回的值。網址格式如下:https://--frontend-service--uc.a.run.app

2. 2. 本機測試程式碼研究室

預計完成時間:不到 1 小時

您可以使用電腦上的本機測試工具執行匯總作業,並使用未加密的偵錯報表產生摘要報表。事前準備:請確認您已完成所有標示「本機測試」的必要條件。

程式碼研究室步驟

步驟 2.1:觸發報表:觸發私人匯總報表以收集報表。

步驟 2.2:建立偵錯 AVRO 報表:將收集的 JSON 報表轉換為 AVRO 格式報表。這個步驟與廣告技術從 API 報表端點收集報表,並將 JSON 報表轉換為 AVRO 格式報表時類似。

步驟 2.3:擷取值區金鑰:值區金鑰是由廣告技術人員設計。在本程式碼研究室中,由於值區已預先定義,因此請按照所提供的值區金鑰擷取值區金鑰。

步驟 2.4:建立輸出網域 AVRO:擷取值區金鑰後,建立輸出網域 AVRO 檔案。

步驟 2.5:建立摘要報表:使用本機測試工具,即可在本地環境中建立摘要報表。

步驟 2.6:查看摘要報表:查看本機測試工具建立的摘要報表。

2.1. 觸發報表

如要觸發私人匯總報表,可以使用 Privacy Sandbox 示範網站 (https://privacy-sandbox-demos-news.dev/?env=gcp) 或自己的網站 (例如 https://adtechexample.com)。如果您使用自己的網站,而且尚未完成註冊和認證匯總服務新手上路程序,則必須使用 Chrome 標記和 CLI 切換鈕

在這個示範中,我們將使用 Privacy Sandbox 示範網站。請透過連結前往網站,然後您就可以前往 chrome://private-aggregation-internals 查看報表:

Chrome 內部頁面

您也可以在 Chrome 內部頁面顯示的報告「報告內文」中找到傳送到 {reporting-origin}/.well-known/private-aggregation/debug/report-shared-storage 端點的報告。

這裡可能有許多報表,但在這個程式碼研究室中,請使用偵錯端點產生的可匯總報表。「報表網址」會包含「/debug/」,「檢舉機構」的 aggregation_coordinator_origin field 則會包含以下網址:https://publickeyservice.msmt.gcp.privacysandboxservices.com。

GCP 偵錯報表

2.2. 建立偵錯匯總報表

複製 chrome://private-aggregation-internals「報表內文」中的報表,然後在 privacy-sandbox-demos/tools/aggregatable_report_converter/out/artifacts/aggregatable_report_converter_jar 資料夾中建立 JSON 檔案 (在透過 Prerequisite 1.5 下載的存放區內)。

在這個範例中,我們使用的是 Linux,但您也可以使用任何文字編輯器

vim report.json

將報表貼入 report.json,然後儲存檔案。

報表 JSON

設定完成後,請使用 aggregatable_report_converter.jar 協助建立偵錯可匯總報表。即可在目前的目錄中建立名為 report.avro 的可匯總報表。

java -jar aggregatable_report_converter.jar \
  --request_type convertToAvro \
  --input_file report.json \
  --debug

2.3. 從報表中擷取值區金鑰

如要建立 output_domain.avro 檔案,您需要可以從報表中擷取的值區鍵。

值區金鑰是由廣告技術人員設計。不過,在這個情況下,Privacy Sandbox 示範網站會建立值區金鑰。由於這個網站的私人匯總作業處於偵錯模式,因此我們可以使用「報告內容」中的 debug_cleartext_payload 取得值區鍵。

請直接複製報表內文中的 debug_cleartext_payload

偵錯明文酬載

開啟 goo.gle/ags-payload-decoder,將 debug_cleartext_payload 貼到「INPUT」方塊中,然後按一下「Decode」。

解碼按鈕

頁面會傳回值區金鑰的十進位值。以下是值區金鑰的範例。

值區金鑰

2.4. 建立輸出網域 AVRO

現在您已取得值區金鑰,接下來讓我們在同一個資料夾中建立 output_domain.avro。請務必將值區金鑰替換為您擷取的值區金鑰。

java -jar aggregatable_report_converter.jar \
  --request_type createDomainAvro \
  --bucket_key <bucket key>

指令碼會在目前的資料夾中建立 output_domain.avro 檔案。

2.5. 使用本機測試工具建立摘要報表

我們會使用在先決條件 1.3 中下載的 LocalTestingTool_{version}.jar,使用下列指令建立摘要報表。將 {version} 替換為下載的版本。請記得將 LocalTestingTool_{version}.jar 移至目前的目錄,或新增參照目前位置的相對路徑。

java -jar LocalTestingTool_{version}.jar \
  --input_data_avro_file report.avro \
  --domain_avro_file output_domain.avro \
  --output_directory .

執行指令後,畫面應會顯示如下的內容。完成後,系統會建立「output.avro」報表。

輸出 AVRO

2.6. 查看摘要報表

建立的摘要報表為 AVRO 格式。如要讀取此內容,您需要從 AVRO 轉換為 JSON 格式。在理想情況下,廣告技術應撰寫程式碼,將 AVRO 報表轉換回 JSON。

我們會使用 aggregatable_report_converter.jar 將 AVRO 報表轉換回 JSON。

java -jar aggregatable_report_converter.jar \
  --request_type convertToJson \
  --input_file output.avro

這樣就會傳回類似下方的報告。以及建立在同一個目錄中的報表「output.json」。

輸出 JSON

3. 3. 匯總服務程式碼研究室

預計完成時間:1 小時

開始操作前,請確認已完成標示「匯總服務」的所有必備條件。

程式碼研究室步驟

步驟 3.1:建立匯總服務輸入資料:建立匯總服務批次的匯總服務報告。

  • 步驟 3.1.1:觸發報告
  • 步驟 3.1.2:收集可匯總報表
  • 步驟 3.1.3:將報表轉換為 AVRO
  • 步驟 3.1.4:建立 output_domain AVRO
  • 步驟 3.1.5:將報表移至 Cloud Storage 值區

步驟 3.2:匯總服務使用情形:使用匯總服務 API 建立摘要報表及查看摘要報表。

  • 步驟 3.2.1:使用「createJob」端點進行批次處理
  • 步驟 3.2.2:使用 getJob 端點擷取批次狀態
  • 步驟 3.2.3:查看摘要報表

3.1. 建立匯總服務輸入內容

繼續建立 AVRO 報表,以批次傳送至匯總服務。這些步驟中的殼層指令可以在 GCP 的 Cloud Shell 內執行 (只要從必備條件中的依附元件複製到 Cloud Shell 環境) 或本機執行環境中即可。

3.1.1. 觸發報告

請透過連結前往網站,然後您就可以前往 chrome://private-aggregation-internals 查看報表:

Chrome 內部頁面

您也可以在 Chrome 內部頁面顯示的報告「報告內文」中找到傳送到 {reporting-origin}/.well-known/private-aggregation/debug/report-shared-storage 端點的報告。

這裡可能有許多報表,但在這個程式碼研究室中,請使用偵錯端點產生的可匯總報表。「報表網址」會包含「/debug/」,「檢舉機構」的 aggregation_coordinator_origin field 則會包含以下網址:https://publickeyservice.msmt.gcp.privacysandboxservices.com。

GCP 偵錯報表

3.1.2. 收集可匯總報表

從對應 API 的 .well-known 端點收集可匯總報表。

  • 私人匯總:{reporting-origin}/.well-known/private-aggregation/report-shared-storage
  • 歸因報表 - 摘要報表:{reporting-origin}/.well-known/attribution-reporting/report-aggregate-attribution

在本程式碼研究室中,我們會手動執行報表收集作業。在實際工作環境中,廣告技術應透過程式輔助方式收集並轉換報表。

讓我們從 chrome://private-aggregation-internals 複製「報表內文」中的 JSON 報表。

在這個範例中,我們使用的是 vim,因為我們使用的是 Linux。但您也可以使用任何文字編輯器

vim report.json

將報表貼入 report.json,然後儲存檔案。

報表 JSON

3.1.3. 將報表轉換為 AVRO

.well-known 端點收到的報表會採用 JSON 格式,必須轉換為 AVRO 報表格式。取得 JSON 報表後,請前往 report.json 的儲存位置,並使用 aggregatable_report_converter.jar 建立偵錯可匯總報表。即可在目前的目錄中建立名為 report.avro 的可匯總報表。

java -jar aggregatable_report_converter.jar \
  --request_type convertToAvro \
  --input_file report.json

3.1.4. 建立 output_domain AVRO

如要建立 output_domain.avro 檔案,您需要可以從報表中擷取的值區鍵。

值區金鑰是由廣告技術人員設計。不過,在這個情況下,Privacy Sandbox 示範網站會建立值區金鑰。由於這個網站的私人匯總作業處於偵錯模式,因此我們可以使用「報告內容」中的 debug_cleartext_payload 取得值區鍵。

請直接複製報表內文中的 debug_cleartext_payload

偵錯明文酬載

開啟 goo.gle/ags-payload-decoder,將 debug_cleartext_payload 貼到「INPUT」方塊中,然後按一下「Decode」。

解碼按鈕

頁面會傳回值區金鑰的十進位值。以下是值區金鑰的範例。

值區金鑰

現在您已取得值區金鑰,接下來讓我們在同一個資料夾中建立 output_domain.avro。請務必將值區金鑰替換為您擷取的值區金鑰。

java -jar aggregatable_report_converter.jar \
  --request_type createDomainAvro \
  --bucket_key <bucket key>

指令碼會在目前的資料夾中建立 output_domain.avro 檔案。

3.1.5. 將報表移至 Cloud Storage 值區

建立 AVRO 報表和輸出網域之後,請繼續將報表和輸出網域移至 Cloud Storage 值區 (也就是您在先決條件 1.6 中建立的最後一個步驟)。

如果您已在本機環境中設定 gcloud CLI,請使用下列指令,將檔案複製到對應的資料夾。

gcloud storage cp report.avro gs://<bucket_name>/reports/

gcloud storage cp output_domain.avro gs://<bucket_name>/output_domain/

或者,您也可以手動將檔案上傳至值區。建立一個名為「reports」的資料夾,然後將 report.avro 檔案上傳到這裡。建立名為「output_domains」的資料夾,然後將 output_domain.avro 檔案上傳到這裡。

3.2. 匯總服務使用情形

回顧先前步驟 1.8 中,您選取了 cURL 或 Postman,向匯總服務端點發出 API 要求。以下提供這兩種選項的操作說明。

3.2.1. 使用「createJob」端點進行批次處理

按照下方的 cURL 或 Postman 操作說明建立工作。

cURL

在「終端機」中建立要求主體檔案 (body.json),然後貼到下方。請務必更新預留位置值。如要進一步瞭解每個欄位代表的意義,請參閱 API 說明文件

{
  "job_request_id": "<job_request_id>",
  "input_data_blob_prefix": "<report_folder>/<report_name>.avro",
  "input_data_bucket_name": "<bucket_name>",
  "output_data_blob_prefix": "<output_folder>/<summary_report_prefix>",
  "output_data_bucket_name": "<bucket_name>",
  "job_parameters": {
    "output_domain_blob_prefix": "<output_domain_folder>/<output_domain>.avro",
    "output_domain_bucket_name": "<bucket_name>",
    "attribution_report_to": "<reporting origin of report>",
    "report_error_threshold_percentage": "10",
    "debug_run": "true"
  }
}

請執行以下要求。將 cURL 要求網址中的預留位置替換為 frontend_service_cloudfunction_url 的值,該值會在 Prerequisite 1.6 中成功完成 Terraform 部署作業後輸出。

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -d @body.json \
  https://<environment>-<region>-frontend-service-<cloud-function-id>-uc.a.run.app/v1alpha/createJob

匯總服務接受要求後,您應該會收到 HTTP 202 回應。其他可能的回應代碼請參閱 API 規格說明

郵輪

針對 createJob 端點,必須提供要求主體,才能向匯總服務提供可匯總報表、輸出網域和摘要報表的位置和檔案名稱。

前往 createJob 要求的「內文」分頁:

內文分頁

取代所提供 JSON 內的預留位置。如要進一步瞭解這些欄位及其代表的意義,請參閱 API 說明文件

{
  "job_request_id": "<job_request_id>",
  "input_data_blob_prefix": "<report_folder>/<report_name>.avro",
  "input_data_bucket_name": "<bucket_name>",
  "output_data_blob_prefix": "<output_folder>/<summary_report_prefix>",
  "output_data_bucket_name": "<bucket_name>",
  "job_parameters": {
    "output_domain_blob_prefix": "<output_domain_folder>/<output_domain>.avro",
    "output_domain_bucket_name": "<bucket_name>",
    "attribution_report_to": "<reporting origin of report>",
    "report_error_threshold_percentage": "10",
    "debug_run": "true"
  }
}

「傳送」createJob API 要求:

[傳送] 按鈕

回應代碼會顯示在網頁的下半部:

回應碼

匯總服務接受要求後,您應該會收到 HTTP 202 回應。其他可能的回應代碼請參閱 API 規格說明

3.2.2. 使用 getJob 端點擷取批次狀態

請按照以下 cURL 或 Postman 操作說明取得工作。

cURL

在終端機中執行以下要求。將網址中的預留位置替換成 frontend_service_cloudfunction_url 的值 (也就是您用來回應 createJob 要求的網址)。在「job_request_id」部分,請使用您透過 createJob 端點建立的工作所含值。

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  https://<environment>-<region>-frontend-service-<cloud-function-id>-uc.a.run.app/v1alpha/getJob?job_request_id=<job_request_id>

結果應會傳回 HTTP 狀態為 200 的工作要求狀態。要求「Body」包含 job_statusreturn_messageerror_messages 等必要資訊 (如果工作發生錯誤)。

郵輪

如要查看工作要求的狀態,您可以使用 getJob 端點。在 getJob 要求的「Params」區段中,將 job_request_id 值更新為在 createJob 要求中傳送的 job_request_id

工作要求 ID

「傳送」getJob 要求:

[傳送] 按鈕

結果應會傳回 HTTP 狀態為 200 的工作要求狀態。要求「Body」包含 job_statusreturn_messageerror_messages 等必要資訊 (如果工作發生錯誤)。

回應 JSON

3.2.3. 查看摘要報表

當您在輸出的 Cloud Storage 值區中收到摘要報表後,可以將這份報表下載到本機環境。摘要報表採用 AVRO 格式,且可轉換回 JSON。您可以使用 aggregatable_report_converter.jar 使用下列指令來讀取報表。

java -jar aggregatable_report_converter.jar \
  --request_type convertToJson \
  --input_file <summary_report_avro>

此方法會傳回類似下方內容的每個值區鍵匯總值的 JSON 檔案。

摘要報表

如果您的 createJob 要求包含 debug_run 為 true,您將可在位於 output_data_blob_prefix 的偵錯資料夾中收到摘要報表。報表為 AVRO 格式,您可以使用上述指令將報表轉換成 JSON。

報表中包含值區鍵、未雜訊的指標,以及為了形成摘要報表而加入的未雜訊指標。報告內容與下方類似。

雜訊報告

註解中也包含「in_reports」和/或「in_domain」,這代表:

  • in_reports - 範圍鍵會列在可匯總報表中。
  • in_domain - 值區金鑰位於 output_domain AVRO 檔案內。

4. 4. 清除所用資源

如要刪除透過 Terraform 為匯總服務建立的資源,請在 adtech_setupdev (或其他環境) 資料夾中使用 destroy 指令:

$ cd <repository_root>/terraform/gcp/environments/adtech_setup
$ terraform destroy
$ cd <repository_root>/terraform/gcp/environments/dev
$ terraform destroy

如要刪除存放可匯總報表和摘要報表的 Cloud Storage 值區,請按照下列步驟操作:

$ gcloud storage buckets delete gs://my-bucket

您也可以選擇將 Chrome Cookie 設定從必要條件 1.2 還原為先前的狀態。

5. 5. 附錄

adtech_setup.auto.tfvars 檔案範例

/**
 * Copyright 2023 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

project = "my-project-id"

# Required to generate identity token for access of Adtech Services API endpoints
service_account_token_creator_list = ["user:me@email.com"]

# Uncomment the below line if you like Terraform to create an Artifact registry repository
# for self-build container artifacts. "artifact_repo_location" defaults to "us".
artifact_repo_name     = "my-ags-artifacts"

# Note: Either one of [1] or [2] must be uncommented.

# [1] Uncomment below lines if you like Terraform grant needed permissions to
# pre-existing service accounts
# deploy_service_account_email = "<YourDeployServiceAccountName>@<ProjectID>.iam.gserviceaccount.com"
# worker_service_account_email = "<YourWorkerServiceAccountName>@<ProjectID>.iam.gserviceaccount.com"

# [2] Uncomment below lines if you like Terraform to create service accounts
# and needed permissions granted e.g "deploy-sa" or "worker-sa"
deploy_service_account_name = "deploy-sa"
worker_service_account_name = "worker-sa"
# Uncomment the below line if you want Terraform to create the
# below bucket. "data_bucket_location" defaults to "us".
data_bucket_name     = "my-ags-data"

# Uncomment the below lines if you want to specify service account customer role names
# deploy_sa_role_name = "<YourDeploySACustomRole>"
# worker_sa_role_name = "<YourWorkerSACustomRole>"

dev.auto.tfvars 檔案範例

/**
 * Copyright 2022 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

# Example values required by job_service.tf
#
# These values should be modified for each of your environments.
region      = "us-central1"
region_zone = "us-central1-c"

project_id  = "my-project-id"
environment = "operator-demo-env"

# Co-locate your Cloud Spanner instance configuration with the region above.
# https://cloud.google.com/spanner/docs/instance-configurations#regional-configurations
spanner_instance_config = "regional-us-central1"

# Adjust this based on the job load you expect for your deployment.
# Monitor the spanner instance utilization to decide on scale out / scale in.
# https://console.cloud.google.com/spanner/instances
spanner_processing_units = 100

# Uncomment the line below at your own risk to disable Spanner database protection.
# This needs to be set to false and applied before destroying all resources is possible.
spanner_database_deletion_protection = false

instance_type = "n2d-standard-8" # 8 cores, 32GiB

# Container image location that packages the job service application
# If not set otherwise, uncomment and edit the line below:
#worker_image = "<location>/<project>/<repository>/<image>:<tag or digest>"

# Service account created and onboarded for worker
user_provided_worker_sa_email = "worker-sa@my-project-id.iam.gserviceaccount.com"

min_worker_instances = 1
max_worker_instances = 20