1. 1. 前提条件
预计完成时间:1-2 小时
您可以通过以下 2 种模式完成此 Codelab:本地测试或汇总服务。本地测试模式需要本地计算机和 Chrome 浏览器(无需创建/使用 Google Cloud 资源)。汇总服务模式需要在 Google Cloud 上完整部署汇总服务。
无论您想以哪种模式完成此 Codelab,都需要满足一些前提条件。每个要求都会标记为本地测试或汇总服务所需。
1.1. 完成注册和认证(汇总服务)
如需使用 Privacy Sandbox API,请确保您已为 Chrome 和 Android 完成注册和认证。
1.2. 启用 Ad privacy APIs (Local Testing and Aggregation Service)
由于我们将使用 Privacy Sandbox,因此建议您启用 Privacy Sandbox Ads API。
在浏览器中,前往 chrome://settings/adPrivacy
并启用所有广告隐私权 API。
此外,请确保已启用第三方 Cookie。
在 chrome://settings/cookies
中,确保未屏蔽第三方 Cookie。您可能会在此设置菜单中看到不同的选项,具体取决于您使用的 Chrome 版本,但可接受的配置包括:
- “阻止所有第三方 Cookie”= 已停用
- “阻止第三方 Cookie”= 停用
- “在无痕模式下阻止第三方 Cookie”= 已启用
1.3. 下载本地测试工具(本地测试)
若要进行本地测试,您需要下载本地测试工具。该工具将根据未加密的调试报告生成摘要报告。
您可以在 GitHub 中的 Cloud Functions JAR 归档文件中下载本地测试工具。该文件应命名为 LocalTestingTool_{version}.jar
。
1.4. 确保已安装 JAVA JRE(本地测试和汇总服务)
打开“终端”,然后使用 java --version
检查您的机器是否安装了 Java 或 openJDK。
如果未安装,您可以从 Java 网站或 openJDK 网站下载并安装。
1.5. 下载 aggregatable_report_converter(本地测试和汇总服务)
您可以从 Privacy Sandbox 演示版 GitHub 代码库下载 aggregatable_report_converter 的副本。GitHub 代码库中提到了使用 IntelliJ 或 Eclipse,但这两者都不是必需的。如果您不使用这些工具,请改为将 JAR 文件下载到本地环境。
1.6. 设置 GCP 环境(汇总服务)
汇总服务需要使用使用云服务商的可信执行环境。在此 Codelab 中,汇总服务将部署在 GCP 中,但AWS 也受支持。
按照 GitHub 中的部署说明设置 gcloud CLI、下载 Terraform 二进制文件和模块,并为汇总服务创建 GCP 资源。
部署说明中的关键步骤:
- 在您的环境中设置“gcloud”CLI 和 Terraform。
- 创建一个 Cloud Storage 存储分区以存储 Terraform 状态。
- 下载依赖项。
- 更新
adtech_setup.auto.tfvars
并运行adtech_setup
Terraform。如需查看adtech_setup.auto.tfvars
文件示例,请参阅附录。记下此处创建的数据存储分区的名称,我们将在 Codelab 中使用该名称来存储我们创建的文件。 - 更新
dev.auto.tfvars
、冒充部署服务账号,然后运行dev
Terraform。如需查看dev.auto.tfvars
文件示例,请参阅附录。 - 部署完成后,从 Terraform 输出中获取
frontend_service_cloudfunction_url
,您需要在后续步骤中使用该 ID 向汇总服务发出请求。
1.7. 完成汇总服务初始配置(汇总服务)
汇总服务需要协调者完成初始配置,才能使用该服务。填写汇总服务新手入门表单,具体方法是提供您的报告网站和其他信息,选择“Google Cloud”,然后输入您的服务账号地址。此服务账号是在前面的先决条件 (1.6. 设置 GCP 环境)。(提示:如果您使用提供的默认名称,此服务账号将以“worker-sa@”开头)。
初始配置流程最多需要 2 周才能完成。
1.8. 确定调用 API 端点的方法(汇总服务)
本 Codelab 提供了 2 种用于调用汇总服务 API 端点的方法:c网址 和 Postman。c网址 是从终端调用 API 端点更快捷、更简单的方式,因为它只需极少的设置,并且无需任何其他软件。不过,如果您不想使用 c网址,可以改用 Postman 来执行和保存 API 请求以供日后使用。
在第 3.2 部分中。汇总服务使用情况,您可以找到有关使用这两种选项的详细说明。您现在可以预览它们,以确定要使用哪种方法。如果您选择 Postman,请执行以下初始设置。
1.8.1. 设置工作区
注册 Postman 账号。注册后,系统会自动为您创建一个工作区。
如果系统未为您创建工作区,请前往顶部导航栏中的“工作区”部分,然后选择“创建工作区”。
选择“空白工作区”,点击“下一步”,然后将其命名为“GCP Privacy Sandbox”。选择“个人”,然后点击“创建”。
通过“导入”按钮将这两个 JSON 文件导入“我的 Workspace”。
这将为您创建“GCP Privacy Sandbox”集合以及 createJob
和 getJob
HTTP 请求。
1.8.2. 设置授权
点击“GCP Privacy Sandbox”集合,然后前往“授权”标签页。
您将使用“Bearer 令牌”方法。在终端环境中,运行以下命令并复制输出。
gcloud auth print-identity-token
然后,将此令牌值粘贴到 Postman 授权标签页的“令牌”字段中:
1.8.3. 设置环境
前往右上角的“环境快速浏览”:
点击“修改”,然后更新“environment”“region”和“cloud-function-id”的“Current Value”(当前值):
您可以暂时将“request-id”留空,我们稍后会填写该值。对于其他字段,请使用 frontend_service_cloudfunction_url
中的值,该值是在前提条件 1.6 中成功完成 Terraform 部署后返回的。网址采用以下格式:https://
2. 2. 本地测试 Codelab
预计完成时间:<1 小时
您可以使用机器上的本地测试工具,使用未加密的调试报告执行汇总并生成摘要报告。开始前须知:请确保您已完成标记为“本地测试”的所有前提条件。
Codelab 步骤
第 2.1 步。触发器报告:触发私密汇总报告,以便收集报告。
第 2.2 步。创建调试 Avro 报告:将收集的 JSON 报告转换为 Avro 格式的报告。此步骤与广告技术平台从 API 报告端点收集报告并将 JSON 报告转换为 Avro 格式报告的过程类似。
第 2.3 步。检索存储分区键:存储分区键由广告技术平台设计。在此 Codelab 中,由于存储分区是预定义的,因此请按所提供的方式检索存储分区键。
第 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
查看报告:
发送到 {reporting-origin}/.well-known/private-aggregation/debug/report-shared-storage
端点的报告还会显示在“Chrome 内部”页面上显示的报告的“报告正文”中。
您可能会在此处看到许多报告,但对于本 Codelab,请使用由调试端点生成的特定于 GCP 且可汇总的报告。“报告网址”将包含“/debug/”,并且“报告正文”的 aggregation_coordinator_origin field
将包含以下网址:https://publickeyservice.msmt.gcp.privacysandboxservices.com。
2.2. 创建可汇总的调试报告
复制 chrome://private-aggregation-internals
的“Report Body”中找到的报告,并在 privacy-sandbox-demos/tools/aggregatable_report_converter/out/artifacts/aggregatable_report_converter_jar
文件夹(在前提条件 1.5 中下载的代码库内)中创建一个 JSON 文件。
在此示例中,我们使用 vim,因为我们使用的是 Linux。不过,您可以使用任何文本编辑器。
vim report.json
将报告粘贴到 report.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 Demo 会创建存储分区键。由于此网站的私密汇总处于调试模式,因此我们可以使用“报告正文”中的 debug_cleartext_payload
获取存储分区键。
请从报告正文中复制 debug_cleartext_payload
。
打开 goo.gle/ags-payload-decoder,将 debug_cleartext_payload
粘贴到“输入”框中,然后点击“解码”。
该页面会返回存储分区键的十进制值。以下是存储分区键的示例。
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
。
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
。
Codelab 已完成!
摘要:您已使用模拟汇总服务汇总行为的本地测试工具收集调试报告、构建输出网域文件并生成摘要报告。
后续步骤:现在,您已经使用本地测试工具进行了实验,接下来可以尝试在自己的环境中使用实际部署的汇总服务进行相同的练习。请再次查看前提条件,确保您已为“汇总服务”模式设置好所有内容,然后继续执行第 3 步。
3. 3. 汇总服务 Codelab
预计完成时间:1 小时
开始前须知:请确保您已满足标记为“汇总服务”的所有前提条件。
Codelab 步骤
第 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 步。汇总服务使用:使用 Aggregation Service API 创建摘要报告并查看摘要报告。
- 第 3.2.1 步。使用
createJob
端点进行批处理 - 第 3.2.2 步。使用
getJob
端点检索批处理状态 - 第 3.2.3 步。查看摘要报告
3.1. 汇总服务输入创建
继续创建 AVRO 报告,以便批量发送到汇总服务。这些步骤中的 shell 命令可以在 GCP 的 Cloud Shell 中运行(前提是将“前提条件”部分中的依赖项克隆到您的 Cloud Shell 环境中),也可以在本地执行环境中运行。
3.1.1. 触发器报告
点击链接前往该网站;然后,您可以通过 chrome://private-aggregation-internals
查看报告:
发送到 {reporting-origin}/.well-known/private-aggregation/debug/report-shared-storage
端点的报告还会显示在“Chrome 内部”页面上显示的报告的“报告正文”中。
您可能会在此处看到许多报告,但对于本 Codelab,请使用由调试端点生成的特定于 GCP 且可汇总的报告。“报告网址”将包含“/debug/”,并且“报告正文”的 aggregation_coordinator_origin field
将包含以下网址:https://publickeyservice.msmt.gcp.privacysandboxservices.com。
3.1.2. 收集可汇总的报告
从相应 API 的 .well-known 端点收集可汇总报告。
- 不公开汇总:
{reporting-origin}/.well-known/private-aggregation/report-shared-storage
- Attribution Reporting - Summary Report:
{reporting-origin}/.well-known/attribution-reporting/report-aggregate-attribution
在本 Codelab 中,我们将手动收集报告。在生产环境中,广告技术平台应以编程方式收集和转换报告。
接下来,从 chrome://private-aggregation-internals
复制“Report Body”中的 JSON 报告。
在此示例中,我们使用 vim,因为我们使用的是 Linux。不过,您可以使用任何文本编辑器。
vim report.json
将报告粘贴到 report.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 Demo 会创建存储分区键。由于此网站的私密汇总处于调试模式,因此我们可以使用“报告正文”中的 debug_cleartext_payload
获取存储分区键。
请从报告正文中复制 debug_cleartext_payload
。
打开 goo.gle/ags-payload-decoder,将 debug_cleartext_payload
粘贴到“输入”框中,然后点击“解码”。
该页面会返回存储分区键的十进制值。以下是存储分区键的示例。
现在我们已经有了存储分区密钥,接下来在我们一直在使用的文件夹中创建 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 中,您选择了 c网址 或 Postman 来向汇总服务端点发出 API 请求。下面列出了这两种方案的操作说明。
如果您的作业因出现错误而失败,请参阅 GitHub 上的问题排查文档,详细了解后续步骤。
3.2.1. 使用 createJob
端点进行批处理
请使用以下 c网址 或 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>",
"reporting_site": "<domain of reporting origin(s) of report>", // Only one of attribution_report_to or reporting_site is required as of v2.7.0
"report_error_threshold_percentage": "10",
"debug_run": "true"
}
}
执行以下请求。将 c网址 请求网址中的占位符替换为 frontend_service_cloudfunction_url
中的值,frontend_service_cloudfunction_url
是指在前提条件 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 规范中进行了记录。
Postman
对于 createJob
端点,您需要提供请求正文,以便向汇总服务提供可汇总报告、输出网域和摘要报告的位置和文件名。
前往 createJob
请求的“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>",
"reporting_site": "<domain of reporting origin(s) of report>", // Only one of attribution_report_to or reporting_site is required as of v2.7.0
"report_error_threshold_percentage": "10",
"debug_run": "true"
}
}
“发送”createJob
API 请求:
响应代码位于页面下半部分:
汇总服务接受请求后,您应该会收到 HTTP 202 响应。其他可能的响应代码在 API 规范中进行了记录。
3.2.2. 使用 getJob
端点检索批处理状态
请按照以下 c网址 或 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_status
、return_message
和 error_messages
(如果作业出错)。
Postman
如需检查作业请求的状态,您可以使用 getJob
端点。在 getJob
请求的“Params”部分中,将 job_request_id
值更新为在 createJob
请求中发送的 job_request_id
。
“发送”getJob
请求:
结果应返回作业请求的状态,并将 HTTP 状态设为 200。请求“Body”包含必要信息,例如 job_status
、return_message
和 error_messages
(如果作业出错)。
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,该 JSON 与以下内容类似。
如果您的 createJob
请求将 debug_run
设为 true,则您可以在 output_data_blob_prefix
中的调试文件夹中接收摘要报告。该报告采用 AVRO 格式,可以使用上述命令转换为 JSON。
该报告包含存储分区键、未添加噪声的指标以及添加到未添加噪声的指标中以形成摘要报告的噪声。报告类似于以下内容。
注释还包含“in_reports”和/或“in_domain”,这表示:
- in_reports - 该分桶键可在可汇总报告中使用。
- in_domain - 存储分区密钥位于 output_domain AVRO 文件中。
Codelab 已完成!
摘要:您已在自己的云环境中部署汇总服务、收集调试报告、构建输出网域文件、将这些文件存储在 Cloud Storage 存储分区中,并成功运行作业!
后续步骤:继续在您的环境中使用汇总服务,或按照第 4 步中的清理说明删除您刚刚创建的云资源。
4. 4. 清理
如需删除通过 Terraform 为汇总服务创建的资源,请在 adtech_setup
和 dev
(或其他环境)文件夹中使用 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