Amazon Redshift에서 Amazon S3 Tables 쿼리 - Amazon Redshift

Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물을 참조하세요.

Amazon Redshift에서 Amazon S3 Tables 쿼리

Amazon Redshift는 Amazon S3 테이블 버킷과 통합되어 Amazon Redshift를 사용하여 S3 테이블 리소스에 액세스할 수 있습니다. 이제 막 시작하는 단계이든 Iceberg 환경에서 수천 개의 테이블을 관리하든, 테이블 버킷은 모든 규모에서 데이터 레이크 관리를 단순화합니다. 자세한 내용은 테이블 버킷을 참조하세요.

이 주제에서는 Amazon S3 Tables 및 Redshift를 시작하고 Amazon Redshift를 사용하여 S3 Tables 객체에 액세스하는 방법을 설명합니다.

사전 조건

Amazon Redshift에서 S3 테이블을 쿼리하기 전에 S3 테이블을 AWS Glue Data Catalog와 통합해야 합니다. 지침은 Amazon S3 Tables와 AWS Glue Data Catalog의 통합을 참조하세요.

S3 테이블이 AWS Glue Data Catalog와 통합되면 필요한 S3 테이블 및 AWS Glue IAM 권한이 있는 IAM 보안 주체는 AWS Glue Data Catalog를 통해 S3 테이블을 검색할 수 있습니다.

참고

방법 3(자동 탑재 awsdatacatalog)에는 추가 사전 조건이 있습니다. 세부 정보는 방법 3: 자동 탑재된 awsdatacatalog 섹션을 참조하세요.

Amazon Redshift에서 S3 테이블 쿼리

Amazon S3 테이블 쿼리를 시작하려면 다음 단계를 따르세요.

  • 1단계: Amazon Redshift에 대한 IAM 역할 생성

  • 2단계: Amazon Redshift 클러스터에 IAM 역할 연결

  • 3단계: Amazon Redshift에서 S3 테이블 쿼리

1단계: Amazon Redshift에 대한 IAM 역할 생성

클러스터가 AWS Glue의 외부 S3 Tables 카탈로그에 액세스하려면 권한이 필요합니다. 이러한 권한을 부여하기 위해 Amazon Redshift는 클러스터에 연결되어 있는 IAM 역할을 사용합니다. 다음 정책 권한을 가진 IAM 역할을 만듭니다.

참고

아래 정책 및 예제에서 us-west-2를 AWS 리전으로 바꾸고 111122223333을 AWS 계정 ID로 바꿉니다.

정책을 생성하려면:

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 Policies를 선택합니다.

  3. 정책 생성을 선택합니다.

  4. [JSON] 탭을 선택합니다.

  5. 다음 JSON 정책 문서를 붙여 넣습니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "GlueDataCatalogPermissions", "Effect": "Allow", "Action": [ "glue:GetCatalog", "glue:GetDatabase", "glue:GetTable", "glue:GetTables", "glue:UpdateTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-west-2:111122223333:catalog", "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog", "arn:aws:glue:us-west-2:111122223333:catalog/s3tablescatalog/*", "arn:aws:glue:us-west-2:111122223333:database/s3tablescatalog/*/*", "arn:aws:glue:us-west-2:111122223333:table/s3tablescatalog/*/*/*", "arn:aws:glue:us-west-2:111122223333:database/*", "arn:aws:glue:us-west-2:111122223333:table/*/*" ] }, { "Sid": "S3TablesDataAccessPermissions", "Effect": "Allow", "Action": [ "s3tables:GetTableBucket", "s3tables:GetNamespace", "s3tables:GetTable", "s3tables:GetTableMetadataLocation", "s3tables:GetTableData", "s3tables:ListTableBuckets", "s3tables:CreateTable", "s3tables:PutTableData", "s3tables:UpdateTableMetadataLocation", "s3tables:ListNamespaces", "s3tables:ListTables", "s3tables:DeleteTable" ], "Resource": [ "arn:aws:s3tables:us-west-2:111122223333:bucket/*", "arn:aws:s3tables:us-west-2:111122223333:bucket/*/table/*" ] } ] }
  6. 정책 검토를 선택합니다.

  7. 정책 검토 페이지에서 이름GlueCatalogS3Tables_Policy를 입력합니다. 필요한 경우 설명을 입력합니다. 정책 요약을 검토한 다음 정책 생성을 선택합니다.

Amazon Redshift에 대한 IAM 역할을 생성하려면:

  1. IAM 콘솔(IAM console)을 엽니다.

  2. 탐색 창에서 역할을 선택합니다.

  3. 역할 생성(Create role)을 선택합니다.

  4. AWS 서비스를 신뢰할 수 있는 엔터티로 선택한 다음 사용 사례로 Redshift를 선택합니다.

  5. 다른 AWS 서비스의 사용 사례에서 Redshift - 사용자 지정 가능을 선택한 후 다음을 선택합니다.

  6. 권한 추가 페이지에서 앞서 생성한 GlueCatalogS3Tables_Policy 정책을 연결합니다. 다음을 선택합니다.

  7. Role name(역할 이름)에는 역할 이름을 입력합니다(예: RedshiftS3TablesRole).

  8. 정보를 검토한 후 역할 만들기를 선택합니다.

  9. 탐색 창에서 역할을 선택합니다. 새 역할 이름을 선택하여 요약을 본 다음 역할 ARN을 클립보드에 복사합니다. S3 Tables 네임스페이스에 대한 외부 스키마를 생성할 때 이 ARN을 사용합니다.

