通过 Action Hub 分享数据

除了向 Looker 的内置目标位置提供内容之外,您还可以使用操作(也称为集成)通过操作中心服务器将内容传送到与 Looker 集成的第三方服务。

本页面将向您介绍构建自定义操作的各种选项,您可以请求将这些操作添加到 Looker Action Hub 添加到自己的私有操作中心服务器。本页面还介绍了如何启动本地操作中心服务器以测试自定义操作或运行专用操作中心服务器。

若要开始使用操作,您可以执行以下任一操作:

将操作添加到操作中心后,Looker 管理员可以enable该操作,以便用于向这些服务传送 Looker 内容

如果您希望通过 Looker Action Hub 使用 Looker 的集成功能,同时托管自己的私密操作或自定义操作,还可以设置多个操作中心。每个操作中心的操作都会显示在管理面板的操作页面上。

Looker 操作中心

Looker 托管并提供 Looker Action Hub,后者是一个实现 Looker 的 Action API 并公开常用操作的无状态服务器。您的用户使用操作发送的所有数据都会在 Looker Action Hub 服务器(而不是 Looker 实例)中临时处理。

Looker 已经与多项服务集成。请参阅管理设置 - 操作文档页面,了解如何启用这些现有服务。

Looker Action Hub 要求

Looker 操作中心必须能够通过以下方式发送和接收 API 请求:

如果您的 Looker 部署无法满足这些请求,或者您的 Looker 实例上启用了 IP 许可名单功能,请考虑设置本地操作中心服务器来提供专用 Looker 集成自定义操作。客户托管实例的管理员还可以部署专用于 OAuth 和流式传输操作的本地操作服务器

从 Looker 实例向 Looker Action Hub 网络发出的请求

actions.looker.com 的请求会解析为动态 IP 地址。从 Looker 实例发出的传出请求必须能够到达以下端点:

actions.looker.com/
actions.looker.com/actions/<name>/execute
actions.looker.com/actions/<name>/form

其中 name 是操作的程序化名称

从 Looker 用户的浏览器向 Looker Action Hub 网络发出的请求

Looker 用户的浏览器必须能够向以下 Looker Action Hub 端点(针对 OAuth)发出请求:

actions.looker.com/actions/<name>/oauth

其中 name 是操作的程序化名称

从 Looker Action Hub 网络向 Looker 实例发出的请求

Looker 操作中心必须向 Looker 实例发出请求,以请求执行支持流式结果或使用 OAuth 的操作。

流式操作使该操作能够使用提供所有结果的查询。启用 OAuth 的操作通过 OAuth 2.0 流程使用按用户进行的身份验证。OAuth 操作必须将用户凭据存储在其来源 Looker 实例中,因为 Looker Action Hub 是无状态的多租户,不会存储任何种类的用户专用凭据。

从 Looker 操作中心向 Looker 实例发出的请求采用以下形式:

GET <host_looker_url>/downloads/<random_40_char_token>
POST <host_looker_url>/action_hub_state/<random_40_char_token>

这些网址是在 Looker 实例中的现场生成,然后再发送到 Looker 操作中心。因此,Looker Action Hub 需要能够将 <host_looker_url> 解析为 IP 地址,向 Looker 实例所在的网络发出请求。

Looker Action Hub 具有静态出站流量 IP 地址,请求将始终来自这些地址:35.153.89.114104.196.138.16335.169.42.87。启用了 IP 许可名单的 Looker 托管实例的管理员必须添加这些 IP 地址,才能执行任何支持流式结果或使用 OAuth 的操作。

客户托管实例的注意事项

如需使用 Looker 集成,Looker Action Hub 必须能够与 Looker 实例通信,并满足 Looker 操作中心要求。由于各种原因,使用客户托管的 Looker 实例并不总是能够做到这一点。如果无法在 Looker 操作中心与 Looker 实例之间进行双向通信,则 Looker 操作中心可能会出现意外或不良行为,例如查询挂起或操作不可用。

