

# Zendesk에 연결
<a name="connecting-to-data-zendesk"></a>

Zendesk는 고객 서비스 포털, 지식 기반 및 온라인 커뮤니티를 구축하는 데 활용할 수 있는 사용자 지정 가능한 도구를 제공하는 클라우드 기반 헬프데스크 관리 솔루션입니다.

**Topics**
+ [Zendesk에 대한 AWS Glue 지원](zendesk-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](zendesk-configuring-iam-permissions.md)
+ [Zendesk 구성](zendesk-configuring.md)
+ [Zendesk 연결 구성](zendesk-configuring-connections.md)
+ [Zendesk 엔터티에서 읽기](zendesk-reading-from-entities.md)
+ [Zendesk 연결 옵션](zendesk-connection-options.md)
+ [제한 사항](zendesk-limitations.md)

# Zendesk에 대한 AWS Glue 지원
<a name="zendesk-support"></a>

AWS Glue에서는 다음과 같이 Zendesk를 지원합니다.

**소스로 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 Zendesk에서 데이터를 쿼리할 수 있습니다.

**대상으로서 지원되나요?**  
아니요.

**지원되는 Zendesk API 버전**  
다음 Zendesk API 버전이 지원됩니다.
+ v2

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="zendesk-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 콘솔의 사용자에게 해당됩니다.

# Zendesk 구성
<a name="zendesk-configuring"></a>

AWS Glue를 사용하여 Zendesk에서 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

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

