

# Smartsheet에 연결
<a name="connecting-to-smartsheet"></a>

Smartsheet는 작업 관리 및 공동 작업 SaaS 제품입니다. 기본적으로 Smartsheet를 사용하면 사용자가 스프레드시트와 같은 객체를 사용하여 비즈니스 데이터를 생성, 저장 및 활용할 수 있습니다.

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

# AWS Glue의 Smartsheet 지원
<a name="smartsheet-support"></a>

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

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

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

**지원되는 Smartsheet API 버전**  
 v2.0 

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="smartsheet-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 Management 콘솔을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Smartsheet 구성
<a name="smartsheet-configuring"></a>

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

## 최소 요구 사항
<a name="smartsheet-configuring-min-requirements"></a>
+ 이메일과 암호를 사용하는 Smartsheet 계정이 있습니다. 계정 생성에 대한 자세한 내용은 [Smartsheet 계정 생성](smartsheet-create-account.md)을 참조하세요.
+ Smartsheet 계정에는 유효한 라이선스가 있는 API 액세스 권한이 있습니다.
+ Smartsheet 계정에는 `Sheets` 엔터티에 대한 **Pro 요금제**와 `Events` 엔터티에 대한 이벤트 보고 추가 기능이 포함된 엔터프라이즈 요금제가 있습니다.

이러한 요구 사항을 충족하면 Smartsheet 계정에 AWS Glue를 연결할 준비가 된 것입니다. 일반적인 연결의 경우 Smartsheet에서 다른 작업을 수행하지 않아도 됩니다.

# Smartsheet 연결 구성
<a name="smartsheet-configuring-connections"></a>

 Smartsheet는 OAuth2에 대한 `AUTHORIZATION_CODE` 권한 부여 유형을 지원합니다.

이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 '3각' `OAuth`로 간주됩니다. 사용자는 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Smartsheet에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다. 이 시나리오에서는 여전히 Smartsheet으로 리디렉션되어 로그인하고 리소스에 액세스할 수 있는 권한을 AWS Glue에 부여합니다.

이 권한 부여 유형은 새로 고침 토큰과 액세스 토큰을 생성합니다. 액세스 토큰은 수명이 짧으며 새로 고침 토큰을 사용하여 사용자 상호 작용 없이 자동으로 새로 고칠 수 있습니다.

