SageMaker 推論エンドポイントを API Gateway REST API とシームレスに統合する方法
はじめに
Amazon SageMaker は、直接または API Gateway REST API を介して間接的にアクセス可能な強力な推論エンドポイントを提供します。本投稿では、API Gateway の Integration Request 機能を使用し、AWS Lambda を使わずにそのような統合を設定する方法を説明します。
この統合プロセスでは AWS Lambda を使用せず、API Gateway を SageMaker の推論エンドポイントに直接接続することで効率化を実現します。
SageMaker 推論エンドポイントの確認
SageMaker 推論エンドポイントは、以下の手順で確認できます。
SageMaker Console に移動し、エンドポイント概要 > URL
を確認します。
エンドポイントの形式は次のとおりです。
https://runtime.sagemaker.<ENDPOINT_REGION>.amazonaws.com/endpoints/<ENDPOINT_NAME>/invocations
Authorization
ヘッダーが必要です。詳細については、AWS ドキュメントをご参照ください。
Endpoints are scoped to an individual account, and are not public. The URL does not contain the account ID, but Amazon SageMaker determines the account ID from the authentication token that is supplied by the caller.
REST API を使用した SageMaker 推論エンドポイントとの統合の構築
手順 1: REST API の作成
API Gateway Console で REST API
を選択します。
API に名前を付けます。
手順 2: メソッドの作成
Actions -> Create Method
を選択します。
HTTP メソッドタイプを選択します(この例では POST
を使用)。
手順 3: Integration Request の設定
以下の詳細を入力します。
フィールド | 値 |
---|---|
Integration type | AWS Service |
AWS Service | SageMaker Runtime (SageMaker ではありません) |
HTTP method | POST |
Action Type | Use path override |
Path override | endpoints/<ENDPOINT_NAME>/invocations |
Execution role | API 用 IAM ロール(sagemaker:InvokeEndpoint アクションを含む必要があります) |
Content Handling | Passthrough |
手順 4: バイナリメディアタイプの設定(任意)
モデルがバイナリ入力(画像など)を受け付ける場合は、Binary Media Types に関連する MIME タイプ(image/*
など)を追加します。
この設定を行わないと、次のようなエラーが発生する可能性があります。
{
"ErrorCode": "CLIENT_ERROR_FROM_MODEL",
"LogStreamArn": "arn:aws:logs:ap-northeast-1:xxxxxxxxxxxx:log-group:/aws/sagemaker/Endpoints/<ENDPOINT_NAME>",
"Message": "Received client error (400) from primary with message \"unable to evaluate payload provided\". See https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logEventViewer:group=/aws/sagemaker/Endpoints/<ENDPOINT_NAME> in account xxxxxxxxxxxx for more information.",
"OriginalMessage": "unable to evaluate payload provided",
"OriginalStatusCode": 400
}
デプロイ
API をデプロイします。
API Gateway Console で Deploy API
を選択します。
デプロイのステージを割り当てます。
デプロイ後、API エンドポイントをテスト可能になります。
テスト
以下の curl
コマンドを使用して、デプロイ済みの API をテストできます:
curl --location '<API_ENDPOINT>' \
--header 'Content-Type: image/jpeg' \
--header 'Accept: application/json' \
--data-binary '@/path/to/image.jpg'
まとめ
SageMaker 推論エンドポイントと API Gateway REST API の統合は、コスト効率が高くローコードなソリューションとなります。ただし、複雑なリクエストやレスポンスの変換が必要な場合は、AWS Lambda の利用を検討することで、より高い柔軟性を実現できます。
この投稿に従うことで、SageMaker と API Gateway を追加のコンピュートレイヤーなしで効率的に連携させることができます。
Happy Coding! 🚀