Amazon Bedrock

Amazon Bedrock is a managed service that provides foundation models from various AI providers, available through a unified API.

Spring AI supports all the Chat and Embedding AI models available through Amazon Bedrock by implementing the Spring interfaces ChatModel, StreamingChatModel, and EmbeddingModel.

Additionally, Spring AI provides Spring Auto-Configurations and Boot Starters for all clients, making it easy to bootstrap and configure for the Bedrock models.

Getting Started

There are a few steps to get started

  • Add the Spring Boot starter for Bedrock to your project.

  • Obtain AWS credentials: If you don’t have an AWS account and AWS CLI configured yet, this video guide can help you configure it: AWS CLI & SDK Setup in Less Than 4 Minutes!. You should be able to obtain your access and security keys.

  • Enable the Models to use: Go to Amazon Bedrock and from the Model Access menu on the left, configure access to the models you are going to use.

Project Dependencies

Then add the Spring Boot Starter dependency to your project’s Maven pom.xml build file:

<dependency>
 <artifactId>spring-ai-bedrock-ai-spring-boot-starter</artifactId>
 <groupId>org.springframework.ai</groupId>
</dependency>

or to your Gradle build.gradle build file.

dependencies {
    implementation 'org.springframework.ai:spring-ai-bedrock-ai-spring-boot-starter'
}
Refer to the Dependency Management section to add the Spring AI BOM to your build file.

Connect to AWS Bedrock

Use the BedrockAwsConnectionProperties to configure AWS credentials and region:

spring.ai.bedrock.aws.region=us-east-1

spring.ai.bedrock.aws.access-key=YOUR_ACCESS_KEY
spring.ai.bedrock.aws.secret-key=YOUR_SECRET_KEY

spring.ai.bedrock.aws.timeout=10m

The region property is compulsory.

AWS credentials are resolved in the following order:

  1. Spring-AI Bedrock spring.ai.bedrock.aws.access-key and spring.ai.bedrock.aws.secret-key properties.

  2. Java System Properties - aws.accessKeyId and aws.secretAccessKey.

  3. Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.

  4. Web Identity Token credentials from system properties or environment variables.

  5. Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI.

  6. Credentials delivered through the Amazon EC2 container service if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable.

  7. Instance profile credentials delivered through the Amazon EC2 metadata service or set the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.

AWS region is resolved in the following order:

  1. Spring-AI Bedrock spring.ai.bedrock.aws.region property.

  2. Java System Properties - aws.region.

  3. Environment Variables - AWS_REGION.

  4. Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI.

  5. Instance profile region delivered through the Amazon EC2 metadata service.

In addition to the standard Spring-AI Bedrock credentials and region properties configuration, Spring-AI provides support for custom AwsCredentialsProvider and AwsRegionProvider beans.

For example, using Spring-AI and Spring Cloud for Amazon Web Services at the same time. Spring-AI is compatible with Spring Cloud for Amazon Web Services credential configuration.

Enable selected Bedrock model

By default, all models are disabled. You have to enable the chosen Bedrock models explicitly using the spring.ai.bedrock.<model>.<chat|embedding>.enabled=true property.

Here are the supported <model> and <chat|embedding> combinations:

Model Chat Chat Streaming Embedding

llama

Yes

Yes

No

jurassic2

Yes

No

No

cohere

Yes

Yes

Yes

anthropic 2

Yes

Yes

No

anthropic 3

Yes

Yes

No

jurassic2 (WIP)

Yes

No

No

titan

Yes

Yes

Yes (however, no batch support)

For example, to enable the Bedrock Llama chat model, you need to set spring.ai.bedrock.llama.chat.enabled=true.

Next, you can use the spring.ai.bedrock.<model>.<chat|embedding>.* properties to configure each model as provided.

For more information, refer to the documentation below for each supported model.