AWS Lambda Powertools Python 入門 第 1 回

2022-03-02
デベロッパーのためのクラウド活用方法

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
            ...
注意 : コンテナイメージデプロイメント (OCI) やインライン Lambda 関数は Lambda Layer をサポートしていません。

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 からインストールする

PyPi からインストールする場合は以下のコマンドを実行します。
pip install aws-lambda-powertools

Lambda 関数を SAM でビルド、デプロイする場合は、Lambda 関数のソースフォルダの requirements.txt に aws-lambda-powertools を追加します。


AWS Lambda Powertools で提供しているユーティリティー

2022 年 2 月 9 日現在、AWS Lambda Powertools Python に含まれている機能 (Core Utilitiesと Utilities) は以下の通りです。
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 編

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます


筆者プロフィール

福井 厚
アマゾン ウェブ サービス ジャパン合同会社
シニアソリューションアーキテクト サーバーレススペシャリスト

2015 年からアマゾンウェブサービスジャパンでソリューションアーキテクトとして活動。サーバーレススペシャリストとして日々モダンアプリケーション開発とサーバーレスの活用の技術支援を行なっています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する