为了解决 Looker Action Hub 无法与 Looker 实例通信这一潜在问题,Looker 管理员可以采用本页面后面部分介绍的其中一种解决方案。合适的解决方案或解决方案组合取决于 Looker 实例的架构:

  • 如果 Looker 操作中心无法解析客户托管的实例(即 Looker 操作中心无法接收来自 Looker 实例的请求),Looker 管理员可以与 Google Cloud 销售专家联系,以启用 public_host_url 许可功能。该许可功能会显示 --public-host-url 启动选项,该选项可让管理员指定不同于实例 <host_looker_url> 的可解析 <public_host_url> 主机名。public_host_url 会替换某些特定 Looker Action Hub 回调网址的主机名,并通过将 public_host_url 作为可公开解析名称的反向代理来路由这些回调网址。此反向代理仅接受来自 Looker Action Hub 的静态出站流量 IP 地址的请求;使用此方法的 Looker 管理员必须将 Looker Action Hub 向 Looker 实例发出请求的出站流量 IP 地址(35.153.89.114104.196.138.16335.169.42.87)添加到许可名单中。

  • 如果 Looker 实例可以解析客户托管的实例网址,但 Looker Action Hub 无法向 Looker 实例发送请求,则用户可能无法配置或使用支持流式结果或使用 OAuth 的操作。为解决此问题,Looker 管理员必须在许可名单中添加 Looker Action Hub 向 Looker 实例发出请求的出站流量 IP 地址:35.153.89.114104.196.138.16335.169.42.87

  • 如果上述解决方案均不适合 Looker 实例架构,Looker 管理员可以为所有操作部署客户托管的操作中心,也可以仅为支持流式结果或使用 OAuth 的操作部署。

  • 如需部署客户托管的操作中心,您必须确保 JAR 文件托管在公共服务器上,以便 Looker Action Hub 可以与其通信。但不建议使用此解决方案。

此外,如果由客户托管的 Looker 实例使用的 SSL 证书是由证书授权机构 (CA) 颁发的,而该证书授权机构不在这份根证书列表中,则 OAuth 和流式传输操作可能无法在该实例上使用。

构建自定义操作

本部分介绍了使用 Looker Action Hub 源代码编写和测试自定义操作的步骤。如需查看功能代码示例,请在 GitHub 的 looker-open-source/actions 代码库中查看现有操作。

您可以通过以下方式创建自定义操作:

  1. 设置开发代码库
  2. 编写操作
  3. 测试您的操作
  4. 在 Looker Action Hub 或您自己的私有操作中心服务器上发布和启用操作

与任何操作一样,您可能需要使用特定参数配置 LookML 模型,然后才能使用该操作传送数据。

设置开发代码库

Looker Action Hub 是一个使用 TypeScript 编写的 Node.js 服务器,后者是一个基于现代 JavaScript 的小层,添加了类型信息来帮助捕获编程错误。如果您熟悉 JavaScript,应该熟悉大多数 TypeScript 语言。

运行 Looker Action Hub 需要以下软件:

  • Node.js
  • Node Version Manager (NVM) - 用于选择合适的 Node.js 版本
  • Yarn(用于管理依赖项)

安装所需的软件后,您就可以设置开发环境了。以下示例使用 Git。

  1. 在本地克隆 looker-open-source/actions 代码库:

    git clone git@github.com:looker-open-source/actions.git
    
  2. actions/src/actions 目录中使用您的操作名称创建目录。例如:

    mkdir actions/src/actions/my_action
    
  3. 开始在目录中填充执行相应操作所需的文件。如需查看示例文件结构,请参阅 Actions GitHub 代码库

Looker 建议您同时添加以下内容:

  • 用于说明您操作的目的和方式的 README 文件
  • 要在 Looker 操作中心(或 Looker 实例上的私密操作中心)和 Looker 数据传输窗口中显示的 PNG 图标
  • 您想要在操作代码上运行的测试的所有文件 - 这与测试操作不同

编写操作

Looker Action Hub 服务器的设计要求是它完全保持无状态,因此不允许在 Action 应用或服务中存储任何信息。必须在操作文件的请求调用中提供完成相应操作所需的所有信息。

