= AWS CloudWatch Component
:doctitle: AWS CloudWatch
:shortname: aws2-cw
:artifactid: camel-aws2-cw
:description: Sending metrics to AWS CloudWatch.
:since: 3.1
:supportlevel: Stable
:tabs-sync-option:
: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 exist.

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].

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

== 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.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. 

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 https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]

=== 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[]
