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

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

API Gatewayの統合リクエストを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

エンドポイントが正しく機能するためには、有効なAuthorizationヘッダーを含める必要があります。詳細は公式ドキュメントを参照してください。

エンドポイントは個々のアカウントに紐づいており、公開されていません。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用の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の統合リクエストを設定してSageMaker推論エンドポイントを直接呼び出すようにし、パスオーバーライドと実行ロールを正しく設定したところ、間にLambda関数を挟むことなく画像推論リクエストが動作しました。API GatewayをSageMaker Runtimeサービスに直接接続することで、本来ならリクエストボディとヘッダーをそのまま転送するだけのLambda関数を排除でき、レイテンシのホップと保守すべきインフラをそれぞれ一つ減らせます。トレードオフとしては、通常であればLambdaはモデルに到達する前にリクエストを検証したり変形したりする自然な場所になりますが、それがないと、Binary Media TypesとContent Handlingの設定を正確に行うことだけが、上記の「unable to evaluate payload provided」エラーに対する唯一の防衛線になります。統合が壊れていると決めつける前に、モデルが期待する正確なコンテンツタイプでテストしておく価値があります。

About the author

Takahiro Iwasa

Takahiro Iwasa

Software Developer

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