本文档简要介绍了将现有 Looker 实例从 Looker(原始版本)环境迁移到 Looker (Google Cloud Core) 的技术步骤。
Looker (Google Cloud Core) 是一个与 Google Cloud 平台深度集成的部署环境。Looker (Google Cloud Core) 托管在 Google Cloud 基础架构上;您可以直接通过 Google Cloud 控制台进行管理;并且它与 Google Cloud的许多其他产品、服务和功能深度集成。
准备工作
- 请参阅以下文档,熟悉 Google Cloud 相关原则和工具:
- 请与您的客户代表联系,了解迁移事宜以及您的 Looker(原始版本)实例是否符合条件。如果您的实例符合条件,并且您已将现有的 Looker(原始版本)合约升级为涵盖 Looker (Google Cloud Core),则可以完成本文档中的步骤来迁移您的实例。
-
如需获得为迁移做准备所需的权限,请让管理员向您授予将要存放 Looker (Google Cloud Core) 实例的 Google Cloud 项目的以下 IAM 角色:
-
创建 Looker (Google Cloud Core) 实例:
Looker 管理员 (
roles/looker.admin
)。 -
在 Google Cloud 项目中分配 IAM 角色:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
)。 -
创建 Cloud Storage 存储分区:
Storage Admin (
roles/storage.admin
)。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
创建 Looker (Google Cloud Core) 实例:
Looker 管理员 (
- 如需管理 Looker(原始)实例以准备进行迁移,您必须拥有该实例中的 Admin Looker 角色。
创建新的“空”Looker (Google Cloud Core) 实例。
请务必为新的 Looker (Google Cloud Core) 实例选择适当的版本、网络连接类型(公共 IP 或专用 IP)以及其他配置属性(CMEK、VPC-SC),以确保该实例具有必要的功能。Looker (Google Cloud Core) 中的某些功能取决于所选版本或所选网络类型。
请将实例保持“空”状态;不要向其中填充任何数据,例如模型文件、用户、关联、探索、信息中心或文件夹。在导入步骤期间,所有设置或内容都将被清除,并替换为迁移中的数据。
不过,通过 Google Cloud 控制台指定或只能在实例创建期间指定的 Looker (Google Cloud Core) 配置属性不会在迁移过程中被覆盖。
概览
概括来讲,迁移过程包括以下步骤。
- 确保您的 Looker(原始版本)实例已准备好进行迁移。
- 从 Looker(原始版本)实例导出数据。
- 将数据导入新的“空”Looker (Google Cloud Core) 实例。
- 完成 Looker (Google Cloud Core) 实例的最终设置。
- 停用 Looker(原始版本)实例。
以下部分详细介绍了这些步骤。
确保您的 Looker(原始)实例已准备好进行迁移
您的 Looker(原始)实例必须满足以下前提条件,才能进行迁移:
- 您的 Looker(原始版本)实例必须由 Google 管理(换句话说,不是客户托管),并托管在 Google Cloud 或 Amazon Web Services 上。 Google Cloud
您的 Looker(原始版本)实例必须使用与当前 Looker (Google Cloud Core) 版本相差不超过 一个月发布版本的版本。如需查找当前的 Looker(Google Cloud 核心)版本,请参阅 Looker 版本说明,并查找最新的部署公告。
此外,请在迁移前执行以下活动:
Looker(原始版本)和 Looker (Google Cloud Core) 之间存在一小部分功能差异。请查看这些差异,确保 Looker (Google Cloud Core) 中的功能能够满足您持续的需求。
迁移会复制所有生产模式项目及其包含的模型文件,但不会复制属于个人用户的开发模式项目。为确保开发者模式文件能够通过迁移进行传输,您必须先将所有开发者模式项目中的所有文件提交到 Git 代码库,然后才能发起迁移。
Looker (Google Cloud Core) 仅支持 Google OAuth、SAML 和 OpenID Connect 身份验证方法。
- 如果您的 Looker(原始版本)实例使用其他身份验证方法(例如电子邮件和密码、LDAP 等),您需要将所有用户转换为使用 Looker (Google Cloud Core) 支持的身份验证方法。
- 如果您的 Looker(原始)实例已在使用 Google OAuth,则系统会转移所有用户记录,但您仍必须为 Looker (Google Cloud Core) 实例项目中的用户手动创建 IAM 权限。
- 如果您的 Looker(原始)实例使用 SAML,则必须将“SAML 身份验证”管理控制台页面上的使用以下方法合并用户设置设为 Google 或 OIDC,以免在测试 SAML 身份验证时出现错误。
- 如果您的 Looker(原始)实例使用 OIDC,则必须将 OpenID Connect 身份验证管理控制台页面上的使用以下方法合并用户设置设为 Google 或 SAML,以免在测试 OpenID Connect 身份验证时出现错误。
- 如果您使用的是外部身份提供方,则必须将身份提供方中的回调网址更新为 Looker(Google Cloud 核心)网址,以允许对新的 Looker(Google Cloud 核心)实例进行身份验证。
- 如果您的 Looker (Google Cloud Core) 实例将使用 SAML 或 OpenID Connect 作为身份验证方法,建议您还设置 Google OAuth,以用作 Looker (Google Cloud Core) 的备用身份验证方法。
- 如果您打算为 Looker (Google Cloud Core) 实例使用自定义网域,请先启用自定义网域,然后再为该实例设置 SAML 或 OpenID Connect。
在迁移期间,两个 Looker 实例(一个是 Looker [原始版本],一个是 Looker [Google Cloud Core])将并行运行一段时间。发生的任何自动活动(例如提醒和定期数据传送,以及访问后端数据库的后台活动)都可能会重复。为避免重复活动,请在 Looker(原始版本)或 Looker (Google Cloud Core) 实例中删除自动提醒和时间表。
从 Looker(原始)实例导出数据
若要从 Looker(原始)实例导出数据,需要完成以下两个步骤:
创建用于存储迁移数据的位置
在创建 Looker (Google Cloud Core) 实例的 Google Cloud 同一项目中执行以下所有操作。
- 创建一个新的 Cloud Storage 存储分区(例如
<bucket-name>
)。- 此存储分区将用于存储迁移数据。
- 请按照创建存储分区文档页面上的说明操作。
- 请注意,
<bucket-name>
在整个 Google Cloud中都必须是唯一的。我们建议在存储分区名称前面添加唯一标识符(例如项目 ID)。
- 为 Cloud Storage 存储分区中的文件夹确定一个名称(例如
<folder-name>
)。暂时不要创建该文件夹。在导出请求期间指定文件夹名称。系统会在导出过程中自动创建该文件。 - 在 Cloud KMS 中创建密钥环和密钥(例如
<kms_keyring_id>
和<kms-key-id>
)。- 此密钥将用于加密迁移数据。由于这是 KMS 密钥,因此您只需在 Looker(原始)管理面板的导出页面中披露密钥名称,而无需披露密钥本身。
- 请按照创建密钥环和创建密钥文档页面上的说明操作。
- 专门为迁移创建一个新的服务账号(例如
<export-service-account>
)。- 这与 Looker 服务账号不同。
- 按照创建服务账号文档页面上的说明操作。
向
<export-service-account>
授予两个特定的 IAM 角色:- Cloud Storage 存储分区上的
Storage Object Creator
- 在 KMS 密钥上点击
Cloud KMS CryptoKey Encrypter
- 请按照使用 IAM 权限 (Cloud Storage) 和使用 IAM 进行访问权限控制 (KMS) 文档页面中的说明操作。
- Cloud Storage 存储分区上的
创建与
<export-service-account>
关联的服务账号密钥,并下载 JSON 密钥文件。- 按照创建和删除服务账号密钥文档页面上的说明操作。
请求导出
确保实例已准备好进行迁移、创建了“空”Looker (Google Cloud Core) 实例,并创建了用于存储迁移数据的位置后,请在 Looker(原始)实例的管理面板中的导出页面中输入以下信息:
- 您创建的 Cloud Storage 存储分区的名称。
- Cloud Storage 文件夹名称 - 系统会在导出期间自动创建一个此名称的文件夹。导出完成后,导出文件将显示在您创建的 Cloud Storage 存储分区中此文件夹内的带时间戳的子文件夹中。
- KMS 密钥名称。
- 包含服务账号密钥的 JSON 文本。
在导出页面上输入信息后,点击请求导出以启动导出。
导出过程需要几分钟到几小时。导出完成后,您会在 Cloud Storage 存储分区和文件夹中看到多个导出文件(采用非人类可读格式)。这些文件是下一步导入步骤的输入内容。
将数据导入新的“空”Looker (Google Cloud Core) 实例
导出实例数据后,您可以将其导入 Looker (Google Cloud Core) 实例。
按照将数据从 Cloud Storage 导入 Looker (Google Cloud Core) 实例页面上的说明操作,将命令指向存放导出文件的存储分区和文件夹。
简而言之,这意味着:
- 向 Looker 服务账号(而非
<export-service-account>
)授予以下角色,以便其访问存储分区和 KMS 密钥:- Cloud Storage 存储分区上的
Storage Object User
- 在 KMS 密钥上点击
Cloud KMS CryptoKey Decrypter
- Cloud Storage 存储分区上的
- 通过 Google Cloud 控制台或 gcloud CLI 触发导入
导入操作需要几分钟到几小时的时间。完成后,您的 Looker (Google Cloud Core) 实例将会重启,并包含所有迁移的数据。
完成 Looker (Google Cloud Core) 实例的最终设置
此时,Looker 管理员可以前往实例网址并登录实例,以完成最终设置。
迁移过程会尽可能复制 Looker(原始)实例配置。不过,有些内容无法迁移,或者在 Looker (Google Cloud Core) 中运行方式略有不同,因此必须进行调整。
已知需要特别注意的一些事项包括:
常规设置(在 Looker 的管理面板中) |
系统不会自动复制常规设置的大多数选项(以及管理面板中的其他设置),因为这些设置在 Looker(Google Cloud 核心)中通常有所不同,或者不以相同的形式存在。您应根据所选的 Looker (Google Cloud Core) 配置仔细检查并配置所有设置。如需详细了解 Looker (Google Cloud Core) 中的设置,请参阅通过 Looker 管理 Looker (Google Cloud Core) 实例和通过 Google Cloud 控制台管理 Looker (Google Cloud Core) 实例文档页面。 |
用户 |
Looker (Google Cloud Core) 仅支持 Google OAuth、SAML 和 OpenID Connect 身份验证方法。 如果 Looker(原始)实例也配置了 Google OAuth,系统会复制用户记录及其属性(前提是这两种实例中的用户记录与同一 Google ID 和电子邮件地址相关联)。Project IAM Admin 必须向每个用户授予实例所在 Google Cloud 项目的 Looker Admin 或 Looker Instance User IAM 角色。 如果 Looker(原始)实例已配置为使用 SAML 或 OpenID Connect,请确保身份验证方法的使用以下方法合并用户字段仅指示 Looker(Google Cloud 核心)支持的身份验证方法。 如果 Looker(原始)实例的部分用户通过 Looker (Google Cloud Core) 不支持的机制(例如 LDAP 或电子邮件/密码)进行身份验证,则需要重新创建这些用户账号,并将其转换为受支持的身份验证方法。 |
数据库连接数 |
与 Looker(原始版本)相比,Looker (Google Cloud Core) 支持的一组数据库方言略有不同。系统会复制数据库连接的所有配置属性(包括连接字符串和密码,如果适用)。不过,Looker(Google Cloud 核心)中的不同网络拓扑结构可能会导致数据库连接无法立即生效。例如,如果通过特定于 Looker(原始)实例的防火墙或隧道访问数据库,您可能需要重新配置防火墙或隧道。您应测试每个连接,并根据需要重新建立连接。 |
使用 OAuth 进行数据库连接 |
从 Looker(原始版本)迁移到 Looker(Google Cloud 核心版)不会保留个别用户与 BigQuery 或 Snowflake 的数据库连接的 OAuth 访问令牌或刷新令牌。迁移后,当 Looker (Google Cloud Core) 用户查看引用 OAuth 数据库连接的探索或信息中心时,系统会提示他们重新进行 OAuth 身份验证。用户还可以前往账号页面,然后在 OAuth 连接凭据标题下为每个数据库选择登录,以重新对数据库进行身份验证。在用户使用 OAuth 凭据登录之前,由单个用户拥有且引用 OAuth 连接的所有自动安排或提醒都会中断。 |
Git 代码库关联 |
如果实例使用的是裸 Git 代码库,则这些代码库在运行时不应进行任何修改(复制,但不共享)。但是,如果实例连接到远程代码库,则可能需要验证并重新启用这些连接,与数据库连接类似。 |
其他网络配置 |
Looker 实例可能还有其他类型的网络连接(包括入站和出站连接,例如在专用 IP、Action Hub、Marketplace、电子邮件等情境中)。这些网络连接也必须经过验证。 |
用于访问 Looker (Google Cloud Core) 实例的网址 |
Looker (Google Cloud Core) 实例附带一个随机分配的主网址。如果需要通过特定网址访问实例,您可以配置自定义网域。 |
时间表和提醒 |
如果 Looker(原始版)和 Looker (Google Cloud Core) 实例同时处于活动状态,则可能会生成重复的定期操作和提醒,并执行访问关联数据库的重复后台操作。应尽快在其中一个实例中停用这些 activity。 在用户使用 OAuth 凭据登录之前,任何归单个用户所有且引用该用户的个人 OAuth 连接的自动安排或提醒都会中断。 |
维护窗口 |
与 Looker(原始版本)不同,您可以为 Looker (Google Cloud Core) 指定维护政策。 |
精英系统活动 |
在迁移过程中,系统不会复制 Elite 系统活动数据。Looker (Google Cloud Core) 实例将从全新的历史记录开始。 |
自定义网域 |
您可以为 Looker (Google Cloud Core) 实例创建自定义网域。您必须设置 DNS 记录,以确保 SSL 证书部署。此外,在启用自定义网域并设置身份验证方法后,请务必将身份验证客户端中的回调网址更新为自定义网域。您无法使用 如果您想使用 Looker(原始)实例的自定义网址为 Looker (Google Cloud Core) 实例创建自定义网域,则应在迁移完成并确认 Looker (Google Cloud Core) 实例可以使用后设置自定义网域。启用自定义网域后,用户访问实例网址时会看到 Looker (Google Cloud Core) 实例,而不是 Looker(原始版本)实例。 请勿为 Looker (Google Cloud Core) 实例设置 SAML 或 OpenID Connect,除非该实例已准备就绪、DNS 记录已更新且自定义网域已启用。 |
书签 |
如果您在 Looker(原始)实例中使用自定义网址(不使用 启用自定义网域后,指向 Looker(原始版本)内容(例如 此流程不适用于使用网域 |
该列表并不详尽。请先测试实例中对您最重要的所有方面,然后再考虑迁移是否已完成。
迁移完成后,如果您确定不需要再次导出,可以删除您之前创建的 <export-service-account>
,这样系统就会废弃为其共享的 JSON 键。
停用 Looker(原始版本)实例
迁移后的 Looker (Google Cloud Core) 实例正常运行后,您可以向用户发送实例的网址,并指示他们开始访问该实例,停止访问 Looker(原始)实例。
问题排查
以下部分可能会帮助您解决导入或导出期间的问题。
导出过程中出现的问题
如果 Looker(原始)数据导出出现问题,管理面板的导出页面上会显示状态为错误。点击 ERROR 状态可显示错误消息。
常见的错误来源包括:
- Cloud Storage 存储分区、KMS 密钥或
<export-service-account>
无效。 <export-service-account>
缺少必要的权限。
在提交导出请求之前,请先确认这些对象的状态。
导入过程中出现的问题
如果导入操作在 4 小时后仍未完成(如果来源实例非常大,则可能需要更长时间),或者导入操作在退出时出错,您可能需要向 Cloud Customer Care 提交工单来解决此问题。客户对此操作的诊断信息相对较少。
后续步骤
- 管理设置 - 导出
- 将 Looker (Google Cloud Core) 连接到您的数据库
- 设置 Looker (Google Cloud Core) 实例
- 管理用户对 Looker (Google Cloud Core) 实例的访问权限
- 通过 Google Cloud 控制台管理 Looker (Google Cloud Core) 实例
- 通过 Looker 管理 Looker (Google Cloud Core) 实例