この記事は Amazon SageMaker Unified Studio のマルチアカウントでデータ連携をする流れを検証した記事となります。
注意事項として、2025年3月時点で Amazon SageMaker Unified Studio は Public Preview 期間であり、GAに伴い、UIや仕様が変更となる可能性があります。
Amazon SageMaker Unifed Studioとは
データとAIに関わる作業を1つのプラットフォームの中で行えるというのがコンセプトで作られた、新しいSageMakerのサービスになります。Amazon DataZoneをベースとしてデータ共有の仕組みを土台に、Bedrock やGlue などの既存のAnalyticsとAI/MLサービスをまとめて利用できます。
詳細は公式ページをみてください。(もっと気になる方はAWSのSAさんに問い合わせていただくと良いかもです。)
https://aws.amazon.com/jp/sagemaker/unified-studio/
では本題です。
過去書いた記事「Amazon DataZone のアカウント連携してデータ公開」を参考に、Amazon SageMaker でもマルチアカウントでデータ共有できるかを検証していきます!!
イメージは下記です。
1. IAM Identity Center でユーザーを作成
本来、Organizations での組織インスタンスが好ましいですが、検証なのでアカウントインスタンスで試していきます。
こちらも本来やるべきですが、検証で一時的の環境であるため、今回はMFAを無効化します。
ではユーザーを3つ作っていきます。ユーザー作成を3回繰り返します。
2. SageMaker Unified Studio のドメインを作成
コンソールで Amazon SageMaker にアクセスして、ドメインを作成します。
クイックセットアップを設定します。
Unified Studio 用の VPC が必要そうなので、作成します。
CloudFormationに遷移して、そのままスタックを作成し、VPCを作成します。
先ほどのスタックが完了したら、VPCとサブネットが選択されますので、他すべてはデフォルトのまま、「続行」で次にいきます。
ユーザー作成時にadminで設定したメールアドレスを入力して、ドメインを作成します。
作成されました。
3.ユーザーを追加
ドメインの管理で、画面下部にあるユーザーパートでSSOユーザーを追加します。
admin は追加済みなので、consumer とproducer にチェックして、追加します。
4. Producer アカウントと Consumer アカウントをドメインに関連付け
ドメインのアカウント関連付けのタブから「関連付けをリクエスト」します。
それぞれのアカウントのSageMaker 画面で、リクエストが表示されます。
すると管理アカウントのドメインで、「関連付け済み」にステータスが変わりました。
5. Producer と Consumer のプロジェクトプロファイルを作成
デフォルトで有効になっているプロジェクトプロファイルは、管理アカウントに紐づいており、このプロファイルを利用してプロジェクトを作成すると、管理アカウントに紐づいてしまいます。
まず、Producer アカウントに紐づくプロジェクトプロファイルを作成します。
プロジェクトプロファイル名は「producer」とし、テンプレートではそのまま「Data analytics and AI-ML model development」を選びます。
アカウントIDにproducer アカウントのIDを入力します。
プロジェクトプロファイルを有効にするにチェックし、作成します。
consumerも同様にプロジェクトプロファイルを作成します。(consumerのアカウントIDを入力)
6.Producer アカウントでのブループリント有効化
関連づけされたドメインにおいて、ブループリントがデフォルトではすべて無効になっています。
これを有効化していきます。対象は下記です。
- LakeHouseDatabase
- RedshiftServerless
- Workflows
- MLExperiments
- EmrOnEc2
- LakehouseCatalog
- EmrServerless
- Tooling
その他のピクチャh割愛しますが、唯一 Tooling では VPC の作成が求められるので、管理者アカウントで実施したのと同様にproducer アカウントでもCloudFormationでVPC等を作成し、できたVPCとサブネットを選択し、有効化します。
※本来後で作成するドメインユニットで、Producer と Consumer のドメインユニットに紐づかせるべきですが、流れとして、root のCorporateの設定のまま進めています。
7.Consumer アカウントでのブループリント有効化
こちらもさきほどのProducerと同様に有効化しています。
(以降のピクチャは割愛します。)
8. adminアカウントで ドメインユニットを作成
Govern タブから、 Domain units をクリックします。
Corporateのドメインだけ存在しますが、組織構造に準拠するように、子のドメインユニットとして、producer と consumer のドメインユニットを作ります。
このような組織を体現する構造をドメインユニットで設定できます。
9. producer プロジェクトと consumer プロジェクトの作成
メインページ右側にある Create Project をクリックします。
プロジェクト名に「producer_project」を設定し、Domain units でproducer を選択します。
Project profile の選択において、先ほど作ったproduect のプロファイルを選択します。
ここでどのアカウントのリソースに紐づくかが変わるため、間違わないように気をつけます。
step2ではLakehouse Database をproducer_dbと変更します。他はそのままで次に進みます。
producer プロジェクトが作られている間に、consumer プロジェクトを作ります。
プロファイル選択に気をつけます。
producer プロジェクト、consumer プロジェクトの両方が作成されました。
10.producer におけるデータ準備
プロジェクトの左側メニューより「Data」をクリックし、Lakehouseセクションを開きます。すると、producer_db_XXX が表示されるので、Upload data をクリックします。
下記から拝借したデータcsvファイルをローカルにダウンロードし、ドラッグ&ドロップでアップロードします。
次に左のData Sources メニューから、「producer」で検索して出てきた source をクリックします。
すると、さきほどアップロードしたcsvファイルのデータが、データアセットとして登録されるので、クリックします。
データアセットとして、メタデータの付与などできますが、この検証ではそのまま、右上「PUBLISH ASSET」を押下します。
これでデータ公開ができました。
ちなみに、Producer のプロジェクトプロファイルをもとに作成されているので、さきほどアップロードしたcsvファイルは、ちゃんと producer アカウントの S3 内にアップロードされています。
11. consumer プロジェクトで公開されたデータのサブスクライブ
Consumer プロジェクトにおいて、Discover のタブから、Data Catalog をクリックします。
検索バーに「sales」と打ち込むと先ほど公開されたデータカタログが確認できるので、クリックします。
consumer project としてサブスクライブリクエストを行います。(理由は今回適当に入れています。)
12.producer プロジェクトでサブスクライブ承認
もう1度、producer 側のプロジェクトに戻り、「Subscription requests」を見るてみると、consumer プロジェクトからのリクエストが確認できます。
view request から詳細を確認します。承認アクセスとしては今回 Full access を選択し、APPROVEをクリックします。
13.サブスクライブできたデータの確認
再び、consumer プロジェクトに移り、Assets メニューから、SUBSCRIBED を確認すると、「Assest accessible」となっていることが確認できます。
画面上部のBuildタブから、Query Editor をクリックします。
左のLakehouseセクションから、AwsDataCatalog → consumer_db_XXX → retail_sales_perormance を選択し、Query with Athena を実行します。
注意すべき点
今回データはcsvを直接アップロードしましたが、多くの場合、すでに S3 や Redshift にあるデータをやり取りすることになると思います。その際、producer 側のデータソースを SageMaker が操作できるようにLake Formation での権限付与設定や、Data Lake Locationsの登録が必要になるケースがあります。
また、そのような権限設定をする際、自身のロールが、Lake Formation の Administrative roles and tasks として登録されていないと、Databases や Tables に非表示となり認識できないといったこともあるので、注意してください。
※プロジェクトロールは各プロジェクトのOverview画面右下で確認できます。
参考として下記のハンズオン workshop のLakehouse パートを行うと、LakeFormationの権限の設定方法など体系的に理解できると思います。
https://catalog.us-east-1.prod.workshops.aws/workshops/06dbe60c-3a94-463e-8ac2-18c7f85788d4/en-US/03lakehouse
まとめ
Amazon SageMaker Unified Studio 上でマルチアカウントのデータのやり取りを実施してみました。
どこかの誰かの参考になりましたら、幸いです。
※本記事は所属組織と関係なく、個人の備忘録メモです。