AWS Bedrock Agent
Since Camel 4.5
Both producer and consumer are supported
The AWS Bedrock Agent component works with the ingestion jobs of the knowledge bases of the AWS Bedrock service: an ingestion job syncs a data source into a knowledge base. The producer starts, lists and gets ingestion jobs, and the consumer polls the state of one ingestion job.
Prerequisites
You must have a valid Amazon Web Services developer account, and be signed up to use Amazon Bedrock. More information is available at Amazon Bedrock.
URI Format
aws-bedrock-agent://label[?options]
You can append query options to the URI in the following format:
?options=value&option2=value&…
Configuring Options
Camel components are configured on two separate levels:
-
component level
-
endpoint level
Configuring Component Options
At the component level, you set general and shared configurations that are, then, inherited by the endpoints. It is the highest configuration level.
For example, a component may have security settings, credentials for authentication, urls for network connection and so forth.
Some components only have a few options, and others may have many. Because components typically have pre-configured defaults that are commonly used, then you may often only need to configure a few options on a component; or none at all.
You can configure components using:
-
the Component DSL.
-
in a configuration file (
application.properties,*.yamlfiles, etc). -
directly in the Java code.
Configuring Endpoint Options
You usually spend more time setting up endpoints because they have many options. These options help you customize what you want the endpoint to do. The options are also categorized into whether the endpoint is used as a consumer (from), as a producer (to), or both.
Configuring endpoints is most often done directly in the endpoint URI as path and query parameters. You can also use the Endpoint DSL and DataFormat DSL as a type safe way of configuring endpoints and data formats in Java.
A good practice when configuring options is to use Property Placeholders.
Property placeholders provide a few benefits:
-
They help prevent using hardcoded urls, port numbers, sensitive information, and other settings.
-
They allow externalizing the configuration from the code.
-
They help the code to become more flexible and reusable.
The following two sections list all the options, firstly for the component followed by the endpoint.
Component Options
The AWS Bedrock Agent component supports the following options which are listed below.
| Name | Description | Default | Type |
|---|---|---|---|
Component configuration. | BedrockAgentConfiguration | ||
Define the Data source Id we are going to use. The consumer and all the operations need it; the CamelAwsBedrockAgentDataSourceId header overrides it for the producer. | String | ||
Define the Ingestion Job Id we want to track. The consumer and the getIngestionJob operation need it; the CamelAwsBedrockAgentIngestionJobId header overrides it for the producer. | String | ||
Define the Knowledge Base Id we are going to use. The consumer and all the operations need it; the CamelAwsBedrockAgentKnowledgeBaseId header overrides it for the producer. | String | ||
Required The operation to perform. It can be startIngestionJob, listIngestionJobs or getIngestionJob. Enum values:
| BedrockAgentOperations | ||
Set the need for overriding the endpoint. This option needs to be used in combination with the uriEndpointOverride option. | false | boolean | |
If we want to use a POJO request as body or not. | false | boolean | |
If using a profile credentials provider, this parameter will set the profile name. | false | String | |
The region in which Bedrock Agent client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example, ap-east-1) You’ll need to use the name Region.EU_WEST_1.id(). Enum values:
| String | ||
Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option. | String | ||
Set whether the Bedrock Agent client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | boolean | |
Set whether the Bedrock Agent client should expect to load credentials through a profile credentials provider. | false | boolean | |
Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean | |
Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel’s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean | |
Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean | |
Autowired To use an existing configured AWS Bedrock Agent client. | BedrockAgentClient | ||
Used for enabling or disabling all consumer based health checks from this component. | true | boolean | |
Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on producer checks globally by setting camel.health.producersEnabled=true. | true | boolean | |
To define a proxy host when instantiating the Bedrock Agent client. | String | ||
To define a proxy port when instantiating the Bedrock Agent client. | Integer | ||
To define a proxy protocol when instantiating the Bedrock Agent client. Enum values:
| HTTPS | Protocol | |
Amazon AWS Access Key. | String | ||
Amazon AWS Secret Key. | String | ||
Amazon AWS Session Token used when the user needs to assume an IAM role. | String | ||
If we want to trust all certificates in case of overriding the endpoint. | false | boolean | |
Set whether the Bedrock Agent client should expect to use Session Credentials. This is useful in a situation in which the user needs to assume an IAM role for doing operations in Bedrock. | false | boolean |
Endpoint Options
The AWS Bedrock Agent endpoint is configured using URI syntax:
aws-bedrock-agent:label
With the following path and query parameters:
Query Parameters
| Name | Description | Default | Type |
|---|---|---|---|
Define the Data source Id we are going to use. The consumer and all the operations need it; the CamelAwsBedrockAgentDataSourceId header overrides it for the producer. | String | ||
Define the Ingestion Job Id we want to track. The consumer and the getIngestionJob operation need it; the CamelAwsBedrockAgentIngestionJobId header overrides it for the producer. | String | ||
Define the Knowledge Base Id we are going to use. The consumer and all the operations need it; the CamelAwsBedrockAgentKnowledgeBaseId header overrides it for the producer. | String | ||
Required The operation to perform. It can be startIngestionJob, listIngestionJobs or getIngestionJob. Enum values:
| BedrockAgentOperations | ||
Set the need for overriding the endpoint. This option needs to be used in combination with the uriEndpointOverride option. | false | boolean | |
If we want to use a POJO request as body or not. | false | boolean | |
If using a profile credentials provider, this parameter will set the profile name. | false | String | |
The region in which Bedrock Agent client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example, ap-east-1) You’ll need to use the name Region.EU_WEST_1.id(). Enum values:
| String | ||
Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option. | String | ||
Set whether the Bedrock Agent client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | boolean | |
Set whether the Bedrock Agent client should expect to load credentials through a profile credentials provider. | false | boolean | |
If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean | |
Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean | |
To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. | ExceptionHandler | ||
Sets the exchange pattern when the consumer creates an exchange. Enum values:
| ExchangePattern | ||
A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. | PollingConsumerPollStrategy | ||
Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel’s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean | |
Autowired To use an existing configured AWS Bedrock Agent client. | BedrockAgentClient | ||
To define a proxy host when instantiating the Bedrock Agent client. | String | ||
To define a proxy port when instantiating the Bedrock Agent client. | Integer | ||
To define a proxy protocol when instantiating the Bedrock Agent client. Enum values:
| HTTPS | Protocol | |
The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. | int | ||
The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. | int | ||
To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. | int | ||
Milliseconds before the next poll. | 500 | long | |
If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean | |
Milliseconds before the first poll starts. | 1000 | long | |
Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long | |
The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. Enum values:
| TRACE | LoggingLevel | |
Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. | ScheduledExecutorService | ||
To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler. | none | Object | |
To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. This is a multi-value option with prefix: scheduler. | Map | ||
Whether the scheduler should be auto started. | true | boolean | |
Time unit for initialDelay and delay options. Enum values:
| MILLISECONDS | TimeUnit | |
Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean | |
Amazon AWS Access Key. | String | ||
Amazon AWS Secret Key. | String | ||
Amazon AWS Session Token used when the user needs to assume an IAM role. | String | ||
If we want to trust all certificates in case of overriding the endpoint. | false | boolean | |
Set whether the Bedrock Agent client should expect to use Session Credentials. This is useful in a situation in which the user needs to assume an IAM role for doing operations in Bedrock. | false | boolean |
Message Headers
The AWS Bedrock Agent component supports the following message header(s), which is/are listed below:
| Name | Description | Default | Type |
|---|---|---|---|
CamelAwsBedrockAgentOperation (producer) Constant: | The operation we want to perform. | String | |
CamelAwsBedrockAgentDataSourceId (producer) Constant: | The data source Id of the operation; it overrides the dataSourceId option. | String | |
CamelAwsBedrockAgentKnowledgeBaseId (producer) Constant: | The knowledge base Id of the operation; it overrides the knowledgeBaseId option. | String | |
CamelAwsBedrockAgentIngestionJobId (producer) Constant: | The id of the ingestion job of the getIngestionJob operation; it overrides the ingestionJobId option. | String | |
CamelAwsBedrockAgentIngestionJobStatus (common) Constant: | The status of the ingestion job, set by the consumer and by the getIngestionJob operation. Enum values:
| IngestionJobStatus | |
CamelAwsBedrockAgentIngestionJobFailureReasons (common) Constant: | The failure reasons of the ingestion job, set by the consumer and by the getIngestionJob operation when the job has failure reasons. | List |
Message Body
The message body at each side of the AWS Bedrock Agent component: Consumer is the body of the messages the consumer creates, Consumer reply the bodies a consumer that answers its caller can reply with, Producer input the bodies the producer can send or write, and Producer output the body after the producer.
| Side | Body | Description |
|---|---|---|
Consumer |
| The ingestion job of the knowledgeBaseId, dataSourceId and ingestionJobId options, one message per poll, also when the job did not change, with its status in the CamelAwsBedrockAgentIngestionJobStatus header. |
Producer input |
| Not used: the knowledge base, the data source and the ingestion job come from the options, or from headers such as CamelAwsBedrockAgentKnowledgeBaseId, which override the options. With pojoRequest=true the request of the AWS SDK for the operation, such as a StartIngestionJobRequest: another body fails.
|
Producer output |
| The id of the ingestion job as text for startIngestionJob, a List of IngestionJobSummary for listIngestionJobs, and the IngestionJob for getIngestionJob, with its status in the CamelAwsBedrockAgentIngestionJobStatus header.
|
The bodies are the ones with the default options. A side that is not listed is not known, and tooling does not guess it. The carriers are described in the Camel Catalog.
Required Bedrock Agent component options
You have to provide the bedrockAgentClient in the Registry or your accessKey and secretKey to access the Amazon Bedrock service.
Usage
Static credentials, Default Credential Provider and Profile Credentials Provider
You have the possibility of avoiding the usage of explicit static credentials by specifying the useDefaultCredentialsProvider option and set it to true.
The order of evaluation for Default Credentials Provider is the following:
-
Java system properties -
aws.accessKeyIdandaws.secretKey. -
Environment variables -
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEY. -
Web Identity Token from AWS STS.
-
The shared credentials and config files.
-
Amazon ECS container credentials - loaded from the Amazon ECS if the environment variable
AWS_CONTAINER_CREDENTIALS_RELATIVE_URIis set. -
Amazon EC2 Instance profile credentials.
You have also the possibility of using Profile Credentials Provider, by specifying the useProfileCredentialsProvider option to true and profileCredentialsName to the profile name.
Only one of static, default and profile credentials could be used at the same time.
For more information about this you can look at AWS credentials documentation
Bedrock Agent Producer operations
The producer supports the following operations, set with the operation option or the CamelAwsBedrockAgentOperation header:
-
startIngestionJob: starts an ingestion job of the data source
dataSourceIdinto the knowledge baseknowledgeBaseId. The body is set to the id of the new ingestion job. -
listIngestionJobs: lists the ingestion jobs of the data source
dataSourceIdof the knowledge baseknowledgeBaseId. The body is set to the list ofIngestionJobSummaryof the AWS SDK. -
getIngestionJob: gets the ingestion job
ingestionJobIdof the data sourcedataSourceIdof the knowledge baseknowledgeBaseId. The body is set to theIngestionJobof the AWS SDK, theCamelAwsBedrockAgentIngestionJobStatusheader to its status, and theCamelAwsBedrockAgentIngestionJobFailureReasonsheader to its failure reasons, if it has any.
The knowledge base, data source and ingestion job ids are taken from the CamelAwsBedrockAgentKnowledgeBaseId, CamelAwsBedrockAgentDataSourceId and CamelAwsBedrockAgentIngestionJobId headers, and else from the knowledgeBaseId, dataSourceId and ingestionJobId options. So the options are the defaults of the endpoint, and a header overrides them for one message, for example to get the ingestion job that startIngestionJob returned in the body.
With pojoRequest=true, the body is the request of the AWS SDK instead (StartIngestionJobRequest, ListIngestionJobsRequest or GetIngestionJobRequest), and the ids are taken from it.
Bedrock Agent Consumer
The consumer polls the ingestion job ingestionJobId of the data source dataSourceId of the knowledge base knowledgeBaseId; the three options must be set. On every poll it sends an exchange with the IngestionJob of the AWS SDK as the body and the CamelAwsBedrockAgentIngestionJobStatus and CamelAwsBedrockAgentIngestionJobFailureReasons headers, as the getIngestionJob operation does. It does so on every poll, also when the job did not change since the previous poll, so filter on the status to act once the job is done, and set the poll delay to how often the job should be checked.
Example
The following route starts an ingestion job, which syncs a data source into a knowledge base:
- route:
from:
uri: direct:ingest
steps:
- to:
uri: aws-bedrock-agent:agent
parameters:
operation: startIngestionJob
knowledgeBaseId: KB12345678
dataSourceId: DS12345678
region: us-east-1
accessKey: "{{aws.access-key}}"
secretKey: "{{aws.secret-key}}"
- log:
message: "${body}" Dependencies
Maven users will need to add the following dependency to their pom.xml.
pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-aws-bedrock</artifactId>
<version>${camel-version}</version>
</dependency> where ${camel-version} must be replaced by the actual version of Camel.