用の Amazon OpenSearch Service ML コネクタ AWS のサービス - Amazon OpenSearch サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

用の Amazon OpenSearch Service ML コネクタ AWS のサービス

Amazon OpenSearch Service 機械学習 (ML) コネクタを別の で使用する場合は AWS のサービス、 IAMロールを設定して OpenSearch 、サービスを安全にそのサービスに接続する必要があります。 AWS のサービス これにより、Amazon SageMaker AI と Amazon Bedrock を含めるようにコネクタを設定できます。このチュートリアルでは、 OpenSearch サービスから SageMaker ランタイムへのコネクタの作成方法について説明します。コネクタの詳細については、「Supported connectors」を参照してください。

前提条件

コネクタを作成するには、Amazon SageMaker AI ドメインエンドポイントと、 OpenSearch サービスアクセスを許可する IAMロールが必要です。

Amazon SageMaker AI ドメインをセットアップする

機械学習モデルをデプロイするには、「Amazon SageMaker AI デベロッパーガイド」の「Amazon SageMaker AI でモデルをデプロイする」を参照してください。AI コネクタを作成するために必要なモデルのエンドポイントを書きURL留めます。

IAM ロールを作成する

SageMaker ランタイムアクセス許可を OpenSearch サービスに委任するように IAMロールを設定します。新しいロールを作成するには、「 IAMユーザーガイド」の「 IAMロールの作成 (コンソール)」を参照してください。なお、同じ権限セットを持っていれば、既存のロールを使用できます。 AWS マネージドロールを使用する代わりに新しいロールを作成する場合は、このチュートリアルopensearch-sagemaker-roleの を独自のロールの名前に置き換えます。

  1. 次の管理IAMポリシーを新しいロールにアタッチして、 OpenSearch サービスが SageMaker AI エンドポイントにアクセスできるようにします。ポリシーをロールにアタッチするには、IAM「ID アクセス許可の追加」を参照してください。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpointAsync", "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "*" } ] }
  2. ロールの信頼関係を編集するには、「ロールの信頼ポリシーの変更」の手順に従ってください。Principal ステートメントで OpenSearch サービスを指定する必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "Service": [ "opensearchservice.amazonaws.com" ] } } ] }

    aws:SourceAccount および aws:SourceArn 条件キーを使用してアクセスを特定のドメインに制限することをおすすめします。SourceAccount はドメインの所有者に属する AWS アカウント ID で、 SourceArnはドメインARNの です。例えば、次の条件ブロックを信頼ポリシーに追加できます。

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }

アクセス許可の設定

コネクタを作成するには、 OpenSearch サービスにIAMロールを渡すアクセス許可が必要です。さらに、es:ESHttpPost アクションへのアクセスも必要です。これらのアクセス許可の両方を付与するには、リクエストの署名に認証情報が使用されているIAMロールに次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/opensearch-sagemaker-role" }, { "Effect": "Allow", "Action": "es:ESHttpPost", "Resource": "arn:aws:es:region:account-id:domain/domain-name/*" } ] }

ユーザーまたはロールがロールを渡すための iam:PassRole アクセス許可を持っていない場合、次のステップでリポジトリを登録しようとすると、承認エラーが発生することがあります。

OpenSearch Dashboards で ML ロールをマッピングする (きめ細かなアクセスコントロールを使用している場合)

きめ細かいアクセス制御では、コネクタの設定時に追加の手順が必要になります。他のすべての目的でHTTP基本認証を使用する場合でも、 を渡すiam:PassRoleアクセス許可を持つml_full_accessロールにIAMロールをマッピングする必要がありますopensearch-sagemaker-role

  1. OpenSearch サービスドメインの OpenSearch Dashboards プラグインに移動します。Dashboards エンドポイントは、 OpenSearch サービスコンソールのドメインダッシュボードにあります。

  2. メインメニューから [セキュリティ]、[ロール] を選択し、[ml_full_access] ロールを選択します。

  3. [マッピングされたユーザー][マッピングの管理] を選択します。

  4. バックエンドロールで、 を渡すアクセス許可を持つロールARNの を追加しますopensearch-sagemaker-role

    arn:aws:iam::account-id:role/role-name
  5. [マップ] を選択し、ユーザーまたはロールが [マッピングされたユーザー] の下に表示されていることを確認します。

OpenSearch サービスコネクタを作成する

コネクタを作成するには、 OpenSearch サービスドメインエンドポイントにPOSTリクエストを送信します。署名付きリクエストを送信するには、curl、サンプル Python クライアント、Postman、またはその他の方法を使用できます。Kibana コンソールでは、POST リクエストは使用できないことにご注意ください。 リクエストは以下のような形式です。

POST domain-endpoint/_plugins/_ml/connectors/_create { "name": "sagemaker: embedding", "description": "Test connector for Sagemaker embedding model", "version": 1, "protocol": "aws_sigv4", "credential": { "roleArn": "arn:aws:iam::account-id:role/opensearch-sagemaker-role" }, "parameters": { "region": "region", "service_name": "sagemaker" }, "actions": [ { "action_type": "predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://runtime.sagemaker.region.amazonaws.com/endpoints/endpoint-id/invocations", "request_body": "{ \"inputs\": { \"question\": \"${parameters.question}\", \"context\": \"${parameters.context}\" } }" } ] }

ドメインが仮想プライベートクラウド (VPC) 内にある場合、リクエストVPCで AI コネクタを正常に作成するには、コンピュータが に接続されている必要があります。へのアクセスはネットワーク設定VPCによって異なりますが、通常は VPNまたは企業ネットワークへの接続が含まれます。 OpenSearch サービスドメインにアクセスできることを確認するには、ウェブブラウザhttps://your-vpc-domain.region.es.amazonaws.comで に移動し、デフォルトのJSONレスポンスを受信していることを確認します。

Python クライアントのサンプリング

Python クライアントは、HTTP リクエストよりも自動化が容易で、再利用性が向上します。Python クライアントで AI コネクタを作成するには、以下のサンプルコードを Python ファイルに保存します。クライアントには AWS SDK for Python (Boto3)requestsrequests-aws4auth のパッケージが必要です。

import boto3 import requests from requests_aws4auth import AWS4Auth host = 'domain-endpoint/' region = 'region' service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '_plugins/_ml/connectors/_create' url = host + path payload = { "name": "sagemaker: embedding", "description": "Test connector for Sagemaker embedding model", "version": 1, "protocol": "aws_sigv4", "credential": { "roleArn": "arn:aws:iam::account-id:role/opensearch-sagemaker-role" }, "parameters": { "region": "region", "service_name": "sagemaker" }, "actions": [ { "action_type": "predict", "method": "POST", "headers": { "content-type": "application/json" }, "url": "https://runtime.sagemaker.region.amazonaws.com/endpoints/endpoint-id/invocations", "request_body": "{ \"inputs\": { \"question\": \"${parameters.question}\", \"context\": \"${parameters.context}\" } }" } ] } headers = {"Content-Type": "application/json"} r = requests.post(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text)