

# 제로 ETL 통합을 설정하기 위한 사전 조건
<a name="zero-etl-prerequisites"></a>

소스와 대상 간에서 통합을 설정하려면 AWS Glue가 소스의 데이터에 액세스하고 대상에 쓰는 데 사용하는 IAM 역할 구성, 중간 또는 대상 위치의 데이터를 암호화하기 위한 KMS 키 사용 등과 같은 몇 가지 사전 조건이 필요합니다.

**Topics**
+ [소스 리소스 설정](#zero-etl-setup-source-resources)
+ [대상 리소스 설정](#zero-etl-setup-target-resources)
+ [Amazon Redshift 데이터 웨어하우스 생성](#zero-etl-setup-target-redshift-data-warehouse)
+ [제로 ETL 통합을 위한 VPC 설정](#zero-etl-setup-vpc)
+ [제로 ETL 교차 계정 통합 설정](#zero-etl-setup-cross-account-integration)

## 소스 리소스 설정
<a name="zero-etl-setup-source-resources"></a>

소스에 필요한 다음 설정 작업을 수행합니다.

### 소스 역할 설정
<a name="zero-etl-setup-source-role"></a>

이 섹션에서는 제로 ETL 통합이 연결에 액세스할 수 있도록 소스 역할을 전달하는 방법을 설명합니다. 이 방법도 SaaS 소스에만 적용됩니다.

**참고**  
몇 개의 연결로만 액세스를 제한하려면 먼저 연결을 생성하여 연결 ARN을 가져올 수 있습니다. [제로 ETL 통합을 위한 소스 구성](zero-etl-sources.md)을(를) 참조하세요.

통합이 연결에 액세스할 수 있는 권한이 있는 역할을 생성합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GlueConnections",
            "Effect": "Allow",
            "Action": [
                "glue:GetConnections",
                "glue:GetConnection"
            ],
            "Resource": [
							"arn:aws:glue:*:111122223333:catalog",
							"arn:aws:glue:us-east-1:111122223333:connection/*"
            ]
        },
        {
            "Sid": "GlueActionBasedPermissions",
            "Effect": "Allow",
            "Action": [
                "glue:ListEntities",
                "glue:RefreshOAuth2Tokens"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

신뢰 정책:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "glue.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

## 대상 리소스 설정
<a name="zero-etl-setup-target-resources"></a>

AWS Glue 데이터 카탈로그 또는 Amazon Redshift 데이터 웨어하우스 통합 대상에 필요한 다음 설정 작업을 수행합니다.

AWS Glue 데이터베이스 대상과 통합하는 경우:
+ [AWS Glue 데이터베이스 설정](#zero-etl-setup-target-resources-glue-database)
+ [카탈로그 리소스 기반 액세스(RBAC) 정책 제공](#zero-etl-setup-target-resources-rbac-policy)
+ [대상 IAM 역할 생성](#zero-etl-setup-target-resources-target-iam-role)

Amazon Redshift 데이터 웨어하우스 대상과 통합하는 경우:
+ [https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html#zero-etl-setup-target-redshift-data-warehouse](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-prerequisites.html#zero-etl-setup-target-redshift-data-warehouse)

### AWS Glue 데이터베이스 설정
<a name="zero-etl-setup-target-resources-glue-database"></a>

AWS Glue 데이터베이스를 사용하는 통합의 경우:

Amazon S3 위치를 사용하여 AWS Glue Data Catalog에서 대상 데이터베이스를 설정하려면:

1. AWS Glue 콘솔 홈 페이지의 Data Catalog에서 **데이터베이스**를 선택합니다.

1. 오른쪽 상단 모서리에서 **데이터 추가**를 선택합니다. 데이터베이스를 이미 생성한 경우 Amazon S3 URI를 사용하는 위치가 데이터베이스에 대해 설정되어 있는지 확인합니다.

1. 이름과 **위치**(Amazon S3 URI)를 입력합니다. 제로 ETL 통합에는 위치가 필요합니다. 완료되면 **데이터베이스 생성**을 클릭합니다.
**참고**  
Amazon S3 버킷은 AWS Glue 데이터베이스와 동일한 리전에 있어야 합니다.

AWS Glue에서 새 데이터베이스를 생성하는 방법에 대한 자세한 내용은 [AWS Glue Data Catalog 시작하기](https://docs.aws.amazon.com/glue/latest/dg/start-data-catalog.htm)를 참조하세요.

[https://docs.aws.amazon.com/cli/latest/reference/glue/create-database.html](https://docs.aws.amazon.com/cli/latest/reference/glue/create-database.html) CLI를 사용하여 AWS Glue에서 데이터베이스를 생성할 수도 있습니다. `--database-input`의 `LocationUri`는 필수입니다.

#### Iceberg 테이블 최적화
<a name="zero-etl-common-setup-table-optimization"></a>

대상 데이터베이스에서 AWS Glue에 의해 테이블이 생성된 후 압축을 활성화하여 Amazon Athena에서 쿼리 속도를 높일 수 있습니다. 압축을 위한 리소스(IAM 역할) 설정에 대한 자세한 내용은 [테이블 최적화 필수 조건](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)을 참조하세요.

통합에 의해 생성된 AWS Glue 테이블에서 압축을 설정하는 방법에 대한 자세한 내용은 [Iceberg 테이블 최적화](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)를 참조하세요.

### 카탈로그 리소스 기반 액세스(RBAC) 정책 제공
<a name="zero-etl-setup-target-resources-rbac-policy"></a>

AWS Glue 데이터베이스를 사용하는 통합의 경우 카탈로그 RBAC 정책에 다음 권한을 추가하여 소스와 대상 간의 통합을 허용합니다.

**참고**  
교차 계정 통합의 경우 Alice(통합을 생성하는 사용자) 역할 정책과 카탈로그 리소스 정책 모두 리소스에 대해 `glue:CreateInboundIntegration`을 허용해야 합니다. 동일한 계정의 경우에는 리소스 정책 또는 리소스에 대해 `glue:CreateInboundIntegration`을 허용하는 역할 정책으로 충분합니다. 두 시나리오 모두 여전히 `glue:AuthorizeInboundIntegration`에 대해 `glue.amazonaws.com`을 허용해야 합니다.

**Data Catalog**에서 **카탈로그 설정**에 액세스할 수 있습니다. 계속해서 다음 권한을 제공하고 누락된 정보를 입력합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Principal": {
        "AWS": [
        	"arn:aws:iam::123456789012:user/Alice"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:CreateInboundIntegration"
      ],
      "Resource": [
      	"arn:aws:glue:us-east-1:111122223333:catalog",
				"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
      ],
      "Condition": {
        "StringLike": {
        "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/<table-name>"
        }
      }
    },
    {
      "Principal": {
        "Service": [
          "glue.amazonaws.com"
        ]
      },
      "Effect": "Allow",
      "Action": [
        "glue:AuthorizeInboundIntegration"
      ],
      "Resource": [
      	"arn:aws:glue:us-east-1:111122223333:catalog",
				"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
      ],
      "Condition": {
        "StringEquals": {
        "aws:SourceArn": "arn:aws:dynamodb:us-east-1:444455556666:table/<table-name>"
        }
      }
    }
  ]
}
```

------

### 대상 IAM 역할 생성
<a name="zero-etl-setup-target-resources-target-iam-role"></a>

다음과 같은 권한 및 신뢰 관계를 가진 대상 IAM 역할을 생성합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "glue:GetDatabase"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "glue:CreateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:DeleteTable",
                "glue:UpdateTable",
                "glue:GetTableVersion",
                "glue:GetTableVersions",
                "glue:GetResourcePolicy"
            ],
            "Resource": [
                "arn:aws:glue:us-east-1:111122223333:catalog",
                "arn:aws:glue:us-east-1:111122223333:database/DatabaseName",
                "arn:aws:glue:us-east-1:111122223333:table/DatabaseName/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "AWS/Glue/ZeroETL"
                }
            },
            "Effect": "Allow"
        },
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

AWS Glue 서비스가 역할을 수임할 수 있도록 다음 신뢰 정책을 추가합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "glue.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

## Amazon Redshift 데이터 웨어하우스 생성
<a name="zero-etl-setup-target-redshift-data-warehouse"></a>

제로 ETL 통합 대상이 Amazon Redshift 데이터 웨어하우스이지만 아직 없는 경우 데이터 웨어하우스를 생성합니다. Amazon Redshift Serverless 작업 그룹을 생성하려면 [네임스페이스가 있는 작업 그룹 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html)을 참조하세요. Amazon Redshift 클러스터를 생성하려면 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)을 참조하세요.

통합에 성공하려면 대상 Amazon Redshift 작업 그룹 또는 클러스터에 `enable_case_sensitive_identifier` 파라미터가 켜져 있어야 합니다. 대소문자 구분 활성화에 대한 자세한 내용은 Amazon Redshift 관리 안내서의 [데이터 웨어하우스에 대소문자 구분 기능 사용 설정](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-setting-up.case-sensitivity.html)을 참조하세요.

Amazon Redshift 작업 그룹 또는 클러스터 설정이 완료되면 데이터 웨어하우스를 구성해야 합니다. 자세한 내용은 Amazon Redshift 관리 안내서의 [제로 ETL 통합 시작하기](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html)를 참조하세요.

## 제로 ETL 통합을 위한 VPC 설정
<a name="zero-etl-setup-vpc"></a>

제로 ETL 통합을 위한 VPC를 설정하려면:

1. **VPC** > VPC로 이동하여 **VPC 생성**을 선택합니다.

   1. **VPC 등**을 선택합니다.

   1. VPC 이름을 설정합니다.

   1. IPv4 CIDR을 10.0.0.0/16으로 설정합니다.

   1. AZ 수를 1로 설정합니다.

   1. 퍼블릭 및 프라이빗 서브넷 수를 1로 설정합니다.

   1. **NAT 게이트웨이**를 없음으로 설정합니다.

   1. **VPC 엔드포인트**를 S3 게이트웨이로 설정합니다.

   1. DNS 호스트 이름 및 DNS 확인을 활성화합니다.

1. **엔드포인트**로 이동하고 **엔드포인트 생성**을 선택합니다.

1. VPC의 프라이빗 서브넷에서 다음 서비스에 대한 엔드포인트를 생성합니다(기본 보안 그룹 사용).

   1. com.amazonaws.us-east-1.lambda

   1. com.amazonaws.us-east-1.glue

   1. com.amazonaws.us-east-1.sts

AWS Glue 연결을 생성합니다.

1. **AWS Glue** > **데이터 연결**로 이동하고 **연결 생성**을 선택합니다.

1. **네트워크**를 선택합니다.

1. 생성한 VPC, 서브넷(프라이빗) 및 기본 보안 그룹을 선택합니다.

### VPC의 대상 역할 설정
<a name="zero-etl-setup-vpc-target-role"></a>

대상 역할에는 제로 ETl 통합에 필요한 다른 권한 외에 다음과 같은 권한이 있어야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CustomerVpc",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags",
        "ec2:DeleteTags",
        "ec2:DescribeRouteTables",
        "ec2:DescribeVpcEndpoints",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "glue:GetConnection"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### 대상 레그 리소스 속성 설정
<a name="zero-etl-setup-vpc-target-leg"></a>



CLI를 사용하는 경우 대상 레그 리소스 속성을 생성한 대상 AWS Glue 데이터베이스로 설정합니다. 대상 역할 ARN과 AWS Glue 연결 이름을 전달합니다.

```
aws glue create-integration-resource-property \
--resource-arn arn:aws:glue:us-east-1:<account-id>:database/exampletarget \
--target-processing-properties '{"RoleArn" : "arn:aws:iam::<account-id>:role/example-role", "ConnectionName":"example-vpc-3"}' \
--endpoint-url https://example.amazonaws.com --region us-east-1
```

### 가능한 클라이언트 오류
<a name="zero-etl-setup-vpc-client-errors"></a>

다음은 VPC로 구성된 통합에서 발생할 수 있는 클라이언트 오류입니다.


| 오류 메시지 | 필요한 작업 | 
| --- | --- | 
| 제공된 역할은 연결 시 glue:GetConnection을 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 역할은 ec2:DescribeSubnets를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 역할은 ec2:DescribeSecurityGroups를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 역할은 ec2:DescribeVpcEndpoints를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 역할은 ec2:DescribeRouteTables를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 역할은 ec2:CreateTags를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 역할은 ec2:CreateNetworkInterface를 수행할 권한이 없습니다. 역할 정책에 이 권한을 추가한 다음 통합이 복구될 때까지 기다립니다. | 역할 정책 업데이트 | 
| 제공된 연결 서브넷에 유효한 S3 엔드포인트 또는 NAT 게이트웨이가 포함되어 있지 않습니다. 서브넷을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | VPC 서브넷 엔드포인트 업데이트 | 
| 연결 서브넷을 찾을 수 없습니다. 연결 서브넷을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | AWS Glue 연결 업데이트 | 
| 연결 보안 그룹을 찾을 수 없습니다. 연결 보안 그룹을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | AWS Glue 연결 업데이트 | 
| 제공된 VPC 연결을 통해 S3에 연결할 수 없습니다. 서브넷 구성을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | VPC 서브넷 엔드포인트 업데이트 | 
| 제공된 VPC 연결을 통해 Lambda에 연결할 수 없습니다. 서브넷 구성을 업데이트한 다음 통합이 복구될 때까지 기다립니다. | VPC 서브넷 엔드포인트 업데이트 | 

## 제로 ETL 교차 계정 통합 설정
<a name="zero-etl-setup-cross-account-integration"></a>

제로 ETL 교차 계정 통합을 설정하려면:

1. [카탈로그 리소스 기반 액세스(RBAC) 정책 제공](#zero-etl-setup-target-resources-rbac-policy)에 설명된 대로 대상 리소스 정책을 구성합니다. 소스 계정 역할이 대상 리소스에 명시적으로 허용되는지 확인합니다.

1. 소스 계정 역할(통합을 생성하는 데 사용되는 역할)에 다음이 있는지 확인합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt123456789012",
               "Action": [
                   "glue:CreateInboundIntegration"
               ],
               "Effect": "Allow",
               "Resource": [
               	"arn:aws:glue:us-east-1:111122223333:catalog",
   							"arn:aws:glue:us-east-1:111122223333:database/DatabaseName"
               ]
           }
       ]
   }
   ```

------

1. [통합 생성](zero-etl-common-integration-tasks.md#zero-etl-creating)에 설명된 대로 통합을 생성합니다.