참고

와일드카드를 정확한 Amazon 리소스 이름(ARN)으로 바꾸면 특정 리소스로 범위를 좁힐 수 있습니다.

2단계: Amazon Redshift 클러스터에 IAM 역할 연결

1단계에서 구성한 IAM 역할에 Amazon Redshift 클러스터를 연결합니다.

AWS 관리 콘솔 사용:

  1. AWS 관리 콘솔에 로그인한 후 https://console.aws.amazon.com/redshiftv2/에서 Amazon Redshift 콘솔을 엽니다.

  2. 탐색 메뉴에서 클러스터(Clusters)를 선택한 후 업그레이드할 클러스터를 선택합니다.

  3. 작업에서 IAM 역할 관리를 선택하여 클러스터와 연결된 IAM 역할의 현재 목록을 표시합니다.

  4. IAM 역할 관리 페이지에서 추가하려는 IAM 역할을 선택한 다음 IAM 역할 추가를 선택합니다.

  5. 완료(Done)를 선택하여 변경 사항을 저장합니다.

AWS CLI 사용:

다음 명령을 실행하여 IAM 역할을 기존 클러스터 또는 네임스페이스와 연결합니다. my-redshift-cluster 또는 my-redshift-namespace를 클러스터 식별자 또는 네임스페이스로 바꾸고 111122223333을 AWS 계정 ID로 바꿉니다.

aws redshift modify-cluster-iam-roles \ --cluster-identifier my-redshift-cluster \ --add-iam-roles arn:aws:iam::111122223333:role/RedshiftS3TablesRole -- for serverless aws redshift-serverless update-namespace \ --namespace-name my-redshift-namespace \ --iam-roles "arn:aws:iam::111122223333:role/RedshiftS3TablesRole"

자세한 내용은 Amazon Redshift 관리 가이드클러스터와 IAM 역할 연결 섹션을 참조하세요.

3단계: Amazon Redshift에서 S3 테이블 쿼리

S3 Tables를 AWS Glue Data Catalog와 통합하면 서비스는 S3 Tables 리소스를 AWS Glue 카탈로그 객체에 매핑하는 페더레이션 카탈로그 구조를 생성합니다.

  • S3 테이블 버킷은 AWS Glue Data Catalog에서 카탈로그가 됩니다.

  • S3 네임스페이스는 AWS Glue 데이터베이스가 됩니다.

  • S3 테이블은 AWS Glue 테이블 객체가 됩니다.

통합은 다음과 같은 계층 구조를 생성합니다.

  • 페더레이션 카탈로그: s3tablescatalog(자동 생성됨)

  • 하위 카탈로그: 각 S3 테이블 버킷은 s3tablescatalog 아래의 하위 카탈로그가 됩니다.

  • 데이터베이스: 테이블 버킷 내의 각 S3 네임스페이스는 데이터베이스가 됩니다.

  • 테이블: 네임스페이스 내의 각 S3 테이블이 테이블이 됩니다.

예를 들어 테이블 transactions가 포함된 네임스페이스 sales가 있는 이름이 analytics-bucket인 S3 테이블 버킷이 있는 경우 AWS Glue Data Catalog의 전체 경로는 s3tablescatalog/analytics-bucket/sales/transactions입니다.

리소스 링크 생성

아래 세 가지 쿼리 방법 중 하나를 사용하기 전에 AWS Glue Data Catalog에서 리소스 링크를 생성해야 합니다. 리소스 링크를 사용하면 Amazon Redshift가 표준 카탈로그를 통해 S3 Tables 데이터베이스를 참조할 수 있습니다.

AWS Glue 콘솔 사용:

  1. https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창에서 Databases(데이터베이스)를 선택합니다.

  3. 생성을 선택한 다음 리소스 링크를 선택합니다.

  4. 리소스 링크 생성 페이지에서 다음 정보를 입력하세요.

    • 리소스 링크 이름: 리소스 링크의 이름을 입력합니다(예: sales_resource_link).

    • 공유 데이터베이스: S3 Tables 데이터베이스 경로(예: s3tablescatalog/analytics-bucket/sales)를 입력합니다.

    • 공유 데이터베이스 소유자: AWS 계정 ID를 입력합니다.

    • 공유 데이터베이스의 카탈로그 ID: 카탈로그 ID를 <account-id>:s3tablescatalog/<bucket-name> 형식으로 입력합니다.

  5. 생성(Create)을 선택합니다.

AWS CLI 사용:

