使用 Google Cloud Platform (GCP) 上的汇总服务

1. 1. 前提条件

预计完成时间:1-2 小时

执行此 Codelab 有两种模式:本地测试聚合服务。本地测试模式需要本地计算机和 Chrome 浏览器(无需创建/使用 Google Cloud 资源)。汇总服务模式需要在 Google Cloud 上完整部署汇总服务。

如需在任一模式下执行此 Codelab,您需要满足一些前提条件。每项要求都会相应地注明是本地测试还是汇总服务所必需的。

1.1. 完成注册和证明(汇总服务)

如需使用 Privacy Sandbox API,请确保您已针对 Chrome 和 Android 完成注册和证明

1.2. 启用广告隐私权 API(本地测试和汇总服务)

由于我们将使用 Privacy Sandbox,因此建议您启用 Privacy Sandbox Ads API。

在浏览器中,前往 chrome://settings/adPrivacy 并启用所有广告隐私权 API。

此外,请确保已启用第三方 Cookie

chrome://settings/cookies 中,确保第三方 Cookie 未被屏蔽。此设置菜单上可能会显示不同的选项,具体取决于您的 Chrome 版本,不过可接受的配置包括:

  • “阻止所有第三方 Cookie”= 已停用
  • “阻止第三方 Cookie”= 已停用
  • “在无痕模式下阻止第三方 Cookie”= 已启用

启用 Cookie

1.3. 下载本地测试工具(本地测试)

使用本地测试时,您需要下载本地测试工具。该工具将根据未加密的调试报告生成摘要报告。

您可以在 GitHub 中的 Cloud Functions JAR 归档中下载本地测试工具。应将其命名为 LocalTestingTool_{version}.jar

1.4. 确保已安装 JAVA JRE(本地测试和汇总服务)

打开“Terminal”(终端),然后使用 java --version 检查机器是否已安装 Java 或 openJDK。

查看 Java 版本

如果未安装,您可以从 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 资源。

“部署说明”中的关键步骤:

  1. 设置“gcloud”在您的环境中使用 CLI 和 Terraform。
  2. 创建一个 Cloud Storage 存储分区来存储 Terraform 状态。
  3. 下载依赖项。
  4. 更新 adtech_setup.auto.tfvars 并运行 adtech_setup Terraform。如需查看示例 adtech_setup.auto.tfvars 文件,请参阅附录。记下此处创建的数据存储分区的名称 - 此 Codelab 将用来存储我们创建的文件。
  5. 更新 dev.auto.tfvars,模拟部署服务账号并运行 dev Terraform。如需查看示例 dev.auto.tfvars 文件,请参阅附录。
  6. 部署完成后,从 Terraform 输出中捕获 frontend_service_cloudfunction_url,在后续步骤中向汇总服务发出请求时需要用到该文件。

1.7.完成汇总服务新手入门(汇总服务)

整合服务要求必须通过培训,协调员才能使用服务。填写汇总服务新手入门表单,提供您的举报网站和其他信息,选择“Google Cloud”,然后输入您的服务账号地址。此服务账号在之前的前提条件 (1.6.设置 GCP 环境)。(提示:如果您使用提供的默认名称,则此服务账号将以“worker-sa@”开头)。

新手入门流程最多需要 2 周才能完成。

1.8.确定调用 API 端点的方法(聚合服务)

此 Codelab 提供了 2 个用于调用 Aggregation Service API 端点的选项:cURLcURL。使用 c网址 时,从终端调用 API 端点的速度更快、更简便,因为使用 c网址 所需的设置极少,无需额外的软件。但是,如果您不想使用 c网址,则可以改用 Postman 执行并保存 API 请求,以备将来使用。

在第 3.2 节中:您可以在“Aggregation Service Usage”中找到关于使用这两个选项的详细说明。您可以立即预览这些结果,以确定要使用的方法。如果您选择 Postman,请执行以下初始设置。

1.8.1.设置工作区

注册 Postman 账号。注册后,系统会自动为您创建一个工作区。

Postman 工作区

如果系统没有为您创建工作区,请前往“工作区”顶部导航项,然后选择“创建工作区”。

选择“空白工作区”,点击“下一步”,将其命名为“GCP Privacy Sandbox”。选择“个人”然后点击“创建”。

下载预配置的工作区 JSON 配置全局环境文件

将两个 JSON 文件导入“我的工作区”通过“导入”菜单按钮。

导入按钮

此操作将创建“GCP Privacy Sandbox”以及 createJobgetJob HTTP 请求。

1.8.2.设置授权

点击“GCP Privacy Sandbox”然后找到“授权”部分标签页。

授权按钮

您将使用“不记名令牌”方法。在终端环境中,运行以下命令并复制输出。

gcloud auth print-identity-token

然后,将此令牌值粘贴到字段中:

令牌字段

1.8.3.设置环境

前往“环境快速查看”:

“环境”按钮

点击“修改”然后更新“Current Value”为“environment”“region”和“cloud-function-id”:

设置当前值

您可以保留“request-id”暂时为空,稍后我们会进行填充。对于其他字段,请使用 frontend_service_cloudfunction_url 中的值,该值是在前提条件 1.6 中成功完成 Terraform 部署后返回的。网址格式如下:https://--frontend-service--uc.a.run.app

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 flag 和 CLI 开关