操作文件的确切内容会因服务、操作的类型或级别以及需要指定的数据或可视化格式而异。您还可以为 OAuth 2.0 授权流程配置此操作

操作文件基于 /execute API 方法。每当用户在 Looker 中执行操作时,系统都会向 Looker API 请求传递 DataActionRequestDataActionRequest 包含执行操作所需的所有数据和元数据。还可以使用 /form 方法,该方法可用于在用户执行操作之前向用户收集更多信息。当用户选择将某项操作作为数据传输的目的地时,您在 /form 中指定的字段将显示在发送时间安排弹出式窗口中。

编写操作文件时,请在操作定义中至少添加以下标记为必需的参数:

参数 必填 说明 数据类型
name 操作的唯一名称。此名称在 Looker 操作中心内的所有操作中应该是唯一的。 字符串
url 此操作的 /execute 端点的绝对网址。 字符串
label 操作的直观易懂的标签。 字符串
supportedActionTypes 操作支持的操作类型的列表。有效值为 "cell""query""dashboard" 字符串
formURL 此操作的 /form 端点的绝对网址。 字符串
description 操作的说明。 字符串
params 操作的 parameters 数组。为每个参数添加名称、标签和说明(采用字符串格式)。这些字段会显示在管理面板中相应操作的启用页面上。如需管理用户向操作目的地提供数据的方式,您可以指定用户属性,且用户必须为其指定值。 parameters
supportedFormats 操作支持的数据格式列表。有效值为 "txt""csv""inline_json""json""json_detail", "json_detail_lite_stream", "xlsx", "html", "wysiwyg_pdf", "assembled_pdf", and "wysiwyg_png". 字符串
supportedFormattings 此操作支持的格式选项列表。有效值为 "formatted""unformatted" 字符串
supportedVisualizationFormattings 此操作支持的可视化格式设置选项列表。有效值为 "apply""noapply" 字符串
iconName 表示操作的图标图片的数据 URI。 字符串
requiredFields 与此操作兼容的必填字段的说明列表。如果此列表中有多个条目,则该操作需要多个字段。 RequiredField
supportedDownloadSettings 一个布尔值,用于确定是否向相应操作发送一次性下载网址,以便实现无限数据流式传输。该参数由 usesStreaming 形参设置,它是一个 true/false 布尔值。如果为 usesStreaming = true,则 supportedDownloadSettings = url。如果为 usesStreaming = false,则 supportedDownloadSettings = push 布尔值
usesOAuth 确定操作是否为 OAuth 操作的布尔值。这将决定系统是否会向相应操作发送一个一次性链接,以便其能够针对特定用户为此操作设置 state 布尔值
usesStreaming 一个布尔值,用于确定操作是否支持流式查询结果。查看集成服务列表中的使用数据流(是/否)列。流式传输结果的操作可能需要配置本地操作中心服务器。如需了解详情,请参阅为使用 OAuth 或流式传输的操作设置本地操作中心 布尔值
minimumSupportedVersion 操作在管理面板“操作中心”列表中显示的最低 Looker 版本。 字符串

GitHub 上提供了 Looker Action Hub 操作的示例,以供参考。

支持的操作类型

正如操作的 supportedActionTypes 参数中所指定,Looker 支持三种类型的操作:查询、单元格和信息中心。

  • 查询级操作:这是发送整个查询的操作。例如,“细分操作”就属于查询级操作。
  • 单元格级操作:单元格级操作用于发送数据表中单个特定单元格的值。此操作类型与数据操作不同,数据操作可以使用 action 参数为维度或测量定义。为了从表格中的特定单元格发送信息,Looker 会使用标记将操作映射到相应单元格。操作需要指定其在 requiredFields 中支持的标记。如需映射操作和字段,LookML 中的字段需要使用 LookML tags 参数指定它们映射到哪些标记。例如,Twilio Message 操作使用 phone 标记,以便 LookML 开发者可以控制要显示 Twilio 操作的手机号码字段。
  • 信息中心级操作:信息中心级操作支持发送信息中心图片。 例如,SendGrid 操作通过电子邮件发送信息中心图片。

向自定义操作添加用户属性

