Amazon Web Services 한국 블로그

Amazon S3 버킷에 대한 쿼리 가능한 객체 메타데이터 (미리보기)

AWS 고객은 Amazon Simple Storage Service(Amazon S3)를 대규모로 사용하여 객체가 수십억 개에서 수조 개까지 포함된 개별 버킷을 정기적으로 생성합니다! 이 정도 규모에서는 특정 기준을 충족하는 객체(예: 패턴과 일치하는 키가 포함된 객체, 특정 크기의 객체, 특정 태그가 있는 객체 등)를 찾는 작업이 어려워집니다. 고객은 해당 정보를 캡처하고, 저장하며, 쿼리하는 시스템을 구축해야 했습니다. 이러한 시스템은 복잡하고 확장하기 어려울 수 있으며, 버킷 및 내부 객체의 실제 상태와 동기화되지 않을 수 있습니다.

풍부한 메타데이터
이제 S3 객체가 추가되거나 수정될 때 캡처되어 완전 관리형 Apache Iceberg 테이블에 저장되는 메타데이터를 미리 보기에서 자동으로 생성할 수 있습니다. 이를 통해 Amazon Athena, Amazon Redshift, Amazon QuickSight, Apache Spark 등의 아이스버그 호환 도구를 사용하여 규모와 상관없이 메타데이터를 쉽고 효율적으로 쿼리하고 관심 객체를 찾을 수 있습니다. 따라서 분석, 데이터 처리, AI 훈련 워크로드에 필요한 데이터를 빠르게 찾을 수 있습니다.

S3에 저장된 비디오 추론 응답의 경우 Amazon Bedrock에서는 생성한 콘텐츠에 메타데이터로 주석을 답니다. 이를 통해 콘텐츠를 AI 생성 콘텐츠로 식별하고 콘텐츠 생성에 어떤 모델이 사용되었는지 알 수 있습니다.

메타데이터 스키마에는 버킷 이름, 객체 키, 생성/수정 시간, 스토리지 클래스, 암호화 상태, 태그, 사용자 메타데이터를 비롯한 20개 이상의 요소가 포함됩니다. 또한 애플리케이션별 설명 정보를 추가적으로 별도의 테이블에 저장한 다음 쿼리의 일부로서 메타데이터 테이블과 결합할 수 있습니다.

작동 방식
메타데이터를 저장하려는 위치(S3 테이블 버킷 및 테이블 이름)를 지정하여 모든 S3 버킷에 대해 풍부한 메타데이터를 캡처할 수 있습니다. 업데이트(객체 생성, 객체 삭제, 객체 메타데이터 변경) 캡처가 즉시 시작되고 몇 분 내에 테이블에 저장됩니다. 업데이트할 때마다 레코드 유형(CREATEUPDATE_METADATA 또는 DELETE)과 시퀀스 번호를 사용하여 테이블에 새 행이 생성됩니다. 결과를 시퀀스 번호별로 정렬하는 쿼리를 실행하여 지정된 객체에 대한 기록 레코드를 검색할 수 있습니다.

메타데이터 활성화 및 쿼리
먼저 create-table-bucket 명령을 사용하여 메타데이터에 대한 테이블 버킷을 생성합니다. 이 작업은 AWS Management Console 또는 API 직접 호출을 통해서도 수행할 수 있습니다.

$ aws s3tables create-table-bucket --name jbarr-table-bucket-1 --region us-east-2
--------------------------------------------------------------------------------
|                               CreateTableBucket                              |
+-----+------------------------------------------------------------------------+
|  arn|  arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1   |
+-----+------------------------------------------------------------------------+

그런 다음 이 JSON을 파일(config.json)에 넣어 테이블 버킷(ARN 기준)과 원하는 테이블 이름을 지정합니다.

{
  "S3TablesDestination": {
    "TableBucketArn": "arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1",
    "TableName": "jbarr_data_bucket_1_table"
  }
}

그런 다음 이 구성을 다음의 내 데이터 버킷(메타데이터를 캡처하려는 버킷)에 연결합니다.

$ aws s3tables create-bucket-metadata-table-configuration \
  --bucket jbarr-data-bucket-1 \
  --metadata-table-configuration file://./config.json \
  --region us-east-2

테스트를 위해 EC2 인스턴스에 Apache Spark를 설치했고, 약간의 설정 후 Apache Iceberg용 Amazon S3 테이블 카탈로그 패키지를 참조하고 다음 명령줄에 mytablebucket과 같이 메타데이터 테이블을 추가하여 쿼리를 실행할 수 있었습니다.

$ bin/spark-shell \
--packages org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.6.0 \
--jars ~/S3TablesCatalog.jar \
--master yarn \
--conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
--conf "spark.sql.catalog.mytablebucket=org.apache.iceberg.spark.SparkCatalog" \
--conf "spark.sql.catalog.mytablebucket.catalog-impl=com.amazon.s3tables.iceberg.S3TablesCatalog" \
--conf "spark.sql.catalog.mytablebucket.warehouse=arn:aws:s3tables:us-east-2:123456789012:bucket/jbarr-table-bucket-1"

