aws-sdk-java-v2-lambda について
AWS SDK for Java 2.x を使う Java 開発者向けに、AWS Lambda 関数の呼び出しと管理のパターンを提供します。Spring Boot 連携とテスト方法も含みます。
主な機能
- 01同期・非同期の関数呼び出し
- 02関数の作成、更新、削除
- 03関数設定とレイヤーの管理
- 04Spring Boot 連携パターン
- 05モックまたは LocalStack によるテスト
活用シーン
- 01Java アプリからの Lambda 呼び出し
- 02関数コードのデプロイや更新
- 03タイムアウト、メモリ、環境変数の変更
- 04Spring Boot サービスでの呼び出しラップ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill aws-sdk-java-v2-lambdaインストール後、Claude Code で/aws-sdk-java-v2-lambdaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/client-setup.mdexamples.mdfunction-management.mdinvocation-patterns.mdofficial-documentation.mdspring-boot-integration.mdtesting.md詳細
AWS SDK for Java 2.x - AWS Lambda
概要
AWS Lambda は、サーバーを管理することなくコードを実行できるコンピューティングサービスです。このスキルを使用して、アプリケーションやサービスで AWS SDK for Java 2.x を使った AWS Lambda の操作を実装します。
使用する場面
- Java アプリケーションから Lambda 関数を呼び出す場合
- SDK を使用して Lambda 関数をデプロイ、更新する場合
- 関数の設定やレイヤーを管理する場合
- Lambda を Spring Boot アプリケーションと統合する場合
クイックリファレンス
| 操作 | SDK メソッド | ユースケース |
|---|---|---|
| 呼び出し | invoke() | 関数の同期/非同期呼び出し |
| 関数一覧の取得 | listFunctions() | すべての Lambda 関数を取得 |
| 設定の取得 | getFunction() | 関数の設定を取得 |
| 関数の作成 | createFunction() | 新しい Lambda 関数を作成 |
| コードの更新 | updateFunctionCode() | 新しい関数コードをデプロイ |
| 設定の更新 | updateFunctionConfiguration() | 設定(タイムアウト、メモリ、環境変数)を変更 |
| 関数の削除 | deleteFunction() | Lambda 関数を削除 |
手順
1. 依存関係を追加する
Lambda SDK の依存関係を pom.xml に含めます。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>lambda</artifactId>
</dependency>
完全なセットアップについては、client-setup.md を参照してください。
2. クライアントを作成する
適切な設定で LambdaClient をインスタンス化します。
LambdaClient lambdaClient = LambdaClient.builder()
.region(Region.US_EAST_1)
.build();
非同期操作には LambdaAsyncClient を使用します。
3. Lambda 関数を呼び出す
同期呼び出し:
InvokeRequest request = InvokeRequest.builder()
.functionName("my-function")
.payload(SdkBytes.fromUtf8String(payload))
.build();
InvokeResponse response = lambdaClient.invoke(request);
return response.payload().asUtf8String();
呼び出しパターンについては、invocation-patterns.md を参照してください。
4. レスポンスを処理する
レスポンスのペイロードを解析し、エラーを確認します。
if (response.functionError() != null) {
throw new LambdaInvocationException("Lambda error: " + response.functionError());
}
String result = response.payload().asUtf8String();
5. 関数を管理する
Lambda 関数を作成、更新、または削除します。
// Create
CreateFunctionRequest createRequest = CreateFunctionRequest.builder()
.functionName("my-function")
.runtime(Runtime.JAVA17)
.role(roleArn)
.code(code)
.build();
lambdaClient.createFunction(createRequest);
// Verify function is active before proceeding
GetFunctionRequest getRequest = GetFunctionRequest.builder()
.functionName("my-function")
.build();
GetFunctionResponse getResponse = lambdaClient.getFunction(getRequest);
if (!"Active".equals(getResponse.configuration().state())) {
throw new IllegalStateException("Function not active: " + getResponse.configuration().stateReason());
}
// Update code
UpdateFunctionCodeRequest updateCodeRequest = UpdateFunctionCodeRequest.builder()
.functionName("my-function")
.zipFile(SdkBytes.fromByteArray(zipBytes))
.build();
lambdaClient.updateFunctionCode(updateCodeRequest);
// Wait for deployment to complete
Waiter<GetFunctionConfigurationRequest> waiter = lambdaClient.waiter();
waiter.waitUntilFunctionUpdatedActive(GetFunctionConfigurationRequest.builder()
.functionName("my-function")
.build());
完全なパターンについては、function-management.md を参照してください。
6. 環境を設定する
環境変数と同時実行数の上限を設定します。
Environment env = Environment.builder()
.variables(Map.of(
"DB_URL", "jdbc:postgresql://db",
"LOG_LEVEL", "INFO"
))
.build();
UpdateFunctionConfigurationRequest configRequest = UpdateFunctionConfigurationRequest.builder()
.functionName("my-function")
.environment(env)
.timeout(60)
.memorySize(512)
.build();
lambdaClient.updateFunctionConfiguration(configRequest);
7. Spring Boot と統合する
Lambda の Bean とサービスを設定します。
@Configuration
public class LambdaConfiguration {
@Bean
public LambdaClient lambdaClient() {
return LambdaClient.builder()
.region(Region.US_EAST_1)
.build();
}
}
@Service
public class LambdaInvokerService {
public <T, R> R invoke(String functionName, T request, Class<R> responseType) {
// Implementation
}
}
完全な統合については、spring-boot-integration.md を参照してください。
8. ローカルでテストする
開発時のテストには、モックまたは LocalStack を使用します。
テストパターンについては、testing.md を参照してください。
例
基本的な呼び出し
public String invokeFunction(LambdaClient client, String functionName, String payload) {
InvokeRequest request = InvokeRequest.builder()
.functionName(functionName)
.payload(SdkBytes.fromUtf8String(payload))
.build();
InvokeResponse response = client.invoke(request);
if (response.functionError() != null) {
throw new RuntimeException("Lambda error: " + response.functionError());
}
return response.payload().asUtf8String();
}
非同期呼び出し
public void invokeAsync(LambdaClient client, String functionName, Map<String, Object> event) {
String jsonPayload = new ObjectMapper().writeValueAsString(event);
InvokeRequest request = InvokeRequest.builder()
.functionName(functionName)
.invocationType(InvocationType.EVENT)
.payload(SdkBytes.fromUtf8String(jsonPayload))
.build();
client.invoke(request);
}
Spring Boot サービス
@Service
public class LambdaService {
private final LambdaClient lambdaClient;
public UserResponse processUser(UserRequest request) {
String payload = objectMapper.writeValueAsString(request);
InvokeResponse response = lambdaClient.invoke(
InvokeRequest.builder()
.functionName("user-processor")
.payload(SdkBytes.fromUtf8String(payload))
.build()
);
return objectMapper.readValue(
response.payload().asUtf8String(),
UserResponse.class
);
}
}
その他の例については、examples.md を参照してください。
ベストプラクティス
- クライアントを再利用する:
LambdaClient/LambdaAsyncClientは一度だけ作成します。これらはスレッドセーフです。 - 非同期クライアントを使用する:結果を待たずに呼び出す場合は、
CompletableFutureとともにLambdaAsyncClientを使用します。 - デプロイを確認する:作成/更新操作の後は、関数の状態が
Activeになるまで必ず待ちます。 - ペイロードサイズを制限する:リクエスト/レスポンスのペイロードは、非同期呼び出しでは 256KB 未満、同期呼び出しでは 6MB 未満にします。
- タイムアウトを設定する:クライアントの読み取りタイムアウトは、Lambda 関数のタイムアウトより少し長く設定します。
- 最新のランタイムを使用する:コールドスタートのパフォーマンスを改善するため、
Runtime.JAVA17以降を指定します。
制約と警告
- ペイロードの上限:同期呼び出しでは 6MB、非同期呼び出しでは 256KB
- タイムアウト:呼び出しごとに最大 900 秒(15 分)
- コールドスタート:JVM ベースの関数はコールドスタートに時間がかかります。改善には GraalVM Native Image を使用します。
- デプロイサイズ:関数コードとレイヤーの合計は、50MB(圧縮時)または 250MB(展開時)を超えてはなりません。
- 同時実行数:リージョンごとのデフォルトは 1000 です。容量を確保するには、予約済み同時実行数を使用します。
- コスト:CloudWatch メトリクスで監視し、予期しないコストの増大を防ぐために請求アラートを設定します。
参考資料
- client-setup.md — クライアントの設定とセットアップ
- invocation-patterns.md — 同期および非同期の呼び出しパターン
- function-management.md — 関数の作成、更新、削除
- spring-boot-integration.md — Spring Boot の設定とサービス
- testing.md — 単体テストと統合テストのパターン
- examples.md — 完全なコード例と統合パターン
- official-documentation.md — AWS Lambda の概念と API リファレンス
関連スキル
aws-sdk-java-v2-core— AWS SDK のコアパターンとクライアント設定spring-boot-dependency-injection— Spring の依存性注入に関するベストプラクティスunit-test-service-layer— Mockito を使用したサービスのテストパターンspring-boot-actuator— 本番環境のモニタリングとヘルスチェック