aws-lambda-java-integration
AWS LambdaへのJavaデプロイに特化した統合パターンとコールドスタート最適化を提供します。MicronautまたはRaw Javaアプローチの選択、1秒未満のコールドスタート実現、API GatewayやALBとの連携設定、サーバーレスJavaアプリケーションの実装など、JavaベースのLambda開発全般で活用できます。「create lambda java」「java lambda cold start」「micronaut lambda aws」などのキーワードで起動します。
description の原文を見る
Provides AWS Lambda integration patterns for Java with cold start optimization. Use when deploying Java functions to AWS Lambda, choosing between Micronaut and Raw Java approaches, optimizing cold starts below 1 second, configuring API Gateway or ALB integration, or implementing serverless Java applications. Triggers include "create lambda java", "deploy java lambda", "micronaut lambda aws", "java lambda cold start", "aws lambda java performance", "java serverless framework".
SKILL.md 本文
AWS Lambda Java インテグレーション
最適化されたコールドスタートを備えた高性能な AWS Lambda Java 関数を作成するためのパターン。
概要
このスキルは AWS Lambda Java 開発のための完全なパターンを提供し、2 つの主なアプローチをカバーしています:
- Micronaut フレームワーク - AOT コンパイル、依存性注入、コールドスタート < 1s を備えた機能豊富なフレームワーク
- Raw Java - コールドスタート < 500ms を実現する最小限のオーバーヘッドアプローチ
どちらのアプローチも、API Gateway と ALB インテグレーションをサポートし、本番環境対応の設定が可能です。
使用場面
- AWS Lambda への Java 関数のデプロイ
- 1 秒以下のコールドスタート最適化
- Micronaut と Raw Java アプローチの選択
- API Gateway または ALB インテグレーションの設定
- Java Lambda の CI/CD パイプラインのセットアップ
使用方法
1. アプローチの選択
| アプローチ | コールドスタート | 最適な用途 | 複雑性 |
|---|---|---|---|
| Micronaut | < 1s | 複雑なアプリ、DI 必要、エンタープライズ | 中程度 |
| Raw Java | < 500ms | シンプルなハンドラー、最小限のオーバーヘッド | 低 |
確認: 進める前に、アプローチがユースケースに適しているか確認してください。
2. プロジェクト構造
my-lambda-function/
├── build.gradle (or pom.xml)
├── src/main/java/com/example/Handler.java
└── serverless.yml (or template.yaml)
確認: プロジェクト構造がテンプレートと一致していることを確認してください。
3. 実装例
Micronaut ハンドラー
@FunctionBean("my-function")
public class MyFunction implements Function<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
private final MyService service;
public MyFunction(MyService service) {
this.service = service;
}
@Override
public APIGatewayProxyResponseEvent apply(APIGatewayProxyRequestEvent request) {
// Process request
return new APIGatewayProxyResponseEvent()
.withStatusCode(200)
.withBody("{\"message\": \"Success\"}");
}
}
Raw Java ハンドラー
public class MyHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
private static final MyService service = new MyService();
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent request, Context context) {
return new APIGatewayProxyResponseEvent()
.withStatusCode(200)
.withBody("{\"message\": \"Success\"}");
}
}
確認: デプロイ前に sam local invoke を実行してハンドラーが動作することを確認してください。
コアパターン
コネクション管理
// 一度初期化し、複数のインボケーション間で再利用
private static final DynamoDbClient dynamoDb = DynamoDbClient.builder()
.region(Region.US_EAST_1)
.build();
// 避けるべき: ハンドラー内でクライアントを作成(毎回のインボケーション時に遅い)
エラーハンドリング
@Override
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent request, Context context) {
try {
return successResponse(process(request));
} catch (ValidationException e) {
return errorResponse(400, e.getMessage());
} catch (Exception e) {
context.getLogger().log("Error: " + e.getMessage());
return errorResponse(500, "Internal error");
}
}
ベストプラクティス
設定
- メモリ: 512MB から開始し、プロファイリングに基づいて調整
- タイムアウト: Micronaut 10-30 秒、Raw Java 5-10 秒
- ランタイム: 最高のパフォーマンスのために Java 17 または 21
パッケージング
- Gradle Shadow Plugin または Maven Shade Plugin を使用
- 不要な依存関係を除外
モニタリング
- X-Ray トレーシングを有効化してパフォーマンス分析を実施
- CloudWatch Insights を使用してコールドスタートとウォームスタートを追跡
デプロイオプション
Serverless フレームワーク
service: my-java-lambda
provider:
name: aws
runtime: java21
memorySize: 512
timeout: 10
package:
artifact: build/libs/function.jar
functions:
api:
handler: com.example.Handler
events:
- http:
path: /{proxy+}
method: ANY
確認: 最初に serverless deploy --stage dev を実行してください。
AWS SAM
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: build/libs/function.jar
Handler: com.example.Handler
Runtime: java21
MemorySize: 512
Timeout: 10
Events:
ApiEvent:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
確認: デプロイ前に sam validate を実行してください。
制約と警告
Java 固有の制約
- リフレクション: 使用を最小化; AOT コンパイルを優先(Micronaut)
- クラスパススキャン: コールドスタートを低下させる; 明示的な設定を使用
- 大規模フレームワーク: Spring Boot は大幅なコールドスタートオーバーヘッドを追加
よくある落とし穴
- ハンドラー内での初期化 - ウォームインボケーション時に繰り返し処理が発生
- サイズの大きい JAR - 必要な依存関係のみを含める
- メモリ不足 - Java は Node.js/Python より多くのメモリが必要
- タイムアウト処理がない - 常に適切なタイムアウトを設定
参考資料
特定のトピックの詳細なガイダンスについては:
Micronaut Lambda- 完全な Micronaut セットアップ、AOT 設定、DI 最適化Raw Java Lambda- 最小限のハンドラーパターン、シングルトンキャッシング、JAR パッケージングServerless デプロイメント- Serverless フレームワーク、SAM、CI/CD パイプライン、プロビジョニング済み同時実行数Lambda テスト- JUnit 5、SAM Local、統合テスト、パフォーマンス測定
例
例 1: Micronaut Lambda 関数の作成
入力:
ユーザー REST API を処理するために Micronaut を使用して Java Lambda 関数を作成
プロセス:
- Micronaut プラグイン付き Gradle プロジェクトを設定
- MicronautRequestHandler を拡張するハンドラークラスを作成
- GET/POST/PUT/DELETE のメソッドを実装
- AOT 最適化を備えた application.yml を設定
- Shadow プラグインを使用してパッケージングをセットアップ
- 確認: デプロイ前に SAM CLI でローカルテストを実施
出力:
- 完全なプロジェクト構造
- 依存性注入を備えたハンドラー
- serverless.yml デプロイ設定
例 2: Raw Java のコールドスタート最適化
入力:
Java Lambda のコールドスタートが 3 秒だが、どう最適化するか
プロセス:
- 初期化コードを分析
- AWS クライアント作成を静的フィールドに移動
- build.gradle の依存関係を削減
- 最適化された JVM オプションを設定
- プロビジョニング済み同時実行数を検討
- 確認: 変更後、CloudWatch メトリクスでコールドスタートを測定
出力:
- シングルトンパターンでリファクタリングされたコード
- 最小化された JAR
- コールドスタート < 500ms
例 3: GitHub Actions によるデプロイ
入力:
SAM を使用して Java Lambda の CI/CD を設定
プロセス:
- GitHub Actions ワークフローを作成
- Shadow を使用した Gradle ビルドを設定
- SAM ビルドとデプロイをセットアップ
- デプロイ前のテストステージを追加
- 本番環境の環境保護を設定
出力:
- 完全な .github/workflows/deploy.yml
- マルチステージパイプライン(dev/staging/prod)
- 統合されたテスト自動化
バージョン
バージョン: 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
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。