All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awscdk.services.events.targets.package-info Maven / Gradle / Ivy

/**
 * 

Event Targets for Amazon EventBridge

*

* --- *

* cdk-constructs: Stable *

*


*

* *

* This library contains integration classes to send Amazon EventBridge to any * number of supported AWS Services. Instances of these classes should be passed * to the rule.addTarget() method. *

* Currently supported are: *

*

*

* See the README of the @aws-cdk/aws-events library for more information on * EventBridge. *

*

Event retry policy and using dead-letter queues

*

* The Codebuild, CodePipeline, Lambda, StepFunctions, LogGroup and SQSQueue targets support attaching a dead letter queue and setting retry policies. See the lambda example. * Use escape hatches for the other target types. *

*

Invoke a Lambda function

*

* Use the LambdaFunction target to invoke a lambda function. *

* The code snippet below creates an event rule with a Lambda function as a target * triggered for every events from aws.ec2 source. You can optionally attach a * dead letter queue. *

*

 * import software.amazon.awscdk.services.lambda.*;
 * 
 * 
 * Function fn = Function.Builder.create(this, "MyFunc")
 *         .runtime(Runtime.NODEJS_12_X)
 *         .handler("index.handler")
 *         .code(Code.fromInline("exports.handler = handler.toString()"))
 *         .build();
 * 
 * Rule rule = Rule.Builder.create(this, "rule")
 *         .eventPattern(EventPattern.builder()
 *                 .source(List.of("aws.ec2"))
 *                 .build())
 *         .build();
 * 
 * Queue queue = new Queue(this, "Queue");
 * 
 * rule.addTarget(LambdaFunction.Builder.create(fn)
 *         .deadLetterQueue(queue) // Optional: add a dead letter queue
 *         .maxEventAge(Duration.hours(2)) // Optional: set the maxEventAge retry policy
 *         .retryAttempts(2)
 *         .build());
 * 
*

*

Log an event into a LogGroup

*

* Use the LogGroup target to log your events in a CloudWatch LogGroup. *

* For example, the following code snippet creates an event rule with a CloudWatch LogGroup as a target. * Every events sent from the aws.ec2 source will be sent to the CloudWatch LogGroup. *

*

 * import software.amazon.awscdk.services.logs.*;
 * 
 * 
 * LogGroup logGroup = LogGroup.Builder.create(this, "MyLogGroup")
 *         .logGroupName("MyLogGroup")
 *         .build();
 * 
 * Rule rule = Rule.Builder.create(this, "rule")
 *         .eventPattern(EventPattern.builder()
 *                 .source(List.of("aws.ec2"))
 *                 .build())
 *         .build();
 * 
 * rule.addTarget(new CloudWatchLogGroup(logGroup));
 * 
*

*

Start a CodeBuild build

*

* Use the CodeBuildProject target to trigger a CodeBuild project. *

* The code snippet below creates a CodeCommit repository that triggers a CodeBuild project * on commit to the master branch. You can optionally attach a * dead letter queue. *

*

 * import software.amazon.awscdk.services.codebuild.*;
 * import software.amazon.awscdk.services.codecommit.*;
 * 
 * 
 * Repository repo = Repository.Builder.create(this, "MyRepo")
 *         .repositoryName("aws-cdk-codebuild-events")
 *         .build();
 * 
 * Project project = Project.Builder.create(this, "MyProject")
 *         .source(Source.codeCommit(CodeCommitSourceProps.builder().repository(repo).build()))
 *         .build();
 * 
 * Queue deadLetterQueue = new Queue(this, "DeadLetterQueue");
 * 
 * // trigger a build when a commit is pushed to the repo
 * Rule onCommitRule = repo.onCommit("OnCommit", OnCommitOptions.builder()
 *         .target(CodeBuildProject.Builder.create(project)
 *                 .deadLetterQueue(deadLetterQueue)
 *                 .build())
 *         .branches(List.of("master"))
 *         .build());
 * 
*

*

Start a CodePipeline pipeline

*

* Use the CodePipeline target to trigger a CodePipeline pipeline. *

* The code snippet below creates a CodePipeline pipeline that is triggered every hour *

*

 * import software.amazon.awscdk.services.codepipeline.*;
 * 
 * 
 * Pipeline pipeline = new Pipeline(this, "Pipeline");
 * 
 * Rule rule = Rule.Builder.create(this, "Rule")
 *         .schedule(Schedule.expression("rate(1 hour)"))
 *         .build();
 * 
 * rule.addTarget(new CodePipeline(pipeline));
 * 
*

*

Start a StepFunctions state machine

*

* Use the SfnStateMachine target to trigger a State Machine. *

* The code snippet below creates a Simple StateMachine that is triggered every minute with a * dummy object as input. * You can optionally attach a * dead letter queue * to the target. *

*

 * import software.amazon.awscdk.services.iam.*;
 * import software.amazon.awscdk.services.stepfunctions.*;
 * 
 * 
 * Rule rule = Rule.Builder.create(this, "Rule")
 *         .schedule(Schedule.rate(Duration.minutes(1)))
 *         .build();
 * 
 * Queue dlq = new Queue(this, "DeadLetterQueue");
 * 
 * Role role = Role.Builder.create(this, "Role")
 *         .assumedBy(new ServicePrincipal("events.amazonaws.com"))
 *         .build();
 * StateMachine stateMachine = StateMachine.Builder.create(this, "SM")
 *         .definition(Wait.Builder.create(this, "Hello").time(WaitTime.duration(Duration.seconds(10))).build())
 *         .build();
 * 
 * rule.addTarget(SfnStateMachine.Builder.create(stateMachine)
 *         .input(RuleTargetInput.fromObject(Map.of("SomeParam", "SomeValue")))
 *         .deadLetterQueue(dlq)
 *         .role(role)
 *         .build());
 * 
*

*

Queue a Batch job

*

* Use the BatchJob target to queue a Batch job. *

* The code snippet below creates a Simple JobQueue that is triggered every hour with a * dummy object as input. * You can optionally attach a * dead letter queue * to the target. *

*

 * import software.amazon.awscdk.services.batch.*;
 * import software.amazon.awscdk.services.ecs.ContainerImage;
 * 
 * 
 * JobQueue jobQueue = JobQueue.Builder.create(this, "MyQueue")
 *         .computeEnvironments(List.of(JobQueueComputeEnvironment.builder()
 *                 .computeEnvironment(ComputeEnvironment.Builder.create(this, "ComputeEnvironment")
 *                         .managed(false)
 *                         .build())
 *                 .order(1)
 *                 .build()))
 *         .build();
 * 
 * JobDefinition jobDefinition = JobDefinition.Builder.create(this, "MyJob")
 *         .container(JobDefinitionContainer.builder()
 *                 .image(ContainerImage.fromRegistry("test-repo"))
 *                 .build())
 *         .build();
 * 
 * Queue queue = new Queue(this, "Queue");
 * 
 * Rule rule = Rule.Builder.create(this, "Rule")
 *         .schedule(Schedule.rate(Duration.hours(1)))
 *         .build();
 * 
 * rule.addTarget(BatchJob.Builder.create(jobQueue.getJobQueueArn(), jobQueue, jobDefinition.getJobDefinitionArn(), jobDefinition)
 *         .deadLetterQueue(queue)
 *         .event(RuleTargetInput.fromObject(Map.of("SomeParam", "SomeValue")))
 *         .retryAttempts(2)
 *         .maxEventAge(Duration.hours(2))
 *         .build());
 * 
*

*

Invoke an API Gateway REST API

*

* Use the ApiGateway target to trigger a REST API. *

* The code snippet below creates a Api Gateway REST API that is invoked every hour. *

*

 * import software.amazon.awscdk.services.apigateway.*;
 * import software.amazon.awscdk.services.lambda.*;
 * 
 * 
 * Rule rule = Rule.Builder.create(this, "Rule")
 *         .schedule(Schedule.rate(Duration.minutes(1)))
 *         .build();
 * 
 * Function fn = Function.Builder.create(this, "MyFunc")
 *         .handler("index.handler")
 *         .runtime(Runtime.NODEJS_12_X)
 *         .code(Code.fromInline("exports.handler = e => {}"))
 *         .build();
 * 
 * LambdaRestApi restApi = LambdaRestApi.Builder.create(this, "MyRestAPI").handler(fn).build();
 * 
 * Queue dlq = new Queue(this, "DeadLetterQueue");
 * 
 * rule.addTarget(
 * ApiGateway.Builder.create(restApi)
 *         .path("/*/test")
 *         .method("GET")
 *         .stage("prod")
 *         .pathParameterValues(List.of("path-value"))
 *         .headerParameters(Map.of(
 *                 "Header1", "header1"))
 *         .queryStringParameters(Map.of(
 *                 "QueryParam1", "query-param-1"))
 *         .deadLetterQueue(dlq)
 *         .build());
 * 
