

# 连接到 Jira Cloud
<a name="connecting-to-data-jira-cloud"></a>

Jira Cloud 是一个由 Atlassian 开发的平台，提供了有助于团队规划和跟踪其敏捷项目的问题追踪产品。作为 Jira Cloud 用户，您的账户包含有关您项目的各种数据，例如问题、工作流和事件等。可以使用 AWS Glue 将 Jira Cloud 数据传输到某些 AWS 服务或其他受支持的应用程序。

**Topics**
+ [AWS Glue 对 Jira Cloud 的支持](jira-cloud-support.md)
+ [包含创建和使用连接的 API 操作的策略](jira-cloud-configuring-iam-permissions.md)
+ [配置 Jira Cloud](jira-cloud-configuring.md)
+ [配置 Jira Cloud 连接](jira-cloud-configuring-connections.md)
+ [从 Jira Cloud 实体中读取](jira-cloud-reading-from-entities.md)
+ [Jira Cloud 连接选项](jira-cloud-connection-options.md)
+ [Jira Cloud 连接器的限制和说明](jira-cloud-connector-limitations.md)

# AWS Glue 对 Jira Cloud 的支持
<a name="jira-cloud-support"></a>

AWS Glue 对 Jira Cloud 的支持如下：

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

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

**支持的 Jira Cloud API 版本**  
支持以下 Jira Cloud API 版本：
+ v3

有关每个版本特定的实体支持，请参阅[从 Jira Cloud 实体中读取](jira-cloud-reading-from-entities.md)。

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

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

------
#### [ 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 控制台的用户。

# 配置 Jira Cloud
<a name="jira-cloud-configuring"></a>

您必须满足以下要求，才能使用 AWS Glue 将数据从 Jira Cloud 传输到支持的目标：

## 最低要求
<a name="jira-cloud-configuring-min-requirements"></a>

