Amazon S3 Tables Iceberg REST 엔드포인트를 사용하여 테이블에 액세스 - Amazon Simple Storage Service

Amazon S3 Tables Iceberg REST 엔드포인트를 사용하여 테이블에 액세스

Iceberg REST 클라이언트를 Amazon S3 Tables Iceberg REST 엔드포인트에 연결하고 S3 테이블 버킷에서 테이블을 생성, 업데이트 또는 쿼리하는 REST API 직접 호출을 할 수 있습니다. 엔드포인트는 Apache Iceberg RESTCatalog Open API 사양에 지정된 표준화된 Iceberg REST API 세트를 구현합니다. 엔드포인트는 Iceberg REST API 작업을 해당 S3 Tables 작업으로 변환하여 작동합니다.

참고

Amazon S3 Tables Iceberg REST 엔드포인트를 사용하여 AWS Partner Network(APN) 카탈로그 구현 또는 사용자 지정 카탈로그 구현의 테이블에 액세스할 수 있습니다. 또한 단일 테이블 버킷에 대한 기본 읽기/쓰기 액세스 권한만 필요한 경우에도 사용할 수 있습니다. 다른 액세스 시나리오의 경우 AWS Glue Iceberg REST 엔드포인트를 사용하여 통합 테이블 관리, 중앙 집중식 거버넌스 및 세분화된 액세스 제어를 제공하는 테이블에 연결하는 것이 좋습니다. 자세한 내용은 AWS GlueIceberg REST 엔드포인트를 사용하여 Amazon S3 Tables에 액세스 단원을 참조하세요.

엔드포인트 구성

서비스 엔드포인트를 사용하여 Amazon S3 Tables Iceberg REST 엔드포인트에 연결합니다. S3 Tables Iceberg REST 엔드포인트의 형식은 다음과 같습니다.

https://s3tables.<REGION>.amazonaws.com/iceberg

리전별 엔드포인트는 S3 Tables AWS 리전 및 엔드포인트 섹션을 참조하세요.

카탈로그 구성 속성

Iceberg 클라이언트를 사용하여 분석 엔진을 서비스 엔드포인트에 연결하는 경우 카탈로그를 초기화할 때 다음 구성 속성을 지정해야 합니다. 자리 표시자 값을 리전 및 테이블 버킷의 실제 정보로 바꿉니다.

  • 리전별 엔드포인트를 엔드포인트 URI로 사용: https://s3tables.<REGION>.amazonaws.com/iceberg

  • 테이블 버킷 ARN을 웨어하우스 위치로 사용: arn:aws:s3tables:<region>:<accountID>:bucket/<bucketname>

  • 인증을 위한 Sigv4 속성. 서비스 엔드포인트 요청의 SigV4 서명 이름은 s3tables입니다.

다음 예제에서는 Amazon S3 Tables Iceberg REST 엔드포인트를 사용하도록 여러 클라이언트를 구성하는 방법을 보여줍니다.

PyIceberg

PyIceberg 에서 Amazon S3 TablesIceberg REST 엔드포인트를 사용하려면 다음 애플리케이션 구성 속성을 지정합니다.

rest_catalog = load_catalog( catalog_name, **{ "type": "rest", "warehouse":"arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>", "uri": "https://s3tables.<Region>.amazonaws.com/iceberg", "rest.sigv4-enabled": "true", "rest.signing-name": "s3tables", "rest.signing-region": "<Region>" } )
Apache Spark

Spark에서 Amazon S3 Tables Iceberg REST 엔드포인트를 사용하려면 자리 표시자 값을 리전 및 테이블 버킷의 정보로 바꾸어 다음 애플리케이션 구성 속성을 지정합니다.

spark-shell \ --packages "org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,software.amazon.awssdk:bundle:2.20.160,software.amazon.awssdk:url-connection-client:2.20.160" \ --master "local[*]" \ --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \ --conf "spark.sql.defaultCatalog=spark_catalog" \ --conf "spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkCatalog" \ --conf "spark.sql.catalog.spark_catalog.type=rest" \ --conf "spark.sql.catalog.spark_catalog.uri=https://s3tables.<Region>.amazonaws.com/iceberg" \ --conf "spark.sql.catalog.spark_catalog.warehouse=arn:aws:s3tables:<Region>:<accountID>:bucket/<bucketname>" \ --conf "spark.sql.catalog.spark_catalog.rest.sigv4-enabled=true" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-name=s3tables" \ --conf "spark.sql.catalog.spark_catalog.rest.signing-region=<Region>" \ --conf "spark.sql.catalog.spark_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO" \ --conf "spark.hadoop.fs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.SimpleAWSCredentialProvider" \ --conf "spark.sql.catalog.spark_catalog.rest-metrics-reporting-enabled=false"

엔드포인트에 대한 액세스 인증 및 권한 부여

S3 Tables 서비스 엔드포인트에 대한 API 요청은 AWS Signature Version 4(SigV4)를 사용하여 인증됩니다. AWS SigV4에 대한 자세한 내용은 API 요청용 AWS Signature Version 4 섹션을 참조하세요.

Amazon S3 Tables Iceberg REST 엔드포인트 요청의 SigV4 서명 이름은 s3tables입니다.

Amazon S3 Tables Iceberg REST 엔드포인트에 대한 요청은 REST API 작업에 해당하는 s3tables IAM 작업을 사용하여 승인됩니다. 이러한 권한은 IAM 자격 증명 기반 정책 또는 테이블 및 테이블 버킷에 연결된 리소스 기반 정책에서 정의할 수 있습니다. 자세한 내용은 S3 Tables의 액세스 관리 단원을 참조하십시오.

