mangum + FastAPI で ASGI な Python アプリケーションを AWS Lambda + API Gateway 上で動かす
mangum を使うと FastAPI や responder といった ASGI アプリケーションを AWS Lambda + API Gateway 上へ簡単にデプロイすることが出来ます。 今回は FastAPI で書いた ASGI アプリケーションを mangum を使って AWS 上でデプロイする手順をメモしておきます。
mangum を使うと FastAPI や responder といった ASGI アプリケーションを AWS Lambda + API Gateway 上へ簡単にデプロイすることが出来ます。 今回は FastAPI で書いた ASGI アプリケーションを mangum を使って AWS 上でデプロイする手順をメモしておきます。
AWS Lambda を cron 式で指定時間にトリガーする場合、トリガーには Cloud Watch Event を指定します。 この場合、Lambda のイベントハンドラへ渡される event
(JSON オブジェクト) のサンプルは Event Patterns in CloudWatch Events に掲載されています。 実際に CloudWatch Event からトリガーされた場合の event
サンプルをメモしておきます。 python-lambda-local からローカル実行する際などにも活用出来ると思います。
AWS の Lambda で開発を行う際、Web 管理コンソール上で開発 / デバッグするのは大変です。 python-lambda-local を使うとローカル環境で Lambda を実行出来、更に lambda-uploader を使うとローカル環境から簡単に Lambda へ関数をアップロードすることが出来ます。 Python の外部ライブラリを使う場合、外部ライブラリを含めた .zip ファイルを作成して Web 管理コンソールからアップロードする必要がありますが、lambda-uploader
を使えば .zip ファイルを作成することなく、必要なライブラリもアップロードしてくれます。 今回は python-lambda-local
と lambda-uploader
の使い方をメモしておきます。
lego を利用して Let's Encrypt の証明書を取得する手順については以前に下記のメモを書きました。
今回は以下の環境で証明書を取得する手順をメモしておきます。 尚、今回は GCP 上の仮想マシンに CentOS8 を使いました。
lego
を利用するAWS Lambda で (標準パッケージ以外の) 外部パッケージを利用したい場合は、Python のソースコードと依存するパッケージを .zip アーカイブにして、Lambda へアップロードする必要があります。 詳しくは AWS Lambda Deployment Package in Python に記載されていますが、boto3
だけは例外的に .zip へ含める必要がありません。 AWS の公式ドキュメントでは、依存モジュールを .zip アーカイブへ含める際に以下のような手順になっていました。
1 2 3 4 |
|
ネット上の公開情報では zip -r *
しているケースをよく見るのですが、bash で作業する場合、これでは .
で始まる隠しファイル/隠しディレクトリは .zip ファイルに含まれません。 これらを含めたい場合は AWS 公式ページにあるように zip -r .
とピリオドを使う必要があります。 現在ディレクトリのひとつ上のディレクトリに AWS Lambda アップロード用の .zip ファイルを作成するには、例えば以下のように実行します。
1 |
|
以前に Python の boto3 で S3 の操作を行うサンプルというメモを書きました。 今回はアップロード / ダウンロードサンプルをメモしておきます。
AWS S3 でファイルがアップロードされた際に、自動的にコピー (または移動) する Lambda 関数をメモしておきます。 尚、権限は適切に設定されているものとします。
AWS でサービス / 地域ごとに利用されるグローバルアドレスについては AWS IP アドレスの範囲 で公開されています。 こちらの情報を元に「東京リージョンの EC2 で日本のアドレスが払い出される確率」を計算したところ、本日時点で 0.7028419% のようです (たぶん)。
.NET Core 3.1 上の C# で AWS S3 Bucket を表示するサンプルを書いたのでメモしておきます。
AWS S3 互換のオブジェクトストレージサービスである「wasabi」は 1TB 以下であれば 5.99 ドル/月と非常に安価です。 また、データ転送量や API 呼び出しは課金されません。 今回は wasabi へ新規に申し込みを行い、Bucket を作成するまでの手順をメモしておきます。