アルゴリズムとかオーダーとか

仕事で勉強したことなどをまとめてます

AWS SageMaker Canvasに任意のS3を利用する

本記事では、SageMaker Canvasを初めて利用する中で遭遇した課題と、その解決策について述べる。

SageMaker Canvasの学習のために以下のAWS公式ハンズオンを試していた際、データエクスポート時にS3バケットの取り扱いに関する問題が発生したた。また解決もできたので解決方法についてこの記事にまとめる。

aws.amazon.com

発生した課題:S3バケットへのアクセスエラー

Canvas上でワークフローを作成し、データのエクスポートを試みたところ、次のようなエラーが発生した。

export error message

エラー内容は

Canvas cannot import your dataset because you don't have access to your Amazon S3 buckets

であり、S3バケットへのアクセス権限が不足していることが原因だ。
この時点で、Canvasが利用できるS3バケットは制限されていることが判明した。

Canvasで利用可能なデフォルトのS3 Bucket

SageMaker Canvasを初期設定のまま利用する場合、データの保存先には、Canvas自身が自動で作成する専用バケットが使用される。
このバケットは通常、次の形式で命名される。

sagemaker-<reagion>-<AWSアカウントID>

例えば、アカウントIDが 123456789012 、リージョンが ap-northeast-1 の場合は

sagemaker-ap-northeast-1-123456789012

というバケットが自動的に用意される。

このバケットについては特別な設定をせずともCanvasから読み書きできるよう、必要なIAMポリシーと設定が組み込まれている。

しかし、任意のS3バケット(例えば自分で作成した独自バケット)を利用しようとすると、アクセス権限の問題が発生する。

解決策1:CanvasのデフォルトS3バケット設定を変更する(未検証)


docs.aws.amazon.com

上記の公式ドキュメントによれば、Canvasの設定を変更することで、使用するデフォルトS3バケットを任意のものに変更できる。

手順の概要は以下の通りである。

1. IAMロールにAmazonSageMakerCanvasFullAccessポリシーを付与する。

2. SageMakerのドメイン設定画面から、Canvasの設定を開く。

setting 1
setting 2

3. Canvasストレージの設定で任意のS3バケットを指定し、保存する。

setting 3

この方法により、デフォルト以外のS3バケットCanvasから直接利用できるようになるとされている。

しかし、本記事執筆時点ではこの方法は実際には行っておらず、後述する解決策2の方法で解決した。

解決策2:バケット名に「sagemaker-」を含めたバケットを利用する(検証済み・成功)

別の対応策として、バケット名に「sagemaker-」を含めたS3バケットを準備する方法を試した。

ちなみにこちらを採用したのはIAMロールの設定が不要なこと、bucket名から何に利用しているか明確であることが理由。

参考にした情報はこちら。

recipe.kc-cloud.jp

この方法では、バケット名に「sagemaker-」という文字列を含めることで、特別なIAM設定を追加することなく、Canvasバケットを自動的に認識してアクセスできるようになる。これはCanvas自体に「sagemaker-」をprefixにもつS3 bucketへのフルアクセスロールが付与されているためだ。

実際に「sagemaker-」から始まるバケットを作成して、export先として指定したところ、以下の成功メッセージが表示された。

success export data

ちなみに、export先を指定するときはBrowseから指定する場合、左にあるチェックボックスにチェックを入れるとapplyボタンが押せるようになる。

how to select folder

これにより、特に設定を変更することなくCanvasから任意のバケットへのエクスポートが可能となった。