カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

AWS 規範ガイダンス「Using Apache Iceberg on AWS」Memo #1

はじめに

こんにちは、半田です。

昨年のre:Invent 2025でS3 Tablesが出た直後はよく触っていましたが、最近は別のことに時間を割かないといけない状況が続いていて、その後あまり技術的な検証などはできてませんでした。
久々に時間が空いたので色々調べていたらAWS 規約ガイダンスにApache Icebergのドキュメントを見つけたので、読みつつメモとしてつらつらと書いていこうと思います。
こういうメモをあまり書いたことがないので、「それまんま引用じゃね?」というところがあってもご容赦ください。
docs.aws.amazon.com


私は英語は不得意なので、英語ページをDeepLのChrome拡張のページ翻訳を利用して読んでいます。

書いていく前に

最近は生成AIに要約してもらえるのでWeb記事や本等を読む労力というのはかなり減ってきましたが、代わりに分かった気になることが増えてきました。

良くも悪くも伝えたいことが要約としてまとまっているので概要としては理解がしやすいのですが、「その結論に至った背景は?」「書いてないけどこの時著者はこう思ったんじゃないか?」等の読んでいく中で自分で考えることがないので、自分事として落とし込みにくくなったと感じています。
伝わるか分かりませんが、絵のない絵本を読んでる気分になります。


また、文章を書くのも生成AIに5~6割の完成度でざっくり作成させて、そこから細かいところを自分で修正することが増えましたが、そのせいか「0→1の文章の書き出しをどうするか」「その後の文章の繋がりをどうしたら伝わりやすいか」といった文章を考える力が落ちた気がします。
逆に「どこの誰にこのコンテンツを届けたいのか」「どういう構成にしたらわかりやすいか」みたいな、生成AIがコンテンツを生成しやすくするために考える力は上がったように思います。

元々文章を読んだり書いたりする人であれば影響は少ないのかもしれませんが、私みたいにあまり文章が得意でないor書いてきていない人からすると、生成AI頼りにしすぎるのは良くないのでは?と考えたのもあって、たまには生成AIに頼らず文章を書いてみようと思った次第です。


と、ここまで書いてきた内容も生成AIだともっと早くわかりやすく綺麗にまとめてくれるんだろうなーと思いつつ、時間に余裕があるときぐらいは苦労してみようと思います。

AWS 規範ガイダンスとは?

まずそもそもAWS規範ガイダンスとは何かですが、詳しくは以下のページ冒頭に記載されています。

コンテンツは"戦略""ガイド""パターン"の3種類があり、あとはテクノロジーのカテゴリ(コンテナやデータレイクなど)によってフィルタリングができるようになっています。
"戦略"はCxOや上級管理者向けのビジネス視点や方法論・フレームワーク、"ガイド"はアーキテクトやテクニカルリード向けにベストプラクティスや実装などのガイダンス、"パターン"は開発者やユーザー向けの一般的な手順やアーキテクチャ・ツール/コードなどが書かれています。

Amazon Web Services (AWS) 規範ガイダンスは、実績のある戦略、ガイド、およびパターンを提供して、クラウド移行、モダナイゼーション、および最適化プロジェクトを促進するのに役立ちます。これらのリソースは、AWS の技術エキスパートと AWS パートナーのグローバルコミュニティが開発したもので、お客様が AWS でビジネス目標を実現するのをサポートしてきた長年の経験に基づいています。

aws.amazon.com


今回対象としている「Using Apache Iceberg on AWS」は"ガイド"の位置づけになっており、AWS上でApache Icebergを使うためのガイダンスとして提供されています。

このテクニカルガイドは、さまざまなAWSサービス上でApache Icebergを使い始めるためのガイダンスを提供し、コストとパフォーマンスを最適化しながらAWS上でApache Icebergを大規模に実行するためのベストプラクティスと推奨事項を記載しています。

Using Apache Iceberg on AWS - AWS Prescriptive Guidance


Introduction(はじめに)

最初のページでは、Apache Icebergが何をするものなのか、それをAWSで構築するにはどういった方法があるかが簡単に書かれています。
このガイドとしては、コスト&パフォーマンスの最適化したApache Iceberg on AWSを構築・利用するための方法とベストプラクティス・推奨事項を説明しています。

Apache Icebergは、パフォーマンスを向上させながらテーブル管理を簡素化するオープンソースのテーブルフォーマットです。 Amazon EMR、AWS Glue、Amazon Athena、Amazon RedshiftなどのAWS分析サービスにはApache Icebergのネイティブサポートが含まれているため、AWS上のAmazon Simple Storage Service (Amazon S3)上にトランザクションデータレイクを簡単に構築することができます。


対象ユーザーは

  • Apache Icebergを利用したい初心者
  • 既にApache IcebergをAWSで利用していて、チューニングをしたい上級者
  • その他AWS上でApache Icebergを利用したい全てのユーザー

となっています。

本ガイドは、AWS 上で Apache Iceberg を使用するすべての人に適用され、Apache Iceberg を素早く使い始めたい初心者ユーザーから、AWS 上で既存の Apache Iceberg ワークロードを最適化し、チューニングしたい上級ユーザーまでが対象です。


