= AWS Eventbridge Component
:doctitle: AWS Eventbridge
:shortname: aws2-eventbridge
:artifactid: camel-aws2-eventbridge
:description: Send events to AWS Eventbridge cluster instances.
:since: 3.6
:supportlevel: Stable
:tabs-sync-option:
: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, check 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

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

=== 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 creates 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 targets 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 rules 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 rules 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 is 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[]
