The aws:sesv2/configurationSetEventDestination:ConfigurationSetEventDestination resource, part of the Pulumi AWS provider, routes SES email events (sends, deliveries, bounces, complaints) to AWS services for monitoring, analytics, or alerting. This guide focuses on four destination types: CloudWatch metrics, EventBridge workflows, Kinesis Firehose streaming, and SNS notifications.
Event destinations attach to existing SES configuration sets and reference destination resources that must exist separately. The examples are intentionally small. Combine them with your own configuration sets and destination infrastructure.
Send email events to CloudWatch for metrics and dashboards
Teams monitoring email delivery route SES events to CloudWatch to build custom metrics and dashboards.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.sesv2.ConfigurationSet("example", {configurationSetName: "example"});
const exampleConfigurationSetEventDestination = new aws.sesv2.ConfigurationSetEventDestination("example", {
configurationSetName: example.configurationSetName,
eventDestinationName: "example",
eventDestination: {
cloudWatchDestination: {
dimensionConfigurations: [{
defaultDimensionValue: "example",
dimensionName: "example",
dimensionValueSource: "MESSAGE_TAG",
}],
},
enabled: true,
matchingEventTypes: ["SEND"],
},
});
import pulumi
import pulumi_aws as aws
example = aws.sesv2.ConfigurationSet("example", configuration_set_name="example")
example_configuration_set_event_destination = aws.sesv2.ConfigurationSetEventDestination("example",
configuration_set_name=example.configuration_set_name,
event_destination_name="example",
event_destination={
"cloud_watch_destination": {
"dimension_configurations": [{
"default_dimension_value": "example",
"dimension_name": "example",
"dimension_value_source": "MESSAGE_TAG",
}],
},
"enabled": True,
"matching_event_types": ["SEND"],
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/sesv2"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := sesv2.NewConfigurationSet(ctx, "example", &sesv2.ConfigurationSetArgs{
ConfigurationSetName: pulumi.String("example"),
})
if err != nil {
return err
}
_, err = sesv2.NewConfigurationSetEventDestination(ctx, "example", &sesv2.ConfigurationSetEventDestinationArgs{
ConfigurationSetName: example.ConfigurationSetName,
EventDestinationName: pulumi.String("example"),
EventDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationArgs{
CloudWatchDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationArgs{
DimensionConfigurations: sesv2.ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationDimensionConfigurationArray{
&sesv2.ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationDimensionConfigurationArgs{
DefaultDimensionValue: pulumi.String("example"),
DimensionName: pulumi.String("example"),
DimensionValueSource: pulumi.String("MESSAGE_TAG"),
},
},
},
Enabled: pulumi.Bool(true),
MatchingEventTypes: pulumi.StringArray{
pulumi.String("SEND"),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.SesV2.ConfigurationSet("example", new()
{
ConfigurationSetName = "example",
});
var exampleConfigurationSetEventDestination = new Aws.SesV2.ConfigurationSetEventDestination("example", new()
{
ConfigurationSetName = example.ConfigurationSetName,
EventDestinationName = "example",
EventDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationArgs
{
CloudWatchDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationArgs
{
DimensionConfigurations = new[]
{
new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationDimensionConfigurationArgs
{
DefaultDimensionValue = "example",
DimensionName = "example",
DimensionValueSource = "MESSAGE_TAG",
},
},
},
Enabled = true,
MatchingEventTypes = new[]
{
"SEND",
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.sesv2.ConfigurationSet;
import com.pulumi.aws.sesv2.ConfigurationSetArgs;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestination;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new ConfigurationSet("example", ConfigurationSetArgs.builder()
.configurationSetName("example")
.build());
var exampleConfigurationSetEventDestination = new ConfigurationSetEventDestination("exampleConfigurationSetEventDestination", ConfigurationSetEventDestinationArgs.builder()
.configurationSetName(example.configurationSetName())
.eventDestinationName("example")
.eventDestination(ConfigurationSetEventDestinationEventDestinationArgs.builder()
.cloudWatchDestination(ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationArgs.builder()
.dimensionConfigurations(ConfigurationSetEventDestinationEventDestinationCloudWatchDestinationDimensionConfigurationArgs.builder()
.defaultDimensionValue("example")
.dimensionName("example")
.dimensionValueSource("MESSAGE_TAG")
.build())
.build())
.enabled(true)
.matchingEventTypes("SEND")
.build())
.build());
}
}
resources:
example:
type: aws:sesv2:ConfigurationSet
properties:
configurationSetName: example
exampleConfigurationSetEventDestination:
type: aws:sesv2:ConfigurationSetEventDestination
name: example
properties:
configurationSetName: ${example.configurationSetName}
eventDestinationName: example
eventDestination:
cloudWatchDestination:
dimensionConfigurations:
- defaultDimensionValue: example
dimensionName: example
dimensionValueSource: MESSAGE_TAG
enabled: true
matchingEventTypes:
- SEND
When SES sends an email through this configuration set, it publishes event data to CloudWatch. The dimensionConfigurations array defines how to group metrics; dimensionValueSource determines whether dimension values come from message tags, email headers, or link tags. The matchingEventTypes property filters which events trigger the destination (here, only SEND events).
Route email events to EventBridge for event-driven workflows
Applications that trigger workflows based on email events route SES events to EventBridge, where rules invoke Lambda, Step Functions, or other targets.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const _default = aws.cloudwatch.getEventBus({
name: "default",
});
const example = new aws.sesv2.ConfigurationSetEventDestination("example", {
configurationSetName: exampleAwsSesv2ConfigurationSet.configurationSetName,
eventDestinationName: "example",
eventDestination: {
eventBridgeDestination: {
eventBusArn: _default.then(_default => _default.arn),
},
enabled: true,
matchingEventTypes: ["SEND"],
},
});
import pulumi
import pulumi_aws as aws
default = aws.cloudwatch.get_event_bus(name="default")
example = aws.sesv2.ConfigurationSetEventDestination("example",
configuration_set_name=example_aws_sesv2_configuration_set["configurationSetName"],
event_destination_name="example",
event_destination={
"event_bridge_destination": {
"event_bus_arn": default.arn,
},
"enabled": True,
"matching_event_types": ["SEND"],
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/cloudwatch"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/sesv2"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_default, err := cloudwatch.LookupEventBus(ctx, &cloudwatch.LookupEventBusArgs{
Name: "default",
}, nil)
if err != nil {
return err
}
_, err = sesv2.NewConfigurationSetEventDestination(ctx, "example", &sesv2.ConfigurationSetEventDestinationArgs{
ConfigurationSetName: pulumi.Any(exampleAwsSesv2ConfigurationSet.ConfigurationSetName),
EventDestinationName: pulumi.String("example"),
EventDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationArgs{
EventBridgeDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationEventBridgeDestinationArgs{
EventBusArn: pulumi.String(_default.Arn),
},
Enabled: pulumi.Bool(true),
MatchingEventTypes: pulumi.StringArray{
pulumi.String("SEND"),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var @default = Aws.CloudWatch.GetEventBus.Invoke(new()
{
Name = "default",
});
var example = new Aws.SesV2.ConfigurationSetEventDestination("example", new()
{
ConfigurationSetName = exampleAwsSesv2ConfigurationSet.ConfigurationSetName,
EventDestinationName = "example",
EventDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationArgs
{
EventBridgeDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationEventBridgeDestinationArgs
{
EventBusArn = @default.Apply(@default => @default.Apply(getEventBusResult => getEventBusResult.Arn)),
},
Enabled = true,
MatchingEventTypes = new[]
{
"SEND",
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.cloudwatch.CloudwatchFunctions;
import com.pulumi.aws.cloudwatch.inputs.GetEventBusArgs;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestination;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationEventBridgeDestinationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var default = CloudwatchFunctions.getEventBus(GetEventBusArgs.builder()
.name("default")
.build());
var example = new ConfigurationSetEventDestination("example", ConfigurationSetEventDestinationArgs.builder()
.configurationSetName(exampleAwsSesv2ConfigurationSet.configurationSetName())
.eventDestinationName("example")
.eventDestination(ConfigurationSetEventDestinationEventDestinationArgs.builder()
.eventBridgeDestination(ConfigurationSetEventDestinationEventDestinationEventBridgeDestinationArgs.builder()
.eventBusArn(default_.arn())
.build())
.enabled(true)
.matchingEventTypes("SEND")
.build())
.build());
}
}
resources:
example:
type: aws:sesv2:ConfigurationSetEventDestination
properties:
configurationSetName: ${exampleAwsSesv2ConfigurationSet.configurationSetName}
eventDestinationName: example
eventDestination:
eventBridgeDestination:
eventBusArn: ${default.arn}
enabled: true
matchingEventTypes:
- SEND
variables:
default:
fn::invoke:
function: aws:cloudwatch:getEventBus
arguments:
name: default
The eventBridgeDestination sends events to the specified event bus. EventBridge rules can then match on event patterns (delivery failures, bounces, complaints) and trigger downstream actions. The matchingEventTypes property controls which SES events flow to EventBridge.
Stream email events to S3 or data warehouses via Firehose
Analytics pipelines need raw email event data in S3 or data warehouses. Kinesis Firehose provides a managed streaming path from SES to these destinations.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.sesv2.ConfigurationSet("example", {configurationSetName: "example"});
const exampleConfigurationSetEventDestination = new aws.sesv2.ConfigurationSetEventDestination("example", {
configurationSetName: example.configurationSetName,
eventDestinationName: "example",
eventDestination: {
kinesisFirehoseDestination: {
deliveryStreamArn: exampleAwsKinesisFirehoseDeliveryStream.arn,
iamRoleArn: exampleAwsIamRole.arn,
},
enabled: true,
matchingEventTypes: ["SEND"],
},
});
import pulumi
import pulumi_aws as aws
example = aws.sesv2.ConfigurationSet("example", configuration_set_name="example")
example_configuration_set_event_destination = aws.sesv2.ConfigurationSetEventDestination("example",
configuration_set_name=example.configuration_set_name,
event_destination_name="example",
event_destination={
"kinesis_firehose_destination": {
"delivery_stream_arn": example_aws_kinesis_firehose_delivery_stream["arn"],
"iam_role_arn": example_aws_iam_role["arn"],
},
"enabled": True,
"matching_event_types": ["SEND"],
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/sesv2"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := sesv2.NewConfigurationSet(ctx, "example", &sesv2.ConfigurationSetArgs{
ConfigurationSetName: pulumi.String("example"),
})
if err != nil {
return err
}
_, err = sesv2.NewConfigurationSetEventDestination(ctx, "example", &sesv2.ConfigurationSetEventDestinationArgs{
ConfigurationSetName: example.ConfigurationSetName,
EventDestinationName: pulumi.String("example"),
EventDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationArgs{
KinesisFirehoseDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationKinesisFirehoseDestinationArgs{
DeliveryStreamArn: pulumi.Any(exampleAwsKinesisFirehoseDeliveryStream.Arn),
IamRoleArn: pulumi.Any(exampleAwsIamRole.Arn),
},
Enabled: pulumi.Bool(true),
MatchingEventTypes: pulumi.StringArray{
pulumi.String("SEND"),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.SesV2.ConfigurationSet("example", new()
{
ConfigurationSetName = "example",
});
var exampleConfigurationSetEventDestination = new Aws.SesV2.ConfigurationSetEventDestination("example", new()
{
ConfigurationSetName = example.ConfigurationSetName,
EventDestinationName = "example",
EventDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationArgs
{
KinesisFirehoseDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationKinesisFirehoseDestinationArgs
{
DeliveryStreamArn = exampleAwsKinesisFirehoseDeliveryStream.Arn,
IamRoleArn = exampleAwsIamRole.Arn,
},
Enabled = true,
MatchingEventTypes = new[]
{
"SEND",
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.sesv2.ConfigurationSet;
import com.pulumi.aws.sesv2.ConfigurationSetArgs;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestination;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationKinesisFirehoseDestinationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new ConfigurationSet("example", ConfigurationSetArgs.builder()
.configurationSetName("example")
.build());
var exampleConfigurationSetEventDestination = new ConfigurationSetEventDestination("exampleConfigurationSetEventDestination", ConfigurationSetEventDestinationArgs.builder()
.configurationSetName(example.configurationSetName())
.eventDestinationName("example")
.eventDestination(ConfigurationSetEventDestinationEventDestinationArgs.builder()
.kinesisFirehoseDestination(ConfigurationSetEventDestinationEventDestinationKinesisFirehoseDestinationArgs.builder()
.deliveryStreamArn(exampleAwsKinesisFirehoseDeliveryStream.arn())
.iamRoleArn(exampleAwsIamRole.arn())
.build())
.enabled(true)
.matchingEventTypes("SEND")
.build())
.build());
}
}
resources:
example:
type: aws:sesv2:ConfigurationSet
properties:
configurationSetName: example
exampleConfigurationSetEventDestination:
type: aws:sesv2:ConfigurationSetEventDestination
name: example
properties:
configurationSetName: ${example.configurationSetName}
eventDestinationName: example
eventDestination:
kinesisFirehoseDestination:
deliveryStreamArn: ${exampleAwsKinesisFirehoseDeliveryStream.arn}
iamRoleArn: ${exampleAwsIamRole.arn}
enabled: true
matchingEventTypes:
- SEND
The kinesisFirehoseDestination streams events to the specified Firehose delivery stream, which can write to S3, Redshift, or other destinations. The iamRoleArn grants SES permission to write to Firehose. Events matching the specified types flow continuously to the stream.
Publish email events to SNS topics for notifications
Operations teams need immediate notifications when email events occur. SNS topics fan out to email, SMS, Lambda, or SQS for alerting.
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.sesv2.ConfigurationSet("example", {configurationSetName: "example"});
const exampleConfigurationSetEventDestination = new aws.sesv2.ConfigurationSetEventDestination("example", {
configurationSetName: example.configurationSetName,
eventDestinationName: "example",
eventDestination: {
snsDestination: {
topicArn: exampleAwsSnsTopic.arn,
},
enabled: true,
matchingEventTypes: ["SEND"],
},
});
import pulumi
import pulumi_aws as aws
example = aws.sesv2.ConfigurationSet("example", configuration_set_name="example")
example_configuration_set_event_destination = aws.sesv2.ConfigurationSetEventDestination("example",
configuration_set_name=example.configuration_set_name,
event_destination_name="example",
event_destination={
"sns_destination": {
"topic_arn": example_aws_sns_topic["arn"],
},
"enabled": True,
"matching_event_types": ["SEND"],
})
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/sesv2"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
example, err := sesv2.NewConfigurationSet(ctx, "example", &sesv2.ConfigurationSetArgs{
ConfigurationSetName: pulumi.String("example"),
})
if err != nil {
return err
}
_, err = sesv2.NewConfigurationSetEventDestination(ctx, "example", &sesv2.ConfigurationSetEventDestinationArgs{
ConfigurationSetName: example.ConfigurationSetName,
EventDestinationName: pulumi.String("example"),
EventDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationArgs{
SnsDestination: &sesv2.ConfigurationSetEventDestinationEventDestinationSnsDestinationArgs{
TopicArn: pulumi.Any(exampleAwsSnsTopic.Arn),
},
Enabled: pulumi.Bool(true),
MatchingEventTypes: pulumi.StringArray{
pulumi.String("SEND"),
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.SesV2.ConfigurationSet("example", new()
{
ConfigurationSetName = "example",
});
var exampleConfigurationSetEventDestination = new Aws.SesV2.ConfigurationSetEventDestination("example", new()
{
ConfigurationSetName = example.ConfigurationSetName,
EventDestinationName = "example",
EventDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationArgs
{
SnsDestination = new Aws.SesV2.Inputs.ConfigurationSetEventDestinationEventDestinationSnsDestinationArgs
{
TopicArn = exampleAwsSnsTopic.Arn,
},
Enabled = true,
MatchingEventTypes = new[]
{
"SEND",
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.sesv2.ConfigurationSet;
import com.pulumi.aws.sesv2.ConfigurationSetArgs;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestination;
import com.pulumi.aws.sesv2.ConfigurationSetEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationArgs;
import com.pulumi.aws.sesv2.inputs.ConfigurationSetEventDestinationEventDestinationSnsDestinationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new ConfigurationSet("example", ConfigurationSetArgs.builder()
.configurationSetName("example")
.build());
var exampleConfigurationSetEventDestination = new ConfigurationSetEventDestination("exampleConfigurationSetEventDestination", ConfigurationSetEventDestinationArgs.builder()
.configurationSetName(example.configurationSetName())
.eventDestinationName("example")
.eventDestination(ConfigurationSetEventDestinationEventDestinationArgs.builder()
.snsDestination(ConfigurationSetEventDestinationEventDestinationSnsDestinationArgs.builder()
.topicArn(exampleAwsSnsTopic.arn())
.build())
.enabled(true)
.matchingEventTypes("SEND")
.build())
.build());
}
}
resources:
example:
type: aws:sesv2:ConfigurationSet
properties:
configurationSetName: example
exampleConfigurationSetEventDestination:
type: aws:sesv2:ConfigurationSetEventDestination
name: example
properties:
configurationSetName: ${example.configurationSetName}
eventDestinationName: example
eventDestination:
snsDestination:
topicArn: ${exampleAwsSnsTopic.arn}
enabled: true
matchingEventTypes:
- SEND
The snsDestination publishes events to the specified SNS topic. Subscribers receive notifications for each matching event type. This is useful for alerting on bounces, complaints, or delivery failures that require immediate attention.
Beyond these examples
These snippets focus on specific event destination features: CloudWatch metrics and EventBridge workflows, and Kinesis Firehose streaming and SNS notifications. They’re intentionally minimal rather than complete email monitoring solutions.
The examples reference pre-existing infrastructure such as SES configuration sets, CloudWatch event buses, Kinesis Firehose streams, SNS topics, and IAM roles with appropriate permissions. They focus on routing configuration rather than provisioning the destination services.
To keep things focused, common event destination patterns are omitted, including:
- Event type filtering (matchingEventTypes accepts multiple values)
- Pinpoint integration for campaign analytics
- Disabling destinations temporarily (enabled property)
- Multiple destinations per configuration set
These omissions are intentional: the goal is to illustrate how each destination type is wired, not provide drop-in monitoring modules. See the ConfigurationSetEventDestination resource reference for all available configuration options.
Let's configure AWS SESv2 Event Destinations
Get started with Pulumi Cloud, then follow our quick setup guide to deploy this infrastructure.
Try Pulumi Cloud for FREEFrequently Asked Questions
Configuration & Setup
You can configure five destination types:
- CloudWatch - Send metrics with custom dimensions
- EventBridge - Route events to EventBridge event bus
- Kinesis Firehose - Stream events to Firehose delivery stream
- Pinpoint - Send events to Pinpoint application
- SNS - Publish events to SNS topic
configurationSetName (the parent configuration set), eventDestinationName (unique identifier), and eventDestination (containing the destination configuration and matching event types).dimensionConfigurations within cloudWatchDestination, specifying dimensionName, defaultDimensionValue, and dimensionValueSource (such as MESSAGE_TAG).Resource Management
configurationSetName and eventDestinationName are immutable. Changing either requires replacing the resource.configuration_set_name|event_destination_name with a pipe separator. For example: pulumi import aws:sesv2/configurationSetEventDestination:ConfigurationSetEventDestination example example_configuration_set|example_event_destinationEvent Matching
matchingEventTypes within eventDestination to specify which events to capture. Examples show the SEND event type.Using a different cloud?
Explore integration guides for other cloud providers: