[[aws-kinesis-firehose-component]]
== AWS Kinesis Firehose Component

*Available as of Camel version 2.19*

The Kinesis Firehose component supports sending messages to Amazon Kinesis Firehose service.

Prerequisites

You must have a valid Amazon Web Services developer account, and be
signed up to use Amazon Kinesis Firehose. More information are available
at https://aws.amazon.com/kinesis/firehose/[AWS Kinesis Firehose]

### URI Format

[source,java]
-----------------------------------
aws-kinesis-firehose://delivery-stream-name[?options]
-----------------------------------

The stream needs to be created prior to it being used. +
 You can append query options to the URI in the following format,
?options=value&option2=value&...

### URI Options


// component options: START
The AWS Kinesis Firehose component supports 5 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *configuration* (advanced) | The AWS Kinesis Firehose default configuration |  | KinesisFirehose Configuration
| *accessKey* (producer) | Amazon AWS Access Key |  | String
| *secretKey* (producer) | Amazon AWS Secret Key |  | String
| *region* (producer) | Amazon AWS Region |  | String
| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
|===
// component options: END







// endpoint options: START
The AWS Kinesis Firehose endpoint is configured using URI syntax:

----
aws-kinesis-firehose:streamName
----

with the following path and query parameters:

==== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *streamName* | *Required* Name of the stream |  | String
|===


==== Query Parameters (7 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *amazonKinesisFirehoseClient* (producer) | Amazon Kinesis Firehose client to use for all requests for this endpoint |  | AmazonKinesisFirehose
| *proxyHost* (producer) | To define a proxy host when instantiating the DDBStreams client |  | String
| *proxyPort* (producer) | To define a proxy port when instantiating the DDBStreams client |  | Integer
| *region* (producer) | The region in which Kinesis client needs to work |  | String
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *accessKey* (security) | Amazon AWS Access Key |  | String
| *secretKey* (security) | Amazon AWS Secret Key |  | String
|===
// endpoint options: END
// spring-boot-auto-configure options: START
=== Spring Boot Auto-Configuration

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

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


The component supports 12 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.aws-kinesis-firehose.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-kinesis-firehose.configuration.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-kinesis-firehose.configuration.amazon-kinesis-firehose-client* | Amazon Kinesis Firehose client to use for all requests for this endpoint |  | AmazonKinesisFirehose
| *camel.component.aws-kinesis-firehose.configuration.proxy-host* | To define a proxy host when instantiating the DDBStreams client |  | String
| *camel.component.aws-kinesis-firehose.configuration.proxy-port* | To define a proxy port when instantiating the DDBStreams client |  | Integer
| *camel.component.aws-kinesis-firehose.configuration.region* | The region in which Kinesis client needs to work |  | String
| *camel.component.aws-kinesis-firehose.configuration.secret-key* | Amazon AWS Secret Key |  | String
| *camel.component.aws-kinesis-firehose.configuration.stream-name* | Name of the stream |  | String
| *camel.component.aws-kinesis-firehose.enabled* | Whether to enable auto configuration of the aws-kinesis-firehose component. This is enabled by default. |  | Boolean
| *camel.component.aws-kinesis-firehose.region* | Amazon AWS Region |  | String
| *camel.component.aws-kinesis-firehose.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
| *camel.component.aws-kinesis-firehose.secret-key* | Amazon AWS Secret Key |  | String
|===
// spring-boot-auto-configure options: END







Required Kinesis Firehose component options

You have to provide the amazonKinesisClient in the
Registry with proxies and relevant credentials
configured.


### Usage

#### Amazon Kinesis Firehose configuration

You will need to create an instance of AmazonKinesisClient and
bind it to the registry

[source,java]
--------------------------------------------------------------------------------------------------------------------
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

Region region = Region.getRegion(Regions.fromName(region));
region.createClient(AmazonKinesisClient.class, null, clientConfiguration);
// the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain

registry.bind("kinesisFirehoseClient", client);
--------------------------------------------------------------------------------------------------------------------

You then have to reference the AmazonKinesisFirehoseClient in the `amazonKinesisFirehoseClient` URI option.

[source,java]
--------------------------------------------------------------------------------------------------------------------
from("aws-kinesis-firehose://mykinesisdeliverystream?amazonKinesisFirehoseClient=#kinesisClient")
  .to("log:out?showAll=true");
--------------------------------------------------------------------------------------------------------------------

#### Providing AWS Credentials

It is recommended that the credentials are obtained by using the
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html[DefaultAWSCredentialsProviderChain]
that is the default when creating a new ClientConfiguration instance,
however, a
different http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html[AWSCredentialsProvider]
can be specified when calling createClient(...).

#### Message headers set by the Kinesis producer on successful storage of a Record

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelAwsKinesisFirehoseRecordId` |`String` |The record ID, as defined in
http://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]


|=======================================================================

### Dependencies

Maven users will need to add the following dependency to their pom.xml.

*pom.xml*

[source,xml]
---------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws-kinesis</artifactId>
    <version>${camel-version}</version>
</dependency>
---------------------------------------

where `${camel-version}` must be replaced by the actual version of Camel
(2.19 or higher).

### See Also

* Configuring Camel
* Component
* Endpoint
* Getting Started

* AWS Component