다음은 Iceberg 테이블의 현재 스키마입니다.

scala> spark.sql("describe table mytablebucket.aws_s3_metadata.jbarr_data_bucket_1_table").show(100,35)

+---------------------+------------------+-----------------------------------+
|             col_name|         data_type|                            comment|
+---------------------+------------------+-----------------------------------+
|               bucket|            string|   범용 버킷 이름.|
|                  key|            string|객체 키 이름 또는 키로서...|
|      sequence_number|            string|시퀀스 번호로서...|
|          record_type|            string|다음 중 하나인 이 레코드의 유형|
|     record_timestamp|     timestamp_ntz|다음과 연결된 타임스탬프|
|           version_id|            string|객체의 버전 ID. ...하는 경우...|
|     is_delete_marker|           boolean|객체의 삭제 마커 상태...|
|                 size|            bigint|...이 아닌 바이트 단위의 객체 크기|
|   last_modified_date|     timestamp_ntz|객체 생성 날짜 또는...|
|                e_tag|            string|엔터티 태그(ETag)로서, ...|
|        storage_class|            string|다음 용도로 사용되는 스토리지 클래스...|
|         is_multipart|           boolean|객체의 업로드 유형으로서, 다음과 같은 경우...|
|    encryption_status|            string|객체의 서버 측 암호화...|
|is_bucket_key_enabled|           boolean|객체의 S3 버킷 키 활성화...|
|          kms_key_arn|            string|Amazon 리소스 이름(ARN)...|
|   checksum_algorithm|            string|다음을 생성하는 데 사용되는 알고리즘...|
|          object_tags|map<string,string>|다음과 연결된 객체 태그...|
|        user_metadata|map<string,string>|다음과 연결된 사용자 메타데이터...|
|            requester|            string|요청의 AWS 계정 ID...|
|    source_ip_address|            string|요청의 소스 IP 주소...|
|           request_id|            string|요청 ID. 다음과 같은 기록의 경우...|
+---------------------+------------------+-----------------------------------+

다음은 가장 최근 업데이트 10개에 대한 메타데이터 중 일부를 보여주는 간단한 쿼리입니다.

scala> spark.sql("SELECT key,size, storage_class,encryption_status \
  FROM mytablebucket.aws_s3_metadata.jbarr_data_bucket_1_table \
  order by last_modified_date DESC LIMIT 10").show(false)
+--------------------+------+-------------+-----------------+                   
|key                 |size  |storage_class|encryption_status|
+--------------------+------+-------------+-----------------+
|wnt_itco_2.png      |36923 |표준     |SSE-S3           |
|wnt_itco_1.png      |37274 |표준     |SSE-S3           |
|wnt_imp_new_1.png   |15361 |표준     |SSE-S3           |
|wnt_imp_change_3.png|67639 |표준     |SSE-S3           |
|wnt_imp_change_2.png|67639 |표준     |SSE-S3           |
|wnt_imp_change_1.png|71182 |표준     |SSE-S3           |
|wnt_email_top_4.png |135164|표준     |SSE-S3           |
|wnt_email_top_2.png |117171|표준     |SSE-S3           |
|wnt_email_top_3.png |55913 |표준     |SSE-S3           |
|wnt_email_top_1.png |140937|표준     |SSE-S3           |
+--------------------+------+-------------+-----------------+

실제 상황에서는 앞서 언급한 AWS 또는 오픈 소스 분석 도구 중 하나를 사용하여 테이블을 쿼리합니다.

콘솔 액세스
Amazon S3 콘솔에서 다음과 같이 메타데이터 탭을 클릭하여 버킷의 메타데이터 구성을 설정하고 관리할 수도 있습니다.

지금 이용 가능
Amazon S3 메타데이터는 현재 평가판으로 제공되며, 미국 동부(오하이오, 버지니아 북부) 및 미국 서부(오리건) AWS 리전에서 바로 사용할 수 있습니다.

AWS Glue Data Catalog와의 통합이 미리 보기로 제공되며, 이를 통해 Amazon Athena, Amazon Redshift, Amazon EMR, Amazon QuickSight 등과 같은 AWS 분석 서비스를 사용하여 S3 메타데이터 테이블을 비롯한 데이터를 쿼리하거나 시각화할 수 있습니다.

가격은 번호 업데이트(객체 생성, 객체 삭제, 객체 메타데이터 변경)를 기준으로 하며 메타데이터 테이블 저장에 대한 추가 요금이 부과됩니다. 자세한 요금 정보는 S3 요금 페이지를 참조하세요.

이 메타데이터는 다양한 방법으로 강력하게 활용할 수 있을 것입니다. 여러분의 사용 사례에 대해 듣고 싶습니다. 여러분의 의견을 들려주세요!

Jeff;