Amazon SageMaker Feature Storeは、機械学習モデルのフィーチャーを保存、共有、管理するためのフルマネージドで専用のリポジトリです。今回、Apache Icebergテーブル形式、ストリーミングインジェスト、スケーラブルなバッチインジェスト、およびAWS Lake Formationによる細かいアクセス制御が新たにサポートされました。
組織が機械学習プラットフォームを実験段階から本番環境に拡大するにつれて、2つの運用上の課題が常に浮上します。1つ目は、新しいフィーチャーグループごとに手動のオーバーヘッドを導入することなく、機密性の高いフィーチャーデータへのアクセスを保護することです。2つ目は、高頻度のストリーミングワークロードが増え続けるApache Icebergメタデータを生成する場合に、ストレージコストを予測可能に保つことです。例えば、ある小売分析チームは、Icebergベースのオフラインストアが1年足らずで50 TBを超えるメタデータファイルを蓄積し、大幅で予期しないAmazon S3費用が発生したことを発見しました。一方、業界全体のインフラストラクチャチームは、フィーチャーデータに対するLake Formationによるアクセス制御が、フィーチャーグループ作成時に自動的に機能し、繰り返し手動で設定する必要がないことを求めています。
本日、私たちはこれらの課題に対処するSageMaker Python SDK v3.8.0の3つの新機能を発表します。
ネイティブAWS Lake Formation統合 – フィーチャーグループ作成時または既存のフィーチャーグループに対して、オフラインストアをLake Formationに登録し、列レベル、行レベル、セルレベルのアクセス制御を適用します。Lake Formationの手動設定は不要です。
追加のApache Icebergテーブルプロパティ – フィーチャーグループ作成時または既存のフィーチャーグループに対して、メタデータ保持とスナップショットライフサイクルポリシーを制御し、メタデータの蓄積を防ぎ、ストレージコストを削減します。
SageMaker Python SDK v3でのFeature Storeサポート – モダナイズされたSDK v3.8.0は、これらの新機能を含むFeature Storeの全機能を、モジュール化され、より高速で軽量なパッケージに提供します。
この記事では、各機能についてコード例を交えて説明します。完全なエンドツーエンドのウォークスルーについては、SageMaker Python SDKリポジトリにあるLake FormationガバナンスとIcebergテーブルプロパティのノートブックを参照してください。
前提条件
この記事の例に従うには、以下が必要です。
Amazon SageMaker AIリソースを作成する権限を持つAWSアカウント。
Amazon S3、AWS Glue、AWS Lake FormationにアクセスできるAmazon SageMaker AI実行ロール。
SageMaker Python SDK v3.8.0以降。次のコマンドでSageMakerをインストールできます:pip install --upgrade "sagemaker>=3.8.0"
Lake Formation統合の場合:アカウントに少なくとも1つのデータレーク管理者が設定されていること。Feature Storeはアクセス制御を有効にする前にこれを検証します。
オフラインストアデータ用の既存のAmazon S3バケット。
ソリューション概要
これらの機能は、SDK v3のFeatureGroupManager.create()およびFeatureGroupManager.update()呼び出しの新しいパラメーターを通じて提供されます。LakeFormationConfigは自動アクセス制御設定をトリガーし、IcebergPropertiesはメタデータライフサイクルを構成します。どちらもフィーチャーグループ作成時に設定するか、既存のフィーチャーグループに適用できます。
SageMaker Python SDK v3のFeature Store
SageMaker Python SDK v3.8.0(2026年4月16日リリース)は、この記事で説明する機能の基盤です。モダナイズされたSDKは、モジュール式アーキテクチャ、パフォーマンスの向上、およびレガシーなハード依存関係(PyTorchなど)の除去を導入しています。これらの変更により、インストールが高速化され、環境が小さくなります。
SDK v3で利用可能なFeature Store機能は次のとおりです。
フィーチャーグループライフサイクル管理:作成、記述、更新、削除、一覧表示。
レコード操作:PutRecord、GetRecord、BatchGetRecord。
トレーニングデータセット抽出:トレーニングデータセット構築のためのポイントインタイムクエリ。
DataFrameインジェスト:PandasおよびSpark DataFrameからのFeatureGroupManager.ingest()によるインジェスト。
新しいオフラインストアパラメーター:IcebergPropertiesとLakeFormationConfigは、作成および更新ワークフローで完全にサポートされています。
Feature Store APIサーフェスはSDK v2と一貫しているため、既存のコードは最小限の変更で動作します。SDKの他の領域の破壊的変更については、SDK v3の変更ログを参照してください。
SDK v3のクイックスタート
新しいLake FormationおよびIcebergパラメーターを使用してフィーチャーグループを作成する方法は次のとおりです。
fg = FeatureGroupManager.create(
feature_group_name="my-features",
record_identifier_feature_name="user_id",
event_time_feature_name="event_time",
feature_definitions=df,
role_arn=role,
online_store_config={"EnableOnlineStore": True},
offline_store_config=OfflineStoreConfig(
s3_storage_config=S3StorageConfig(s3_uri=f"s3://{bucket}/feature-store/"),
table_format="Iceberg",
),
lake_formation_config=LakeFormationConfig(
enabled=True,
hybrid_access_mode_enabled=True,
acknowledge_risk=True,
),
iceberg_properties=IcebergProperties(
properties={
"write.metadata.delete-after-commit.enabled": "true",
"write.metadata.previous-versions-max": "10",
}
),
)ネイティブLake Formation統合によるオフラインストアのガバナンス
以前は、Feature StoreデータにAWS Lake Formationを設定するには、S3ロケーションの登録、IAMAllowedPrincipalsグループの取り消し、各フィーチャーグループのデータフィルターの設定など、複数の手動ステップが必要でした。このプロセスは時間がかかり、エラーが発生しやすく、新しいフィーチャーグループごとに繰り返す必要がありました。金融サービス、ヘルスケア、その他の規制産業で、列レベル、行レベル、セルレベルのアクセス制御を必要とする組織にとって、これは特に負担でした。
現在では、フィーチャーグループ作成時にFeatureGroupManager.create()にLakeFormationConfigを渡すことで、オフラインストアのLake Formationアクセス制御を有効にできます。また、FeatureGroupManager.enable_lake_formation()を使用して既存のフィーチャーグループでも有効にできます。この設定をオンにすると、Feature Storeは自動的に次の操作を実行します。
S3データロケーションをLake Formationに追加します。オフラインストアのS3プレフィックスがLake Formation管理のデータレークロケーションとして登録されます。信頼された分析サービス(Amazon Athena、AWS Glue、Amazon EMR、Amazon Redshift Spectrum)は、データをクエリするためにLake Formationから一時的な認証情報を受け取ります。
ハイブリッドアクセスモードを無効にします(オプション)。hybrid_access_mode_enabled=Falseを設定すると、SDKはAWS GlueテーブルのIAMAllowedPrincipal付与を取り消すため、アクセスはLake Formationの権限モデルのみを通過する必要があります。hybrid_access_mode_enabled=Trueの場合、AWS Identity and Access Management (IAM) ポリシーとLake Formation権限が共存し、段階的な移行に役立ちます。詳細については、ハイブリッドアクセスモードを参照してください。
推奨されるS3拒否ポリシーを提供します。エンドツーエンドのガバナンスが必要なお客様のために、SDKはアクティベーション後に警告メッセージとして推奨されるバケットポリシーを記録します。このポリシーを確認し、Amazon S3バケットに適用して、承認されていないプリンシパルによる直接S3読み取りをブロックし、Lake Formationをバイパスできる最後の経路を閉じます。
これはオプトインのフィーチャーグループ単位の設定です。省略した場合、動作は変わらず、既存のフィーチャーグループはIAMベースのアクセスで引き続き機能します。
コード例
以下は、Lake Formationアクセス制御を有効にした新しいフィーチャーグループを作成します。その他の設定オプションについては、Feature GroupsでのLake Formationの有効化を参照してください。
fg = FeatureGroupManager.create(
feature_group_name="governed-customer-features",
record_identifier_feature_name="customer_id",
event_time_feature_name="event_time",
feature_definitions=customer_df,
role_arn=role,
online_store_config={"EnableOnlineStore": True},
offline_store_config=OfflineStoreConfig(
s3_storage_config=S3StorageConfig(s3_uri=f"s3://{bucket}/feature-store/"),
table_format="Iceberg",
),
lake_formation_config=LakeFormationConfig(
enabled=True,
hybrid_access_mode_enabled=True,
acknowledge_risk=True,
),
)既存のフィーチャーグループでLake Formationを有効にするには:
fg = FeatureGroupManager.get(
feature_group_name="existing-feature-group",
)
fg.enable_lake_formation(
hybrid_access_mode_enabled=True,
acknowledge_risk=True,
)フィーチャーグループが構成されたら、Lake FormationコンソールまたはAPIを使用して詳細な権限を付与します。データサイエンスチームにcustomer_id、credit_score、region列のみへのSELECTアクセス権を付与できます(列レベルのフィルタリング)。また、アナリストをregion = 'us-east-1'の行に制限することもできます(行レベルのフィルタリング)。または、両方を組み合わせてセルレベルのアクセス制御を実現します。
重要な考慮事項
オンラインストアは影響を受けません。Lake Formationアクセス制御はオフラインストアにのみ適用されます。オンラインストアは引き続きIAMベースの認可を使用するため、リアルタイム推論のレイテンシーは変わりません。
AWS GlueとIcebergの両方のテーブル形式で動作します。Lake Formationアクセス制御は、オフラインストアに使用するテーブル形式に関係なく同じように適用されます。
クロスアカウント互換性。AWS Resource Access Manager (AWS RAM) を使用してFeature Storeテーブルをアカウント間で共有している場合、Lake Formationの権限は既存のクロスアカウント共有パターンと一緒に引き続き機能します。注意:テーブル形式がIcebergの場合、クロスアカウントアクセスではハイブリッドアクセスモードを無効にする必要があります。
前提条件:データレーク管理者。システムは、アクセス制御を有効にする前に、アカウントに少なくとも1人のデータレーク管理者が設定されていることを検証します。存在しない場合、作成呼び出しは非同期的に失敗するのではなく、即座に説明的なエラーを返します。
詳細については、Feature GroupsでのLake Formationの有効化を参照してください。
追加のIcebergテーブルプロパティによるオフラインストアの管理
Amazon SageMaker Feature Storeは、オフラインストアのテーブル形式としてApache Icebergをサポートしており、これにより圧縮によるクエリパフォーマンスの向上とレコードレベルの操作が可能になります。このセクションでは、Icebergメタデータのライフサイクルを制御する新しいパラメーターを紹介します。
高頻度書き込みのワークロード(数秒ごとにレコードを取り込むストリーミングフィーチャーパイプラインなど)では、Icebergメタデータファイルがコミットごとに蓄積されます。ライフサイクル制御がないと、このメタデータは指数関数的に増加する可能性があります。40以上のストリーミングフィーチャーグループを持つある顧客は、S3バケットが数GBから1年足らずで50 TB以上のメタデータに成長したことを確認しました。Feature Storeは高頻度(コミット間隔10分未満)でオフラインストアにコミットしており、各コミットで新しいメタデータファイルが生成されました。スナップショットやメタデータファイルの保持を制限する書き込みプロパティが事前設定されていないため、メタデータはチェックされずに蓄積されました。Amazon Athenaを介して試みたクリーンアップ操作(OPTIMIZEおよびVACUUM)は、50 TBを超えるテーブルでタイムアウトしました。結局、高価なAmazon EMR Serverless Sparkジョブに頼り、最終的にテーブルを完全に書き直す必要がありました。
解決策
Iceberg形式のフィーチャーグループを作成する際に、IcebergProperties設定を渡せるようになりました。これらのプロパティは基盤となるIcebergテーブルに適用され、初日からメタデータライフサイクルを制御できます。また、FeatureGroupManager.update()を使用して既存のフィーチャーグループのIcebergプロパティを更新することもできます。
サポートされているプロパティの例:
| プロパティ | デフォルト | 説明 | |------|--------|------| | write.metadata.delete-after-commit.enabled | false | 各コミット後に最も古い追跡メタデータファイルを削除 | | write.metadata.previous-versions-max | 100 | 追跡する以前のバージョンのメタデータファイルの最大数 | | history.expire.max-snapshot-age-ms | 432000000 (5日) | 期限切れ時のスナップショットの最大保存期間 | | history.expire.min-snapshots-to-keep | 1 | 期限切れ時に保持する最小スナップショット数 | | write.target-file-size-bytes | 536870912 (512 MB) | 生成するデータファイルのターゲットサイズ | | write.parquet.row-group-size-bytes | 134217728 (128 MB) | Parquet行グループサイズ | | read.split.target-size | 134217728 (128 MB) | データ入力分割を結合する際のターゲットサイズ |
サポートされているプロパティの完全なリストについては、[切り捨てられた]を参照してください。
全体として、これらの新機能により、Amazon SageMaker Feature Storeはより強力で管理しやすくなり、組織がMLプラットフォームを拡大しながらコストを削減し、セキュリティとコンプライアンスを向上させるのに役立ちます。