

# Jira Cloud에 연결
<a name="connecting-to-data-jira-cloud"></a>

Jira Cloud는 Atlassian에서 개발한 플랫폼입니다. 플랫폼에는 팀이 애자일 프로젝트를 계획 및 추적하는 데 도움이 되는 문제 추적 제품이 포함되어 있습니다. Jira Cloud 사용자 계정에는 문제, 워크플로 및 이벤트와 같은 프로젝트에 대한 데이터가 포함됩니다. AWS Glue를 사용하여 Jira Cloud 데이터를 특정 AWS 서비스 또는 기타 지원되는 애플리케이션으로 전송할 수 있습니다.

**Topics**
+ [Jira Cloud에 대한 AWS Glue 지원](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)

# Jira Cloud에 대한 AWS Glue 지원
<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 Management Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Jira Cloud 구성
<a name="jira-cloud-configuring"></a>

AWS Glue를 사용하여 Jira Cloud에서 지원되는 대상으로 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="jira-cloud-configuring-min-requirements"></a>

다음은 최소 요구 사항입니다.
+ Jira Cloud에서 Jira 소프트웨어 제품을 사용하는 Atlassian 계정이 있습니다. 자세한 내용은 [Jira Cloud 계정 생성](#jira-cloud-configuring-creating-jira-cloud-account) 섹션을 참조하세요.
+ AWS Glue에 대한 서비스 액세스 권한을 포함하는 AWS 계정을 생성해야 합니다.
+ 이 앱에서는 계정에 대해 인증된 직접 호출을 수행하는 경우 AWS Glue에서 데이터에 안전하게 액세스하는 데 사용하는 클라이언트 자격 증명을 제공합니다. 자세한 내용은 Atlassian Developer 설명서의 [Enabling OAuth 2.0 (3LO)](https://developer.atlassian.com/cloud/jira/platform/oauth-2-3lo-apps/#enabling-oauth-2-0--3lo-)을 참조하세요.

이러한 요구 사항을 충족하면 Jira Cloud 계정에 AWS Glue를 연결할 준비가 된 것입니다.

## Jira Cloud 계정 생성
<a name="jira-cloud-configuring-creating-jira-cloud-account"></a>

Jira Cloud 계정을 생성하는 방법:

1. [Atlassian sign up URL](https://id.atlassian.com/signup)로 이동하세요.

1. 회사 이메일과 이름을 입력하고 **Agree**를 선택하세요. 확인 이메일을 수신합니다.

1. 이메일을 확인한 후 암호를 생성하고 **Sign up**을 선택할 수 있습니다.

1. 사용자 이름과 암호를 입력하고 **Sign up**을 선택하세요.

1. 사이트에 입장하는 데 필요한 페이지로 리디렉션됩니다. 사이트 이름을 입력하고 **Agree**를 선택하세요.

Atlassian Cloud 사이트가 시작되면 프로젝트 유형 기본 설정에 따라 몇 가지 질문에 답하며 Jira를 설정할 수 있습니다.

기존 계정으로 로그인하는 방법:

1. [Atlassian login URL](https://id.atlassian.com/login)로 이동하여 자격 증명을 입력하세요.

1. 이메일과 암호를 입력하고 **Log in**을 클릭하세요. Jira 대시보드로 리디렉션됩니다.

## Jira 클라우드에서 앱 생성
<a name="jira-cloud-configuring-creating-jira-cloud-app"></a>

Jira Cloud에서 앱을 생성하고 관리형 클라이언트 앱에서 클라이언트 ID 및 클라이언트 보안 암호를 가져오는 방법:

1. [Jira Cloud URL](https://id.atlassian.com/login)로 이동하여 자격 증명을 입력하세요.

1. **Create**를 선택하고 **OAuth 2.0 integration** 옵션을 선택하세요.

1. 앱 이름을 입력하고 **T&C**를 확인한 다음 **Create**를 선택하세요.

1. 왼쪽 메뉴의 **Distribution** 섹션으로 이동하고 **Edit**를 선택하세요.

1. **Edit distribution controls** 섹션에서 다음을 수행하세요.

   1. **DISTRIBUTION STATUS**를 **Sharing**으로 선택하세요.

   1. 공급업체 이름을 입력하세요.

   1. **Privacy policy**의 URL을 입력하세요. 예: https://docs.aws.amazon.com/glue/latest/dg/security-iam-awsmanpol.html

   1. **Terms of service**의 URL을 입력하세요(선택 사항).

   1. **Customer support contact**의 URL을 입력하세요(선택 사항).

   1. **PERSONAL DATA DECLARATION**에서 예/아니요를 선택하고 **Save changes**를 선택하세요.

1. 해당 앱의 왼쪽 메뉴에서 **Permissions**로 이동하세요.

1. **Jira API**에서 **Add**를 선택하세요. 추가되면 **Configuration** 옵션을 선택하세요.

1. **Classic scopes** > **Jira platform REST API** 섹션에서 **Edit Scopes**를 선택하고 모든 범위를 확인하세요. **저장**을 클릭합니다.

1. **Granular Scopes**에서 **Edit Scopes**를 선택하고 다음 범위를 선택하세요.

1. 아래로 스크롤하여 범위를 찾습니다. ‘CRM’ 및 ‘Standard’ 제목에서 두 가지 종류의 범위를 선택해야 합니다.

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. 왼쪽 메뉴에서 **Authentication**으로 이동하여 **Add**를 선택하세요.

1. **Callback URL**(예: https://us-east-1.console.aws.amazon.com/gluestudio/oauth)을 입력하세요.

1. 왼쪽 메뉴의 **Settings**로 이동하고 아래로 스크롤하여 **Authentication** 세부 정보를 확인하세요. 클라이언트 ID 및 보안 암호를 기록하세요.

# Jira Cloud 연결 구성
<a name="jira-cloud-configuring-connections"></a>

Jira Cloud에서는 OAuth2에 대한 AUTHORIZATION\$1CODE 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 '3각' OAuth로 간주됩니다. AWS Glue 콘솔을 통해 연결을 생성할 때 사용됩니다. AWS Glue 콘솔은 사용자를 Jira Cloud로 리디렉션합니다. 사용자가 로그인하고 Jira Cloud 인스턴스에 액세스하도록 요청된 권한을 AWS Glue에 허용해야 합니다.
+ 사용자는 여전히 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Jira Cloud에서 자체 연결된 앱을 생성하고 자체 클라이언트 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 설정 전역 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 레이블 | 아니요 | 아니요 | 아니요 | 예 | 예 | 
| 사용자 본인 | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| 권한 | 아니요 | 아니요 | 아니요 | 예 | 아니요. | 
| Project | 예 | 예 | 예 | 예 | 예 | 
| 프로젝트 카테고리 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 프로젝트 유형 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 서버 정보 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| Users | 아니요 | 아니요 | 아니요. | 예 | 아니요 | 
| 워크플로 | 예 | 예 | 예 | 예 | 예 | 
| 워크플로 체계 | 아니요 | 예 | 아니요 | 예 | 예 | 
| 워크플로 체계 프로젝트 연결 | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| 워크플로 상태 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 워크플로 상태 카테고리 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 

**예시**:

```
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/ko_kr/glue/latest/dg/jira-cloud-reading-from-entities.html)

## 쿼리 파티셔닝
<a name="jira-cloud-reading-partitioning-queries"></a>

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`NUM_PARTITIONS`)을 제공할 수 있습니다. 이 파라미터를 사용하면 Spark 태스크에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원본 쿼리가 분할됩니다.
+ `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`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.

# Jira Cloud 커넥터의 제한 사항 및 참고 사항
<a name="jira-cloud-connector-limitations"></a>

다음은 Jira Cloud 커넥터의 제한 사항입니다.
+  `Contains` 연산자는 `String` 데이터 유형인 `resourceName` 필드에서 작동하지 않습니다.
+  기본적으로 적용된 명시적 필터가 없으면 지난 30일 동안의 문제만 크롤링됩니다. 사용자는 사용자 지정 필터를 지정하여 이 기본 필터를 재정의할 수 있습니다.