mcpField
A
aws-sdk-java-v2-lambda

aws-sdk-java-v2-lambda

github.com/giuseppe-trisciuoglio云与 DevOps3653.7k 次安装7 周前更新
代码仓库

关于 aws-sdk-java-v2-lambda

面向使用 AWS SDK for Java 2.x 的 Java 开发者,提供通过 SDK 调用和管理 AWS Lambda 函数的模式,并包含 Spring Boot 集成与测试方法。

主要功能

  1. 01同步与异步调用函数
  2. 02创建、更新和删除函数
  3. 03管理函数配置与层
  4. 04Spring Boot 集成模式
  5. 05使用 mock 或 LocalStack 测试

适用场景

  1. 01从 Java 应用调用 Lambda
  2. 02部署或更新函数代码
  3. 03调整函数超时、内存和环境变量
  4. 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.md
examples.md
function-management.md
invocation-patterns.md
official-documentation.md
spring-boot-integration.md
testing.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 指标进行监控;设置账单提醒,避免成本失控

参考资料

相关技能

  • aws-sdk-java-v2-core — AWS SDK 核心模式和客户端配置
  • spring-boot-dependency-injection — Spring 依赖注入最佳实践
  • unit-test-service-layer — 使用 Mockito 的服务测试模式
  • spring-boot-actuator — 生产环境监控和运行状况检查

外部资源

评论

支持 Markdown