对于自定义操作,您可以在操作文件的 params 参数中添加用户属性。如果该参数是必需参数,则除了拥有 send_to_integration 权限之外,每位用户还必须为其用户帐号或其所属的用户组定义此属性的值,才能在发送或安排内容时将操作视为目标位置选项。

如需为操作添加用户属性,请执行以下操作:

  1. 如果 user_attribute_param 尚不存在,Looker 管理员可能需要创建用户属性
  2. 针对需要将内容传送到操作目标的用户或用户群组,为其定义有效的属性值。(这些用户还必须拥有 send_to_integration 权限。)
  3. params 参数表示 Looker 管理员必须在相应操作的启用页面上从管理面板的操作列表配置的表单字段。在您的操作文件的 params 参数中添加以下内容:
  params = [{
    description: "A description of the param.",
    label: "A label for the param.",
    name: "action_param_name",
    user_attribute_name: "user_attribute_name",
    required: true,
    sensitive: true,
  }]

其中 user_attribute_name 是在管理面板用户部分的用户属性页面上的名称字段中定义的用户属性,required: true 表示用户必须为该用户属性定义非 null 且有效的值,才能在传送数据时查看操作;sensitive: true 表示用户属性已加密,且输入后绝不会显示在 Looker 界面中。您可以指定多个用户属性子参数。

  1. 将更新部署到 Action Hub 服务器。
    • 如果您要添加新操作,则需要由 Looker 管理员启用操作,方法是在管理面板的操作页面上,点击相应操作旁边的启用按钮。
    • 如果您要更新现有操作,请点击刷新按钮来刷新操作列表。接下来,点击设置按钮。
  2. 在操作设置/启用页面上,Looker 管理员必须配置操作的表单字段,以从用户属性中提取信息,方法是点击相应字段右侧的用户属性图标 ,然后选择所需的用户属性。

在单元格级操作中使用 requiredField 参数

对于单元格级操作,您可以通过在操作文件的 requiredFields 参数中指定您的操作支持的标记配置模型的 LookML 字段以向该操作目标位置传送数据。

参数 必填 说明 数据类型
tag 如果存在,则匹配具有此标记的字段。 字符串
any_tag 如果存在,则取代 tag 并匹配包含任何所提供标记的字段。 字符串
all_tags 如果存在,则取代 tag 并匹配包含所有所提供标记的字段。 字符串

支持的数据格式

DataActionRequest 类定义了哪些数据传输格式可供操作使用。对于查询级操作,请求将包含可采用多种格式的附件。该操作可以指定一个或多个 supportedFormats,也可以让用户通过指定所有可能的格式来选择格式。对于单元格级操作,单元格的值将显示在 DataActionRequest 中。

为 OAuth 配置操作

您可以配置操作,以便用户通过 OAuth 进行身份验证并执行该操作。虽然 Looker Action Hub 必须保持无状态,但您可以通过 Looker Action API 中的表单请求强制执行状态。

Looker 操作 OAuth 流程

对于 Looker 操作中心中的操作,您可以扩展 OAuthAction(而非 Hub.Action)来设置布尔值,以指明在操作中验证用户身份时需要使用哪些 OAuth 方法。对于每个已启用 OAuth 或已启用状态的操作,Looker 会存储每个用户和每个操作的状态,以便每个操作和用户组合都有一个独立的 OAuth 事件。

创建操作的流程通常涉及 /form 请求,后跟 /execute 请求。对于 OAuth,/form 请求应提供一种方法来确定用户是否在目标服务中通过了身份验证。如果用户已通过身份验证,操作应根据 /execute 请求的要求返回正常的 /form。如果用户未经过身份验证,该操作将返回一个链接,用于初始化 OAuth 流程。

使用 OAuth 网址保存状态

Looker 会将正文为空的 HTTP POST 请求发送到 ActionList 端点。如果该操作在其定义中返回 uses_oauth: true,系统会在 Looker 的每个 /form 请求中向该操作发送一次性 state_urlstate_url 是一个特殊的一次性网址,用于设置用户针对某项指定操作的状态。

