

# 连接到 Monday
<a name="connecting-to-monday"></a>

 Monday.com 是一款多功能工作操作系统，有助于简化项目管理和团队协作。该系统具有可自定义的工作流、可视化控制面板以及自动化工具，能够提高工作效率。用户可以在一个集成平台上跟踪任务、管理资源并开展有效沟通。

**Topics**
+ [AWS Glue 对 Monday 的支持](monday-support.md)
+ [包含创建和使用连接的 API 操作的策略](monday-configuring-iam-permissions.md)
+ [配置 Monday](monday-configuring.md)
+ [配置 Monday 连接](monday-configuring-connections.md)
+ [从 Monday 实体读取内容](monday-reading-from-entities.md)
+ [Monday 连接选项参考](monday-connection-options.md)
+ [限制](monday-connector-limitations.md)
+ [创建新的 Monday 账户：](#monday-account-creation)

# AWS Glue 对 Monday 的支持
<a name="monday-support"></a>

AWS Glue 对 Monday 的支持情况如下：

**是否支持作为来源？**  
是。可以使用 AWS Glue ETL 作业查询 Monday 中的数据。

**是否支持作为目标？**  
否。

**支持的 Monday API 版本**  
 v2.

# 包含创建和使用连接的 API 操作的策略
<a name="monday-configuring-iam-permissions"></a>

 以下示例策略描述了创建和使用连接所需的 AWS 权限。如果您要创建新角色，请创建包含以下内容的策略：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

您还可以使用以下托管 IAM 策略允许访问权限：
+  [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole)：授予对各种 AWS Glue 进程代表您运行所需的资源的访问权限。这些资源包括 AWS Glue、Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此策略中指定的资源的命名约定，则 AWS Glue 进程具有所需的权限。此策略通常附加到在定义爬网程序、作业和开发终端节点时指定的角色。
+  [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess)：当策略所附加到的身份使用 AWS 管理控制台时，授予对 AWS Glue 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到 AWS Glue 控制台的用户。

# 配置 Monday
<a name="monday-configuring"></a>

必须满足以下要求，才能使用 AWS Glue 从 Monday 传输数据：

## 最低要求
<a name="monday-configuring-min-requirements"></a>
+  拥有 Monday 开发人员账户，其中包含电子邮件和密码。有关更多信息，请参阅 [创建新的 Monday 账户：](connecting-to-monday.md#monday-account-creation)。
+  Monday 开发人员账户已启用 API 访问权限。试用期内，使用任何 Monday API 服务均不会产生额外费用。试用期结束后，需要购买订阅才能创建和访问数据。有关更多信息，请参阅 [Monday 授权页面](https://developer.monday.com/api-reference/reference/about-the-api-reference)了解详细信息。

 如果满足这些要求，就可以将 AWS Glue 连接到 Monday 账户。对于常见连接，无需在 Monday 中执行其他操作。

# 配置 Monday 连接
<a name="monday-configuring-connections"></a>

Monday 支持以下两种类型的身份验证机制：

1.  OAuth 身份验证：Monday 支持 OAuth2 的 AUTHORIZATION\$1CODE 授权类型。
   +  此授权类型被视为“三足型”OAuth，因为它依赖于将用户重定向到第三方授权服务器来对用户进行身份验证。它用于通过 AWS Glue 控制台创建连接。默认情况下，创建连接的用户可以依赖于 AWS Glue 拥有的关联应用程序；在该应用程序中，除了 Monday 实例 URL 之外，用户无需提供任何与 OAuth 相关的信息。AWS Glue 控制台会将用户重定向到 Monday，用户必须登录并向 AWS Glue 授予所请求的权限，以访问其 Monday 实例。
   +  用户应该选择在 Monday 中创建自己的关联应用程序，并在通过 AWS Glue 控制台创建连接时，提供自己的客户端 ID 和客户端密钥。在这种情况下，他们仍会重定向到 Monday，以便登录并授权 AWS Glue 访问其资源。
   +  此授权类型会生成刷新令牌和访问令牌。访问令牌的有效期为一小时，可以通过刷新令牌在不需要用户互动的情况下自动刷新。
   +  有关更多信息，请参阅[有关为 AUTHORIZATION\$1CODE OAuth 流创建关联应用程序的文档](https://developers.Monday.com/docs/api/v1/Oauth)。

1.  自定义身份验证：
   +  有关生成自定义授权所需 API 密钥的 Monday 公共文档，请参阅 [https://developer.monday.com/api-reference/docs/authentication\$1api-token-permissions](https://developer.monday.com/api-reference/docs/authentication#api-token-permissions)。

要配置 Monday 连接，请执行以下操作：

1.  在 AWS Secrets Manager 中，创建一个包含以下详细信息的密钥。需要为 AWS Glue 中的每个连接创建一个密钥。

   1.  OAuth 身份验证：
      +  对于客户托管的关联应用程序：密钥应包含关联应用程序的使用者密钥，并将 USER\$1MANAGED\$1CLIENT\$1APPLICATION\$1CLIENT\$1SECRET 作为键。

   1.  对于自定义身份验证：
      +  对于客户托管的关联应用程序：密钥应包含关联应用程序的使用者密钥，并将 `personalAccessToken` 作为键。

1. 在 AWS Glue Studio 中，按照以下步骤在**数据连接**下创建连接：

   1.  在“数据连接”下，选择**创建连接**。

   1. 选择**数据来源**时，请选择 Monday。

   1. 提供 Monday **实例 URL**。

   1.  选择 AWS Glue 可以担任并有权执行以下操作的 IAM 角色：

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1.  选择身份验证类型以连接到 Monday 
      +  OAuth 身份验证：提供要连接的 Monday 的**令牌 URL** 以及**用户托管客户端应用程序 ClientId**。
      +  对于自定义身份验证：选择**自定义**身份验证类型以连接到 Monday。

   1.  在 AWS Glue 中选择您要用于此连接的 `secretName`，然后放置令牌。

   1.  如果要使用网络，请选择网络选项。

1.  向与您的 AWS Glue 作业关联的 IAM 角色授予读取 `secretName` 的权限。选择**下一步**。

1.  在 AWS Glue 作业配置中，提供 `connectionName` 作为**附加网络连接**。

# 从 Monday 实体读取内容
<a name="monday-reading-from-entities"></a>

 **先决条件** 
+  要从中读取内容的 Monday 对象。请参阅下面的支持的实体表，查看可用的实体。

 **源支持的实体** 

 实体列表：
+  Account：[https://developer.monday.com/api-reference/docs/account\$1queries](https://developer.monday.com/api-reference/docs/account#queries) 
+  Board：[https://developer.monday.com/api-reference/docs/boards\$1queries](https://developer.monday.com/api-reference/docs/boards#queries) 
+  Column：[https://developer.monday.com/api-reference/docs/columns\$1queries](https://developer.monday.com/api-reference/docs/columns#queries) 
+  Docs：[https://developer.monday.com/api-reference/docs/docs\$1queries](https://developer.monday.com/api-reference/docs/docs#queries) 
+  Document Block：[https://developer.monday.com/api-reference/docs/blocks\$1queries](https://developer.monday.com/api-reference/docs/blocks#queries) 
+  Files：[https://developer.monday.com/api-reference/docs/files\$1queries](https://developer.monday.com/api-reference/docs/files#queries) 
+  Folders：[https://developer.monday.com/api-reference/docs/folders\$1queries](https://developer.monday.com/api-reference/docs/folders#queries) 
+  Groups：[https://developer.monday.com/api-reference/docs/groups\$1queries](https://developer.monday.com/api-reference/docs/groups#queries) 
+  Item：[https://developer.monday.com/api-reference/docs/items\$1queries](https://developer.monday.com/api-reference/docs/items#queries) 
+  Subitems：[https://developer.monday.com/api-reference/docs/subitems\$1queries](https://developer.monday.com/api-reference/docs/subitems#queries) 
+  Tags：[https://developer.monday.com/api-reference/docs/tags-queries\$1queries](https://developer.monday.com/api-reference/docs/tags-queries#queries) 
+  Teams：[https://developer.monday.com/api-reference/docs/teams\$1queries](https://developer.monday.com/api-reference/docs/teams#queries) 
+  Updates：[https://developer.monday.com/api-reference/docs/updates\$1queries](https://developer.monday.com/api-reference/docs/updates#queries) 
+  Users：[https://developer.monday.com/api-reference/docs/users\$1queries](https://developer.monday.com/api-reference/docs/users#queries) 
+  Workspaces：[https://developer.monday.com/api-reference/docs/workspaces\$1queries](https://developer.monday.com/api-reference/docs/workspaces#queries) 


| 实体 | 可以筛选 | 支持限制 | 支持排序依据 | 支持 Select \$1 | 支持分区 | 
| --- | --- | --- | --- | --- | --- | 
| Account | 否 | 否 | 否 | 是 | 否 | 
| Boards | 支持 | 是 | 否 | 是 | 否 | 
| Columns | 否 | 否 | 否 | 是 | 否 | 
| Docs | 支持 | 是 | 否 | 是 | 否 | 
| Document Blocks | 否 | 是 | 否 | 是 | 否 | 
| 文件 | 是 | 否 | 否 | 是 | 否 | 
| 组 | 否 | 否 | 否 | 是 | 否 | 
| Item | 支持 | 是 | 否 | 是 | 否 | 
| Subitems | 否 | 否 | 否 | 是 | 否 | 
| 标签 | 是 | 否 | 否 | 是 | 是 | 
| 团队 | 是 | 否 | 否 | 是 | 否 | 
| 更新 | 否 | 是 | 否 | 是 | 否 | 
| Users | 支持 | 是 | 否 | 是 | 否 | 
| Workspaces | 支持 | 是 | 否 | 是 | 否 | 
| 文件夹 | 支持 | 是 | 否 | 是 | 否 | 

 **示例** 

```
monday_read = glueContext.create_dynamic_frame.from_options(
     connection_type="monday",
     connection_options={
         "connectionName": "connectionName",
         "ENTITY_NAME": "account",
         "API_VERSION": "v2"
     }
```

# Monday 连接选项参考
<a name="monday-connection-options"></a>

以下是 Monday 的连接选项：
+  `ENTITY_NAME`（字符串）–（必填）用于读/写。Monday 中对象的名称。
+  `API_VERSION`（字符串）–（必填）用于读/写。要使用的 Monday Rest API 版本。示例：v2。
+  `SELECTED_FIELDS`（列表<字符串>）–默认：empty(SELECT \$1)。用于读取。您想要为对象选择的列。
+  `FILTER_PREDICATE`（字符串）– 默认：空。用于读取。应采用 Spark SQL 格式。
+  `QUERY`（字符串）– 默认：空。用于读取。完整的 Spark SQL 查询。

# 限制
<a name="monday-connector-limitations"></a>

以下是 Monday 连接器的限制：
+  动态元数据响应与文档存在某些冲突，如下所述：
  +  Group、Column 实体支持筛选操作，但动态元数据端点中不存在该实体，因而其为不可筛选的实体。
  +  动态端点包含 15000 多行响应，并且会在单次响应中返回所有实体的元数据，因此，这些字段平均需要 10 秒才能加载完成，鉴于此，在运行作业时需预留一些额外时间。
  +  有关 Monday 速率限制，请参阅下表。动态实体的响应数据量庞大，会导致明显的延迟，字段平均需要 10 秒才能加载完成。    
<a name="monday-rate-limit-table"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/monday-connector-limitations.html)

## 创建新的 Monday 账户：
<a name="monday-account-creation"></a>

1.  导航到 Monday 主页（[https://monday.com/](https://monday.com/)），然后选择**登录**。

1.  此时会重定向到登录页面。选择页面底部的**注册**。

1.  输入电子邮件地址，然后选择**继续**。也可以使用 Google 账户登录。

1.  输入必要的详细信息，然后选择**继续**。

1.  回答完调查问题，再按照步骤完成账户创建过程。

**注册 OAuth 应用程序：**

1.  登录自己的 monday.com 账户。点击屏幕左下角的头像（图片图标）。

1.  选择**开发者**。

1.  选择**创建应用程序**。

1.  填写必填的名称和描述字段。

1. 导航到右侧的“OAuth”部分，添加范围，然后选择“保存功能”。

1.  导航到范围旁边的“重定向 URL”选项卡，添加重定向 URL，然后选择“保存功能”。

1.  在**重定向 URL** 选项卡下，提供自己的应用程序 URL。此即 https://\$1region-code\$1.console.aws.amazon.com/appflow/oauth。例如，如果正在使用 `us-east-1 `，则可添加 `https://us-east-1.console.aws.amazon.com/appflow/oauth`。

1.  应用程序现已准备就绪，可供立即使用。在“基本信息”部分中找到自己的凭证。记下客户端 ID 和客户端密钥。使用 AppFlow 连接器与该应用程序建立连接时会用到这些字符串。

**生成个人访问令牌：**

 目前，monday.com 仅提供我们的 V2 API 令牌，而这些都是个人令牌。可以使用两种方法中的任意一种来访问自己的 API 令牌，具体方法取决于用户级别。管理员用户可以使用这两种方法来获取自己的 API 令牌。成员用户可以从“开发者”选项卡访问自己的 API 令牌。

 管理员：如果您是 monday.com 账户的管理员用户，则可以按照以下步骤从“管理员”选项卡访问自己的 API 令牌：

1.  登录自己的 monday.com 账户。点击屏幕左下角的头像（图片图标）。

1.  从出现的菜单中选择“管理”（要求具有管理员权限）。

1.  导航到“API”部分并生成“API V2 令牌”。此时可以复制自己的令牌加以使用。

 开发者：如果您是 monday.com 账户的成员用户，则可以按照以下步骤从“开发者”选项卡访问自己的 API 令牌：

1.  登录自己的 monday.com 账户。点击屏幕左下角的头像（图片图标）。

1.  从出现的菜单中选择“开发者”。

1.  在顶部菜单中选择“开发者”下拉菜单。在下拉菜单上选择标题为“我的访问令牌”的第一个选项。