aws glue create-database \ --region us-west-2 \ --cli-input-json '{ "CatalogId": "111122223333", "DatabaseInput": { "Name": "sales_resource_link", "TargetDatabase": { "CatalogId": "111122223333:s3tablescatalog/analytics-bucket", "DatabaseName": "sales" } } }'

이 명령은 S3 테이블 버킷 analytics-bucketsales 데이터베이스를 가리키는 기본 AWS Glue 데이터 카탈로그에 이름이 sales_resource_link인 리소스 링크를 생성합니다.

리소스 링크가 생성되면 Amazon Redshift는 S3 테이블을 쿼리하는 세 가지 방법을 제공합니다. 사용 사례에 가장 잘 맞는 방법을 선택하세요.

참고

데이터베이스 수준에서 리소스 링크를 생성하려면 Redshift 관리자에게 기본 카탈로그 및 생성 중인 데이터베이스에 대한 AWS Glue:CreateDatabase 권한이 있어야 합니다.

방법 1: CREATE EXTERNAL SCHEMA

CREATE EXTERNAL SCHEMA를 사용하여 S3 Tables 데이터베이스를 참조하는 외부 스키마를 생성합니다. 이 메서드는 스키마 이름 지정 및 구성을 명시적으로 제어합니다.

전체 구문 세부 정보는 Amazon Redshift 데이터베이스 개발자 안내서CREATE EXTERNAL SCHEMA를 참조하세요.

예제

3단계의 데이터베이스 이름과 카탈로그 ID를 사용합니다. 111122223333를 AWS 계정 ID로 바꿉니다.

CREATE EXTERNAL SCHEMA s3tables_schema FROM DATA CATALOG DATABASE 'sales_resource_link' IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole' REGION 'us-west-2' CATALOG_ID '111122223333'; SELECT * FROM s3tables_schema.transactions;

방법 2: ARN에서 데이터베이스 생성

CREATE DATABASEFROM ARN 절과 함께 사용하여 AWS Glue 리소스 링크를 직접 참조하는 페더레이션 데이터베이스를 생성합니다. 이 방법은 AWS Glue 데이터베이스를 Redshift 데이터베이스에 자동으로 매핑합니다.

전체 구문 세부 정보는 Amazon Redshift 데이터베이스 개발자 안내서CREATE DATABASE를 참조하세요.

예제

111122223333를 AWS 계정 ID로 바꿉니다.

CREATE DATABASE s3tables_db FROM ARN 'arn:aws:glue:us-west-2:111122223333:database/sales_resource_link' WITH DATA CATALOG SCHEMA analytics_schema IAM_ROLE 'arn:aws:iam::111122223333:role/RedshiftS3TablesRole'; SELECT * FROM s3tables_db.analytics_schema.transactions;

방법 3: 자동 탑재된 awsdatacatalog

Amazon Redshift는 awsdatacatalog 데이터베이스를 통해 S3 Tables 리소스 링크를 포함한 AWS Glue Data Catalog 데이터베이스를 자동으로 마운트할 수 있습니다. 이 방법을 사용하려면 클러스터에서 Spectrum(FAS)에 대한 페더레이션 액세스를 활성화해야 합니다.

사전 조건:

자동 마운트 awsdatacatalog 데이터베이스를 사용하려면 Spectrum에 대한 페더레이션 액세스를 활성화해야 합니다. 이를 통해 Amazon Redshift는 페더레이션 ID 자격 증명을 사용하여 AWS Glue Data Catalog 및 외부 데이터 소스에 액세스할 수 있습니다.

Spectrum에 대한 페더레이션 액세스를 활성화하려면 다음을 수행합니다.

  1. 다음 권한이 있는 IAM 자격 증명을 사용하여 Redshift 클러스터에 연결합니다.

    • redshift:GetClusterCredentialsWithIAM(프로비저닝된 클러스터의 경우) 또는 redshift-serverless:GetCredentials(서버리스의 경우)

    • AmazonS3ReadOnlyAccess

    • AWSGlueConsoleFullAccess

    • S3 Tables 권한(1단계에서 정의)

  2. IAM 자격 증명에 연결하면 Amazon Redshift는 IAM:(사용자의 경우) 또는 IAMR:(역할의 경우) 접두사가 붙은 데이터베이스 사용자를 자동으로 생성합니다.

  3. 클러스터 관리자로서 페더레이션 사용자에게 외부 스키마 액세스 권한을 부여합니다. my_user를 IAM 역할 또는 사용자 이름으로 바꿉니다.

    GRANT ALL ON SCHEMA awsdatacatalog TO "IAMR:my_user";

페더레이션 액세스 설정에 대한 자세한 지침은 Amazon Redshift 관리 안내서페더레이션 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리를 참조하세요.

S3 Tables 쿼리

페더레이션 액세스가 구성되면 마운트된 스키마를 확인하고 S3 테이블을 쿼리합니다.

마운트된 스키마를 확인합니다.

SHOW SCHEMAS FROM DATABASE awsdatacatalog;

3단계의 리소스 링크 이름을 사용하여 S3 테이블을 쿼리합니다.

SELECT * FROM awsdatacatalog.sales_resource_link.transactions;