本部分介绍 Synchronizer。
Synchronizer 概览
在 Apigee Hybrid 中,Synchronizer 的主要作业是轮询和下载由管理层面提供的运行时合同。合同传达的信息包括 API 代理、API 产品、缓存和虚拟主机。默认情况下,Synchronizer 将环境配置数据存储在 Cassandra 数据库中。
在运行时层面运行的 Synchronizer 实例应定期轮询管理层面、下载合同,并将其提供给本地运行时实例。
一个 Synchronizer 可以支持同一个 pod 中部署的多个信息处理机。
启用 Synchronizer 访问权限
您必须授予 Synchronizer 权限,才能从管理层面中拉取 Apigee 软件工件,例如代理软件包和资源。您必须调用 Apigee API 以授权 Synchronizer 将工件从管理层面向下提取到运行时层面。
- 确保您已按照 Google Cloud 设置步骤中的说明启用了 Apigee API。有关详情,请参阅第 3 步:启用 API。
- 找到作为创建服务账号的一部分而下载的允许写入的 Google Cloud 服务账号密钥(JSON 文件)。该服务账号名为“apigee-org-admin”,并且拥有 Apigee Org Admin 角色。如果您之前未创建此服务账号,则必须先执行此操作,然后才能继续。
-
将
GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为服务账号密钥所在的路径:export GOOGLE_APPLICATION_CREDENTIALS=your_sa_credentials_file.json
- 调用 setSyncAuthorization API 以启用 Synchronizer 所需的权限:
curl -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/your_org_name:setSyncAuthorization" \ -d '{"identities":["serviceAccount:synchronizer-manager-service-account-name"]}'
其中:
your_org_name
:混合组织的名称。synchronizer-manager-service-account-name
:拥有 Apigee Synchronizer Manager 角色的服务账号的名称。该名称的格式类似于电子邮件地址。例如:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com
例如:
curl -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/my_org:setSyncAuthorization" \ -d '{"identities":["serviceAccount:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com"]}'
如需详细了解此 API,请参阅 SyncAuthorization API。
- 要验证是否已设置服务账号,请调用以下 API 来获取服务账号列表:
curl -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type:application/json" \ "https://apigee.googleapis.com/v1/organizations/your_org_name:getSyncAuthorization" \ -d ''
输出类似于以下内容:
{ "identities":[ "serviceAccount:my-synchronizer-manager-service_account@my_project_id.iam.gserviceaccount.com" ], "etag":"BwWJgyS8I4w=" }