Skip to content

AWS

python-lambda-local と lambda-uploader を使ってローカル環境で Lambda 開発を行う

AWS の Lambda で開発を行う際、Web 管理コンソール上で開発 / デバッグするのは大変です。 python-lambda-local を使うとローカル環境で Lambda を実行出来、更に lambda-uploader を使うとローカル環境から簡単に Lambda へ関数をアップロードすることが出来ます。 Python の外部ライブラリを使う場合、外部ライブラリを含めた .zip ファイルを作成して Web 管理コンソールからアップロードする必要がありますが、lambda-uploader を使えば .zip ファイルを作成することなく、必要なライブラリもアップロードしてくれます。 今回は python-lambda-locallambda-uploader の使い方をメモしておきます。

GCP 上で Route53 DNS 認証を使い lego で Let's Encrypt のワイルドカード証明書を取得する

lego を利用して Let's Encrypt の証明書を取得する手順については以前に下記のメモを書きました。

今回は以下の環境で証明書を取得する手順をメモしておきます。 尚、今回は GCP 上の仮想マシンに CentOS8 を使いました。

  1. GCP と AWS を併用している
  2. GCP 上の仮想マシンで証明書を取得する
  3. 証明書はワイルドカード証明書を取得する
  4. 証明局は Let's Encrypt を利用する
  5. 証明書の取得には Route53 による DNS 認証を用いる
  6. 証明書の取得には lego を利用する

Lambda 用の .zip ファイルを作成する場合は「zip -r .」を使う方がベター

AWS Lambda で (標準パッケージ以外の) 外部パッケージを利用したい場合は、Python のソースコードと依存するパッケージを .zip アーカイブにして、Lambda へアップロードする必要があります。 詳しくは AWS Lambda Deployment Package in Python に記載されていますが、boto3 だけは例外的に .zip へ含める必要がありません。 AWS の公式ドキュメントでは、依存モジュールを .zip アーカイブへ含める際に以下のような手順になっていました。

1
2
3
4
~/my-function$ pip install --target ./package Pillow
~/my-function/package$ zip -r9 ${OLDPWD}/function.zip .
~/my-function/package$ cd $OLDPWD
~/my-function$ zip -g function.zip lambda_function.py

ネット上の公開情報では zip -r * しているケースをよく見るのですが、bash で作業する場合、これでは . で始まる隠しファイル/隠しディレクトリは .zip ファイルに含まれません。 これらを含めたい場合は AWS 公式ページにあるように zip -r . とピリオドを使う必要があります。 現在ディレクトリのひとつ上のディレクトリに AWS Lambda アップロード用の .zip ファイルを作成するには、例えば以下のように実行します。

1
zip -r ../lambda_function.zip .

参考