如果用户未通过端点进行身份验证,返回的 /form 应包含类型为 oauth_linkform_field,该类型会转到操作的 /oauth 端点。state_url 应进行加密,并以 state 参数的形式保存在返回的 oauth_url 中。例如:

{
        "name": "login",
        "type": "oauth_link",
        "label": "Log in",
        "description": "OAuth Link",
        "oauth_url": "ACTIONHUB_URL/actions/my_action/oauth?state=encrypted_state_url"
}

在此示例中,/oauth 端点将用户重定向到身份验证服务器。/oauth 端点在 OAuth 操作的 oauthUrl(...) 方法中构建重定向,如 Dropbox OauthUrl 中所示。

包含该加密 state_urlstate 参数应传递到 Looker 操作中心。

使用操作中心重定向 URI 保存状态

/oauth 端点中,系统还会为操作中心创建 redirect_uri,并将其传递给操作的 oauthUrl(...) 方法。此 redirect_uri 采用 /actions/src/actions/my_maction/oauth_redirect 格式,是在身份验证返回结果时使用的端点。

此端点将调用 oauthFetchInfo(...) 方法,该方法应通过 OauthAction 方法实现,以提取必要的信息并尝试接收或保存从身份验证服务器收到的任何状态或 auth

state 对加密的 state_url 进行解密,并使用它将 state POST 回 Looker。当用户下次向该操作发出请求时,系统会将新保存的状态发送到 Looker 操作中心。

将操作文件添加到 Looker Action Hub 仓库

编写完操作文件后,在 Looker Action Hub 代码库中:

  1. 将操作文件(例如 my_action.ts)添加到 actions/src/actions/index.ts

    import "./my_action/my_action.ts"
    
  2. 添加您在编写操作时用到的任何 Node.js 软件包要求。例如:

    yarn add aws-sdk
    yarn add express
    
  3. 安装 Looker Action Hub 服务器的 Node.js 依赖项。

    yarn install
    
  4. 运行您编写的所有测试。

yarn test

测试操作

如需进行完整测试,您可以托管私有操作中心服务器,对 Looker 实例执行您的操作。此服务器必须位于公共互联网上且具备有效的 SSL 证书,并且必须能够发起和接收与 Looker 之间的连接或 HTTPS 请求。为此,您可以使用 Heroku 等基于云的平台,如以下示例所示。或者,您也可以使用任何满足上述要求的平台。

设置本地操作中心服务器

在此示例中,我们将执行在 looker-open-source/actions/src/actions GitHub 代码库中开发的操作,并将代码提交到新的 Git 分支。我们建议您使用分支来开发功能,以便轻松跟踪代码,并根据需要使用 Looker 轻松创建 PR。

  1. 首先,请创建分支,然后暂存并提交您的工作。例如:

    git checkout -b my-branch-name
    git add file-names
    git commit -m commit-message
    
  2. 在此示例中,要将分支推送到 Heroku,请在命令行中将 Git 代码库配置为 Heroku 作为远程选项:

    heroku login
    heroku create
    git push heroku
    
  3. Heroku 将返回目前托管 Action Hub 的公开网址,以供你使用。访问该网址或运行 heroku logs,确认 Action Hub 正在运行。如果您忘记了该公开网址,可以在命令行中运行以下命令:

    heroku info -s | grep web_url
    

    Heroku 将返回您的公开网址。例如:https://my-heroku-action-server-1234.herokuapp.com

  4. 在命令行中,设置 Action Hub 基准网址:

    heroku config:set ACTION_HUB_BASE_URL="https://my-heroku-action-server-1234.herokuapp.com"
    
  5. 设置您的 Action Hub 标签:

    heroku config:set ACTION_HUB_LABEL="Your Action Hub"
    
  6. Looker 使用授权令牌连接到操作中心。在命令行中生成令牌:

    heroku run yarn generate-api-key
    

    如果您没有使用 Heroku(如此示例中所示),请改用:

    yarn generate-api-key
    

    Heroku 将返回您的授权令牌。例如:Authorization: Token token="abcdefg123456789"

  7. 使用密钥设置 Action Hub 密钥:

    heroku config:set ACTION_HUB_SECRET="abcdefg123456789"
    

    客户托管的部署可能需要配置此处未载明的其他环境变量。

  8. 依次转到管理 > 操作,添加对本地 Looker 实例的操作。

    • 在操作列表底部,点击添加操作中心
    • 输入 Action Hub 网址密钥(可选)。
    • 在 Looker 管理菜单中的操作列表中找到您的操作。
    • 点击启用

