= AWS Eventbridge Component
:doctitle: AWS Eventbridge
:shortname: aws2-eventbridge
:artifactid: camel-aws2-eventbridge
:description: Manage AWS Eventbridge cluster instances using AWS SDK version 2.x.
:since: 3.6
:supportlevel: Stable
:component-header: Only producer is supported
//Manually maintained attributes
:group: AWS
:camel-spring-boot-name: aws2-eventbridge

*Since Camel {since}*

*{component-header}*

The AWS2 Eventbridge component supports assumeRole operation.
https://aws.amazon.com/eventbridge/[AWS Eventbridge].

Prerequisites

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

[NOTE]
====
To create a rule that triggers on an action by an AWS service that does not emit events, you can base the rule on API calls made by that service. The API calls are recorded by AWS CloudTrail, so you'll need to have CloudTrail enabled. For more information https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html[Services Supported by CloudTrail Event History].
====

== URI Format

-------------------------
aws2-eventbridge://label[?options]
-------------------------

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

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

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

=== AWS2-Eventbridge Producer operations

Camel-AWS2-Eventbridge component provides the following operation on the producer side:

- putRule
- putTargets
- removeTargets
- deleteRule
- enableRule
- disableRule
- listRules
- describeRule
- listTargetsByRule
- listRuleNamesByTarget
- putEvent

- PutRule: this operation create a rule related to an eventbus

[source,java]
--------------------------------------------------------------------------------
  from("direct:putRule").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=putRule&eventPatternFile=file:src/test/resources/eventpattern.json")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will create a rule named firstrule and it will use a json file for defining the EventPattern.

- PutTargets: this operation will add a target to the rule 

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
          Target target = Target.builder().id("sqs-queue").arn("arn:aws:sqs:eu-west-1:780410022472:camel-connector-test")
                .build();
          List<Target> targets = new ArrayList<Target>();
          targets.add(target);
          exchange.getIn().setHeader(EventbridgeConstants.TARGETS, targets);
      }
  })
  .to("aws2-eventbridge://test?operation=putTargets")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will add the target sqs-queue with the arn reported to the targets of the firstrule rule.

- RemoveTargets: this operation will remove a collection of target from the rule 

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
          List<String> ids = new ArrayList<String>();
          targets.add("sqs-queue");
          exchange.getIn().setHeader(EventbridgeConstants.TARGETS_IDS, targets);
      }
  })
  .to("aws2-eventbridge://test?operation=removeTargets")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will remove the target sqs-queue from the firstrule rule.

- DeleteRule: this operation will delete a rule related to an eventbus

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=deleteRule")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will remove the firstrule rule from the test eventbus.

- EnableRule: this operation will enable a rule related to an eventbus

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=enableRule")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will enable the firstrule rule from the test eventbus.

- DisableRule: this operation will disable a rule related to an eventbus

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=disableRule")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will disable the firstrule rule from the test eventbus.

- ListRules: this operation will list all the rules related to an eventbus with prefix first

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME_PREFIX, "first");
      }
  })
  .to("aws2-eventbridge://test?operation=listRules")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will list all the rules with prefix first from the test eventbus.

- DescribeRule: this operation will describe a specified rule related to an eventbus

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=describeRule")
  .to("mock:result");
--------------------------------------------------------------------------------

This operation will describe the firstrule rule from the test eventbus.

- ListTargetsByRule: this operation will return a list of targets associated with a rule

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=listTargetsByRule")
  .to("mock:result");
--------------------------------------------------------------------------------

this operation will return a list of targets associated with the firstrule rule.

- ListRuleNamesByTarget: this operation will return a list of rule associated with a target

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(EventbridgeConstants.TARGET_ARN, "firstrule");
      }
  })
  .to("aws2-eventbridge://test?operation=listRuleNamesByTarget")
  .to("mock:result");
--------------------------------------------------------------------------------

this operation will return a list of rule associated with a target.

- PutEvent: this operation will send an event to the Servicebus

[source,java]
--------------------------------------------------------------------------------
  from("direct:start").process(new Processor() {
                    
      @Override
      public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(EventbridgeConstants.EVENT_RESOURCES_ARN, "arn:aws:sqs:eu-west-1:780410022472:camel-connector-test");
                exchange.getIn().setHeader(EventbridgeConstants.EVENT_SOURCE, "com.pippo");
                exchange.getIn().setHeader(EventbridgeConstants.EVENT_DETAIL_TYPE, "peppe");
                exchange.getIn().setBody("Test Event");
      }
  })
  .to("aws2-eventbridge://test?operation=putEvent")
  .to("mock:result");
--------------------------------------------------------------------------------

this operation will return a list of entries with related ID sent to servicebus.

== Updating the rule

To update a rule you'll need to perform the putRule operation again. 
There are no explicit update rule operation in the Java SDK.

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

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


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