はじめに
皆さん、こんにちは。AWS ソリューションアーキテクトの福井です。
私は普段サーバーレススペシャリストとして、お客様のサーバーレスを活用したシステム開発をご支援しています。サーバーレス開発といえば、やはり AWS Lambda です。皆さんも日々、Lambda 関数を実装しながらアプリケーション開発を行われていると思いますが、皆さんは AWS Lambda Powertools Python というのをご存知でしょうか。AWS Lambda Powertools Python は、皆さんが普段開発されている AWS Lambda 関数のランタイムに Python を利用されている場合に、ぜひともお勧めしたい便利なオープンソースのライブラリです (*1)。そこで今回からシリーズで AWS Lambda Powertools Python が提供するライブラリの機能と使い方をご紹介していきたいと思います。
X ポスト » | Facebook シェア » | はてブ »
builders.flash メールメンバーへ登録
AWS のベストプラクティスを毎月無料でお試しいただけます
AWS Lambda Powertools Python とは
AWS Lambda Powertools Python は、AWS Lambda 関数用のユーティリティースイートで、トレース、構造化ロギング、カスタムメトリックスなどのベストプラクティスの導入を容易にします。
AWS Lambda Powertools python は、AWS Lambda 関数の実行環境とサポートされているランタイム専用に最適化されています。コアライブラリの使い方については、こちらの Blog もご参照ください。
本シリーズでは、AWS Lambda Powertools Python 1.25.1 を対象としています。
AWS Lambda Powertools Python のインストール方法
Powertools は以下の方法でインストールして利用することが可能です。
- Lambda Layer として利用する
- PyPi からインストールする
Lambda Layer として利用する
Lambda Layer は .zip ファイルアーカイブで、追加のコード、依存パッケージ、データ、または設定ファイルを含めることができます。
Layer はコードの共有と責任の分離を促進し、ビジネスロジックの記述をより早く実装し、イテレーションを回すことができます。
Region |
Layer ARN |
us-east-1 |
arn:aws:lambda:us-east-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
us-east-2 |
arn:aws:lambda:us-east-2:017000801446:layer:AWSLambdaPowertoolsPython:11 |
us-west-1 |
arn:aws:lambda:us-west-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
us-west-2 |
arn:aws:lambda:us-west-2:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-south-1 |
arn:aws:lambda:ap-south-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-northeast-1 |
arn:aws:lambda:ap-northeast-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-northeast-2 |
arn:aws:lambda:ap-northeast-2:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-northeast-3 |
arn:aws:lambda:ap-northeast-3:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-southeast-1 |
arn:aws:lambda:ap-southeast-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ap-southeast-2 |
arn:aws:lambda:ap-southeast-2:017000801446:layer:AWSLambdaPowertoolsPython:11 |
eu-central-1 |
arn:aws:lambda:eu-central-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
eu-west-1 |
arn:aws:lambda:eu-west-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
eu-west-2 |
arn:aws:lambda:eu-west-2:017000801446:layer:AWSLambdaPowertoolsPython:11 |
eu-west-3 |
arn:aws:lambda:eu-west-3:017000801446:layer:AWSLambdaPowertoolsPython:11 |
eu-north-1 |
arn:aws:lambda:eu-north-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
ca-central-1 |
arn:aws:lambda:ca-central-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
sa-east-1 |
arn:aws:lambda:sa-east-1:017000801446:layer:AWSLambdaPowertoolsPython:11 |
AWS Serverless Application Model (SAM) による指定方法
AWS Serverless Application Model (SAM) はオープンソースのフレームワークで、AWS上でサーバーレスアプリケーションの構築を容易にします。SAM テンプレートは、AWS CloudFormation テンプレートの拡張で、より簡易な記法でサーバーレスアプリケーションの環境を構築できます。SAM について詳しくは AWS Serverless Applicaiton Model Developer Guide をご覧ください。SAM を利用して AWS Lambda の Layer として AWS Lambda Powertools Python を組み込む場合は、以下のように指定します (抜粋)。
注意 : コンテナイメージデプロイメント (OCI) やインライン Lambda 関数は Lambda Layer をサポートしていません。
SAM による指定方法
コマンド / コード
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
Layers:
- !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPython:11
...
Serverless Application Repository (SAR) から利用する
Serverless Application Repository (SAR) アプリケーションはご自身のアカウントの指定したリージョンに Lambda Layer を含む CloudFormation スタックをデプロイします。パブリックな Layer ARN オプションと比べて、より多くのステップがありますが利用したいセマンティックバージョンを指定できるメリットがあります。
App |
ARN |
説明 |
arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer |
Coreの依存ライブラリのみを含む。ほぼすべてのユーティリティーをカバー。 |
|
arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer-extras |
Coreの依存ライブラリとParserで利用しているPaydanticなどの依存ライブラリを含む。 |
注意 : Layer-extras は Python 3.6 ランタイムをサポートしていません。また、このLayer はすべての追加の依存ライブラリを含んでいます。Zip 状態で 22.4 MB、解凍後は 155 MB になります。
共有 Lambda Layer スタックを作成し、別のアカウントの Layer スタックと共通に利用できます。
SAM を利用する場合
SAM を利用する場合、この SAR アプリケーションを共有 Layer スタックの一部として、特定のセマンティックバージョンにロックして含むことができます。一度デプロイすると、それがデプロイされたアカウントにまたがって利用可能になります (抜粋)。
AwsLambdaPowertoolsPythonLayer:
Type: AWS::Serverless::Application
Properties:
Location:
ApplicationId: arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
SemanticVersion: 1.25.1 # change to latest semantic version available in SAR
MyLambdaFunction:
Type: AWS::Serverless::Function
Properties:
Layers:
# fetch Layer ARN from SAR App stack output
- !GetAtt AwsLambdaPowertoolsPythonLayer.Outputs.LayerVersionArn
利用可能なバージョンを取得
SAR API を通じて利用可能なバージョンを取得することができます。
aws serverlessrepo list-application-versions \
--application-id arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer
PyPi からインストールする
PyPi からインストールする場合は以下のコマンドを実行します。 Lambda 関数を SAM でビルド、デプロイする場合は、Lambda 関数のソースフォルダの requirements.txt に aws-lambda-powertools を追加します。
pip install aws-lambda-powertools
AWS Lambda Powertools で提供しているユーティリティー
2022 年 2 月 9 日現在、AWS Lambda Powertools Python に含まれている機能 (Core Utilitiesと Utilities) は以下の通りです。

まとめ
いかがでしたでしょうか。本記事では AWS Lambda Powertools Python の概要、インストール方法、提供されるユーティリティー群について簡単に紹介しました。次回以降では、個々のユーティリティーについてより詳しく紹介する予定です。どうぞお楽しみに。
(*1) Java をご利用の方向けには、AWS Lambda Powertools Java が公開されています。また TypeScript をご利用の方向けには、AWS Lambda Powertools TypeScript が Pre Release されています。
筆者プロフィール
福井 厚
2015 年からアマゾンウェブサービスジャパンでソリューションアーキテクトとして活動。サーバーレススペシャリストとして日々モダンアプリケーション開発とサーバーレスの活用の技術支援を行なっています。

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages