关于 aws-sdk-java-v2-lambda
面向使用 AWS SDK for Java 2.x 的 Java 开发者,提供通过 SDK 调用和管理 AWS Lambda 函数的模式,并包含 Spring Boot 集成与测试方法。
主要功能
- 01同步与异步调用函数
- 02创建、更新和删除函数
- 03管理函数配置与层
- 04Spring Boot 集成模式
- 05使用 mock 或 LocalStack 测试
适用场景
- 01从 Java 应用调用 Lambda
- 02部署或更新函数代码
- 03调整函数超时、内存和环境变量
- 04在 Spring 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. 添加依赖项
在 pom.xml 中添加 Lambda SDK 依赖项:
<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;它们是线程安全的 - 使用异步客户端:对于即发即弃的调用,请将
LambdaAsyncClient与CompletableFuture配合使用 - 验证部署:创建/更新操作后,务必等待函数状态变为
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— 生产环境监控和运行状况检查
外部资源
评论
支持 Markdown