This guide covers integrating Spring Boot with Amazon Bedrock Converse AI using Spring AI.
We will configure AWS credentials, set up application.yml, and implement a service layer & REST API to interact with Bedrock AI models.
π Features Covered
β
BedrockConverseClient (Text Generation)
β
BedrockConverseChatClient (Conversational AI)
β
BedrockEmbeddingClient (Vector Embeddings)
β
BedrockImageClient (Image Generation)
β
BedrockModerationClient (Content Moderation)
1οΈβ£ Project Setup
1.1 Create a Spring Boot Project
Generate a new Spring Boot project via Spring Initializr or manually create a Maven project.
1.2 Add Dependencies (pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>spring-boot-bedrock</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-bedrock</name>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M6</spring-ai.version>
</properties>
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring AI Amazon Bedrock Starter -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bedrock-converse-spring-boot-starter</artifactId>
</dependency>
<!-- Spring Boot Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
π 2. Project Directory Structure

π 3. AWS Configuration
3.1 Get AWS Access Key & Secret Key
Step 1: Sign in to AWS Console
- Go to AWS Management Console.
- Search for IAM β Open Identity & Access Management (IAM).
- Click Users β Add user.
- Enable Programmatic access.
- Attach AmazonBedrockFullAccess policy.
- Download your Access Key ID and Secret Access Key.
3.2 Get AWS Region & Bedrock Model ID
Find AWS Region
- Go to AWS Console β Search for Amazon Bedrock.
- Open Amazon Bedrock β Check the Region in the top-right.
β Supported Regions:
us-east-1
(N. Virginia)us-west-2
(Oregon)eu-west-1
(Ireland)
Find Bedrock Model ID
- Go to Amazon Bedrock Console β Click Models.
- Supported models:
- Amazon Titan Text β
amazon.titan-text-express-v1
- Claude AI (Anthropic) β
anthropic.claude-v2
- Mistral AI β
mistral.mistral-7b
- Amazon Titan Text β
3.3 Configure AWS Credentials in application.yml
spring:
ai:
bedrock:
converse:
enabled: true
model-id: "amazon.titan-text-express-v1"
aws-region: "us-east-1"
cloud:
aws:
credentials:
access-key: "YOUR_ACCESS_KEY"
secret-key: "YOUR_SECRET_KEY"
region:
static: us-east-1
server:
port: 8080
π 4. Service Layer
4.1 BedrockService.java
package com.example.demo.service;
import org.springframework.ai.bedrock.converse.BedrockConverseClient;
import org.springframework.ai.bedrock.converse.BedrockConverseChatClient;
import org.springframework.ai.bedrock.embedding.BedrockEmbeddingClient;
import org.springframework.ai.bedrock.image.BedrockImageClient;
import org.springframework.ai.bedrock.moderation.BedrockModerationClient;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BedrockService {
private final BedrockConverseClient converseClient;
private final BedrockConverseChatClient chatClient;
private final BedrockEmbeddingClient embeddingClient;
private final BedrockImageClient imageClient;
private final BedrockModerationClient moderationClient;
public BedrockService(
BedrockConverseClient converseClient,
BedrockConverseChatClient chatClient,
BedrockEmbeddingClient embeddingClient,
BedrockImageClient imageClient,
BedrockModerationClient moderationClient) {
this.converseClient = converseClient;
this.chatClient = chatClient;
this.embeddingClient = embeddingClient;
this.imageClient = imageClient;
this.moderationClient = moderationClient;
}
public String generateText(String prompt) {
return converseClient.generate(prompt).getContent();
}
public String chat(String message) {
return chatClient.generate(message).getContent();
}
public List<Double> getEmbedding(String text) {
return embeddingClient.embed(text).getData();
}
public String generateImage(String prompt) {
return imageClient.generate(prompt).getContent();
}
public boolean moderateContent(String text) {
return moderationClient.moderate(text).isFlagged();
}
}
π 5. REST Controller
π 5.1 BedrockController.java
package com.example.demo.controller;
import com.example.demo.service.BedrockService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/bedrock")
public class BedrockController {
private final BedrockService bedrockService;
public BedrockController(BedrockService bedrockService) {
this.bedrockService = bedrockService;
}
/**
* Generate text using BedrockConverseClient
*/
@GetMapping("/generate")
public String generateText(@RequestParam String prompt) {
return bedrockService.generateText(prompt);
}
/**
* Chat with BedrockConverseChatClient
*/
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return bedrockService.chat(message);
}
/**
* Get text embeddings using BedrockEmbeddingClient
*/
@GetMapping("/embedding")
public List<Double> getEmbedding(@RequestParam String text) {
return bedrockService.getEmbedding(text);
}
/**
* Generate an image using BedrockImageClient
*/
@GetMapping("/image")
public String generateImage(@RequestParam String prompt) {
return bedrockService.generateImage(prompt);
}
/**
* Moderate content using BedrockModerationClient
*/
@GetMapping("/moderate")
public boolean moderateContent(@RequestParam String text) {
return bedrockService.moderateContent(text);
}
}
6. π οΈ Testing APIs with curl
# Generate text
curl "http://localhost:8080/bedrock/generate?prompt=Hello AI!"
# Chat with Bedrock AI
curl "http://localhost:8080/bedrock/chat?message=Tell me a joke"
# Get text embedding
curl "http://localhost:8080/bedrock/embedding?text=Artificial Intelligence"
# Generate an image
curl "http://localhost:8080/bedrock/image?prompt=A futuristic city skyline"
# Moderate text content
curl "http://localhost:8080/bedrock/moderate?text=Some explicit content"
π€ Spring Boot + Amazon Bedrock Converse AI Integration
Integrate Amazon Bedrock AI with Spring Boot for text generation, embeddings, image generation, and moderation.
π Clone on GitHub