AWS CloudTrail을 사용하여 REST 엔드포인트를 통해 테이블에 대한 요청을 추적할 수 있습니다. 요청은 해당 S3 IAM 작업으로 기록됩니다. 예를 들어 LoadTable API는 GetTableMetadataLocation 작업에 대한 관리 이벤트와 GetTableData 작업에 대한 데이터 이벤트를 생성합니다. 자세한 내용은 S3 Tables에서 AWS CloudTrail을 사용하여 로깅 단원을 참조하십시오.

접두사 및 경로 파라미터

Iceberg REST 카탈로그 API는 요청 URL에 자유 형식 접두사를 사용합니다. 예를 들어 ListNamespaces API 직접 호출은 GET/v1/{prefix}/namespaces URL 형식을 사용합니다. S3 테이블의 경우 REST 경로 {prefix}는 항상 URL로 인코딩된 테이블 버킷 ARN입니다.

예를 들어 다음 테이블 버킷 ARN arn:aws:s3tables:us-east-1:111122223333:bucket/bucketname의 경우 접두사는 arn%3Aaws%3As3tables%3Aus-east-1%3A111122223333%3Abucket%2Fbucketname입니다.

네임스페이스 경로 파라미터

Iceberg REST 카탈로그 API 경로의 네임스페이스는 여러 수준을 가질 수 있습니다. 그러나 S3 Tables는 단일 수준 네임스페이스만 지원합니다. 다중 수준 카탈로그 계층 구조의 네임스페이스에 액세스하려면 네임스페이스 위의 다중 수준 카탈로그에 연결하여 네임스페이스를 참조하면 됩니다. 이렇게 하면 다중 수준 네임스페이스를 사용하는 것에 비해 호환성 문제 없이 catalog.namespace.table의 3부 표기법을 지원하는 모든 쿼리 엔진이 S3 Tables의 카탈로그 계층 구조의 객체에 액세스할 수 있습니다.

지원되는 Iceberg REST API 작업

다음 표에는 지원되는 Iceberg REST API와 이러한 API가 S3 Tables 작업에 대응하는 방식이 나와 있습니다.

Iceberg REST 작업 REST 경로 S3 Tables IAM 작업 CloudTrail EventName

getConfig

GET /v1/config

s3tables:GetTableBucket

s3tables:GetTableBucket

listNamespaces

GET /v1/{prefix}/namespaces

s3tables:ListNamespaces

s3tables:ListNamespaces

createNamespace

POST /v1/{prefix}/namespaces

s3tables:CreateNamespace

s3tables:CreateNamespace

loadNamespaceMetadata

GET /v1/{prefix}/namespaces/{namespace}

s3tables:GetNamespace

s3tables:GetNamespace

dropNamespace

DELETE /v1/{prefix}/namespaces/{namespace}

s3tables:DeleteNamespace

s3tables:DeleteNamespace

listTables

GET /v1/{prefix}/namespaces/{namespace}/tables

s3tables:ListTables

s3tables:ListTables

createTable

POST /v1/{prefix}/namespaces/{namespace}/tables

s3tables:CreateTable, s3tables:PutTableData

s3tables:CreateTable, s3tables:PutObject

loadTable

GET /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:GetTableMetadataLocation, s3tables:GetTableData

s3tables:GetTableMetadataLocation, s3tables:GetObject

updateTable

POST /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableData

s3tables:UpdateTableMetadataLocation, s3tables:PutObject, s3tables:GetObject

dropTable

DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:DeleteTable

s3tables:DeleteTable

renameTable

POST /v1/{prefix}/tables/rename

s3tables:RenameTable

s3tables:RenameTable

tableExists

HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}

s3tables:GetTable

s3tables:GetTable

namespaceExists

HEAD /v1/{prefix}/namespaces/{namespace}

s3tables:GetNamespace

s3tables:GetNamespace

고려 사항 및 제한 사항

다음은 Amazon S3 Tables Iceberg REST 엔드포인트 사용 시 고려 사항 및 제한 사항입니다.

고려 사항
  • CreateTable API 동작 - 이 작업에서는 stage-create 옵션이 지원되지 않으며 400 Bad Request 오류가 발생합니다. 즉, CREATE TABLE AS SELECT(CTAS)를 사용하여 쿼리 결과에서 테이블을 생성할 수 없습니다.

  • DeleteTable API 동작 - 제거가 활성화된 테이블만 삭제할 수 있습니다. purge=false가 포함된 테이블을 삭제하는 것은 지원되지 않으며 400 Bad Request 오류가 발생합니다. Spark의 일부 버전은 DROP TABLE PURGE 명령을 실행할 때도 항상 이 플래그를 false로 설정합니다. DROP TABLE PURGE를 사용하거나 S3 Tables DeleteTable 작업을 사용하여 테이블을 삭제할 수 있습니다.

  • 엔드포인트는 표준 테이블 메타데이터 작업만 지원합니다. 스냅샷 관리 및 압축과 같은 테이블 유지 관리의 경우 S3 Tables 유지 관리 API 작업을 사용합니다. 자세한 내용은 S3 Tables 유지 관리 단원을 참조하십시오.

제한 사항
  • 다중 수준 네임스페이스는 지원되지 않습니다.

  • OAuth 기반의 인증은 지원되지 않습니다.

  • 네임스페이스에는 owner 속성만 지원됩니다.

  • Apache Iceberg REST Open API 사양에 정의된 보기 관련 API는 지원되지 않습니다.

  • metadata.json 파일이 5MB를 초과하는 테이블에서 작업을 실행하는 것은 지원되지 않으며 400 Bad Request 오류가 반환됩니다. metadata.json 파일 크기를 제어하려면 테이블 유지 관리 작업을 사용합니다. 자세한 내용은 S3 Tables 유지 관리 단원을 참조하십시오.