

# REST API에 연결
<a name="connecting-to-data-rest-api"></a>

 AWS Glue를 사용하면 모든 REST API 기반 데이터 소스에 AWS Glue를 연결하는 데 사용할 수 있는 AWS Glue ConnectionType을 구성할 수 있습니다. 이는 ETL 작업에서 데이터 소스로 사용할 수 있습니다. 이러한 작업을 실행하여 REST API 기반 데이터 소스 및 AWS 서비스 또는 기타 지원되는 애플리케이션 간에 데이터를 전송할 수 있습니다.

**Topics**
+ [AWS Glue REST API 지원](rest-api-support.md)
+ [연결 유형을 등록하고 연결을 생성/사용하기 위한 API 작업이 포함된 정책](rest-api-configuring-iam-permissions.md)
+ [REST API ConnectionType 구성](rest-api-configuring.md)
+ [REST API 연결 구성](rest-api-configuring-connections.md)
+ [자습서: REST API ConnectionType 및 연결 생성](rest-api-example.md)
+ [제한 사항](rest-api-limitations.md)

# AWS Glue REST API 지원
<a name="rest-api-support"></a>

AWS Glue는 다음과 같이 REST API를 지원합니다.

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

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

# 연결 유형을 등록하고 연결을 생성/사용하기 위한 API 작업이 포함된 정책
<a name="rest-api-configuring-iam-permissions"></a>

 다음 샘플 IAM 정책은 AWS Glue ETL 작업 내에서 REST API 연결을 등록하고 생성하고 관리하고 사용하는 데 필요한 권한을 설명합니다. 새 역할을 생성하는 경우 다음을 포함하는 정책을 생성합니다.

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:RegisterConnectionType",
                "glue:ListConnectionTypes",
                "glue:DescribeConnectionType",
                "glue:CreateConnection",
                "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 콘솔의 사용자에게 해당됩니다.

REST API 연결을 생성할 때 네트워크 옵션을 제공하는 경우 다음 작업도 IAM 역할에 포함되어야 합니다.

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

# REST API ConnectionType 구성
<a name="rest-api-configuring"></a>

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

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

