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

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

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

解決方法

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

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

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

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

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 の KMS キーの使用を許可します。Resource には、アカウント A のアカウント ID と KMS キー 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.ナビゲーションペインの [Inference] (推論) で、[Models] (モデル) を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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