AWS Lambda Powertools Python 入門 第 1 回
Author : 福井 厚
皆さん、こんにちは。AWS ソリューションアーキテクトの福井です。
私は普段サーバーレススペシャリストとして、お客様のサーバーレスを活用したシステム開発をご支援しています。サーバーレス開発といえば、やはり AWS Lambda です。皆さんも日々、Lambda 関数を実装しながらアプリケーション開発を行われていると思いますが、皆さんは AWS Lambda Powertools Python というのをご存知でしょうか。AWS Lambda Powertools Python は、皆さんが普段開発されている AWS Lambda 関数のランタイムに Python を利用されている場合に、ぜひともお勧めしたい便利なオープンソースのライブラリです (*1)。そこで今回からシリーズで AWS Lambda Powertools Python が提供するライブラリの機能と使い方をご紹介していきたいと思います。
この連載記事のその他の記事はこちら
- 選択
- AWS Lambda Powertools Python 入門 第 1 回
- 第 2 回 ~Tracer Utility
- 第 3 回 ~Logger Utility
- 第 4 回 ~Metrics Utility
- 第 5 回 ~EventHandler Utility - REST API 編
- 第 6 回 EventHandler Utility - GraphQL 編
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 を組み込む場合は、以下のように指定します (抜粋)。
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 | 説明 |
aws-lambda-powertools-python-layer | arn:aws:serverlessrepo:eu-west-1:057560766410:applications/aws-lambda-powertools-python-layer | Coreの依存ライブラリのみを含む。ほぼすべてのユーティリティーをカバー。 |
aws-lambda-powertools-python-layer-extras | 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 を利用する場合、この 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 からインストールする
pip install aws-lambda-powertools
Lambda 関数を SAM でビルド、デプロイする場合は、Lambda 関数のソースフォルダの requirements.txt に aws-lambda-powertools を追加します。
AWS Lambda Powertools で提供しているユーティリティー
Core Utilities | Tracer | AWS X-Ray Python SDKの薄いラッパーです。 |
Logger | 構造化されたJSONの出力を行うロガーを提供します。 | |
Metrics | Amazon CloudWatch Embedded Metrics Format (EMF) に従ってメトリクスを標準出力にロギングすることで、カスタムメトリクスを非同期に作成します。 | |
Event Handler | Event Handler として AppSync と API Gateway 用のイベントハンドラを提供します。 | |
Utilities | Middleware factory | 個々の Lambda の実行の前後に同期的にロジックを実行するための独自のミドルウェアを作成するためのデコレーターファクトリを提供します。 |
Parameters | ひとつ、または複数のパラメータ値を AWS Systems Manager Parameter Store、AWS Secrets Manager、AWS AppConfig、Amazon DynamoDB、または独自設定から取得する高レベルの関数を提供します。 | |
SQS Batch Processing | Amazon SQS からのメッセージのバッチ処理中に部分的な失敗を処理する方法を提供します。 | |
Typing | IDE の型ヒントの提供による開発容易性に利用可能な静的型付けクラスを提供します。 | |
Validation | イベントとレスポンスのための JSON スキーマバリデーションを提供します。検証する前にイベントをアンラップするための JMESPath をサポートします。 | |
Event Source Data Classes | 自己記述型の Lambda イベントソースクラスを提供します。 | |
Parser | Pydantic を利用したデータのパースとディープバリデーションを提供します。 | |
Idempotency | 安全なリトライを実行するための冪等性操作へ Lambda 関数を変換するシンプルなソリューションを提供します。 | |
Feature flags | ひとつまたは複数のフィーチャーが入力に基づいて有効化される方法を定義するためのシンプルなルールエンジンを提供します。 | |
JMESPath Functions | Lambda 関数の一般的なエンコード済み JSON ペイロードを容易にデシリアライズします。 |
まとめ
いかがでしたでしょうか。本記事では AWS Lambda Powertools Python の概要、インストール方法、提供されるユーティリティー群について簡単に紹介しました。次回以降では、個々のユーティリティーについてより詳しく紹介する予定です。どうぞお楽しみに。
(*1) Java をご利用の方向けには、AWS Lambda Powertools Java が公開されています。また TypeScript をご利用の方向けには、AWS Lambda Powertools TypeScript が Pre Release されています。
この連載記事のその他の記事はこちら
- 選択
- AWS Lambda Powertools Python 入門 第 1 回
- 第 2 回 ~Tracer Utility
- 第 3 回 ~Logger Utility
- 第 4 回 ~Metrics Utility
- 第 5 回 ~EventHandler Utility - REST API 編
- 第 6 回 EventHandler Utility - GraphQL 編
筆者プロフィール
福井 厚
アマゾン ウェブ サービス ジャパン合同会社
シニアソリューションアーキテクト サーバーレススペシャリスト
2015 年からアマゾンウェブサービスジャパンでソリューションアーキテクトとして活動。サーバーレススペシャリストとして日々モダンアプリケーション開発とサーバーレスの活用の技術支援を行なっています。
AWS を無料でお試しいただけます