🧑💻
AWS API GatewayとLambdaでシンプルなREST APIを作る
こんにちは。株式会社DeLTの栗田です。
シンプルなAPIを作りたいけど、環境構築が面倒であったり維持費をかけたくない、けどローカルでも動かしたい場合に私がAWS Lambdaを使ってよく行う方法をメモしておきます。
環境
開発言語
- python 11
- ryeでパッケージ管理
- ローカルの環境変数管理は.envrcを使用
AWS
- lambda
- API Gateway
コード
とりあえずOpenAIのAPIを叩くだけのシンプルなコードを用意します。
POST想定で、inputというパラメータをbodyから取得し、openaiに投げているだけです。
AWSの設定
Lambda
テキトウに関数を用意します。

デフォルトのタイムアウト時間が3秒なので「一般設定」からタイムアウト時間を伸ばしておいてください。

サンプルコードではAPI KEYを環境変数にしているので、Lambdaの環境変数にも設定します。

API Gateway
「トリガーを追加」からAPI Gatewayを指定します。


この辺の設定は自身の環境に合わせてください。

作成するとエンドポイントができるので試しに叩いてみます。

デフォルトの結果が返ってきたのでオッケーです。

コードのデプロイ
github actionsを使ってデプロイします。
まずはAWSのアクセスキーをsecretsにセットします。

functionsディレクトリにpythonのライブラリをつっ込んでzipでアップロードしているだけです。
※Labmda Layerは使ってません。
actionsから実行します。

デプロイ完了です。
Layer分けせず、全てのライブラリををまとめているのでもちろんAWSのコンソールでコードは表示できません。

お試し実行
[mk1018:~]
$ curl -X POST https://<独自のURL>.ap-northeast-1.amazonaws.com/default/SampleLambdaFunction \
-H "Content-Type: application/json" \
-d '{"input":"こんにちは。"}' | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 194 100 164 100 30 252 46 --:--:-- --:--:-- --:--:-- 298
{
"result": "こんにちは!今日はどんなことをお手伝いできますか?"
}
レスポンスが返ってきたのでオッケーです。
最後に
使う場面は、お試しでシンプルなAPIを作りたい時くらいかと思います。
ここ以外にも記述記事書いてます。
Discussion