Lambda なしで API Gateway から SageMaker を呼び出す
API Gateway の AWS サービス統合から SageMaker 推論エンドポイントを呼び出し、Lambda プロキシを省略します。
API Gateway の統合リクエストを使うと、SageMaker 推論エンドポイントを直接呼び出し、中継用の Lambda 関数を省略できます。

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

エンドポイントの形式は次のとおりです。
https://runtime.sagemaker.<ENDPOINT_REGION>.amazonaws.com/endpoints/<ENDPOINT_NAME>/invocationsSageMaker Runtime エンドポイントを直接呼び出す場合は、有効な AWS Signature Version 4 認証が必要です。詳細は公式ドキュメントを参照してください。
エンドポイントは個々のアカウントに紐づいており、公開されていません。URLにはアカウントIDが含まれませんが、Amazon SageMakerは呼び出し元から渡された認証トークンからアカウントIDを判定します。
SageMaker 推論エンドポイントと統合した REST API を構築する
API Gateway コンソールで REST API を選択します。

API に名前を付けます。

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

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

統合リクエストを設定します。
- 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

モデルが画像などのバイナリ入力を受け付ける場合は、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 Gateway コンソールで Deploy API を選択します。

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

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

テスト
デプロイした API を curl でテストします。
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 Types と Content Handling をモデルの入力形式に合わせ、エンドポイントが期待するコンテンツタイプでテストしてください。リクエストの検証や変換が必要なら、Lambda などの処理レイヤーを追加します。
Related posts
API Gateway WebSocket:モック統合の実装
バックエンドの Lambda を使わず、モック統合のみで API Gateway WebSocket API を構築し、あらかじめ用意したレスポンスを返します。
SageMaker の物体検出によるオブジェクトカウント
Ground Truth で画像にラベルを付け、SageMaker の物体検出モデルを学習し、推論結果からオブジェクトを数えます。
Amazon SageMaker 入門:組み込みアルゴリズムを使う
SageMaker Studio と組み込みアルゴリズムを使い、Iris データセットで k-NN 分類器を学習・デプロイします。
Cognito User Pools と OIDC で Slack サインインを実装する
Cognito user pool を OIDC 経由で Slack と連携させ、"Sign in with Slack" を Amplify で Next.js アプリケーションに組み込みます。
Lambda Web Adapter で FastAPI を AWS Lambda にデプロイする
FastAPI で書いた API バックエンドをコンテナ化し、Lambda Web Adapter と AWS CDK を使って単一の Lambda 関数へデプロイします。
