本記事では、SageMaker Canvasを初めて利用する中で遭遇した課題と、その解決策について述べる。
SageMaker Canvasの学習のために以下のAWS公式ハンズオンを試していた際、データエクスポート時にS3バケットの取り扱いに関する問題が発生したた。また解決もできたので解決方法についてこの記事にまとめる。
- 発生した課題:S3バケットへのアクセスエラー
- Canvasで利用可能なデフォルトのS3 Bucket
- 解決策1:CanvasのデフォルトS3バケット設定を変更する(未検証)
- 解決策2:バケット名に「sagemaker-」を含めたバケットを利用する(検証済み・成功)
発生した課題:S3バケットへのアクセスエラー
Canvas上でワークフローを作成し、データのエクスポートを試みたところ、次のようなエラーが発生した。

エラー内容は
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ポリシーと設定が組み込まれている。
解決策1:CanvasのデフォルトS3バケット設定を変更する(未検証)
上記の公式ドキュメントによれば、Canvasの設定を変更することで、使用するデフォルトS3バケットを任意のものに変更できる。
手順の概要は以下の通りである。
1. IAMロールにAmazonSageMakerCanvasFullAccessポリシーを付与する。
2. SageMakerのドメイン設定画面から、Canvasの設定を開く。


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

この方法により、デフォルト以外のS3バケットをCanvasから直接利用できるようになるとされている。
しかし、本記事執筆時点ではこの方法は実際には行っておらず、後述する解決策2の方法で解決した。
解決策2:バケット名に「sagemaker-」を含めたバケットを利用する(検証済み・成功)
別の対応策として、バケット名に「sagemaker-」を含めたS3バケットを準備する方法を試した。
ちなみにこちらを採用したのはIAMロールの設定が不要なこと、bucket名から何に利用しているか明確であることが理由。
参考にした情報はこちら。
この方法では、バケット名に「sagemaker-」という文字列を含めることで、特別なIAM設定を追加することなく、Canvasがバケットを自動的に認識してアクセスできるようになる。これはCanvas自体に「sagemaker-」をprefixにもつS3 bucketへのフルアクセスロールが付与されているためだ。
実際に「sagemaker-」から始まるバケットを作成して、export先として指定したところ、以下の成功メッセージが表示された。

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