[[aws2-ecs-component]]
= AWS 2 Elastic Container Service (ECS) Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-aws2-ecs/src/main/docs/aws2-ecs-component.adoc
:docTitle: AWS 2 Elastic Container Service (ECS)
:artifactId: camel-aws2-ecs
:description: Manage AWS ECS cluster instances using AWS SDK version 2.x.
:since: 3.1
:supportLevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: AWS 2

*Since Camel {since}*

*{component-header}*

The AWS2 ECS component supports create, delete, describe and list clusters
https://aws.amazon.com/ecs/[AWS ECS] clusters instances.

Prerequisites

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

[NOTE]
====
The AWS2 ECS component is not supported in OSGI
====

== URI Format

[source,java]
-------------------------
aws2-ecs://label[?options]
-------------------------

You can append query options to the URI in the following format,
?options=value&option2=value&...

== URI Options


// component options: START
The AWS 2 Elastic Container Service (ECS) component supports 14 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *autoDiscoverClient* (common) | 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
| *configuration* (producer) | Component configuration |  | ECS2Configuration
| *ecsClient* (producer) | To use a existing configured AWS ECS as client |  | EcsClient
| *lazyStartProducer* (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
| *operation* (producer) | *Required* The operation to perform. The value can be one of: listClusters, describeCluster, createCluster, deleteCluster |  | ECS2Operations
| *pojoRequest* (producer) | If we want to use a POJO request as body or not | false | boolean
| *proxyHost* (producer) | To define a proxy host when instantiating the ECS client |  | String
| *proxyPort* (producer) | To define a proxy port when instantiating the ECS client |  | Integer
| *proxyProtocol* (producer) | To define a proxy protocol when instantiating the ECS client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
| *region* (producer) | The region in which ECS client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
| *trustAllCertificates* (producer) | If we want to trust all certificates in case of overriding the endpoint | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *accessKey* (security) | Amazon AWS Access Key |  | String
| *secretKey* (security) | Amazon AWS Secret Key |  | String
|===
// component options: END




// endpoint options: START
The AWS 2 Elastic Container Service (ECS) endpoint is configured using URI syntax:

----
aws2-ecs:label
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *label* | *Required* Logical name |  | String
|===


=== Query Parameters (14 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *autoDiscoverClient* (common) | 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
| *ecsClient* (producer) | To use a existing configured AWS ECS as client |  | EcsClient
| *lazyStartProducer* (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
| *operation* (producer) | *Required* The operation to perform. The value can be one of: listClusters, describeCluster, createCluster, deleteCluster |  | ECS2Operations
| *pojoRequest* (producer) | If we want to use a POJO request as body or not | false | boolean
| *proxyHost* (producer) | To define a proxy host when instantiating the ECS client |  | String
| *proxyPort* (producer) | To define a proxy port when instantiating the ECS client |  | Integer
| *proxyProtocol* (producer) | To define a proxy protocol when instantiating the ECS client. The value can be one of: HTTP, HTTPS | HTTPS | Protocol
| *region* (producer) | The region in which ECS client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
| *trustAllCertificates* (producer) | If we want to trust all certificates in case of overriding the endpoint | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *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



Required ECS component options

You have to provide the amazonECSClient in the
Registry or your accessKey and secretKey to access
the https://aws.amazon.com/ecs/[Amazon ECS] service.

== Usage

=== Message headers evaluated by the ECS producer

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

|`CamelAwsECSMaxResults` |`Integer` |The limit number of results while listing clusters

|`CamelAwsECSOperation` |`String` |The operation we want to perform

|`CamelAwsECSClusterName` |`String` |The cluster name
|=======================================================================

=== ECS Producer operations

Camel-AWS ECS component provides the following operation on the producer side:

- listClusters
- createCluster
- describeCluster
- deleteCluster

== Producer Examples

- listClusters: this operation will list the available clusters in ECS

[source,java]
--------------------------------------------------------------------------------
from("direct:listClusters")
    .to("aws2-ecs://test?ecsClient=#amazonEcsClient&operation=listClusters")
--------------------------------------------------------------------------------

== Automatic detection of EcsClient client in registry

The component is capable of detecting the presence of an EcsClient bean into the registry.
If it's the only instance of that type it will be used as client and you won't have to define it as uri parameter.
This may be really useful for smarter configuration of the endpoint.

== Using a POJO as body

Sometimes build an AWS Request can be complex, because of multiple options. We introduce the possibility to use a POJO as body.
In AWS ECS there are multiple operations you can submit, as an example for List cluster request, you can do something like:

------------------------------------------------------------------------------------------------------
from("direct:start")
  .setBody(ListClustersRequest.builder().maxResults(10).build())
  .to("aws2-ecs://test?ecsClient=#amazonEcsClient&operation=listClusters&pojoRequest=true")
------------------------------------------------------------------------------------------------------

In this way you'll pass the request directly without the need of passing headers and options specifically related to this operation.

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

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

include::camel-spring-boot::page$aws2-ecs-starter.adoc[]
