

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Glue 에서 ETL 프로세스를 로 변환 AWS Schema Conversion Tool
<a name="CHAP-converting-aws-glue-api-process"></a>

다음 섹션에서는 Python에서 AWS Glue API 작업을 호출하는 변환에 대한 설명을 찾을 수 있습니다. 자세한 내용은 AWS Glue 개발자 안내서에서 [Python으로 AWS Glue ETL 스크립트 프로그래밍](https://docs.aws.amazon.com//glue/latest/dg/aws-glue-programming-python.html)을 참조하세요.**

**Topics**
+ [1단계: 데이터베이스 생성](#CHAP-converting-aws-glue-step-api-create-db)
+ [2단계: 연결 생성](#CHAP-converting-aws-glue-step-api-connection)
+ [3단계: AWS Glue 크롤러 생성](#CHAP-converting-aws-glue-step-api-crawler)

## 1단계: 데이터베이스 생성
<a name="CHAP-converting-aws-glue-step-api-create-db"></a>

첫 번째 단계는 [AWS SDK API](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateDatabase.html)를 사용하여 AWS Glue 데이터 카탈로그에 새 데이터베이스를 생성하는 것입니다. 데이터 카탈로그에 테이블을 정의할 경우 해당 테이블을 데이터베이스에 추가합니다. 데이터베이스는 테이블을 구성하는 데 사용됩니다 AWS Glue.

다음 예제에서는에 대한 Python API의 `create_database` 메서드를 보여줍니다 AWS Glue.

```
response = client.create_database(
    DatabaseInput={
        'Name': '{{database_name}}’,
        'Description': '{{description}}',
        'LocationUri': '{{string}}',
        'Parameters': {         
            '{{parameter-name}}': '{{parameter value}}'
        }
    }
)
```

Amazon Redshift를 사용하는 경우 데이터베이스 이름은 다음과 같은 형식으로 구성됩니다.

```
{redshift_cluster_name}_{redshift_database_name}_{redshift_schema_name}
```

이 예제에서 Amazon Redshift 클러스터의 전체 이름은 다음과 같습니다.

```
rsdbb03.apq1mpqso.us-west-2.redshift.amazonaws.com
```

다음은 올바른 형식의 데이터베이스 이름의 예입니다. 이 경우 `rsdbb03`은 이름으로, 클러스터 엔드포인트 전체 이름의 첫 번째 부분입니다. 데이터베이스는 `dev`로 이름이 지정되고 스키마는 `ora_glue`입니다.

```
rsdbb03_dev_ora_glue
```

## 2단계: 연결 생성
<a name="CHAP-converting-aws-glue-step-api-connection"></a>

[AWS SDK API](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateConnection.html)를 사용하여 데이터 카탈로그에 새 연결을 생성합니다.

다음 예제에서는 Python API의 [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-connections.html](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-connections.html) 메서드를 사용하는 방법을 보여줍니다 AWS Glue.

 

```
response = client.create_connection(
    ConnectionInput={
        'Name': '{{Redshift_abcde03.aabbcc112233.us-west-2.redshift.amazonaws.com_dev}}',
        'Description': {{'Created from SCT}}',
        'ConnectionType': '{{JDBC}}',
        'ConnectionProperties': {
            {{'JDBC_CONNECTION_URL': 'jdbc:redshift://aabbcc03.aabbcc112233.us-west-2.redshift.amazonaws.com:5439/dev',
            'USERNAME': 'user_name',
            'PASSWORD': 'password'}}
        },
        'PhysicalConnectionRequirements': {
            'AvailabilityZone': '{{us-west-2c}}',
            'SubnetId': '{{subnet-a1b23c45}}',
            'SecurityGroupIdList': [
                '{{sg-000a2b3c}}', '{{sg-1a230b4c}}', '{{sg-aba12c3d}}', '{{sg-1abb2345}}'
            ]
        }
    }
)
```

`create_connection`에서 사용되는 파라미터는 다음과 같습니다.
+ `Name`(UTF-8 문자열) - 필수. Amazon Redshift의 경우 연결 이름은 `Redshift_{{<Endpoint-name>}}_{{<redshift-database-name>}}`과 같이 구성됩니다. 예: ` Redshift_abcde03_dev`
+ `Description`(UTF-8 문자열) - 연결에 대한 설명입니다.
+ `ConnectionType`(UTF-8 문자열) - 필수. 연결의 유형입니다. 현재 JDBC만 지원하고 SFTP는 지원하지 않습니다.
+ `ConnectionProperties`(dict) – 필수. JDBC 연결 URL, 사용자 이름 및 암호를 포함하여 이 연결의 파라미터로 사용되는 키-값 쌍의 목록입니다.
+ `PhysicalConnectionRequirements`(dict) - 물리적 연결 요구 사항이며 다음을 포함합니다.
  + `SubnetId`(UTF-8 문자열) - 연결에 사용되는 서브넷의 ID입니다.
  + `SecurityGroupIdList`(list) – 연결에 사용되는 보안 그룹 ID 목록입니다.
  + `AvailabilityZone`(UTF-8 문자열) - 필수. 엔드포인트가 포함된 가용 영역입니다. 이 파라미터는 이제 사용되지 않습니다.

## 3단계: AWS Glue 크롤러 생성
<a name="CHAP-converting-aws-glue-step-api-crawler"></a>

다음으로 AWS Glue 카탈로그를 채우는 AWS Glue 크롤러를 생성합니다. 자세한 내용은AWS Glue 개발자 안내서의 [크롤러를 사용하여 데이터 카탈로그 작성](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)을 참조하세요.**

크롤러를 추가하는 첫 번째 단계는 [AWS SDK API](https://docs.aws.amazon.com//glue/latest/webapi/API_CreateCrawler.html)를 사용하여 데이터 카탈로그에 새 데이터베이스를 생성하는 것입니다. 시작하기 전에 먼저 `delete_crawler` 작업을 사용하여 이전 버전의 데이터베이스를 삭제해야 합니다.

크롤러를 만들 때는 몇 가지 고려 사항이 적용됩니다.
+ 크롤러 이름은 `{{<redshift_node_name>}}_{{<redshift_database_name>}}_{{<redshift_shema_name>}}` 형식을 사용합니다. 예: `abcde03_dev_ora_glue`
+ 이미 존재하는 IAM 역할을 사용합니다. IAM 역할 생성에 대한 자세한 내용은 IAM 사용 설명서의 [IAM 역할 생성](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles_create.html)을 참조하세요.**
+ 이전 단계에서 생성한 데이터베이스의 이름을 사용합니다.
+ 필수 `ConnectionName` 파라미터를 사용합니다.
+ `path` 파라미터에는 JDBC 대상의 경로를 사용합니다. 예: `dev/ora_glue/%`

다음 예제에서는 기존 크롤러를 삭제한 다음 AWS Glue용 Python API를 사용하여 새 크롤러를 생성합니다.

```
response = client.delete_crawler(
    Name='{{crawler_name}}'
)

response = client.create_crawler(
    Name='{{crawler_name}}',
    Role= ‘{{IAM_role}}’,
    DatabaseName='{{database_name}}’,
    Description='{{string}}',
    Targets={
        'S3Targets': [
            {
                'Path': '{{string}}',
                'Exclusions': [
                    '{{string}}',
                ]
            },
        ],
        'JdbcTargets': [
            {
                'ConnectionName': ‘{{ConnectionName}}’,
                'Path': ‘{{Include_path}}’,
                'Exclusions': [
                    '{{string}}',
                ]
            },
        ]
    },
    Schedule='{{string}}',
    Classifiers=[
        '{{string}}',
    ],
    TablePrefix='{{string}}',
    SchemaChangePolicy={
        'UpdateBehavior': {{'LOG'|'UPDATE_IN_DATABASE'}},
        'DeleteBehavior': {{'LOG'|'DELETE_FROM_DATABASE'|'DEPRECATE_IN_DATABASE'}}
    },
    Configuration='{{string}}'
)
```

크롤러를 생성한 후 실행하여 하나 이상의 데이터 스토어에 연결하고 데이터 구조를 결정하며 테이블을 데이터 카탈로그로 작성합니다. 다음과 같이 일정에 따라 크롤러를 실행할 수 있습니다.

```
response = client.start_crawler(
    Name='string'
)
```

이 예제에서는 Amazon Redshift를 대상으로 사용합니다. Amazon Redshift 데이터 형식은 크롤러가 실행된 후 다음 방법으로 AWS Glue 데이터 형식에 매핑됩니다.


|  |  | 
| --- |--- |
| Amazon Redshift 데이터 형식 | AWS Glue 데이터 유형 | 
| smallint | smallint | 
| 정수 | int | 
| bigint | bigint | 
| decimal | decimal(18,0) | 
| decimal(p,s) | decimal(p,s) | 
| real | double | 
| double precision | double | 
| 부울 | 부울 | 
| char | 문자열 | 
| varchar | 문자열 | 
| varchar(n) | 문자열 | 
| 날짜 | 날짜 | 
| timestamp | timestamp | 
| timestamptz | timestamp | 