2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API GatewayでLambdaと接続したREST APIを作成する(Bedrockの呼び出し結果の取得)

Last updated at Posted at 2024-04-08

Supershipの名畑です。2024春アニメ開幕の季節がやってきましたが、うる星やつらの最終クールのPVですでに涙腺が。

はじめに

以下2つの過去記事ではLambdaを経由してBedrockClaude 3を叩きました。

今回はAPI GatewayLambdaを接続することにより、発行されたURLを経由して同様の結果を取得するようにしてみます。
LambdaをWeb API経由で呼び出すというだけなので、本記事単体として特に目新しい内容はありません。

今はLambda 関数 URLというものがあるのでこれを直接叩いてもいいのかもしれないですが、せっかくなのでよりさまざまな制御ができそうなAPI Gatewayを使ってみます。

Amazon API Gateway は、あらゆる規模の REST、HTTP、および WebSocket API を作成、公開、維持、モニタリング、およびセキュア化するための AWS のサービスです。API 開発者は、AWS または他のウェブサービス、AWS クラウドに保存されているデータにアクセスする API を作成できます。API Gateway API デベロッパーとして、独自のクライアントアプリケーションで使用するための API を作成できます。または、API をサードパーティーのアプリ開発者に対して使用可能にできます。

参考:Amazon API Gateway とは何ですか? - Amazon API Gateway

REST APIの作成する

コンソールでAPI Gatewayを開いて「APIを作成」をクリックし、次にREST API構築をクリックします。

apigateway-1.png

遷移先の画面で「APIの詳細」としては新しいAPIを選択して、API名lambda-sampleとしました。

APIを作成」をクリックするとAPIが用意されます。

リソースの作成

次にAPI Gatewayリソースのページで「リソースを作成」をクリックします。

apigateway-2.png

リソース名lambda-sample-resourceとしました。

リソースを作成」をクリックします。

メソッドの作成

次に「メソッドを作成」をクリックします。

apigateway-3.png

メソッドタイプPOSTを選び、統合タイプLambda関数を選びます。

次にLambda関数として過去記事で作成済みのLambdaを示すARNを選びます。

メソッドを作成」をクリックします。

テスト

ここまでで一回テストをしてみようと思います。

テストはコンソール上で可能です。

apigateway-4a.png

リクエスト本文にLambdaへパスする内容をそのまま書き、テストをクリックします。

今回は下記の内容をLambdaに渡しました。

{
  "message": "あなたの会社名を教えてください"
}

そうすると結果が表示されます。

apigatewary-4b.png

"text": "私の会社の名前は株式会社あいうえおほげです。"

API自体は無事に動いていそうです。

デプロイ

リソースのページで「APIのデプロイ」をクリックします。

apigateway-5.png

ステージとして新しいステージ を選んで、ステージ名lambda-sample-stageとしました。

デプロイをクリックします。

これでAPIがデプロイされ、また、URLが発行されます。

https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/

というフォーマットのものです。

今回の場合は東京リージョンで設定したため

https://{restapi_id}.execute-api.ap-northeast-1.amazonaws.com/lambda-sample-stage/

となります。
restapi_idにはAWSから発行されたIDが入ります。

外部から呼び出してみる

ターミナルからcurlコマンドを使って呼んでみます。
今回は作成済みのlambda-sample-resourceが呼び出し対象のため、URLの末尾につけています。 {restapi_id} の箇所は各自で置き換えてください。

$ curl https://{restapi_id}.execute-api.ap-northeast-1.amazonaws.com/lambda-sample-stage/lambda-sample-resource -d '{"message": "あなたの会社名を教えてください"}' 

コンソールからの呼び出しと同様のレスポンスが確認できました。

APIキーを用いた制限

ここまでで外部から叩くAPIを作成するという目的は達成されましたが、せっかくなのでAPIキーを用いたアクセス制限も実装してみようと思います。

注意

API キーを、API へのアクセスを制御するための認証または承認に使用しないでください。使用量プランに複数の API がある場合、その使用量プランの 1 つの API に対して有効な API キーを持つユーザーは、その使用量プランのすべての API にアクセスできます。代わりに、API へのアクセスを制御するには、IAM ロール、Lambda オーソライザー、または Amazon Cognito ユーザープールを使用します。

API Gateway が生成する API キーを使用します。API キーには機密情報を含めないでください。クライアントは通常、ログに記録できるヘッダーで機密情報を送信します。

参考:API キーを使用した使用量プランの作成と使用 - Amazon API Gateway

使用量プランの作成

まず、対象のAPIキーにどれだけの使用を許可するかの設定を行います。

使用量プランを作成」をクリックして、遷移先の画面で入力していきます。

apigateway-6.png

名前はlambda-sample-planとしました。

スロットリングとしてレート(クライアントがAPIを呼び出すことができる1秒あたりのリクエスト数)は1、バースト(APIに対して同時に実行できるリクエストの数)も1としてみました。
リクエスト(期間内でユーザーが実行できるリクエストの総数)は1日あたり100としました。

この辺りの数値は用途によって適宜変えてください。

最後に「使用量プランを作成」をクリックします。

APIキーの作成

次にAPIキーを作成します。

APIキーのページで「APIキーの作成」をクリックします。

apigateway-7.png

今回はlambda-sample-keyという名前にしました。
保存を押すとAPIキーが作成されます。

このAPIキーをのちほど呼び出し時に使います。

APIキーを使用量プランに追加

使用量プランAPIキーを追加します。

apigateway-8.png

作成したAPIキーのページに行き「使用量プランに追加」をクリックします。
作成済みの使用量プランを選んで保存を押します。

使用量プランとステージを紐付け

apigateway-9.png

使用量プランのページで「ステージを追加」をクリックし、紐づけるAPIステージを選択します。
今回であればlambda-samplelambda-sample-stageとなります。

このページで「メソッドレベルのスロットリング」も設定可能です。今回は設定せずにおきます。

使用量プランに追加」をクリックします。

POSTでAPIキーを必須とする

該当のAPIキーが付与されていない場合はAPIリクエストを受け付けないようにしてみます。

apigateway-10.png

メソッドリクエストの設定はデフォルトでは「APIキーは必須です」がFalseになっているかと思います。

apigateway-11.png

編集をクリックして「APIキーは必須です」にチェックを入れて保存をクリックします。

デプロイとテスト

APIはデプロイしないと変更が反映されないので、デプロイしましょう。

$ curl https://{restapi_id}.execute-api.ap-northeast-1.amazonaws.com/lambda-sample-stage/lambda-sample-resource -d '{"message": "あなたの会社名を教えてください"}' 
{"message":"Forbidden"}

先ほどと同じようにcurlを呼んだ場合、Forbiddenとなりました。

では次に、先ほど発行したAPIキーをヘッダーに付与した上でcurlを呼んでみます。

$ curl https://{restapi_id}.execute-api.ap-northeast-1.amazonaws.com/lambda-sample-stage/lambda-sample-resource -d '{"message": "あなたの会社名を教えてください"}' -H 'X-API-KEY:{発行済みのAPIキーをここに書く}'    

この場合は無事にレスポンスが返ってきました。

最後に

次はなにをしてみようか。

宣伝

SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?