// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/aws-cloudwatch-sink.svg[] AWS CloudWatch Metrics Sink

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Send messages to AWS CloudWatch metrics.

There are several properties you can set in the headers, such as:

`metric-name` / `ce-metric-name` for the metric name.
`metric-value` / `ce-metric-value` for the metric value.
`metric-unit` / `ce-metric-unit` for the metric unit.
`metric-timestamp` / `ce-metric-timestamp` for the metric timestamp.
`metric-dimension-name` / `ce-metric-dimension-name` for the dimension name.
`metric-dimension-value` / `ce-metric-dimension-value` for the dimension value.

== Configuration Options

The following table summarizes the configuration options available for the `aws-cloudwatch-sink` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *accessKey {empty}* *| Access Key| The access key obtained from AWS.| string| | 
| *cw_namespace {empty}* *| Cloud Watch Namespace| The cloud watch metric namespace.| string| | 
| *region {empty}* *| AWS Region| The AWS region to connect to.| string| | `"eu-west-1"`
| *secretKey {empty}* *| Secret Key| The secret key obtained from AWS.| string| | 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `aws-cloudwatch-sink` can be used in various contexts.

=== Knative Sink

The `aws-cloudwatch-sink` Kamelet can be used as Knative sink by binding it to a Knative object.

.aws-cloudwatch-sink-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: aws-cloudwatch-sink-binding
spec:
  source:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: aws-cloudwatch-sink
    properties:
      accessKey: "The Access Key"
      cw_namespace: "The Cloud Watch Namespace"
      region: "eu-west-1"
      secretKey: "The Secret Key"
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `aws-cloudwatch-sink-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the sink using the following command:

[source,shell]
----
kubectl apply -f aws-cloudwatch-sink-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:aws2-cw

- camel:kamelet
 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind channel/mychannel aws-cloudwatch-sink -p "sink.accessKey=The Access Key" -p "sink.cw_namespace=The Cloud Watch Namespace" -p "sink.region=eu-west-1" -p "sink.secretKey=The Secret Key"
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Sink

The `aws-cloudwatch-sink` Kamelet can be used as Kafka sink by binding it to a Kafka topic.

.aws-cloudwatch-sink-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: aws-cloudwatch-sink-binding
spec:
  source:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: aws-cloudwatch-sink
    properties:
      accessKey: "The Access Key"
      cw_namespace: "The Cloud Watch Namespace"
      region: "eu-west-1"
      secretKey: "The Secret Key"
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `aws-cloudwatch-sink-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the sink using the following command:

[source,shell]
----
kubectl apply -f aws-cloudwatch-sink-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind kafka.strimzi.io/v1beta1:KafkaTopic:my-topic aws-cloudwatch-sink -p "sink.accessKey=The Access Key" -p "sink.cw_namespace=The Cloud Watch Namespace" -p "sink.region=eu-west-1" -p "sink.secretKey=The Secret Key"
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