다음은 최소 요구 사항입니다.
+ Zendesk 계정이 있습니다. 자세한 내용은 [Zendesk 계정 생성](#zendesk-configuring-creating-account) 섹션을 참조하세요.
+ API 액세스에 대해 Zendesk 계정이 활성화되어 있습니다.
+ Zendesk 계정을 사용하면 연결된 앱을 설치할 수 있습니다.

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

## Zendesk 계정 생성
<a name="zendesk-configuring-creating-account"></a>

Zendesk 계정을 생성하는 방법:

1. https://www.zendesk.com/in/register/로 이동하세요.

1. 회사 이메일, 이름, 성, 전화번호, 직함, 회사 이름, 회사 직원 수, 암호 및 선호하는 언어와 같은 세부 정보를 입력하세요. 그런 다음 **Complete trial Signup**을 선택하세요.

1. 계정이 생성되면 수신한 확인 링크를 완료하여 이메일 주소를 확인하세요.

1. 회사 이메일 주소가 확인되면 Zendesk 계정으로 리디렉션됩니다. 원하는 요금제에 맞는 **Buy Zendesk** 옵션을 선택하세요. 참고: Zendesk 커넥터의 경우 Suite Enterprise 요금제를 구매하는 것이 좋습니다.

## 클라이언트 앱 및 OAuth 2.0 자격 증명 생성
<a name="zendesk-configuring-creating-client-app"></a>

클라이언트 앱 및 OAuth 2.0 자격 증명을 생성하는 방법

1. OAuth 2.0 앱을 생성하려는 Zendesk 계정에 로그인합니다(https://www.zendesk.com/in/login/).

1. 톱니 아이콘을 클릭하세요. **Go to admin center** 링크를 선택하여 관리자 센터 페이지를 여세요.

1. 왼쪽 사이드바에서 **Apps and integrations**를 선택한 다음 **APIs** > **Zendesk API**를 선택하세요.

1. Zendesk API 페이지에서 **OAuth Clients** 탭을 선택하세요.

1. 오른쪽에서 **Add Oauth Client**를 선택하세요.

1. 다음 필드를 작성하여 클라이언트를 생성하세요.

   1. Client Name - 앱 이름을 입력합니다. 애플리케이션에 대한 액세스 권한을 부여하도록 요청하는 경우 그리고 Zendesk에 대한 액세스 권한이 있는 서드 파티 앱 목록을 확인하는 경우 사용자에게 표시되는 이름입니다.

   1. Description - 선택 사항 액세스 권한을 부여하도록 요청하는 경우 사용자에게 표시되는 앱에 대한 간단한 설명.

   1. Company - 선택 사항. 애플리케이션에 대한 액세스 권한을 부여하도록 요청하는 경우 사용자에게 표시되는 회사 이름. 이 정보는 액세스 권한을 부여하는 대상을 이해하는 데 도움이 될 수 있습니다.

   1. Logo - 선택 사항. 애플리케이션에 대한 액세스 권한을 부여하도록 요청하는 경우 사용자에게 표시되는 로고입니다. 이미지는 JPG, GIF 또는 PNG일 수 있습니다. 최상의 결과를 얻으려면 사각형 이미지를 업로드하세요. 그러면 권한 부여 페이지에 맞게 크기가 조정됩니다.

   1. Unique Identifier - 필드는 앱에 입력한 이름의 형식이 변경된 버전으로 자동으로 채워집니다. 원하는 경우 변경할 수 있습니다.

   1. Redirect URLs - Zendesk가 애플리케이션에 대한 액세스 권한을 부여하려는 사용자의 결정을 보내는 데 사용해야 하는 하나 이상의 URL을 입력합니다.

      예: https://us-east-1.console.aws.amazon.com/gluestudio/oauth

1. **저장**을 클릭합니다.

1. 페이지를 새로 고치면 미리 채워진 새 **Secret** 필드가 하단에 나타납니다. OAuth2 사양에 지정된 'client\$1secret' 값입니다. 보안 암호 값을 클립보드에 복사하고 안전한 곳에 저장하세요. 참고: 문자는 텍스트 상자 너비를 넘어 확장될 수 있으므로 복사하기 전에 모든 항목을 선택해야 합니다.

1. **저장**을 클릭합니다.

# Zendesk 연결 구성
<a name="zendesk-configuring-connections"></a>

Zendesk 커넥터는 권한 부여 코드 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 '3각' OAuth로 간주됩니다. AWS Glue 콘솔을 통해 연결을 생성할 때 사용됩니다. 연결을 생성하는 사용자는 기본적으로 Zendesk 인스턴스 URL을 제외한 OAuth 관련 정보를 제공할 필요가 없는 AWS Glue 자체 연결된 앱(AWS Glue 관리형 클라이언트 애플리케이션)에 의존할 수 있습니다. AWS Glue 콘솔은 사용자를 Zendesk로 리디렉션합니다. 사용자가 로그인하고 Zendesk 인스턴스에 액세스하도록 요청된 권한을 AWS Glue에 허용해야 합니다.
+ 여전히 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Zendesk에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다. 이 시나리오에서는 여전히 Zendesk로 리디렉션되어 로그인하고 리소스에 액세스할 수 있는 권한을 AWS Glue에 부여합니다.
+ 이 권한 부여 유형은 액세스 토큰을 생성합니다. 액세스 토큰은 만료되지 않습니다.

권한 부여 코드 OAuth 흐름을 위한 연결된 앱 생성에 대한 퍼블릭 Zendesk 설명서는 [권한 부여 유형용 OAuth 토큰](https://developer.zendesk.com/api-reference/ticketing/oauth/grant_type_tokens/)을 참조하세요.

Zendesk 연결을 구성하는 방법:

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.

   1. AuthorizationCode 권한 부여 유형의 경우 고객 관리형 연결된 앱에서는 시크릿에 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 시크릿이 포함되어야 합니다.

   1. 참고: AWS Glue에서 연결당 시크릿을 생성해야 합니다.

1. AWS Glue Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성하세요.

   1. **연결 유형**을 선택할 때 Zendesk를 선택합니다.

   1. 연결하려는 Zendesk의 INSTANCE\$1URL을 제공합니다.

   1. Zendesk 환경을 제공합니다.

   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`을 읽을 수 있는 권한을 부여합니다.

# Zendesk 엔터티에서 읽기
<a name="zendesk-reading-from-entities"></a>

**사전 조건**

읽으려는 Zendesk 객체. 다음 표에 언급된 대로 티켓, 사용자 또는 문서와 같은 객체 이름이 필요합니다.


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| 티켓 | Y | Y | Y | Y | N | 
| User | Y | Y | Y | Y | N | 
| Organization | Y | Y | Y | Y | N | 
| Article | Y | Y | N | Y | N | 
| 티켓 이벤트 | Y | Y | N | Y | N | 
| 티켓 지표 이벤트 | Y | Y | N | Y | N | 
| 티켓 설명 | Y | Y | Y | Y | N | 
| 티켓 필드 | Y | Y | N | Y | N | 
| 티켓 지표 | Y | Y | N | Y | N | 
| 티켓 활동 | Y | Y | N | Y | N | 
| 티켓 건너뛰기 | N | Y | N | Y | N | 
| 그룹 | Y | Y | Y | Y | N | 
| 그룹 멤버십 | N | Y | Y | Y | N | 
| 만족도 등급 | Y | Y | N | Y | N | 
| 보기 | Y | Y | Y | Y | N | 
| 트리거 | Y | Y | Y | Y | N | 
| 트리거 카테고리 | N | Y | Y | Y | N | 
| 매크로 | Y | Y | Y | Y | N | 
| 자동화 | N | Y | Y | Y | N | 

**예시:**

```
Zendesk_read = glueContext.create_dynamic_frame.from_options(
    connection_type="Zendesk",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "Account",
        "API_VERSION": "v2"
    }
```

**Zendesk 엔터티 및 필드 세부 정보**:

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

**참고**  
구조체 및 목록 데이터 유형은 커넥터의 응답에서 문자열 데이터 유형으로 변환됩니다.

## 분할 쿼리
<a name="zendesk-reading-partitioning-queries"></a>

파티션은 Zendesk에서 지원되지 않습니다.

# Zendesk 연결 옵션
<a name="zendesk-connection-options"></a>

다음은 Zendesk의 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Zendesk에서 객체 이름.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용하려는 Zendesk Rest API 버전. 예: v2.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열. 예: id, name, url, created\$1at
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다. 예: group\$1id = 100
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리. 예: "SELECT id,url FROM users WHERE role=\$1"end-user\$1""
+ `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다. 기본 필드는 증분 내보내기 API를 지원하는 엔터티의 경우 `update_at`입니다(`ticket-events`의 경우 `created_at`, `ticket-metric-events`의 경우 `time`).
+ `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+ `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외). 선택 사항으로, 이 옵션은 작업 옵션에 제공되지 않은 경우 커넥터에서 처리됩니다. 기본값 - '2024-05-01T20:55:02.000Z
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수. 선택 사항으로, 이 옵션은 작업 옵션에 제공되지 않은 경우 커넥터에서 처리됩니다. 기본값: 1.
+ `IMPORT_DELETED_RECORDS`(문자열) - 기본값: FALSE. 읽기에 사용됩니다. 쿼리하는 동안 삭제 레코드를 가져오려면 다음을 수행합니다.
+ `ACCESS_TOKEN` - 요청에 사용할 액세스 토큰.
+ `INSTANCE_URL` - 사용자가 작업을 실행하려는 인스턴스의 URL. 예: https://\$1subdomain\$1/.zendesk.com

# 제한 사항
<a name="zendesk-limitations"></a>

다음은 Zendesk 커넥터의 제한 사항입니다.
+ 오프셋 기반 페이지 매김은 가져올 수 있는 페이지 수를 100개로 제한하지만 가져올 수 있는 총 레코드 수가 10,000개이므로 권장되지 않습니다. 그러나 Zendesk 커넥터에 대해 구현된 커서 기반 페이지 매김은 이러한 제한을 극복합니다. EQUAL\$1TO 필터 연산자만 Zendesk API를 통해 지원됩니다.

  이 제한 사항으로 인해 Zendesk 커넥터에 대해 파티셔닝은 지원되지 않습니다.
+ '티켓 이벤트' 엔터티의 경우 사용량 제한은 분당 요청 10개입니다. AWS Glue ETL 작업을 실행하는 동안 429(요청이 너무 많음) 오류가 발생할 수 있습니다.