*

*

Invoke an API Destination

*

* Use the targets.ApiDestination target to trigger an external API. You need to * create an events.Connection and events.ApiDestination as well. *

* The code snippet below creates an external destination that is invoked every hour. *

*

 * Connection connection = Connection.Builder.create(this, "Connection")
 *         .authorization(Authorization.apiKey("x-api-key", SecretValue.secretsManager("ApiSecretName")))
 *         .description("Connection with API Key x-api-key")
 *         .build();
 * 
 * ApiDestination destination = ApiDestination.Builder.create(this, "Destination")
 *         .connection(connection)
 *         .endpoint("https://example.com")
 *         .description("Calling example.com with API key x-api-key")
 *         .build();
 * 
 * Rule rule = Rule.Builder.create(this, "Rule")
 *         .schedule(Schedule.rate(Duration.minutes(1)))
 *         .targets(List.of(new ApiDestination(destination)))
 *         .build();
 * 
*

*

Put an event on an EventBridge bus

*

* Use the EventBus target to route event to a different EventBus. *

* The code snippet below creates the scheduled event rule that route events to an imported event bus. *

*

 * Rule rule = Rule.Builder.create(this, "Rule")
 *         .schedule(Schedule.expression("rate(1 minute)"))
 *         .build();
 * 
 * rule.addTarget(new EventBus(EventBus.fromEventBusArn(this, "External", "arn:aws:events:eu-west-1:999999999999:event-bus/test-bus")));
 * 
*/ @software.amazon.jsii.Stability(software.amazon.jsii.Stability.Level.Stable) package software.amazon.awscdk.services.events.targets;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy