🧑💻
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