= AWS CloudWatch Component
:doctitle: AWS CloudWatch
:shortname: aws2-cw
:artifactid: camel-aws2-cw
:description: Sending metrics to AWS CloudWatch using AWS SDK version 2.x.
:since: 3.1
:supportlevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: AWS
:camel-spring-boot-name: aws2-cw

*Since Camel {since}*

*{component-header}*

The AWS2 Cloudwatch component allows messages to be sent to an
https://aws.amazon.com/cloudwatch/[Amazon CloudWatch] metrics. The
implementation of the Amazon API is provided by
the https://aws.amazon.com/sdkforjava/[AWS SDK].

Prerequisites

You must have a valid Amazon Web Services developer account, and be
signed up to use Amazon CloudWatch. More information is available at
https://aws.amazon.com/cloudwatch/[Amazon CloudWatch].

== URI Format

----------------------------
aws2-cw://namespace[?options]
----------------------------

The metrics will be created if they don't already exists. +
 You can append query options to the URI in the following format,
`?options=value&option2=value&...`


// component-configure options: START

// component-configure options: END

// component options: START
include::partial$component-configure-options.adoc[]
include::partial$component-endpoint-options.adoc[]
// component options: END

// endpoint options: START

// endpoint options: END

Required CW component options

You have to provide the amazonCwClient in the
Registry or your accessKey and secretKey to access
the https://aws.amazon.com/cloudwatch/[Amazon's CloudWatch].

== Usage

=== Static credentials vs Default Credential Provider

You have the possibility of avoiding the usage of explicit static credentials, by specifying the useDefaultCredentialsProvider option and set it to true.

 - Java system properties - aws.accessKeyId and aws.secretKey
 - Environment variables - AWS_ACCESS_KEY_ID and AWS_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_URI is set.
 - Amazon EC2 Instance profile credentials. 

For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]

=== Message headers evaluated by the CW producer

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

|`CamelAwsCwMetricName` |`String` |The Amazon CW metric name.

|`CamelAwsCwMetricValue` |`Double` |The Amazon CW metric value.

|`CamelAwsCwMetricUnit` |`String` |The Amazon CW metric unit.

|`CamelAwsCwMetricNamespace` |`String` |The Amazon CW metric namespace.

|`CamelAwsCwMetricTimestamp` |`Date` |The Amazon CW metric timestamp.

|`CamelAwsCwMetricDimensionName` |`String` |The Amazon CW metric dimension name.

|`CamelAwsCwMetricDimensionValue` |`String` |The Amazon CW metric dimension value.

|`CamelAwsCwMetricDimensions` |`Map<String, String>` |A map of dimension names and dimension values.
|=======================================================================

=== Advanced CloudWatchClient configuration

If you need more control over the `CloudWatchClient` instance
configuration you can create your own instance and refer to it from the
URI:

[source,java]
-------------------------------------------------
from("direct:start")
.to("aws2-cw://namespace?amazonCwClient=#client");
-------------------------------------------------

The `#client` refers to a `CloudWatchClient` in the
Registry.

== 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-aws2-cw</artifactId>
    <version>${camel-version}</version>
</dependency>
---------------------------------------

where `${camel-version`} must be replaced by the actual version of Camel.

== Examples

=== Producer Example

[source,java]
-------------------------------
from("direct:start")
  .to("aws2-cw://http://camel.apache.org/aws-cw");
-------------------------------

and sends something like

[source,java]
-------------------------------
exchange.getIn().setHeader(Cw2Constants.METRIC_NAME, "ExchangesCompleted");
exchange.getIn().setHeader(Cw2Constants.METRIC_VALUE, "2.0");
exchange.getIn().setHeader(Cw2Constants.METRIC_UNIT, "Count");
-------------------------------


include::spring-boot:partial$starter.adoc[]
