// spring-boot-auto-configure options: START
:page-partial:
:doctitle: Camel Spring Boot Starter for aws-iam

== Spring Boot Auto-Configuration

When using aws-iam with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws-iam-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 13 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.aws-iam.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-iam.auto-discover-client* | Setting the autoDiscoverClient mechanism, if true, the component will look for a client instance in the registry automatically otherwise it will skip that checking. | true | Boolean
| *camel.component.aws-iam.autowired-enabled* | 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
| *camel.component.aws-iam.configuration* | The component configuration. The option is a org.apache.camel.component.aws.iam.IAMConfiguration type. |  | IAMConfiguration
| *camel.component.aws-iam.enabled* | Whether to enable auto configuration of the aws-iam component. This is enabled by default. |  | Boolean
| *camel.component.aws-iam.iam-client* | To use a existing configured AWS IAM as client. The option is a com.amazonaws.services.identitymanagement.AmazonIdentityManagement type. |  | AmazonIdentityManagement
| *camel.component.aws-iam.lazy-start-producer* | 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
| *camel.component.aws-iam.operation* | The operation to perform |  | IAMOperations
| *camel.component.aws-iam.proxy-host* | To define a proxy host when instantiating the IAM client |  | String
| *camel.component.aws-iam.proxy-port* | To define a proxy port when instantiating the IAM client |  | Integer
| *camel.component.aws-iam.proxy-protocol* | To define a proxy protocol when instantiating the IAM client |  | Protocol
| *camel.component.aws-iam.region* | The region in which IAM client needs to work. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | String
| *camel.component.aws-iam.secret-key* | Amazon AWS Secret Key |  | String
|===
// spring-boot-auto-configure options: END
