Amazon Web Services ブログ
AWS CDKとAWS Service Catalogを使用したAmazon SageMaker Canvasの機械学習環境のプロビジョニングと管理
この記事は、Provision and manage ML environments with Amazon SageMaker Canvas using AWS CDK and AWS Service Catalogを翻訳したものです。
機械学習 (ML) は、あらゆる業界でさまざまなユースケースで普及しつつあります。一方で、MLの需要と普及のペースが早いため、技術的ソリューションを導入する実務者の確保が追いつかず、ビジネス上の成果を実現することが難しくなっています。
今日の企業では、機械学習自体の実務者ではないがデータに対する知見が深い人材が多く、そのような人材が機械学習を有効に活用することが求められています。コーディング不要の機械学習プラットフォームを使うことで、企業全体の機械学習の価値を実現することができます。これらのプラットフォームにより、たとえばビジネスアナリストなど、さまざまなペルソナが 1 行もコードを書かなくても ML を使用し、ビジネス上の問題の解決策を迅速、簡単、直感的な方法で提供することができます。Amazon SageMaker Canvas は、ビジネスアナリストが ML を使用してビジネス上の問題を解決できるようにする視覚的なポイントアンドクリックサービスです。ML の経験がなくても使えますし、コードを 1 行も記述する必要もありません。Canvasは、企業がソリューションを迅速に実装するのに役立つ、使いやすく直感的なインターフェイスにより、企業における機械学習の利用を拡大しました。
Canvasは機械学習の民主化を可能にしました。一方、Canvasで機械学習の環境を安全にプロビジョニング(訳者注:環境を設定し、立ち上げて準備すること)して利用者に展開するという課題は依然として残っています。この課題に関わる業務は、ほとんどの大企業では基幹部門のITチームの管轄です。この投稿では、課題を解決するためにIT チームが Amazon SageMaker Canvas、AWS Cloud Development Kit (AWS CDK)、および AWS Service Catalogを使用して安全な ML 環境をプロビジョニング、管理する方法について説明します。また、IT 管理者がこれを迅速かつ大規模に実現するためのステップバイステップガイドを紹介します。
AWS CDKとAWS Service Catalogの概要
AWS CDK は、クラウドアプリケーションリソースを定義するオープンソースのソフトウェア開発フレームワークです。プログラミング言語の親しみやすさと表現力を利用してアプリケーションをモデル化し、リソースを安全かつ反復可能な方法でプロビジョニングします。
AWS Service Catalog では、デプロイされた IT サービス、アプリケーション、リソース、メタデータを一元管理できます。AWS Service Catalog を使用すると、Infrastructure as Code 、(IaC) テンプレートを使用してクラウドリソースを作成、共有、整理、管理でき、迅速かつ簡単なプロビジョニングが可能になります。
ソリューションの概要
次の3つのステップに沿ってCanvasを使ったML環境をプロビジョニングします。
- AWS Service Catalogを使用して、ユーザーにCanvasの使用を承認し払い出すために、必要なリソースや作業をポートフォリオの形で管理する方法について説明します。
- 次に、1で説明したAWS Service Catalogのポートフォリオを管理者が使用可能にするために、AWS CDKを用いてデプロイについて説明します。
- 最後に、実際にCanvasの環境をユーザの要望に応じて数分以内にプロビジョニングし、ユーザに払い出す方法を示します。
事前準備
Canvas、AWS CDK、および AWS Service Catalogを使用して ML 環境をプロビジョニングするために、あらかじめ以下を実行しておいてください。
- Service Catalogポートフォリオがデプロイされる AWS アカウントにアクセスできること。AWS CDK スタックをアカウントにデプロイするための認証情報と権限があることを確認してください。AWS CDK ワークショップは、サポートが必要な場合に参照できる便利なリソースです。
- 以下のリソースで詳しく説明されているベストプラクティスに従うことをお勧めします。
Building secure machine learning environments with Amazon SageMaker
Setting up secure, well-governed machine learning environments on AWS - この GitHub リポジトリを実行環境にクローンします。
AWS Service Catalogを使用して Amazon SageMaker Canvas 用に承認された ML 環境をプロビジョニングする
規制の厳しい業界やほとんどの大企業では、機械学習環境のプロビジョニングと管理について、ITチームが要求する要件を順守する必要があります。例えば、安全なプライベートネットワーク、データ暗号化、AWS Identity and Access Management (IAM) などの権限のある認証されたユーザーのみに Canvas などのソリューションへのアクセスを許可するコントロール、監査目的の厳密なロギングとモニタリングが含まれます。
IT 管理者は、AWS Service Catalog を使用して、SageMaker Canvas のための安全で再現可能な ML 環境を作成し、製品ポートフォリオとしてまとめることができます。これは、前述の要件を満たすように組み込まれた IaC (Infrastructure as Code) コントロールを使用して管理され、必要な時に数分以内にプロビジョニングできます。また、このポートフォリオにアクセスできるユーザーを管理することもできます。
次の図は、このソリューションのアーキテクチャを示しています。
サンプルの流れ
このセクションでは、SageMaker Canvas の使用のためのAWS Service Catalogポートフォリオの例を紹介します。このポートフォリオは、Canvas 環境を構成し安全に使用するためのさまざまな側面(概念や機能)で構成されています。
- Studio ドメイン — Canvas は SageMaker Studio ドメイン内で実行されるアプリケーションです。ドメインは、Amazon Elastic File System (Amazon EFS) ボリューム、認証されたユーザープロファイルリスト、およびさまざまなセキュリティ、アプリケーション、ポリシー、および Amazon Virtual Private Cloud (VPC) 設定で構成されます。AWS アカウントは、リージョンごとに 1 つのドメインにリンクされます。
- Amazon S3 バケット — Studio ドメインが作成されると、Amazon Simple Storage Service (Amazon S3) バケットが Canvas 用にプロビジョニングされ、ローカルファイルからのデータセットのインポート (ローカルファイルアップロードとも呼ばれます) が可能になります。このバケットはお客様のアカウントにあり、初回に一度だけプロビジョニングされます。
- Canvas ユーザー — SageMaker Canvas では、Studio ドメイン内にCanvas ユーザーごとにユーザープロファイルを追加できます。Canvas ユーザーは、データセットのインポート、コードを書かずに ML モデルの構築とトレーニング、モデルに対する予測の実行を行うことができます。
- スケジュールされたCanvasセッションのシャットダウン — Canvasユーザーは、タスクが完了したらCanvasインターフェースからログアウトできます。または、管理者は Canvas セッションの管理の一環として AWS マネジメントコンソールから各ユーザーの Canvas セッションをシャットダウンすることもできます。AWS Service Catalog ポートフォリオのこの部分では、スケジュールされた間隔で Canvas セッションを自動的にシャットダウンするように AWS Lambda 関数が作成およびプロビジョニングされます。これにより、開いているセッションを管理し、使用していないときはシャットダウンできます。
このサンプルフローは GitHub リポジトリにあり、簡単に参照できます。
AWS CDK を使用してフローをデプロイする
このセクションでは、AWS CDK を使用して前述のフローをデプロイします。デプロイ後は、バージョントラッキングやポートフォリオの管理も行えます。
ポートフォリオスタックはリポジトリ内のapp.py
にあり、製品スタックは products/
フォルダーにあります。studio_constructs/
フォルダ内の IAM ロール、AWS Key Management Service (AWS KMS) キー、VPC セットアップを繰り返し実行することができます。スタックをアカウントにデプロイする前に、app.py
の以下の行を編集して、ポートフォリオにアクセスするためのIAM ロールを指定しておきます。
管理者はポートフォリオにアクセスできる IAM ユーザー、グループ、ロールを管理できます。詳細については、ユーザーへのアクセス権の付与を参照してください。
ポートフォリオをアカウントにデプロイ
リポジトリ内で次のコマンドを実行して AWS CDK をインストールし、ポートフォリオをデプロイするための適切な依存関係ライブラリを事前にインストールします。
アカウントにポートフォリオをデプロイするために以下のコマンドを実行します
ACCOUNT_ID=$(aws sts get-caller-identity --query Account | tr -d '"')
AWS_REGION=$(aws configure get region)
cdk bootstrap aws://${ACCOUNT_ID}/${AWS_REGION}
cdk deploy --require-approval never
最初の 2 つのコマンドは、コンピュータの AWS Command Line Interface (AWS CLI) を使用してアカウント ID と現在のリージョンを取得します。これに続いて、cdk bootstrap と cdk deploy はアセットをローカルにビルドしてから、数分でスタックをデプロイします。
AWS CloudFormationのコンソール画面からスタックを確認すると、このソリューションのスタックが作成されています。
また、次のスクリーンショットに示すように、ポートフォリオは AWS Service Catalog コンソール上の製品 (Products)メニューで見つかるようになります。
オンデマンドプロビジョニング
ポートフォリオ内の製品は、AWS Service Catalog コンソールの プロビジョンメニューからオンデマンドですばやく簡単に起動できます。今回の場合、”Studio Domain”と “Canvas Auto Shutdown”を最初に起動します。これらはすべてのユーザーに対して有効であり、初回限りのアクションだからです。その後、”Canvas User”を起動して各ユーザーに対応するStudioユーザープロファイルをドメインに追加します。ユーザープロファイルの作成時にはドメイン ID と IAM ロール ARN の情報が必要ですが、これらの情報は スタック作成時にAWS Systems Manager に保存されており、次のスクリーンショットに示すようにユーザーパラメータが自動的に入力されるようになっています。
また、各ユーザーにコスト配分タグ(”UserCostCenter”)を使用することができます。
UserNameはSageMaker Studioドメインに追加されるユーザプロファイル名です。実際のユーザーが識別しやすい名前をつけると良いでしょう。
Canvas を使用して ML 環境を管理する際の主な考慮事項
ここまでの説明で、ユーザーにCanvasの環境を払い出すためのAWS Service Catalog ポートフォリオのプロビジョニングとデプロイが完了しました。ここからは、さらなる検討事項としてドメインとユーザープロファイルについて深掘りします。 Canvas ベースの ML 環境を管理するうえで他に考慮すべき点をいくつかリストアップします。
Studio ドメインに関する考慮事項は次のとおりです。
- CanvasのネットワークはStudioドメインレベルで管理され、ドメインはセキュアな接続のためにプライベートVPCサブネットにデプロイされます。より詳細な設定を行いたい場合については、「プライベート VPC を使用した Amazon SageMaker Studio 接続の保護」を参照してください。
- ユーザープロファイルのデフォルトの IAM 実行ロールはドメインレベルで定義されます。このデフォルトロールは、ドメイン内のすべてのCanvasユーザーに割り当てられます。(訳者注:Studioドメイン用のIAMロールとユーザプロファイル用のIAMロールの2種類がありますが、このサンプルでは二つに同じIAMロールを割り当てています)
- 暗号化は AWS KMS を使用してドメイン内の EFS ボリュームを暗号化することによって行われます。その他のコントロールとして、カスタマーマネージドキー (CMK) と呼ばれる独自のマネージドキーを指定することもできます。詳細については、「暗号化による保存中のデータの保護」を参照してください。
- ローカルディスクからファイルをアップロードするには、Canvas が使用する S3 バケットにクロスオリジンリソース共有 (CORS) ポリシーをアタッチします。詳細については、「ローカルファイルをアップロードする権限をユーザーに与える」を参照してください。(訳者注:Canvasのアップデートにより、ドメイン作成時にデフォルトでCORS設定が有効化され、設定の手間がなくなりました。設定を無効化したい場合や、何らかの理由で無効化されている設定を有効化したい場合に上記リンクを参照してください)
ユーザープロファイルに関する考慮事項は次のとおりです。
- Studioでの認証は、シングルサインオン (SSO) とIAMの両方で行うことができます。また、コンソールにアクセスするユーザーをフェデレーションする既存のIDプロバイダーがある場合は、IAMを使用して各フェデレーションIDにStudioユーザープロファイルを割り当てることができます。これら3つの方式の詳細については、「チームやグループでAmazon SageMaker Studioを使用するための完全なリソース分離の設定方法」のStudio ユーザーへのポリシーの割り当てセクションを参照してください。
- (訳者注:このサンプルでは同じIAMロールを使用していますが)各ユーザープロファイルに別々のIAMロールを割り当てることができます。Studioを使用している間、ユーザーは、ユーザープロファイルに割り当てられたロールを引き受けて (すなわちassume roleを用いて) 使用します。ユーザープロファイルごとに適切なIAMロールを設定することで、チーム内やユーザー間のきめ細かなアクセス制御を行うことができます。
- 属性ベースのアクセス制御 (ABAC) を使用してリソースを分離し、ユーザーがチームのリソースにのみアクセスできるようにすることができます。詳細については、「チームやグループでAmazon SageMaker Studioを使用するための完全なリソース分離の設定方法」を参照してください。
- コスト配分タグ (
UserCostCenter
)をユーザープロファイルに適用することで、きめ細かなコスト追跡を実行できます。
クリーンアップ
上記の AWS CDK スタックによって作成されたリソースをクリーンアップするには、AWS CloudFormation スタックのページに移動して 作成したCanvas スタックを削除します。もしくは、git clone
したリポジトリフォルダ内から cdk destroy
を実行して同じ操作を行うこともできます。
結論
この投稿では、AWS Service Catalogと AWS CDK を使用して、Canvas で ML 環境をすばやく簡単にプロビジョニングする方法について説明しました。AWS Service Catalog でポートフォリオを作成し、ポートフォリオをプロビジョニングしてアカウントにデプロイする一連の流れをサンプルで体験しました。IT管理者はこの方法を使用して、Canvasをプロビジョニングしながらユーザー、セッション、および関連コストをデプロイおよび管理できます。
Canvas の詳細については、製品ページと開発者ガイドをご覧ください。さらに読むには、 ビジネスアナリストがコンソールなしで AWS SSO を使用して SageMaker Canvas にアクセスできるようにする方法 (enable business analysts to access SageMaker Canvas using AWS SSO without the console) をご覧ください。また、ビジネスアナリストとデータサイエンティストがCanvasとStudioを使用してより迅速にコラボレーションする方法 (business analysts and data scientists can collaborate faster using Canvas and Studio) についても学ぶことができます。