aws-lambda-python-integration
AWS Lambda へのPythonデプロイにおけるコールドスタート最適化を含む統合パターンを提供します。AWS Chalice またはraw Pythonアプローチの選択、API GatewayやALBとの連携設定、サーバーレスPythonアプリケーションの実装など、PythonをAWS Lambdaにデプロイする際に活用してください。「create lambda python」「deploy python lambda」「chalice lambda aws」「python lambda cold start」などの場面でトリガーされます。
description の原文を見る
Provides AWS Lambda integration patterns for Python with cold start optimization. Use when deploying Python functions to AWS Lambda, choosing between AWS Chalice and raw Python approaches, optimizing cold starts, configuring API Gateway or ALB integration, or implementing serverless Python applications. Triggers include "create lambda python", "deploy python lambda", "chalice lambda aws", "python lambda cold start", "aws lambda python performance", "python serverless framework".
SKILL.md 本文
AWS Lambda Python インテグレーション
冷却開始の最適化とクリーンなアーキテクチャを備えた、高性能な AWS Lambda 関数を Python で作成するパターン。
概要
AWS Chalice(フル機能フレームワーク)と Raw Python(最小限のオーバーヘッド)の 2 つのアプローチを使用した AWS Lambda Python インテグレーション。どちらも API Gateway/ALB インテグレーションをサポートし、本番対応の設定が可能です。
使用する場面
このスキルは以下の場合に使用してください:
- Python で新しい Lambda 関数を作成する
- 既存の Python アプリケーションを Lambda に移行する
- Python Lambda の冷却開始パフォーマンスを最適化する
- フレームワークベースと最小限の Python アプローチの選択
- API Gateway または ALB インテグレーションを設定する
- Python Lambda のデプロイパイプラインを設定する
手順
1. アプローチの選択
| アプローチ | 冷却開始 | 最適な用途 | 複雑さ |
|---|---|---|---|
| AWS Chalice | < 200ms | REST API、迅速な開発、組み込みルーティング | 低 |
| Raw Python | < 100ms | シンプルなハンドラ、最大限の制御、最小限の依存関係 | 低 |
2. プロジェクト構造
AWS Chalice の構造
my-chalice-app/
├── app.py # ルーティング付きメインアプリケーション
├── requirements.txt # 依存関係
├── .chalice/
│ ├── config.json # Chalice 設定
│ └── deploy/ # デプロイアーティファクト
├── chalicelib/ # 追加モジュール
│ ├── __init__.py
│ └── services.py
└── tests/
└── test_app.py
Raw Python の構造
my-lambda-function/
├── lambda_function.py # ハンドラエントリーポイント
├── requirements.txt # 依存関係
├── template.yaml # SAM/CloudFormation テンプレート
└── src/ # 追加モジュール
├── __init__.py
├── handlers.py
└── utils.py
3. 実装例
詳細な実装ガイドは「参考資料」セクションを参照してください。簡単な例:
AWS Chalice:
from chalice import Chalice
app = Chalice(app_name='my-api')
@app.route('/')
def index():
return {'message': 'Hello from Chalice!'}
Raw Python:
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps({'message': 'Hello from Lambda!'})
}
コア概念
冷却開始の最適化
主な戦略:
- モジュールレベルで初期化 - ウォーム呼び出し間で永続化
- 遅延ロードを使用 - 必要になるまで重いインポートを遅延
- boto3 クライアントをキャッシュ - 呼び出し間で接続を再利用
詳細なパターンは「Raw Python Lambda」を参照してください。
接続管理
モジュールレベルでクライアントを作成して再利用:
_dynamodb = None
def get_table():
global _dynamodb
if _dynamodb is None:
_dynamodb = boto3.resource('dynamodb').Table('my-table')
return _dynamodb
環境設定
class Config:
TABLE_NAME = os.environ.get('TABLE_NAME')
DEBUG = os.environ.get('DEBUG', 'false').lower() == 'true'
@classmethod
def validate(cls):
if not cls.TABLE_NAME:
raise ValueError("TABLE_NAME required")
ベストプラクティス
メモリとタイムアウト設定
- メモリ: シンプルなハンドラは 256MB から開始、複雑な操作は 512MB
- タイムアウト: 予想処理時間に基づいて設定
- シンプルなハンドラ: 3~5 秒
- DB 呼び出し付き API: 10~15 秒
- データ処理: 30~60 秒
依存関係
requirements.txt は最小限に保つ:
# AWS SDK コア - 常に必要
boto3>=1.35.0
# 必要なものだけ追加
requests>=2.32.0 # 外部 API を呼び出す場合
pydantic>=2.5.0 # データ検証を使用する場合
エラーハンドリング
リクエスト ID と共に適切な HTTP コードを返す:
def lambda_handler(event, context):
try:
result = process_event(event)
return {'statusCode': 200, 'body': json.dumps(result)}
except ValueError as e:
return {'statusCode': 400, 'body': json.dumps({'error': str(e)})}
except Exception as e:
print(f"Error: {str(e)}") # CloudWatch にログ
return {'statusCode': 500, 'body': json.dumps({'error': 'Internal error'})}
構造化されたエラーパターンは「Raw Python Lambda」を参照してください。
ログ記録
CloudWatch Insights 用に構造化ログを使用:
import logging, json
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 構造化ログ
logger.info(json.dumps({
'eventType': 'REQUEST',
'requestId': context.aws_request_id,
'path': event.get('path')
}))
高度なパターンは「Raw Python Lambda」を参照してください。
デプロイオプション
クイックスタート
検証チェックポイント: デプロイ前に必ず
serverless printまたはsam validateを実行して、設定エラーを早期に検出してください。
Serverless Framework:
# serverless.yml
service: my-python-api
provider:
name: aws
runtime: python3.12 # または python3.11
functions:
api:
handler: lambda_function.lambda_handler
events:
- http:
path: /{proxy+}
method: ANY
AWS SAM:
# template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
ApiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./
Handler: lambda_function.lambda_handler
Runtime: python3.12 # または python3.11
Events:
ApiEvent:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
AWS Chalice:
chalice new-project my-api
cd my-api
chalice local 8080 # 本番にデプロイする前にローカルでテスト
chalice deploy --stage dev
検証チェックポイント: 本番にデプロイする前に
chalice localまたはsam local invokeでローカルテストしてください。
CI/CD を含む完全なデプロイ設定、環境固有の設定、および高度な SAM/Serverless パターンについては、「Serverless デプロイ」を参照してください。
制約と警告
Lambda の制限
- デプロイパッケージ: 最大 250MB(非圧縮)(50MB 圧縮)
- メモリ: 128MB~10GB
- タイムアウト: 最大 15 分
- 並行実行: デフォルト 1000(調整可能)
- 環境変数: 合計 4KB
Python 固有の考慮事項
- 冷却開始: Python は優れた冷却開始パフォーマンスを備えています。モジュールレベルで重いインポートを避けてください
- 依存関係:
requirements.txtは最小限に保ち、共有依存関係は Lambda Layers を使用してください - ネイティブ依存関係: Amazon Linux 2(x86_64 または arm64)用にコンパイルする必要があります
よくある落とし穴
- モジュールレベルで重いライブラリをインポート - 常に必要でない場合は関数レベルに遅延
- Lambda コンテキストを処理しない -
context.get_remaining_time_in_millis()を使用してタイムアウト認識を有効にする - 入力を検証しない - 常にイベントデータを検証とサニタイズ
- 機密データを出力 - ログと CloudWatch に注意してください
エラー復旧: デプロイが失敗した場合は、CloudWatch ログで初期化エラーを確認し、sam logs を実行して問題を診断してください。
セキュリティの考慮事項
- 認証情報をハードコードしない。IAM ロールと環境変数を使用
- すべての入力データを検証
- 最小権限 IAM ポリシーを使用
- 監査ログ用に CloudTrail を有効化
参考資料
特定のトピックの詳細ガイド:
AWS Chalice- Chalice の完全セットアップ、ルーティング、ミドルウェア、デプロイRaw Python Lambda- 最小限のハンドラパターン、モジュールキャッシング、パッケージングServerless デプロイ- Serverless Framework、SAM、CI/CD パイプラインLambda テスト- pytest、moto、SAM Local、localstack
例
例 1: AWS Chalice REST API を作成
入力:
TodoDo アプリケーション用の AWS Chalice を使用して Python Lambda REST API を作成
プロセス:
chalice new-projectで Chalice プロジェクトを初期化- CRUD 操作用のルーティングを設定
- DynamoDB インテグレーションを設定
- デプロイステージを設定
chalice deployでデプロイ
出力:
- 完全な Chalice プロジェクト構造
- CRUD エンドポイント付き REST API
- DynamoDB テーブル設定
- デプロイ設定
例 2: Raw Python の冷却開始を最適化
入力:
My Python Lambda has slow cold start, how do I optimize it?
プロセス:
- インポートと初期化コードを分析
- 重いインポートを関数内に移動(遅延ロード)
- boto3 クライアントをモジュールレベルでキャッシュ
- 不要な依存関係を削除
- 必要に応じてプロビジョニングされた並行性を使用
出力:
- 遅延ロードでリファクターされたコード
- < 100ms に最適化された冷却開始
- 依存関係分析
例 3: GitHub Actions でデプロイ
入力:
SAM を使用して Python Lambda の CI/CD を設定
プロセス:
- GitHub Actions ワークフローを作成
- Python 環境と依存関係を設定
- カバレッジで pytest を実行
- SAM でパッケージ化
- dev/prod ステージにデプロイ
出力:
- 完全な
.github/workflows/deploy.yml - マルチステージパイプライン
- 統合テスト自動化
バージョン
バージョン: 1.0.0
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。