如果您的操作需要从 Looker 传递特定类型的数据,请务必配置所有模型,使其包含适当的 tags 参数。

现在,您可以测试您的 Action 了!

测试信息中心级和查询级操作

如有必要,在 Looker 实例中,使用标记配置 LookML 模型。创建并保存 Look。在已保存的 Look 上,点击右上角的菜单,然后选择 Send(将该操作作为目标位置)。如果您有可供发送的表单,Looker 会在已发送窗口中呈现该表单。

点击 Send Test 以发送数据。操作的状态会显示在管理面板的调度器历史记录中。如果您的操作出现错误,会显示在管理面板中,并且 Looker 会向发送该操作的用户发送一封包含错误消息的电子邮件。

测试单元格级操作

为您的操作设置包含正确标记的 LookML 字段。在您的 Looker 实例中,运行包含该字段的查询。在数据表格中找到该字段。点击单元格中的 ,然后从下拉菜单中选择。如果您收到错误,则需要在解决这些错误后对数据表执行完全刷新。

发布和启用自定义操作

自定义操作有两种发布选项:

操作发布后,您可以通过管理面板的操作页面启用此操作

发布到 Looker 操作中心

这种方法是最简单的方法,适用于您希望让任何使用 Looker 的用户执行的任何操作。

测试完您的操作后,您可以向 GitHub 中的 looker-open-source/actions 代码库提交 PR。

  1. 输入以下命令:

    git push <your fork> <your development branch>
    
  2. 使用 looker-open-source/actions 代码库作为目标来创建拉取请求。

  3. 填写 Looker Marketplace 和 Action Hub 提交表单。如需详细了解表单要求,请参阅向 Looker Marketplace 提交内容

    Looker 会审核您的操作代码。我们保留拒绝您的公共关系的权利,但可以协助您解决您遇到的任何问题,并提供改进建议。然后,我们将代码合并到 looker-open-source/actions 代码库中,并将其部署到 actions.looker.com。代码部署后,可供所有 Looker 客户使用。

  4. 在 Looker 实例中启用操作,以便其显示为数据传输选项。

发布到私有操作中心服务器

如果您有公司或用例专用的自定义操作,则应将操作添加到 looker-open-source/actions 代码库。请改用你用于测试操作的同一 Node.js 框架来创建专用操作中心。

您可以在自己的基础架构上设置内部 Action Hub 服务器,也可以使用基于云的应用平台(在示例中使用的是 Heroku)设置。请记得在部署之前将 Looker Action Hub 克隆到私有 Action Hub 服务器。

配置 LookML 模型以用于操作

对于自定义操作和 Looker 操作中心提供的操作,您必须使用 LookML 模型中的 tags 参数来标识相关数据字段。管理面板中的操作页面将提供有关该服务所需代码的信息(如果有)。

例如,Twilio Send Message 集成会向手机号码列表发送消息。在管理面板的操作页面上,集成会显示辅助文本“操作可用于带有标记为 phone 的字段的查询”。

这意味着 Twilio Send Message 服务需要一项包含手机号码字段的查询,并使用 tags 参数来识别查询中的哪个字段包含手机号码。您可以通过为 LookML 中的手机号码字段指定 tags: ["phone"] 来标识该字段。手机号码字段的 LookML 可能如下所示:

dimension: phone {
  tags: ["phone"]
  type: string
  sql: ${TABLE}.phone ;;
}

不需要代码的集成会在管理面板的操作页面上显示辅助文本“操作可用于任何查询”。

请务必使用 tags 参数标识 LookML 模型中的所有必填字段,以便用户可以使用该服务发送数据。

后续步骤

了解如何将 Look 或探索或者信息中心的内容提供给集成服务。