(※Serverless Framework V.3を想定しています)
Docker Imageでデプロイする
LambdaへのImageデプロイ
LambdaはDocker Imageを使ってデプロイすることができます(Lambda のコンテナイメージを使用する - AWS Lambda)。
pip installでいれるサードパーティーのパッケージが必要なときやストレージ上のファイルを同梱してデプロイしたいとき、Imageでデプロイするのが便利です。
PythonのDocker Imageの例は
コンテナイメージで Python Lambda 関数をデプロイする - AWS Lambda
に書いてあります。例えば
FROM public.ecr.aws/lambda/python:3.11 COPY requirements.txt ${LAMBDA_TASK_ROOT} RUN pip install -r requirements.txt COPY handler.py ${LAMBDA_TASK_ROOT} CMD [ "handler.hello" ]
のようにpublic.ecr.aws/lambda/python
を参照するのが手軽です。この場合ベースOSはAmazon Linux系になるので、それが嫌な場合は任意のベースイメージのもとで作る方法もあります(参考)
ServerlesでのImageデプロイ
以下のようにprovider.ecr.images
にdocker context(path
)を書く方法にするとserverless deploy
のたびに自動でbuildされデプロイされて楽です。
service: example frameworkVersion: '3' provider: name: aws runtime: python3.11 ecr: images: appimage: path: . functions: hello: image: name: appimage
詳細な設定については ドキュメント をご覧ください
API Key認証
API Gatewayで作成できるRESTfulなAPIはREST APIとHTTP APIの2種類があります。HTTPはより高速で安く、そのぶん低機能です(REST API と HTTP API 間で選択する - Amazon API Gateway)。
REST APIではapi-keyによる認証を付けることができます。簡易的な認証方法として便利です。
serverless.ymlでいうとfunctions.events
においてhttp
をつけるとREST APIになり、httpApi
をつけるとHTTP APIになります。
API Keyによる認証はserverless.ymlを以下のように書き換えることで設定できます
provider: name: aws apiGateway: apiKeys: # API KEYを生成するよう設定 - myKey functions: myapi: handler: handler.myapi events: - http: # REST API path: /myapi method: get private: true # API KEYを使用するよう設定
(参考:Serverless Framework - AWS Lambda Events - REST API (API Gateway v1))
エンドポイントのタイプを変える
ちなみに、REST APIは
の3種類あり、デフォルトでエッジ最適化になるのですが、エッジ最適化は1つのAWSアカウントにつき120個までしか作成できず、この上限を引き上げることは現在のところできません。
リージョン別APIも上限を引き上げることはできませんが600個が上限になるので気軽にAPIを量産することができます。
provider: name: aws endpointType: REGIONAL
エンドポイントタイプはendpointType
の項目を設定することで変えることができます。