Java 开发AWS Lambda 实战指南(SAM CLI + IntelliJ)

Java 开发 AWS Lambda 实战指南(使用 SAM CLI 与 IntelliJ)

目录

  1. 环境准备

  2. 创建 Java Lambda 项目

  3. 本地构建与运行

  4. 在 IntelliJ 中调试 Lambda

  5. 使用 SAM CLI 部署 Lambda

  6. 自动化部署脚本(可选)


1️⃣ 环境准备

1.1 软件环境: 在开始之前,需要确保以下工具已经安装并配置好:

工具 说明
Java JDK 建议使用 LTS 版本,例如 Java 17。安装后需配置 JAVA_HOMEPATH
Maven 用于管理依赖和构建项目。
AWS CLI 配置 AWS 账户和默认区域。
SAM CLI AWS Serverless Application Model CLI,用于构建、运行和部署 Lambda。
IntelliJ IDEA Java 开发 IDE,建议安装 AWS Toolkit 插件以便调试 Lambda。

示例验证命令:

复制代码
java -version
mvn -v
aws --version
sam --version
bash 复制代码
java -version
java version "21.0.10" 2026-01-20 LTS
Java(TM) SE Runtime Environment (build 21.0.10+8-LTS-217)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.10+8-LTS-217, mixed mode, sharing)

mvn -v
Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1)
Maven home: D:\apache-maven-3.9.12
Java version: 21.0.10, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-21.0.10
Default locale: zh_CN, platform encoding: UTF-8
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"

aws --version
aws-cli/2.33.16 Python/3.13.11 Windows/11 exe/AMD64

sam --version
SAM CLI, version 1.153.1

1.2 IDEA SAM配置

2️⃣ 创建 Java Lambda 项目

2.1 使用 Maven 创建项目:推荐使用IDEA创建

复制代码
mvn archetype:generate ^
 -DgroupId=com.example.lambda ^
 -DartifactId=my-lambda-project ^
 -DarchetypeArtifactId=maven-archetype-quickstart ^
 -DinteractiveMode=false

使用IDEA创建(确保安装插件AWS Toolkit)

设置JDK版本,SAM模板

2.2 目录结构示例:

复制代码
my-lambda-project/
├─ src/main/java/com/example/lambda/App.java
├─ pom.xml
├─ template.yaml        # SAM 模板

2.3 函数请求处理器 App.java(Lambda Handler):相当于SpringBoot的接口

java 复制代码
package com.example.lambda;

import java.util.HashMap;
import java.util.Map;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;

/**
 * AWS Lambda handler for API Gateway.
 * Receives HTTP request and returns JSON response.
 */
public class App implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {

    /**
     * Lambda handler method.
     *
     * @param request  The API Gateway HTTP request
     * @param context  Lambda execution context
     * @return API Gateway HTTP response
     */
    @Override
    public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent request, Context context) {
        // Create response object
        APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent();

        // Log the request body
        context.getLogger().log("Received request: " + request.getBody());

        // Prepare JSON response
        Map<String, String> responseBody = new HashMap<>();
        responseBody.put("message", "Hello from Lambda!");
        responseBody.put("input", request.getBody() != null ? request.getBody() : "no input");

        // Set HTTP headers
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/json");

        // Configure response
        response.setStatusCode(200);                  // HTTP 200 OK
        response.setHeaders(headers);                 // Set headers
        response.setBody(responseBody.toString());    // Convert Map to string (for demo)

        // Log response
        context.getLogger().log("Response: " + response.getBody());

        return response;
    }
}

2.4 pom.xml(Maven 项目依赖)

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example.lambda</groupId>
  <artifactId>my-lambda-project</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>my-lambda-project</name>

  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- AWS Lambda Java Core -->
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.2.3</version>
    </dependency>

    <!-- AWS Lambda Java Events (for API Gateway event classes) -->
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-events</artifactId>
      <version>3.11.0</version>
    </dependency>

    <!-- Optional: Jackson for JSON handling -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.15.2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <!-- Maven Compiler Plugin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>17</source>
          <target>17</target>
        </configuration>
      </plugin>

      <!-- Maven Shade Plugin: package all dependencies into one jar -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.5.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <createDependencyReducedPom>false</createDependencyReducedPom>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.example.lambda.App</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

2.5 SAM 模板示例 (template.yaml)

复制代码
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS Lambda Java example