以下是最低要求：
+ 您拥有一个 Atlassian 账户，以便在 Jira Cloud 中使用 Jira 软件产品。有关更多信息，请参阅 [创建 Jira Cloud 账户](#jira-cloud-configuring-creating-jira-cloud-account)。
+ 必须创建一个拥有 AWS Glue 服务访问权限的 AWS 账户。
+ 此应用程序提供 AWS Glue 在对账户进行身份验证调用时，用于安全访问数据的客户端凭证。有关更多信息，请参阅 Atlassian 开发者文档中的 [Enabling OAuth 2.0 (3LO)](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/#enabling-oauth-2-0--3lo-)。

如果满足这些要求，就可以将 AWS Glue 连接到 Jira Cloud 账户。

## 创建 Jira Cloud 账户
<a name="jira-cloud-configuring-creating-jira-cloud-account"></a>

要创建 Jira Cloud 账户，请按以下步骤操作：

1. 导航到 [Atlassian 注册 URL](https://id.atlassian.com/signup)。

1. 输入您的工作电子邮件地址和姓名，然后选择**同意**。您会收到一封验证电子邮件。

1. 验证您的电子邮件地址后，您可以创建密码，然后选择**注册**。

1. 输入您的用户名和密码，然后选择**注册**。

1. 随后您将被重定向到需要输入您的网站信息的页面。输入网站名称，然后选择**同意**。

Atlassian Cloud 网站启动后，您可以根据自己的项目类型偏好回答几个问题来设置 Jira。

登录到现有账户

1. 导航到 [Atlassian 登录 URL](https://id.atlassian.com/login) 并输入凭证。

1. 输入电子邮件地址和密码，然后单击**登录**。这时您将被重定向到 Jira 控制面板。

## 在 Jira Cloud 中创建应用程序
<a name="jira-cloud-configuring-creating-jira-cloud-app"></a>

要在 Jira Cloud 中创建应用程序并从托管式客户端应用程序获取客户端 ID 和客户端密钥，请按以下步骤操作：

1. 导航到 [Jira Cloud URL](https://id.atlassian.com/login) 并输入凭证。

1. 选择**创建**并选择 **OAuth 2.0 集成**选项。

1. 输入应用程序名称，勾选 **T&C**，然后选择**创建**。

1. 导航到左侧菜单中的**分发**部分，然后选择**编辑**。

1. 在**编辑分发控制**部分：

   1. 对于**分发状态**请选择**共享**。

   1. 输入供应商名称。

   1. 输入您的**隐私政策** URL。例如，https://docs.aws.amazon.com/glue/latest/dg/security-iam-awsmanpol.html

   1. 输入您的**服务条款** URL（可选）。

   1. 输入您的**客户支持联系人** URL（可选）。

   1. 在**个人数据声明**中选择“是/否”，然后选择**保存更改**。

1. 导航到左侧菜单中相关应用程序的**权限**。

1. 对于 **Jira API**，请选择**添加**。添加后，选择**配置**选项。

1. 在**经典范围** > **Jira 平台 REST API** 部分下，选择**编辑范围**。然后选中所有范围。单击**保存**。

1. 在**粒度范围**下，选择**编辑范围**，然后选择以下范围：

1. 向下滚动，找到作用域。必须在“CRM”和“标准”标题下选择两种类型的作用域。

1. 添加以下作用域：

   ```
   read:application-role:jira
   read:audit-log:jira
   read:avatar:jira
   read:field:jira
   read:group:jira
   read:instance-configuration:jira
   read:issue-details:jira
   read:issue-event:jira
   read:issue-link-type:jira
   read:issue-meta:jira
   read:issue-security-level:jira
   read:issue-security-scheme:jira
   read:issue-type-scheme:jira
   read:issue-type-screen-scheme:jira
   read:issue-type:jira
   read:issue.time-tracking:jira
   read:label:jira
   read:notification-scheme:jira
   read:permission:jira
   read:priority:jira
   read:project:jira
   read:project-category:jira
   read:project-role:jira
   read:project-type:jira
   read:project-version:jira
   read:project.component:jir
   read:project.property:jira
   read:resolution:jira
   read:screen:jira
   read:status:jira
   read:user:jira
   read:workflow-scheme:jira
   read:workflow:jira
   read:field-configuration:jira
   read:issue-type-hierarchy:jira
   read:webhook:jira
   ```

1. 导航到左侧菜单中的**身份验证**，然后选择**添加**。

1. 输入**回调 URL**，比如 https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. 导航到左侧菜单中的**设置**，然后向下滚动查看**身份验证**详细信息。记下客户端 ID 和密钥。

# 配置 Jira Cloud 连接
<a name="jira-cloud-configuring-connections"></a>

Jira Cloud 支持 OAuth2 的 AUTHIZATION\$1CODE 授权类型。
+ 此授权类型被视为“三足型”OAuth，因为它依赖于将用户重定向到第三方授权服务器来对用户进行身份验证。它用于通过 AWS Glue 控制台创建连接。AWS Glue 控制台会将用户重定向到 Jira Cloud，用户必须登录并向 AWS Glue 授予所请求的权限，以访问其 Jira Cloud 实例。
+ 用户仍然可以选择在 Jira Cloud 中创建自己的关联应用程序，并在通过 AWS Glue 控制台创建连接时，提供自己的客户端 ID 和客户端密钥。在这种情况下，他们仍会重定向到 Jira Cloud，以便登录并授权 AWS Glue 访问其资源。
+ 此授权类型会生成刷新令牌和访问令牌。访问令牌的有效期很短，可以通过刷新令牌在不需要用户干预的情况下自动刷新。
+ 有关为授权码 OAuth 流创建关联应用程序的 Jira Cloud 公共文档，请参阅 [Enabling OAuth 2.0 (3LO)](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/#enabling-oauth-2-0--3lo-)。

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

1. 在 AWS Secrets Manager 中，创建一个包含以下详细信息的密钥：

   1. 对于客户管理型关联应用程序，密钥应包含关联应用程序的消费者密钥，且以 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` 为键。

   1. 注意：必须在 AWS Glue 中为连接创建一个密钥。

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

   1. 选择**连接类型**时，请选择 Jira Cloud。

   1. 提供 Jira Cloud 环境。

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

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

****  

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

------

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

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

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

# 从 Jira Cloud 实体中读取
<a name="jira-cloud-reading-from-entities"></a>

**先决条件**：。

您要从中读取内容的 Jira Cloud 对象。您将需要审计记录或问题等对象名称。下表显示支持的实体。

**源支持的实体**：


| 实体 | 可以筛选 | 支持限制 | 支持排序依据 | 支持 Select \$1 | 支持分区 | 
| --- | --- | --- | --- | --- | --- | 
| 审计记录 | 支持 | 是 | 否 | 是 | 是 | 
| 问题 | 支持 | 是 | 否 | 是 | 是 | 
| 问题字段 | 否 | 否 | 否 | 是 | 否 | 
| 问题字段配置 | 支持 | 是 | 否 | 是 | 是 | 
| 问题链接类型 | 否 | 否 | 否 | 是 | 否 | 
| 问题通知方案 | 支持 | 是 | 否 | 是 | 是 | 
| 问题安全方案 | 否 | 否 | 否 | 是 | 否 | 
| 问题类型方案 | 支持 | 是 | 是 | 是 | 是 | 
| 问题类型屏幕方案 | 支持 | 是 | 是 | 是 | 是 | 
| 问题类型 | 否 | 否 | 否 | 是 | 否 | 
| Jira 设置 | 是 | 否 | 否 | 是 | 否 | 
| Jira 设置高级 | 否 | 否 | 否 | 是 | 否 | 
| Jira 设置全局 | 否 | 否 | 否 | 是 | 否 | 
| 标签 | 否 | 否 | 否 | 是 | 是 | 
| 我自己 | 是 | 否 | 否 | 是 | 否 | 
| 权限 | 否 | 否 | 否 | 是 | 否。 | 
| 项目 | 支持 | 是 | 是 | 是 | 是 | 
| 项目类别 | 否 | 否 | 否 | 是 | 否 | 
| 项目类型 | 否 | 否 | 否 | 是 | 否 | 
| 服务器信息 | 否 | 否 | 否 | 是 | 否 | 
| 用户 | 否 | 否 | 否。 | 是 | 否 | 
| 工作流 | 支持 | 是 | 是 | 是 | 是 | 
| 工作流方案 | 否 | 是 | 否 | 是 | 是 | 
| 工作流方案项目关联 | 是 | 否 | 否 | 是 | 否 | 
| 工作流状态 | 否 | 否 | 否 | 是 | 否 | 
| 工作流状态类别 | 否 | 否 | 否 | 是 | 否 | 

**示例**：

```
jiracloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="JiraCloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "audit-record",
        "API_VERSION": "v3"
    }
```

**Jira Cloud 实体和字段详细信息**：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/jira-cloud-reading-from-entities.html)

## 对查询进行分区
<a name="jira-cloud-reading-partitioning-queries"></a>

如果您想在 Spark 中利用并发，可以提供附加 Spark 选项 `NUM_PARTITIONS`。使用此参数，原始查询将被拆分为 `NUM_PARTITIONS` 个子查询，这些子查询可以由 Spark 任务同时执行。
+ `NUM_PARTITIONS`：分区的数量。

示例：

```
jiraCloud_read = glueContext.create_dynamic_frame.from_options(
    connection_type="JiraCloud",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "issue",
        "API_VERSION": "v3",
        "NUM_PARTITIONS": "10"
    }
```

# Jira Cloud 连接选项
<a name="jira-cloud-connection-options"></a>

Jira Cloud 的连接选项如下：
+ `ENTITY_NAME`（字符串）：（必填）用于读取。Jira Cloud 中对象的名称。
+ `API_VERSION`（字符串）：（必填）用于读取。要使用的 Jira Cloud Rest API 版本。例如：v3。
+ `DOMAIN_URL`（字符串）：（必需）要使用的 Jira Cloud ID。
+ `SELECTED_FIELDS`（列表<字符串>）–默认：empty(SELECT \$1)。用于读取。您想要为对象选择的列。
+ `FILTER_PREDICATE`（字符串）– 默认：空。用于读取。应采用 Spark SQL 格式。
+ `QUERY`（字符串）– 默认：空。用于读取。完整的 Spark SQL 查询。
+ `NUM_PARTITIONS`（整数）– 默认：1。用于读取。要读取的分区数。

# Jira Cloud 连接器的限制和说明
<a name="jira-cloud-connector-limitations"></a>

Jira Cloud 连接器的限制或说明如下：
+  `Contains` 运算符不适用于 `resourceName` 字段，后者属于 `String` 数据类型。
+  默认情况下，如果未应用显式筛选条件，则只会爬取过去 30 天内的问题。用户可以选择通过指定自定义筛选条件来覆盖此默认筛选条件。