mcpField
A
aws-lambda-java-integration

aws-lambda-java-integration

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

关于 aws-lambda-java-integration

面向 Java AWS Lambda 开发的技能,提供 Micronaut 和原生 Java 实现模式。内容涵盖冷启动优化、API Gateway 或 ALB 集成、测试及部署配置。

主要功能

  1. 01Micronaut 与原生 Java 模式
  2. 02冷启动优化指导
  3. 03API Gateway 和 ALB 集成
  4. 04Serverless Framework 与 AWS SAM 配置
  5. 05测试和 CI/CD 示例

适用场景

  1. 01构建 Java AWS Lambda 函数
  2. 02选择函数实现方案
  3. 03降低 Lambda 冷启动时间
  4. 04准备 Lambda 部署流水线

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/aws-lambda-java-integration确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
micronaut-lambda.md
raw-java-lambda.md
serverless-deployment.md
testing-lambda.md

详细介绍

AWS Lambda Java 集成

使用优化的冷启动,在 Java 中创建高性能 AWS Lambda 函数的模式。

概述

此技能提供了 AWS Lambda Java 开发的完整模式,涵盖两种主要方式:

  1. Micronaut Framework - 功能齐全的框架,支持 AOT 编译、依赖注入,冷启动时间 < 1s
  2. Raw Java - 开销极低的方式,冷启动时间 < 500ms

两种方式都支持 API Gateway 和 ALB 集成,并提供可用于生产环境的配置。

适用场景

  • 将 Java 函数部署到 AWS Lambda
  • 将冷启动时间优化至 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,确认处理程序正常工作。

核心模式

连接管理
// Initialize once, reuse across invocations
private static final DynamoDbClient dynamoDb = DynamoDbClient.builder()
    .region(Region.US_EAST_1)
    .build();

// Avoid: Creating clients in handler (slow on every invocation)
错误处理
@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-30s,Raw Java 设置为 5-10s
  • 运行时:使用 Java 17 或 21 以获得最佳性能
打包
  • 使用 Gradle Shadow Plugin 或 Maven Shade Plugin
  • 排除不必要的依赖项
监控
  • 启用 X-Ray 跟踪以进行性能分析
  • 使用 CloudWatch Insights 跟踪冷启动和热启动

部署选项

Serverless Framework
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 会显著增加冷启动开销
常见问题
  1. 在处理程序中初始化 - 会导致热启动时重复执行操作
  2. JAR 文件过大 - 仅包含必需的依赖项
  3. 内存不足 - Java 比 Node.js/Python 需要更多内存
  4. 未处理超时 - 始终设置适当的超时时间

参考资料

有关特定主题的详细指导:

示例

示例 1:创建 Micronaut Lambda 函数

输入:

Create a Java Lambda function using Micronaut to handle user REST API

过程:

  1. 使用 Micronaut 插件配置 Gradle 项目
  2. 创建一个继承自 MicronautRequestHandler 的 Handler 类
  3. 实现 GET/POST/PUT/DELETE 方法
  4. 使用 AOT 优化配置 application.yml
  5. 使用 Shadow 插件设置打包
  6. 验证:部署前使用 SAM CLI 进行本地测试

输出:

  • 完整的项目结构
  • 使用依赖注入的处理程序
  • serverless.yml 部署配置
示例 2:优化原始 Java 的冷启动

输入:

My Java Lambda has 3 second cold start, how do I optimize it?

过程:

  1. 分析初始化代码
  2. 将 AWS 客户端创建移至静态字段
  3. 减少 build.gradle 中的依赖项
  4. 配置优化后的 JVM 选项
  5. 考虑预置并发
  6. 验证:更改后使用 CloudWatch 指标测量冷启动时间

输出:

  • 使用单例模式重构的代码
  • 精简后的 JAR
  • 冷启动时间 < 500ms
示例 3:使用 GitHub Actions 部署

输入:

Configure CI/CD for Java Lambda with SAM

过程:

  1. 创建 GitHub Actions 工作流
  2. 配置使用 Shadow 的 Gradle 构建
  3. 设置 SAM 构建和部署
  4. 在部署前添加测试阶段
  5. 为 prod 配置环境保护

输出:

  • 完整的 .github/workflows/deploy.yml
  • 多阶段流水线(dev/staging/prod)
  • 集成的自动化测试

版本

版本:1.0.0

评论

支持 Markdown