Resources:
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: com.example.lambda.App::handleRequest
      Runtime: java17
      CodeUri: target/my-lambda-project-1.0-SNAPSHOT.jar
      MemorySize: 512
      Timeout: 30
      Policies:
        - AWSLambdaBasicExecutionRole

Outputs:
  LambdaFunctionName:
    Description: Name of the Lambda function
    Value: !Ref MyLambdaFunction
  LambdaFunctionArn:
    Description: ARN of the Lambda function
    Value: !GetAtt MyLambdaFunction.Arn

3️⃣ 本地构建与运行

Maven 构建项目

复制代码
mvn clean package

SAM 本地构建

复制代码
sam build

SAM 本地测试 Lambda

复制代码
sam local invoke MyLambdaFunction -e event.json
  • event.json 为测试事件,例如:

    {
    "message": "Hello, SAM Lambda!"
    }


4️⃣ 在 IntelliJ 中调试 Lambda

  1. 安装 AWS Toolkit 插件。

  2. 打开项目后,配置 Run/Debug Configurations

    • 类型选择 AWS SAM Local

    • 指定 Handler 类(例如:com.example.lambda.App::handleRequest)。

    • 配置测试事件 JSON。

  3. 点击 Debug 按钮,即可在本地调试 Lambda 函数。


5️⃣ 使用 SAM CLI 部署 Lambda

交互式部署(第一次运行)

复制代码
sam deploy --guided

会提示输入:

  • Stack Name

  • AWS Region

  • 确认变更集(Confirm changeset)

  • IAM 权限创建

  • 是否禁用回滚

  • S3 Bucket(上传 Lambda 代码)

  • 保存参数到 samconfig.toml

非交互式自动部署(后续部署)

复制代码
sam deploy ^
    --no-confirm-changeset ^
    --disable-rollback ^
    --capabilities CAPABILITY_IAM

SAM 会自动读取 samconfig.toml 中保存的配置。


6️⃣ 自动化部署脚本(Windows .bat 示例)

将本地构建、SAM 构建和部署整合到一个脚本:

复制代码
@echo off
REM ===================================================
REM Build and deploy AWS SAM Lambda (IoT Lambda)
REM ===================================================

cd /d D:\project\java\aws-lambda-iot-core

echo.
echo [1/3] Maven clean package...
call mvn clean package
if errorlevel 1 (
    echo Maven build failed.
    exit /b 1
)

echo.
echo [2/3] SAM build...
call sam build
if errorlevel 1 (
    echo SAM build failed.
    exit /b 1
)

echo.
echo [3/3] Deploying AWS Lambda using SAM...
sam deploy ^
    --no-confirm-changeset ^
    --disable-rollback ^
    --capabilities CAPABILITY_IAM ^
    --region ap-northeast-1
if errorlevel 1 (
    echo SAM deployment failed.
    exit /b 1
)

echo.
echo Deployment finished successfully!
pause

使用方法:

  • 保存为 deploy.bat

  • 双击运行即可完成构建 + 部署全过程。


🔹 总结

  • 使用 Maven 管理 Java 项目,使用 SAM CLI 构建和部署 Lambda。

  • 第一次部署可用 --guided,后续可通过 samconfig.toml 实现自动化。

  • 可以在 IntelliJ 本地调试 Lambda,提升开发效率。

  • 使用 .bat 脚本可一键完成构建、打包和部署,适合 Windows 11 自动化操作。


相关推荐
卷Java11 分钟前
Python字典:键值对、get()方法、defaultdict,附通讯录实战
开发语言·数据库·python
liuyao_xianhui11 分钟前
优选算法_翻转链表_头插法_C++
开发语言·数据结构·c++·算法·leetcode·链表·动态规划
happy_baymax14 分钟前
三电平矢量表达式MATLAB实现
开发语言·matlab
xyq202415 分钟前
jEasyUI 创建 XP 风格左侧面板
开发语言
赫瑞16 分钟前
Java中的最长公共子序列——LCS
java·开发语言
于先生吖19 分钟前
零基础开发国际版同城出行平台 JAVA 顺风车预约系统实战教学
java·开发语言
代码雕刻家20 分钟前
2.22.StringBuffer类的常见用法、
java·开发语言
yhole21 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
明月(Alioo)36 分钟前
Python 并发编程详解 - Java 开发者视角
java·开发语言·python
JAVA+C语言1 小时前
C++ STL map 系列全方位解析
开发语言·c++