Amazon SageMaker モデルを別の AWS アカウントにデプロイするにはどうすればよいですか?

最終更新日: 2020 年 7 月 14 日

ある AWS アカウントで Amazon SageMaker モデルをトレーニングしています。このモデルを別の AWS アカウントのエンドポイントにデプロイするにはどうすればよいですか?

解決方法

アカウント A (サンドボックスアカウント)

1.    AWS Key Management Service (AWS KMS) カスタマーマスターキー (CMK) を作成します。[キーの使用アクセス許可の定義] ページの [別の AWS アカウント] セクションで、[別の AWS アカウントを追加する] をクリックします。次に、アカウント B (モデルをデプロイするアカウント) の AWS アカウント番号を入力します。

この CMK は、Amazon SageMaker トレーニングジョブに使用します。トレーニングジョブに CMK を指定しない場合、Amazon SageMaker はデフォルトで Amazon Simple Storage Service (Amazon S3) サーバー側の暗号化キーを使用します。デフォルトの Amazon S3 サーバー側の暗号化キーは、別の AWS アカウントと共有したり、別の AWS アカウントで使用したりすることはできません。

2.    トレーニングジョブを作成します (まだ作成していない場合)。Estimator クラスで、前のステップで作成した CMK を追加します。例:

linear = sagemaker.estimator.Estimator(
    …
    output_kms_key='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    … 
    )

アカウント B (デプロイアカウント)

1.    次のようなAWS Identity and Access Management (IAM) ポリシーを 2 つ作成します。これらはインラインポリシーであり、IAM アイデンティティ (ユーザー、グループ、またはロール) に埋め込まれていることを意味します。

インラインポリシー 1: モデルアーティファクトを含むアカウント A の Amazon S3 リソースへのアクセスをロールに許可します。awsdoc-example-bucket を、トレーニングジョブの出力が保存されている S3 バケットの名前に置き換えます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsdoc-example-bucket/sagemaker/linear-learner/output/model.tar.gz"
        }
    ]
}

インラインポリシー 2: 後で作成するロールにアカウント A の CMK の使用を許可します。[リソース] で、アカウント A のアカウント ID と CMK ID を指定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUseOfTheKey",
            "Effect": "Allow",
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:AccountA:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
            ]
        }
    ]
}

2.    Amazon SageMaker の IAM ロールを作成します。 このロールには、AmazonSageMakerFullAccess ポリシーがアタッチされています。

3.    ステップ 1 で作成した 2 つのインラインポリシーをステップ 2 で作成したロールにアタッチします。ロールには、AmazonSageMakerFullAccess と 2 つのインラインポリシーのあわせて 3 つのポリシーが必要です。

アカウント A (サンドボックスアカウント)

トレーニングジョブの出力が保存されるバケットのS3 バケットポリシーを作成します。このバケットポリシーは、前のセクションで作成したロールがモデルアーティファクトにアクセスすることを許可します。次の例では、これらの値を置き換えます。

AccountB: デプロイアカウントの AWS アカウント ID
AmazonSageMaker: デプロイアカウントで作成したロールの名前
awsdoc-example-bucket: トレーニングジョブの出力が保存される S3 バケット

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountB:root"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsdoc-example-bucket/sagemaker/linear-learner/output/model.tar.gz"
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalArn": "arn:aws:iam::AccountB:role/AmazonSageMaker"
                }
            }
        }
    ]
}

アカウント B (デプロイアカウント)

デプロイモデルを作成します。

1.    Amazon SageMaker コンソールを開きます。

2.    ナビゲーションペインの [推論] で、[モデル] を選択します。

3.    [モデルの作成] をクリックし、次のように入力します
IAM ロール
: [カスタム IAM ロールの ARN] を選択します。[YourAccountID] に、アカウント B の ID を入力します。[YourRole] には、アカウント B で作成した IAM ロールの名前を入力します。
推論コードイメージの場所: Amazon Elastic Container Registry (Amazon ECR) で推論コードイメージが保存されている場所のレジストリパスを指定します。
モデルアーティファクトの場所: Amazon S3 でモデルアーティファクトが保存される URL を指定します。

4.    ページの下部で、[モデルの作成] をクリックします。モデルの作成の詳細については、パイプラインモデルを作成するを参照してください。

エンドポイント設定を作成します。

1.    Amazon SageMaker コンソールを開きます。

2.    ナビゲーションペインの [推論] で、[エンドポイント設定] をクリックします。

3.    [エンドポイント設定の作成] をクリックします。次に、[本番稼働用バリアント] で、前のセクションで作成したモデルを追加します。

4.    [エンドポイント設定の作成] をクリックします。

エンドポイントを作成します。

1.    Amazon SageMaker コンソールを開きます。

2.    ナビゲーションペインの [推論] で、[エンドポイント] を選択します。

3.    [エンドポイントの作成] をクリックし、前のセクションで作成したエンドポイント設定を選択します。

4.    [エンドポイントの作成] をクリックします。

これで、アカウント A からアカウント B にモデルをデプロイする準備ができました。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?