다음은 최소 요구 사항입니다.
+  AWS Glue REST API 연결 유형을 구성하고 등록했습니다. [REST API에 연결](https://docs.aws.amazon.com/glue/latest/dg/rest-api-connections.html)을 참조하십시오.
+  OAuth2 클라이언트 자격 증명, 권한 부여 코드 또는 JWT를 사용하는 경우 그에 따라 클라이언트 앱을 구성합니다.

 이러한 요구 사항을 충족하면 REST API 기반 데이터 소스에 AWS Glue를 연결할 준비가 된 것입니다. 일반적으로 REST API 측에는 추가 구성이 필요하지 않습니다.

# REST API 연결 구성
<a name="rest-api-configuring-connections"></a>

 AWS Glue REST API 커넥터를 구성하려면 AWS Glue 연결 유형을 구성해야 합니다. 이 연결 유형에는 REST 데이터 소스가 작동하고 인증, 요청, 응답, 페이지 매김, 검증, 개체/메타데이터와 같은 사물을 해석하는 방식의 속성에 대한 세부 정보가 포함되어 있습니다. AWS Glue REST 연결 유형에 필요한 속성의 전체 목록은[ RegisterConnectionType](https://docs.aws.amazon.com/glue/latest/webapi/API_DescribeConnectionType.html) API 및 [REST API에 연결](https://docs.aws.amazon.com/glue/latest/dg/rest-api-connections.html)을 위한 단계를 참조하십시오.

 REST API 커넥터를 생성할 때 관련 작업을 허용하려면 다음 정책이 필요합니다.

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

# 자습서: REST API ConnectionType 및 연결 생성
<a name="rest-api-example"></a>

**Foo REST API에 연결**

 AWS Glue REST API ConnectionType과 Foo REST API에 대한 해당 AWS Glue 연결을 생성합니다. 이 API에는 다음과 같은 속성이 있습니다(REST API 설명서에서 검색할 수 있음).
+  **인스턴스 URL**: https://foo.cloud.com/rest/v1.
+  **인증 유형**: OAuth2(클라이언트 자격 증명).
+  **REST 메서드**: GET.
+  **페이지 매김 유형**: 요청의 쿼리 파라미터에 속성 “제한” 및 “오프셋”이 배치된 오프셋입니다.
+ **지원되는 엔터티**:
  +  **Bar**: 상대 경로 [/bar.json].
  +  **Baz**: 상대 경로 [/baz.json].

 모든 세부 정보를 가져오면 Foo REST API에 대한 AWS Glue 연결 생성을 시작할 수 있습니다.

**REST API 연결을 생성하려면**:

1.  AWS API, CLI 또는 SDK를 사용하여 RegisterConnectionType API를 호출하여 AWS Glue에서 REST API 연결 유형을 생성합니다. 그러면 AWS Glue에 새 ConnectionType 리소스가 생성됩니다.

   ```
   {
       "ConnectionType": "REST-FOO-CONNECTOR",
       "IntegrationType": "REST",
       "Description": "AWS Glue Connection Type for the FOO REST API",
       "ConnectionProperties": {
           "Url": {
               "Name": "Url",
               "Required": true,
               "DefaultValue": "https://foo.cloud.com/rest/v1",
               "PropertyType": "USER_INPUT"
           }
       },
       "ConnectorAuthenticationConfiguration": {
           "AuthenticationTypes": ["OAUTH2"],
           "OAuth2Properties": {
               "OAuth2GrantType": "CLIENT_CREDENTIALS"
           }
       },
       "RestConfiguration": {
           "GlobalSourceConfiguration": {
           "RequestMethod": "GET",
           "ResponseConfiguration": {
               "ResultPath": "$.result",
               "ErrorPath": "$.error.message"
           },
           "PaginationConfiguration": {
               "OffsetConfiguration": {
                   "OffsetParameter": {
                       "Key": "offset",
                       "PropertyLocation": "QUERY_PARAM"
                   },
                   "LimitParameter": {
                       "Key": "limit",
                       "PropertyLocation": "QUERY_PARAM",
                       "DefaultValue": "50"
                   }
               }
           }
       },
       "ValidationEndpointConfiguration": {
           "RequestMethod": "GET",
           "RequestPath": "/bar.json?offset=1&limit=10"
       },
       "EntityConfigurations": {
           "bar": {
               "SourceConfiguration": {
                   "RequestMethod": "GET",
                   "RequestPath": "/bar.json",
                   "ResponseConfiguration": {
                       "ResultPath": "$.result",
                       "ErrorPath": "$.error.message"
                   }
               },
               "Schema": {
                   "name": {
                       "Name": "name",
                       "FieldDataType": "STRING"
                   },
                   "description": {
                       "Name": "description",
                       "FieldDataType": "STRING"
                   },
                   "id": {
                       "Name": "id",
                       "FieldDataType": "STRING"
                   },
                   "status": {
                       "Name": "status",
                       "FieldDataType": "STRING"
                   }
               }
           }
       }
   }
   }
   ```

1.  AWS Secrets Manager에서 보안 암호를 생성합니다. 보안 암호에는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`를 키로 사용하여 연결된 앱 소비자 보안 암호가 포함되어야 합니다.
**참고**  
AWS Glue에서 연결당 보안 암호를 생성해야 합니다.

1.  AWS API, CLI 또는 SDK를 사용하여 CreateConnection API를 호출하여 AWS Glue 연결을 생성합니다.

   1.  1단계의 REST 연결 유형 이름을 “ConnectionType”으로 참조합니다.

   1.  AWS Glue ConnectionType 등록 프로세스 중에 정의된 InstanceUrl 및 기타 ConnectionProperties를 제공합니다.

   1.  구성된 인증 유형 중에서 선택합니다. REST API Foo는 ClientCredentials 권한 부여 유형과 함께 OAuth2를 사용합니다.

   1.  구성된 **SecretArn** 및 기타 **AuthenticationProperties**를 제공합니다. 예를 들어 `OAUTH2`를 AuthenticationType으로 구성했으므로 CreateConnectionInput에서 “OAuth2Properties”를 설정합니다. 이렇게 하려면 “OAuth2GrantType”, “TokenUrl” 및 “OAuth2ClientApplication”과 같은 속성이 필요합니다.

1.  CreateConnection을 요청하여 AWS Glue 연결을 생성합니다.

   ```
   {
       "ConnectionInput": {
           "Name": "ConnectionFooREST",
           "ConnectionType": "REST-FOO-CONNECTOR",
           "ConnectionProperties": {},
           "ValidateCredentials": true,
           "AuthenticationConfiguration": {
               "AuthenticationType": "OAUTH2",
               "SecretArn": "arn:aws:secretsmanager:<region>:<accountId>:secret:<secretId>",
               "OAuth2Properties": {
                   "OAuth2GrantType": "CLIENT_CREDENTIALS",
                   "TokenUrl": "https://foo.cloud.com/oauth/token",
                   "OAuth2ClientApplication": {
                       "UserManagedClientApplicationClientId": "your-managed-client-id"
                   }
               }
           }
       }
   }
   ```

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

다음은 REST API 커넥터에 대한 제한 사항입니다.
+  REST API 커넥터는 AWS API, CLI 또는 SDK를 통해서만 사용할 수 있습니다. 콘솔을 통해 REST 커넥터를 구성할 수 없습니다.
+  AWS Glue REST ConnectionType은 REST API 기반 데이터 소스에서 데이터를 읽도록만 구성할 수 있습니다. 연결은 AWS Glue ETL 작업에서 소스로만 사용할 수 있습니다.
+  필터링 및 파티셔닝은 지원되지 않습니다.
+  필드 선택은 지원되지 않습니다.