AUTHORIZATION\$1CODE OAuth 흐름을 위한 연결된 앱 생성에 대한 퍼블릭 Smartsheet 설명서는 [Smartsheet API](https://smartsheet.redoc.ly/#section/OAuth-Walkthrough)를 참조하세요.

스마트시트 연결을 구성하는 방법:

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

   고객 관리형 연결된 앱의 경우 - 보안 암호는 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 보안 암호를 포함해야 합니다.
**참고**  
AWS Glue에서 연결당 보안 암호를 생성해야 합니다.

1. AWS Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성합니다.

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

   1. 연결하려는 Smartsheet의 `instanceUrl` 항목을 제공합니다.

   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. 토큰을 넣기 위해 AWS Glue에서 이 연결에 사용할 `secretName`을 선택합니다.

   1.  네트워크를 사용하려는 경우 네트워크 옵션을 선택합니다.

1. AWS Glue 작업 권한과 연결된 IAM 역할에 `secretName`을 읽을 수 있는 권한을 부여합니다.

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

 **사전 조건** 

읽으려는 `Smartsheet` 객체입니다. 사용 가능한 엔터티를 확인하려면 아래 지원되는 엔터티 테이블을 참조하세요.

 **지원되는 엔터티** 


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| List Sheet | 예 | 예 | 아니요 | 예 | 아니요 | 
| Row Metadata | 예 | 예 | 아니요 | 예 | 아니요 | 
| Sheet Metadata | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| Sheet Data | 예 | 예 | 예 | 예 | 아니요 | 
| Event | 예 | 예 | 아니요 | 예 | 아니요 | 

 **예제** 

```
Smartsheet_read = glueContext.create_dynamic_frame.from_options(
    connection_type="smartsheet",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "list-sheets",
        "API_VERSION": "2.0",
        "INSTANCE_URL": "https://api.smartsheet.com"
    })
```

 **Smartsheet 엔터티 및 필드 세부 정보** 

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

**동적 메타데이터를 포함하는 엔터티**:

다음 엔터티의 경우, Smartsheet는 메타데이터를 동적으로 가져올 수 있는 엔드포인트를 제공하여 데이터 유형 수준에서 운영자 지원을 캡처할 수 있습니다.


| 개체 |  데이터 형식  | 지원되는 연산자 | 
| --- | --- | --- | 
|  Sheet Data  |  String  | NA | 
| Sheet Data |  Long  | "=" | 
| Sheet Data | Integer | NA | 
| Sheet Data | DateTime | > | 

 **예제** 

```
Smartsheet_read = glueContext.create_dynamic_frame.from_options(
    connection_type="smartsheet",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "list-sheets",
        "API_VERSION": "2.0",
        "INSTANCE_URL": "https://api.smartsheet.com"
    }
```

# Smartsheet 연결 옵션
<a name="smartsheet-connection-options"></a>

다음은 Smartsheet의 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기/쓰기에 사용됩니다. Smartsheet에서의 객체 이름입니다.
+ `API_VERSION`(문자열) - (필수) 읽기/쓰기에 사용됩니다. 사용할 Smartsheet Rest API 버전입니다. 예: v2.0.
+ `INSTANCE_URL`(문자열) - (필수) 읽기에 사용됩니다. Smartsheet 인스턴스 URL입니다.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.

# Smartsheet 계정 생성
<a name="smartsheet-create-account"></a>

1. [Smartsheet 가입 페이지](https://app.smartsheet.com/home)에 액세스하여 Smartsheet 계정에 가입합니다.

1. **새로 만들기**를 선택하여 새 계정을 만들거나 등록된 Google, Microsoft 또는 Apple 계정을 사용하여 로그인합니다.

1.   메시지가 표시되면 업무용 이메일 주소를 입력합니다.  

1.   **계속**을 선택하고 필요한 경우 신원을 확인합니다.  

1. Smartsheet에서 확인 이메일을 열고 확인 링크를 선택하여 계정을 확인합니다.

   기본적으로 평가판을 구독하게 됩니다.

1. 왼쪽 하단 모서리에서 **계정** 아이콘을 선택하고 **라이선스 추가/업그레이드**를 선택하여 요금제를 업그레이드합니다.
**참고**  
이는 **엔터프라이즈** 요금제의 부가 기능인 **이벤트 보고**에 액세스하는 데 필요합니다.

1. **엔터프라이즈** 요금제에서 **문의**를 선택하여 지원팀에 계정 업그레이드를 요청합니다.

1. 지원 요청 양식에서 요금제를 업그레이드하는 데 필요한 세부 정보와 요구 사항을 제공합니다.

   이렇게 하면 **엔터프라이즈** 요금제로 업그레이드가 완료됩니다.

**`OAuth2.0` 자격 증명 생성**

1. **개발자 도구**에 액세스하기 위해 계정의 요금제를 업그레이드한 후 [Smartsheet 개발자](https://developers.smartsheet.com/)에 액세스합니다.

   활성화 이메일을 받게 됩니다.

1. Smartsheet에서 활성화 이메일을 열고 활성화 링크를 선택하여 계정에서 개발자 도구를 활성화합니다.

   개발자 도구를 사용하면 앱을 생성할 수 있습니다.

1. Smartsheet 계정의 홈 페이지를 열고 **계정**을 선택하여 액세스를 확인합니다.

1. 서비스 목록에서 **개발자 도구**를 선택하고 **개발자 프로필** 세부 정보를 입력합니다.

1. **새 앱 생성**을 선택합니다.

1. 앱 등록 양식에 다음 세부 정보를 입력합니다.
   + **이름** - 앱의 이름입니다.
   + **설명** - 앱 설명입니다.
   + **URL** - 랜딩 페이지의 앱 또는 URL을 시작할 수 있는 URL입니다.
   + **연락처/지원** - 지원팀의 연락처 정보입니다.
   + **리디렉션 URL** - [OAuth 2.0 ](https://.console.aws.amazon.com/appflow/oauth)자격 증명을 수신할 애플리케이션 내의 URL(콜백 URL이라고도 함)입니다.

1. **저장**을 선택합니다.

   Smartsheet는 앱에 클라이언트 ID와 클라이언트 보안 암호를 할당합니다. 다음 단계에 이러한 값을 기록합니다. **개발자 도구** 섹션의 뒷부분에서도 다시 확인할 수 있습니다.

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

Smartsheet는 필드 기반 또는 레코드 기반 분할을 지원하지 않습니다.