在本演示中,我们将使用 Privacy Sandbox 演示网站。点击链接前往该网站;然后,您可以在 chrome://private-aggregation-internals 上查看这些报告:

Chrome 内部页面

发送到 {reporting-origin}/.well-known/private-aggregation/debug/report-shared-storage 端点的报告也可以在“报告正文”中找到Chrome 内部报告页面上显示的部分报告。

在这里,您可能会看到许多报告,但对于此 Codelab,请使用由调试端点生成的 GCP 专用可汇总报告。“举报网址”将包含“/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 文件夹(在前提条件 1.5 中下载的代码库中)中创建一个 JSON 文件。

在本例中,我们使用的是 vim,因为我们使用的是 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 文件,您需要可从报告中检索到的存储分区键。

桶键由 adTech 设计。不过,在这种情况下,存储分区密钥由 Privacy Sandbox 演示网站创建。由于此网站的不公开汇总处于调试模式,因此我们可以使用“报告正文”中的 debug_cleartext_payload以获取存储分区密钥。

接下来,从报告正文中复制 debug_cleartext_payload

调试明文载荷

打开 goo.gle/ags-payload-decoder,然后将您的 debug_cleartext_payload 粘贴到“INPUT”中框并点击“解码”。

“解码”按钮

页面返回存储分区键的小数值。以下是一个示例存储分区键。

存储分区键

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

Codelab 已完成!

摘要:您已收集调试报告,构建了输出网域文件,并使用本地测试工具生成了摘要报告(模拟了汇总服务的汇总行为)。

后续步骤:现在,您已经试用了本地测试工具,接下来可以在您自己的环境中实时部署汇总服务,尝试执行相同的操作。重新查看前提条件,确保您已为“汇总服务”完成所有设置,然后继续执行第 3 步。

3. 3. 汇总服务 Codelab

预计完成时间:1 小时

在开始之前,请确保您已完成带有“汇总服务”标签的所有前提条件。

Codelab 步骤

第 3.1 步:Aggregation Service Input Creation:创建为 Aggregation Service 进行批处理的汇总服务报告。

  • 第 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 Usage:使用 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 上查看这些报告:

Chrome 内部页面

发送到 {reporting-origin}/.well-known/private-aggregation/debug/report-shared-storage 端点的报告也可以在“报告正文”中找到Chrome 内部报告页面上显示的部分报告。

在这里,您可能会看到许多报告,但对于此 Codelab,请使用由调试端点生成的 GCP 专用可汇总报告。“举报网址”将包含“/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

对于此 Codelab,我们将手动执行报告收集。在生产环境中,广告技术人员应以编程方式收集并转换报告。

接下来,复制“报告正文”中的 JSON 报告chrome://private-aggregation-internals起。

在本示例中,我们使用 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 文件,您需要可从报告中检索到的存储分区键。

桶键由 adTech 设计。不过,在这种情况下,存储分区密钥由 Privacy Sandbox 演示网站创建。由于此网站的不公开汇总处于调试模式,因此我们可以使用“报告正文”中的 debug_cleartext_payload以获取存储分区密钥。

接下来,从报告正文中复制 debug_cleartext_payload

调试明文载荷

打开 goo.gle/ags-payload-decoder,然后将您的 debug_cleartext_payload 粘贴到“INPUT”中框并点击“解码”。

“解码”按钮

页面返回存储分区键的小数值。以下是一个示例存储分区键。

存储分区键

现在我们有了存储分区键,让我们在之前使用的文件夹中创建 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 中,您已选择向汇总服务端点发出 API 请求,而选择了 c网址 或 Postman。您可以在下面找到有关这两个选项的说明。

如果您的作业因错误而失败,请查看我们在 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 中的值,该值会在前提条件 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 请求的“正文”标签页:

“正文”标签页

替换所提供的 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 的作业请求状态。请求“正文”包含 job_statusreturn_messageerror_messages 等必要信息(如果作业出错)。

Postman

如需检查作业请求的状态,您可以使用 getJob 端点。在“参数”中部分中,将 job_request_id 值更新为 createJob 请求中发送的 job_request_idgetJob

职位申请 ID

“发送”getJob 请求:

“发送”按钮

结果应返回 HTTP 状态为 200 的作业请求状态。请求“正文”包含 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 中的“debug”文件夹中收到摘要报告。报告采用 AVRO 格式,可以使用上述命令将其转换为 JSON。

该报告包含桶键、未添加噪声的指标,以及添加到不带噪声的指标以生成摘要报告的噪声。报告类似于以下内容。

添加了噪声的报告

这些注释还包含“in_reports”和/或“in_domain”也就是说:

  • in_reports - 存储分区键在可汇总报告中可用。
  • in_domain - 存储分区密钥可在 output_domain AVRO 文件中找到。

Codelab 已完成!

摘要:您已在自己的云环境中部署了汇总服务,收集了调试报告,构建了输出网域文件,将这些文件存储在了 Cloud Storage 存储分区中,并且成功运行了作业!

后续步骤:继续在您的环境中使用汇总服务,或按照第 4 步中的清理说明删除刚刚创建的云资源。

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