Lambda なしで API Gateway から SageMaker を呼び出す

Lambda なしで API Gateway から SageMaker を呼び出す

API Gateway の AWS サービス統合から SageMaker 推論エンドポイントを呼び出し、Lambda プロキシを省略します。

Takahiro Iwasa
4 min read

API Gateway の統合リクエストを使うと、SageMaker 推論エンドポイントを直接呼び出し、中継用の Lambda 関数を省略できます。

Diagram Overview

SageMaker 推論エンドポイントを確認する

SageMaker コンソールでエンドポイントを開き、Endpoint summary > URL を確認します。

Endpoint Example

エンドポイントの形式は次のとおりです。

https://runtime.sagemaker.<ENDPOINT_REGION>.amazonaws.com/endpoints/<ENDPOINT_NAME>/invocations
ℹ️ Note

SageMaker Runtime エンドポイントを直接呼び出す場合は、有効な AWS Signature Version 4 認証が必要です。詳細は公式ドキュメントを参照してください。

エンドポイントは個々のアカウントに紐づいており、公開されていません。URLにはアカウントIDが含まれませんが、Amazon SageMakerは呼び出し元から渡された認証トークンからアカウントIDを判定します。

SageMaker 推論エンドポイントと統合した REST API を構築する

API Gateway コンソールで REST API を選択します。

API に名前を付けます。

API Name Setup

Actions -> Create Method を選択します。

HTTP メソッドを選択します。この例では POST を使用します。

Method Type

統合リクエストを設定します。

  • 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 Gateway が引き受ける IAM ロール(sagemaker:InvokeEndpoint を許可する必要があります)
  • Content Handling: Passthrough

Integration Request Configuration

モデルが画像などのバイナリ入力を受け付ける場合は、Binary Media Types に該当する MIME タイプ(例:image/*)を追加します。

Binary Media Configuration

この設定を行わない場合、次のようなエラーに遭遇する可能性があります。

{
"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 Gateway コンソールで Deploy API を選択します。

デプロイ用のステージを割り当てます。

Deployment Steps

デプロイが完了すると、API エンドポイントをテストできます。

API Endpoint Example

テスト

デプロイした API を curl でテストします。

Terminal window
curl --location '<API_ENDPOINT>' \
--header 'Content-Type: image/jpeg' \
--header 'Accept: application/json' \
--data-binary '@/path/to/image.jpg'

まとめ

パスオーバーライドと実行ロールを正しく設定すると、API Gateway の AWS サービス統合から SageMaker 推論エンドポイントを直接呼び出せます。

Lambda 関数がリクエストボディを転送するだけなら、この統合によって通信経路と管理対象のリソースを一つずつ減らせます。

直接統合には、リクエストを検証・変換するアプリケーションコードがありません。Binary Media TypesContent Handling をモデルの入力形式に合わせ、エンドポイントが期待するコンテンツタイプでテストしてください。リクエストの検証や変換が必要なら、Lambda などの処理レイヤーを追加します。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

This blog shares technical notes from hands-on projects—architecture, implementation, and AWS service integrations.