SageMaker 推論エンドポイントを API Gateway REST API とシームレスに統合する方法

SageMaker 推論エンドポイントを API Gateway REST API とシームレスに統合する方法

岩佐 孝浩
岩佐 孝浩
4 min read
API Gateway SageMaker

はじめに

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

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 に名前を付けます。

API 名前の設定

手順 2: メソッドの作成

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

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

メソッドタイプ

手順 3: Integration Request の設定

以下の詳細を入力します。

フィールド
Integration typeAWS Service
AWS ServiceSageMaker Runtime (SageMaker ではありません)
HTTP methodPOST
Action TypeUse path override
Path overrideendpoints/<ENDPOINT_NAME>/invocations
Execution roleAPI 用 IAM ロール(sagemaker:InvokeEndpoint アクションを含む必要があります)
Content HandlingPassthrough

Integration Request 設定

手順 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 エンドポイントをテスト可能になります。

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! 🚀

岩佐 孝浩

岩佐 孝浩

Software Developer at KAKEHASHI Inc.
AWS を活用したクラウドネイティブ・アプリケーションの要件定義・設計・開発に従事。 株式会社カケハシで、処方箋データ収集の新たな基盤の構築に携わっています。 Japan AWS Top Engineers 2020-2023