工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

SageMaker Python SDKで、 "ClientError: An error occurred (ValidationException) when calling the CreateModel operation: RoleArn: Cross-account pass role is not allowed." となるとき

背景

上記の条件において、

docs.aws.amazon.com

を参考に、以下のようなコードでモデルをデプロイしようとした。

roleArn = SageMakerFullAccessとS3FullAccessポリシーをアタッチしたもの

image_uri = sagemaker.image_uris.retrieve(framework=組み込みアルゴリズム名, region=リージョン名, version=バージョン)

model = sagemaker.model.Model(
    image_uri=image_uri,
    model_data="s3://model.tar.gzの置き場所",
    role=roleArn
)

model.deploy(
    endpoint_name="エンドポイント名",
    initial_instance_count=1,
    instance_type="ml.c5.large"
)

ところが、

ClientError: An error occurred (ValidationException) when calling the CreateModel operation: RoleArn: Cross-account pass role is not allowed.

と出てしまった。


修正方法

以下のように、sagemaker_sessionという引数を与える必要がある。リージョンは、組み込みアルゴリズムの参照先コンテナイメージのリージョンとする。

boto_session = boto3.Session(
    region_name=リージョン名,
    aws_access_key_id="**************",
    aws_secret_access_key="**************"
)
session = sagemaker.Session(boto_session=boto_session)

model = sagemaker.model.Model(
    image_uri=image_uri,
    model_data=MODEL_DATA,
    role=SM_EXECUTION_ROLE,
    sagemaker_session=session # これが必要
)

これで、数時間悩んでしまった。 ネット上に情報がなく、おそらくここでハマる人はあまりいないのだろう。残念。