[[aws-ec2-component]]
= AWS EC2 Component
:page-source: components/camel-aws/src/main/docs/aws-ec2-component.adoc

*Available as of Camel version 2.16*


The EC2 component supports create, run, start, stop and terminate
https://aws.amazon.com/it/ec2/[AWS EC2] instances.

Prerequisites

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

== URI Format

[source,java]
-------------------------
aws-ec2://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 EC2 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 EC2 default configuration |  | EC2Configuration
| *region* (producer) | The region in which EC2 client needs to work |  | String
| *accessKey* (producer) | Amazon AWS Access Key |  | String
| *secretKey* (producer) | Amazon AWS Secret Key |  | 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 EC2 endpoint is configured using URI syntax:

----
aws-ec2: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 (8 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *accessKey* (producer) | Amazon AWS Access Key |  | String
| *amazonEc2Client* (producer) | To use a existing configured AmazonEC2Client as client |  | AmazonEC2Client
| *operation* (producer) | *Required* The operation to perform. It can be createAndRunInstances, startInstances, stopInstances, terminateInstances, describeInstances, describeInstancesStatus, rebootInstances, monitorInstances, unmonitorInstances, createTags or deleteTags |  | EC2Operations
| *proxyHost* (producer) | To define a proxy host when instantiating the EC2 client |  | String
| *proxyPort* (producer) | To define a proxy port when instantiating the EC2 client |  | Integer
| *region* (producer) | The region in which EC2 client needs to work |  | String
| *secretKey* (producer) | Amazon AWS Secret Key |  | String
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// 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-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-ec2.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-ec2.configuration.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-ec2.configuration.amazon-ec2-client* | To use a existing configured AmazonEC2Client as client |  | AmazonEC2Client
| *camel.component.aws-ec2.configuration.operation* | The operation to perform. It can be createAndRunInstances, startInstances, stopInstances, terminateInstances, describeInstances, describeInstancesStatus, rebootInstances, monitorInstances, unmonitorInstances, createTags or deleteTags |  | EC2Operations
| *camel.component.aws-ec2.configuration.proxy-host* | To define a proxy host when instantiating the EC2 client |  | String
| *camel.component.aws-ec2.configuration.proxy-port* | To define a proxy port when instantiating the EC2 client |  | Integer
| *camel.component.aws-ec2.configuration.region* | The region in which EC2 client needs to work |  | String
| *camel.component.aws-ec2.configuration.secret-key* | Amazon AWS Secret Key |  | String
| *camel.component.aws-ec2.enabled* | Enable aws-ec2 component | true | Boolean
| *camel.component.aws-ec2.region* | The region in which EC2 client needs to work |  | String
| *camel.component.aws-ec2.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-ec2.secret-key* | Amazon AWS Secret Key |  | String
|===
// spring-boot-auto-configure options: END




Required EC2 component options

You have to provide the amazonEc2Client in the
Registry or your accessKey and secretKey to access
the https://aws.amazon.com/it/ec2/[Amazon EC2] service.

== Usage

=== Message headers evaluated by the EC2 producer

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

|`CamelAwsEC2ImageId` |`String` |An image ID of the AWS marketplace

|`CamelAwsEC2InstanceType` |com.amazonaws.services.ec2.model.InstanceType |The instance type we want to create and run

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

|`CamelAwsEC2InstanceMinCount` |`Int` |The mininum number of instances we want to run.

|`CamelAwsEC2InstanceMaxCount` |`Int` |The maximum number of instances we want to run.

|`CamelAwsEC2InstanceMonitoring` |Boolean |Define if we want the running instances to be monitored

|`CamelAwsEC2InstanceEbsOptimized` |`Boolean` |Define if the creating instance is optimized for EBS I/O.

|`CamelAwsEC2InstanceSecurityGroups` |Collection |The security groups to associate to the instances

|`CamelAwsEC2InstancesIds` |`Collection` |A collection of instances IDS to execute start, stop, describe and
terminate operations on.

|`CamelAwsEC2InstancesTags` |`Collection` |A collection of tags to add or remove from EC2 resources
|=======================================================================

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

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