ガイドの構成は次のようになっています。
最初に最新のデータレイクについて説明し、その後各AWSサービスでのApache Icebergの使い方や移行方法の説明、後半でベストプラクティスや監視・セキュリティ周りの説明となっています。
Workのページがいくつかあるので、そこは可能であれば実際に構築を試してみたいと思います。

  • Modern data lakes(最新のデータレイク)
  • Getting started with Iceberg tables in Athena SQL(Athena SQLでIcebergテーブルを使い始める)
  • Working with Iceberg in Amazon EMR(Amazon EMRでIcebergを使う)
  • Working with Iceberg in AWS Glue(AWS GlueでIcebergを扱う)
  • Working with Iceberg tables by using Spark(Sparkを使ったIcebergテーブルの操作)
  • Working with Iceberg tables by using Amazon Data Firehose(Amazon Data Firehoseによるアイスバーグテーブルの操作)
  • Working with Iceberg tables by using Athena SQL(Athena SQLを使ってIcebergテーブルを操作する)
  • Migrating existing tables to Iceberg(既存テーブルのIcebergへの移行)
  • Best practices for optimizing Iceberg workloads(Icebergワークロード最適化のベストプラクティス)
  • Monitoring Iceberg workloads(Icebergワークロードの監視)
  • Governance and access control(ガバナンスとアクセス制御)
  • Reference architectures(リファレンス・アーキテクチャ
  • Resources(リソース)
  • Contributors(投稿者)

Modern data lakes(最新のデータレイク)

このページでは大きく以下の3つの項目に分けて説明されています。



最新のデータレイクにおける高度なユースケース

ここではデータを保存するための選択肢としてデータレイクを紹介し、データレイクのデメリットとそれがワークロードにどのような影響を及ぼすかが明記されています。
当初のデータレイクの設計として、「原子性」「一貫性」「分離」「耐久性(ACID)」処理が提供されておらず、以下の機能がサポートされていませんでした。

  • ビジネスでのデータ変更に伴うレコードレベルでの効率的な更新と削除の実行
  • テーブルが数百万ファイル、数十万パーティションに拡大した場合のクエリ・パフォーマンスの管理
  • 複数のライタとリーダが同時に存在する場合のデータの一貫性の確保
  • 書き込み操作が途中で失敗した場合のデータ破損防止
  • データセットを(部分的に)書き換えることなく、時間の経過とともにテーブルスキーマを進化させる。


以下の記載にもありますが、過去のS3+Glue等を中心としたデータレイクの仕組みだとS3上のファイルに対する更新や削除の実装ができないため、全データの洗い替えや不備データがあった特定期間のみの洗い替え、エラー発生時の原因ファイルの特定などでかなりの時間がかかっていました。
実体験でもありますが、洗い替えであればある程度更新・削除操作を減らすことは可能ですが、その分コストがかかってしまうという問題もありました。

従来のHive形式のテーブルを使用するデータレイクは、ファイル全体に対する書き込み操作のみをサポートします。 このため、更新や削除の実装が難しく、時間とコストがかかります。 さらに、データの整合性と一貫性を確保するためには、ACID準拠のシステムで提供される並行性制御と保証が必要です。


それらのデメリットの解消のための方法として、Apache Icebergをはじめとした技術(Open Table Format)が出てきました。(※1)
また、書かれてはいないですが、Open Table FormatとしてはApache Iceberg以外にApache HudiやDelta Lake等があります。
 参考:Data lake Table Formats — Hudi vs Iceberg vs Delta Lake | by Dinesh Shankar | Medium

これらの課題を克服するために、Apache Icebergは、Amazon Simple Storage Service (Amazon S3) のような費用対効果の高いシステム上のストレージをサポートしながら、データレイクの最適化と管理のオーバーヘッドを簡素化する、追加のデータベースのような機能を提供します。



※1 厳密にはもっと細かい背景があるようですがここでは省略します。気になる方は「Apache Iceberg: The Definitive Guide[Book]」を読むと良いかもしれません。



Apache Icebergの紹介

ここではApache Icebergについて紹介されています。Apache Iceberg機能として次のようなものが挙げられています。

  • 削除、更新、マージ
    • Icebergは、データレイクテーブルで使用するデータウェアハウスの標準SQLコマンドをサポートしています。
  • 高速スキャンプランニングと高度なフィルタリング
    • Icebergはパーティションやカラムレベルの統計などのメタデータを保存し、エンジンがそれを使用してプランニングやクエリの実行を高速化します。
  • スキーマの完全な進化
    • Iceberg は、副作用なしに列の追加、削除、更新、名前の変更をサポートします。
  • パーティションの進化
  • 隠しパーティション
    • この機能により、不要なパーティションが自動的に読み込まれなくなります。 これにより、ユーザーがテーブルのパーティショニングの詳細を理解したり、クエリに余分なフィルタを追加したりする必要がなくなります。
  • バージョンのロールバック
  • タイムトラベル
    • ユーザーはテーブルの特定の以前のバージョンを照会できます。
  • シリアライズ可能な分離
    • テーブルの変更はアトミックであるため、読み手は部分的な変更やコミットされていない変更を見ることはありません。
  • 同時書き込み
  • オープンファイル形式

S3とApache Icebergを利用することで、ファイルの更新・削除にも対応可能なデータレイクの構築が可能となります。

Apache Icebergには他にも機能があり、詳しくはApache Icebergドキュメントに書かれています。
iceberg.apache.org





Apache IcebergのAWSサポート

ここではApache IcebergをどのAWSサービスがサポートしているかが説明されています。

https://docs.aws.amazon.com/images/prescriptive-guidance/latest/apache-iceberg-on-aws/images/data-lake-architecture.png


直接的にApache IcebergをサポートしているAWSサービスについても簡単に説明されています。
また、記載されていませんが、Iceberg APIを実行するライブラリ等を利用することで他のサービス(AWS Lambda等)から間接的にアクセスすることもできるようです。

  • Amazon S3
    • Amazon S3は、その耐久性、可用性、拡張性、セキュリティ、コンプライアンス、監査機能から、データレイクを構築するのに最適な場所です
    • IcebergはAmazon S3とシームレスにやり取りできるように設計・構築されており、Icebergのドキュメントに記載されているように、Amazon S3の多くの機能をサポートしています。
  • Amazon EMR
  • Amazon Athena
    • Amazon Athena は、オープンソースフレームワークで構築されたサーバーレスでインタラクティブな分析サービスです。
    • オープン・テーブルとファイル形式をサポートし、ペタバイト級のデータが存在する場所を分析するためのシンプルで柔軟な方法を提供する。
    • AthenaはIcebergの読み込み、タイムトラベル、書き込み、DDLクエリをネイティブでサポートし、IcebergメタストアにはAWS Glue Data Catalogを使用する。
  • Amazon Redshift
    • Amazon Redshift はペタバイトスケールのクラウドデータウェアハウスで、クラスタベースとサーバーレスの両方のデプロイオプションをサポートしている。
    • Amazon Redshift Spectrumは、AWS Glue Data Catalogに登録され、Amazon S3に保存されている外部テーブルを照会することができる。
    • Redshift SpectrumはIcebergストレージフォーマットもサポートしています。
  • AWS Glue
    • AWS Glue は、アナリティクス、機械学習(ML)、アプリケーション開発のために、複数のソースからのデータの発見、準備、移動、統合を容易にするサーバーレスデータ統合サービスです。
    • AWS Glue 3.0以降のバージョンは、データレイク用のIcebergフレームワークをサポートしている。
    • AWS Glue を使用して、Amazon S3 の Iceberg テーブルの読み取りと書き込み操作を実行したり、AWS Glue Data Catalog を使用して Iceberg テーブルを操作したりできます。
    • 挿入、更新、Sparkクエリ、Spark書き込みなどの追加操作もサポートされています。
  • AWS Glue Data Catalog
    • AWS Glue Data Catalog IcebergテーブルをサポートするHiveメタストア互換のデータカタログサービスを提供します。
  • AWS Glue Crawler
    • AWS Glueクローラー は、IcebergテーブルをAWS Glue Data Catalogに登録するための自動化を提供する。
  • Amazon Data Firehose
    • Amazon Data Firehose は、Amazon S3Amazon Redshift、Amazon OpenSearch Service、Amazon OpenSearch Serverless、Splunk、Apache Iceberg テーブル、および Datadog、Dynatrace、LogicMonitor、MongoDB、New Relic、Coralogix、Elastic など、サポートされているサードパーティのサービスプロバイダが所有するカスタム HTTP または HTTP エンドポイントなどの宛先にリアルタイムストリーミングデータを配信するためのフルマネージドサービスです。
    • Firehoseを使えば、アプリケーションを書いたり、リソースを管理したりする必要はありません。
    • Firehoseにデータを送信するようにデータ・プロデューサーを設定すると、Firehoseは自動的に指定した宛先にデータを配信します。
    • また、Firehoseがデータを配信する前にデータを変換するように設定することもできます。
  • Amazon SageMaker AI
    • Amazon SageMaker AI は、Iceberg形式を使用することで、Amazon SageMaker AIフィーチャーストアへのフィーチャーセットの保存をサポートします。
  • AWS Lake Formation
    • AWSレイクフォーメーション は、AthenaまたはAmazon Redshiftによって消費されるIcebergテーブルを含むデータにアクセスするために、粗いおよび細かいアクセス制御権限を提供します。
    • Icebergテーブルに対するパーミッションのサポートについては、Lake Formationのドキュメントを参照してください。



次回

今回は最初ということでIntroductionとModern data lakesの2つについて確認しました。
次回は以下ページを見ていきながら、可能なら実際に使い方も試してみたいと思います。

  • Getting started with Iceberg tables in Athena SQL(Athena SQLでIcebergテーブルを使い始める)

おわりに

なんとなくアイキャッチを設定してみたけど思ったよりも文字が小さい...こういうときにうまく作るセンスが欲しい
そしてはてな記法試してみたけど全然思った通りに書けないので、次回からはMarkdownに戻すかもしれない。