メインコンテンツに移動

builders.flash

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

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 が提供するライブラリの機能と使い方をご紹介していきたいと思います。


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバーへ登録

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 による指定方法

コマンド / コード

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 を利用する場合

SAM を利用する場合、この SAR アプリケーションを共有 Layer スタックの一部として、特定のセマンティックバージョンにロックして含むことができます。一度デプロイすると、それがデプロイされたアカウントにまたがって利用可能になります (抜粋)。

python
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 を通じて利用可能なバージョンを取得することができます。

python
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 を追加します。

bash
pip install aws-lambda-powertools

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

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

AWS Lambda Powertools for Pythonのコアユーティリティと補助ユーティリティの一覧表。各機能とその説明が日本語でまとめられている画像です。

まとめ

いかがでしたでしょうか。本記事では AWS Lambda Powertools Python の概要、インストール方法、提供されるユーティリティー群について簡単に紹介しました。次回以降では、個々のユーティリティーについてより詳しく紹介する予定です。どうぞお楽しみに。

(*1) Java をご利用の方向けには、AWS Lambda Powertools Java が公開されています。また TypeScript をご利用の方向けには、AWS Lambda Powertools TypeScript が Pre Release されています。

筆者プロフィール

福井 厚

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

A portrait photograph of a smiling man wearing glasses, a beard, and a red sweater over a pink shirt. The image is titled 'Portrait of Fukui Atsushi, 2021.'

Did you find what you were looking for today?

Let us know so we can improve the quality of the content on our pages