このREADMEはAWSに触るなんてムリムリ!※無理じゃなかった?!2ndシーズン Advent Calendar 2025の一環として作成されました。
- Powertools AWS Lambda(Python)の基本的な使い方を理解する
この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも??」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど) 誤りなどがあれば書き直していく予定です。
今回はPowertools for AWS Lambda (Python)について検証します。
内容はTutorial - Powertools for AWS Lambda (Python)に沿って進めていきます。
今回の検証で必要なものは以下のとおりです。
- AWS CLI
- AWS SAM CLI
チュートリアルを参考に進めるので以下のサービスを利用します。
- AWS Lambda
- Amazon API Gateway
- Amazon CloudWatch
- AWS X-Ray
では、まずは環境をセットアップしていきましょう。
まずはAWS CLIをインストールします。最新版のAWS CLIを公式インストーラーでインストールします。
# 1. インストーラーをダウンロード
curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip"
# 2. unzipがインストールされていない場合はインストール
sudo apt update && sudo apt install unzip -y # Ubuntu/Debian系
# または
sudo yum install unzip -y # CentOS/RHEL系
# 3. ダウンロードしたファイルを展開
unzip awscliv2.zip
# 4. インストール実行
sudo ./aws/install
# 5. インストール確認
aws --version
# ダウンロードしたzipファイルと展開したディレクトリを削除してクリーンアップします。
rm "awscliv2.zip"
# 解凍したディレクトリを削除
rm -rf awsAWS CLIの設定を行います。今回はAWS IAM Identity Center(旧AWS SSO)を使用してログインします。まずは以下のコマンドを実行して、SSOの設定を行います。
aws configure sso設定時に以下の情報の入力が求められます:
- SSO start URL: 組織のSSO開始URL(例:
https://my-company.awsapps.com/start) - SSO Region: SSOが設定されているリージョン(例:
us-east-1) - アカウント選択: 利用可能なAWSアカウントから選択
- ロール選択: 選択したアカウントで利用可能なロールから選択
- CLI default client Region: デフォルトのAWSリージョン(例:
ap-northeast-1) - CLI default output format: 出力形式(
json、text、tableのいずれか) - CLI profile name: プロファイル名(
defaultとします。)
SSOの設定が完了したら、以下のコマンドでログインを実行します。
aws sso loginAWS CLIが正しくインストールされ、SSOでログインできているか確認します。AWS STSで認証情報を確認します。
aws sts get-caller-identityInstall the AWS SAM CLI - AWS Serverless Application Modelに従って、セットアップを行います。
AWS SAM CLIをインストールします。以下のコマンドを実行してください。
wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip
unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
sudo ./sam-installation/install
rm -rf aws-sam-cli-linux-x86_64.zip sam-installation動作確認を行います。
sam --version実行結果
SAM CLI, version 1.146.0Powertools for AWS Lambda (Python)のチュートリアルに入る前に、AWS SAMでHello Worldアプリケーションを作成して動作確認を行います。 これからのやることのおおまかな流れは以下のとおりです。
- Pythonのバージョンを確認
- AWS SAMでHello Worldアプリケーションを作成
- ローカルでビルドとAPI起動
まずはPythonのバージョンを確認します。
python3 --version今回はPython 3.12.1を使用します。このバージョンを使ってAWS SAMでHello Worldアプリケーションを作成します。 以下のコマンドを実行して、プロジェクトを作成します。
sam init --runtime python3.12 --dependency-manager pip --app-template hello-world --name powertools-quickstartディレクトリを移動します。
cd powertools-quickstartローカルでビルドとAPI起動を行います。
sam build && sam local start-apihttp://127.0.0.1:3000/helloでアクセスします。
Web画面上に以下のようなメッセージが表示されたら成功です。
{"message": "hello world"}
curlコマンドでアクセスする場合は以下のとおりです。※ターミナルを次の行で表示するために改行が入るようにしています。
curl http://127.0.0.1:3000/hello && echo ""sam local invokeによる実行も試してみます。以下のコマンドを実行します。 イベントファイルとリソース指定で実行する例を示します。
sam local invoke HelloWorldFunction -e events/event.jsonまたは短縮版で実行することもできます。
sam local invoke -e events/event.json問題なく動作したら、次にデプロイを行います。以下のコマンドを実行します。
sam build && sam deploy --guidedいくつか質問が表示されるので、以下のように入力して進めてください。
Setting default arguments for 'sam deploy'
=========================================
Stack Name [powertools-quickstart]:
AWS Region [ap-northeast-1]:
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [Y/n]: Y
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]: Y
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]: y
HelloWorldFunction has no authentication. Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: y
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]:
デプロイがはじまるのでしばらく待ちます。途中でchangesetの確認が表示されるのでYを入力して進めてください。
デプロイが完了したら、以下のようなメッセージが表示されます。
Successfully created/updated stack - powertools-quickstart in ap-northeast-1
デプロイが完了したら、samのコマンドでデプロイしたLambda関数のエンドポイントを確認します。
sam list endpoints --output json実行結果のCloudEndpointという項目でProdとStageのURLが確認できます。
{
"LogicalResourceId": "ServerlessRestApi",
"PhysicalResourceId": "XXXXXXX",
"CloudEndpoint": [
"https://{PhysicalResourceId}.execute-api.ap-northeast-1.amazonaws.com/Prod",
"https://{PhysicalResourceId}.execute-api.ap-northeast-1.amazonaws.com/Stage"
],
"Methods": [
"/hello['get']"
]
}CloudEndpointのURLに/helloを付与してアクセスします。ブラウザまたはcurlコマンドでアクセスしてください。
curl https://{PhysicalResourceId}.execute-api.ap-northeast-1.amazonaws.com/Prod/hello && echo ""実行結果
{"message": "hello world"}Hello Worldアプリケーションの動作確認ができたところで、次は独自のルーター作成をPowertoolsで簡単に実装してみます。 変更のおおまかな流れは以下のとおりです。
- template.ymlの修正
- app.pyの修正
URLパスをもう一つ追加する場合はResourcesセクションにもう1つの項目を追加するべきかのように思えますが
単にパスをもう1つ追加するだけであれば、Eventsセクションにもう1つのイベントを追加するだけ問題ありません。
具体的には以下のように修正します。
aws_lambda_powertools/sample/self_router/template.yaml
Lines 13 to 32 in 8d2f40d
次にapp.pyの修正ですが、まずはpowertoolsを使わない場合のコード例を示します。
https://github.com/ymd65536/aws_lambda_powertools/blob/main/sample/self_router/app.py
これは最初に思いつく実装方法ですが、実際に運用してみると難しい点がいくつかあります。 Routerクラスを保守する必要があるのももちろんですが、もうひとつ例を挙げると、lambda_handlerで取得したリクエストメソッドがRouterクラスで動作するかどうかを理解するためにRouterクラスの実装を確認する必要がある点です。
これはlambda_handlerの中でリクエストメソッド(GET、POSTなど)を取得している点ことが原因と考えて良いでしょう。理想的にはlambda_handlerではリクエストメソッドを意識せずに処理できると良いです。
Lambda Powertoolsを使うと、これらの問題を解決できます。以下に修正例を示します。
https://github.com/ymd65536/aws_lambda_powertools/blob/main/sample/powertools_api_gateway/app.py
上記のコード例ではaws_lambda_powertools.event_handlerのAPIGatewayRestResolverを使うことで、lambda_handlerでリクエストメソッドを意識せずに処理できるようになっています。
モジュールインストールのためにrequirements.txtの修正は必要ですが、template.ymlの修正は不要です。
AWS Lambdaに限らず、アプリケーションのログを見やすくすることは重要です。 Powertools for AWS Lambda (Python)を使用すると、構造化されたログ出力を簡単に実装できます。
実装手順としては以下のとおりです。
- powertoolsのモジュールのインストール
- aws_lambda_powertoolsのLoggerをインポート
- aws_lambda_powertools.loggingのaws_lambda_powertoolsをインポート
- ログを出力する箇所でlogger.infoやlogger.errorなどを使用
- lambda_handlerに@logger.inject_lambda_contextデコレーターを追加
具体的には以下のように修正します。
https://github.com/ymd65536/aws_lambda_powertools/blob/main/sample/powertools_logging/app.py
出力されるログはJSON形式で出力されるため、CloudWatch Logs上でフィルタリングや検索が容易になります。 では実際に動作確認を行います。
ローカル実行ではCloudWatch Logsに出力されないので、以下のコマンドでビルドとデプロイを実行します。
sam build && sam deploy --guidedデプロイが完了したら、API Gatewayのエンドポイントにアクセスします。 アクセス履歴がCloudWatch Logsに出力されるので、ログを確認します。以下のようなログが出力されていることが確認できます。
{
"level": "INFO",
"location": "hello:18",
"message": "Request from unknown received",
"timestamp": "2025-11-24 07:27:28,549+0000",
"service": "APP",
"cold_start": true,
"function_name": "powertools-quickstart-HelloWorldFunction-XXXX",
"function_memory_size": "128",
"function_arn": "arn:aws:lambda:ap-northeast-1:123456789:function:powertools-quickstart-HelloWorldFunction-XXXX",
"function_request_id": "61647454-48da-4e08-9955-96507bc4e34b",
"correlation_id": "00c3e32c-985e-447a-8b30-78b8e55e191d",
"xray_trace_id": "1-692408df-5656645e626fec754239192e"
}- powertools-lambda-python
- Tutorial - Powertools for AWS Lambda (Python)
- AWS Lambda Powertools Python 入門 第 1 回 - buileers.flash✨ | AWS
このガイドでは、Linux環境でAWS CLIをインストールし、AWS SSOを使用してログインするまでの手順を説明します。
- Linux環境(Ubuntu、CentOS、Amazon Linux等)
- インターネット接続
- 管理者権限(sudoが使用可能)
- AWS SSO が組織で設定済み
- Python 3.12.1
最新版のAWS CLI v2を公式インストーラーでインストールします。
# 1. インストーラーをダウンロード
curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip"
# 2. unzipがインストールされていない場合はインストール
sudo apt update && sudo apt install unzip -y # Ubuntu/Debian系
# または
sudo yum install unzip -y # CentOS/RHEL系
# 3. ダウンロードしたファイルを展開
unzip awscliv2.zip
# 4. インストール実行
sudo ./aws/install
# 5. インストール確認
aws --version
# ダウンロードしたzipファイルと展開したディレクトリを削除してクリーンアップします。
rm "awscliv2.zip"
# 解凍したディレクトリを削除
rm -rf awsAWS SSOを使用するための初期設定を行います。
aws configure sso設定時に以下の情報の入力が求められます:
- SSO start URL: 組織のSSO開始URL(例:
https://my-company.awsapps.com/start) - SSO Region: SSOが設定されているリージョン(例:
us-east-1) - アカウント選択: 利用可能なAWSアカウントから選択
- ロール選択: 選択したアカウントで利用可能なロールから選択
- CLI default client Region: デフォルトのAWSリージョン(例:
ap-northeast-1) - CLI default output format: 出力形式(
json、text、tableのいずれか) - CLI profile name: プロファイル名(
defaultとします。)
設定完了後、以下のコマンドでログインを実行します。
aws sso loginログイン時の流れ:
- コマンド実行後、ブラウザが自動的に開きます
- AWS SSOのログインページが表示されます
- 組織のIDプロバイダー(例:Active Directory、Okta等)でログイン
- 認証が成功すると、ターミナルに成功メッセージが表示されます
認証情報を確認します。
aws sts get-caller-identity正常にログインできている場合、以下のような情報が表示されます:
{
"UserId": "AROAXXXXXXXXXXXXXX:username@company.com",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/RoleName/username@company.com"
}# 手動でブラウザを開く場合のURL確認
aws sso login --no-browser表示されたURLを手動でブラウザで開いてください。
# 再ログイン
aws sso loginプロキシ環境の場合、以下の環境変数を設定してください:
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1,.company.com-
定期的な認証情報の更新: SSOセッションには有効期限があります。定期的に再ログインを行ってください。
-
最小権限の原則: 必要最小限の権限を持つロールを使用してください。
-
プロファイルの分離: 本番環境と開発環境で異なるプロファイルを使用してください。
-
ログアウト: 作業終了時は適切にログアウトしてください:
aws sso logout --profile <プロファイル名>