mcpField
A
aws-lambda-python-integration

aws-lambda-python-integration

github.com/giuseppe-trisciuoglioクラウド・DevOps3653.6k 回インストール7 週間前に更新
リポジトリ

aws-lambda-python-integration について

AWS Chalice または素の Python を使った AWS Lambda 関数の構築を支援するガイドスキルです。アーキテクチャ、コールドスタートや接続管理のパターン、API Gateway または ALB との連携、デプロイ方法を扱います。

主な機能

  1. 01AWS Chalice と素の Python の方式
  2. 02コールドスタート最適化パターン
  3. 03クライアント再利用と接続管理
  4. 04API Gateway と ALB の連携ガイド
  5. 05サーバーレスデプロイ例

活用シーン

  1. 01Python Lambda 関数の作成開始
  2. 02Python アプリケーションの Lambda 移行
  3. 03コールドスタートの負荷軽減
  4. 04API Gateway または ALB 連携の設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill aws-lambda-python-integration

インストール後、Claude Code で/aws-lambda-python-integrationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
chalice-lambda.md
raw-python-lambda.md
serverless-deployment.md
testing-lambda.md

詳細

AWS Lambda Python 統合

最適化されたコールドスタートとクリーンなアーキテクチャを備えた、高性能な AWS Lambda 関数を Python で作成するためのパターンです。

概要

AWS Lambda の Python 統合には、AWS Chalice(フル機能のフレームワーク)と Raw Python(オーバーヘッドを最小限に抑える方法)の 2 つのアプローチがあります。どちらも、本番環境向けの設定で API Gateway/ALB との統合をサポートします。

使用する場面

次のような場合に、このスキルを使用してください。

  • Python で新しい Lambda 関数を作成する
  • 既存の Python アプリケーションを Lambda に移行する
  • Python Lambda のコールドスタート性能を最適化する
  • フレームワークを使う方法と、最小限の Python による方法のどちらを選ぶか検討する
  • API Gateway または ALB との統合を設定する
  • Python Lambda 用のデプロイパイプラインを構築する

手順

1. アプローチを選択する
アプローチコールドスタート最適な用途複雑さ
AWS Chalice< 200msREST API、迅速な開発、組み込みルーティング低
Raw Python< 100msシンプルなハンドラー、最大限の制御、最小限の依存関係低
2. プロジェクト構成
AWS Chalice の構成
my-chalice-app/
├── app.py                    # Main application with routes
├── requirements.txt          # Dependencies
├── .chalice/
│   ├── config.json          # Chalice configuration
│   └── deploy/              # Deployment artifacts
├── chalicelib/              # Additional modules
│   ├── __init__.py
│   └── services.py
└── tests/
    └── test_app.py
Raw Python の構成
my-lambda-function/
├── lambda_function.py       # Handler entry point
├── requirements.txt         # Dependencies
├── template.yaml            # SAM/CloudFormation template
└── src/                     # Additional modules
    ├── __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!'})
    }

主な概念

コールドスタートの最適化

主な戦略:

  1. モジュールレベルで初期化する - ウォーム状態の呼び出し間で保持されます
  2. 遅延読み込みを使用する - 必要になるまで重いインポートを遅らせます
  3. 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 を最小限に抑えます。

# Core AWS SDK - always needed
boto3>=1.35.0

# Only add what you need
requests>=2.32.0  # If calling external APIs
pydantic>=2.5.0   # If using data validation
エラー処理

リクエスト 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)}")  # Log to 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)

# Structured log
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  # or 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  # or python3.11
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: ANY

AWS Chalice:

chalice new-project my-api
cd my-api
chalice local 8080  # Test locally before deploying
chalice deploy --stage dev

検証チェックポイント: 本番環境にデプロイする前に、chalice local または sam local invoke でローカルテストを行ってください。

CI/CD、環境ごとの設定、高度な SAM/Serverless パターンを含む完全なデプロイ設定については、Serverless Deploymentを参照してください。

制約と警告

Lambda の制限
  • デプロイパッケージ:展開後は最大 250MB(圧縮後は 50MB)
  • メモリ:128MB~10GB
  • タイムアウト:最大 15 分
  • 同時実行数:デフォルトで 1000(調整可能)
  • 環境変数:合計サイズ 4KB
Python 固有の考慮事項
  • コールドスタート:Python はコールドスタート性能に優れています。モジュールレベルで重いインポートを行わないようにしてください
  • 依存関係:requirements.txt を最小限に抑え、共有する依存関係には Lambda Layers を使用してください
  • ネイティブ依存関係:Amazon Linux 2 向け(x86_64 または arm64)にコンパイルする必要があります
よくある落とし穴
  1. モジュールレベルで重いライブラリをインポートする - 常に必要でない場合は、関数内に移動します
  2. Lambda コンテキストを処理しない - タイムアウトを考慮するため、context.get_remaining_time_in_millis() を使用します
  3. 入力を検証しない - イベントデータは必ず検証し、サニタイズします
  4. 機密データを出力する - ログや CloudWatch の取り扱いには注意します

エラー復旧: デプロイに失敗した場合は、CloudWatch のログで初期化エラーを確認し、sam logs を実行して問題を診断します。

セキュリティに関する考慮事項
  • 認証情報をハードコードせず、IAM ロールと環境変数を使用します
  • すべての入力データを検証します
  • 最小権限の IAM ポリシーを使用します
  • 監査ログ用に CloudTrail を有効にします

リファレンス

特定のトピックの詳細なガイダンスについては、以下を参照してください。

  • AWS Chalice - Chalice のセットアップ、ルーティング、ミドルウェア、デプロイの完全なガイド
  • Raw Python Lambda - 最小限のハンドラーパターン、モジュールキャッシュ、パッケージング
  • Serverless Deployment - Serverless Framework、SAM、CI/CD パイプライン
  • Testing Lambda - pytest、moto、SAM Local、localstack

例

例 1:AWS Chalice REST API を作成する

入力:

Create a Python Lambda REST API using AWS Chalice for a todo application

手順:

  1. chalice new-project で Chalice プロジェクトを初期化します
  2. CRUD 操作用のルートを設定します
  3. DynamoDB との連携を設定します
  4. デプロイステージを設定します
  5. chalice deploy でデプロイします

出力:

  • Chalice プロジェクトの完全な構成
  • CRUD エンドポイントを備えた REST API
  • DynamoDB テーブルの設定
  • デプロイ設定
例 2:Raw Python のコールドスタートを最適化する

入力:

My Python Lambda has slow cold start, how do I optimize it?

手順:

  1. インポートと初期化コードを分析します
  2. 重いインポートを関数内に移動します(遅延読み込み)
  3. boto3 クライアントをモジュールレベルでキャッシュします
  4. 不要な依存関係を削除します
  5. 必要に応じてプロビジョニング済み同時実行を使用します

出力:

  • 遅延読み込みを適用したリファクタリング済みコード
  • 最適化されたコールドスタート(< 100ms)
  • 依存関係の分析
例 3:GitHub Actions でデプロイする

入力:

Configure CI/CD for Python Lambda with SAM

手順:

  1. GitHub Actions ワークフローを作成します
  2. Python 環境と依存関係を設定します
  3. カバレッジを測定しながら pytest を実行します
  4. SAM でパッケージ化します
  5. dev/prod ステージにデプロイします

出力:

  • 完全な .github/workflows/deploy.yml
  • マルチステージパイプライン
  • 統合されたテスト自動化

バージョン

バージョン:1.0.0

コメント