A Pulumi provider SDK for creating and managing Amazon Web Services (AWS) cloud resources in Go, providing strongly-typed resource classes and data sources for all major AWS services.
This document covers the AWS monitoring services available in the Pulumi AWS Go SDK, including CloudWatch Metrics, Alarms, Logs, Dashboards, EventBridge, and CloudTrail.
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/cloudwatch"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/cloudtrail"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)// Resource constructors
NewCompositeAlarm(ctx, name, args, opts) (*CompositeAlarm, error)
NewContributorInsightRule(ctx, name, args, opts) (*ContributorInsightRule, error)
NewContributorManagedInsightRule(ctx, name, args, opts) (*ContributorManagedInsightRule, error)
NewDashboard(ctx, name, args, opts) (*Dashboard, error)
NewEventApiDestination(ctx, name, args, opts) (*EventApiDestination, error)
NewEventArchive(ctx, name, args, opts) (*EventArchive, error)
NewEventBus(ctx, name, args, opts) (*EventBus, error)
NewEventBusPolicy(ctx, name, args, opts) (*EventBusPolicy, error)
NewEventConnection(ctx, name, args, opts) (*EventConnection, error)
NewEventEndpoint(ctx, name, args, opts) (*EventEndpoint, error)
NewEventPermission(ctx, name, args, opts) (*EventPermission, error)
NewEventRule(ctx, name, args, opts) (*EventRule, error)
NewEventTarget(ctx, name, args, opts) (*EventTarget, error)
NewInternetMonitor(ctx, name, args, opts) (*InternetMonitor, error)
NewLogAccountPolicy(ctx, name, args, opts) (*LogAccountPolicy, error)
NewLogAnomalyDetector(ctx, name, args, opts) (*LogAnomalyDetector, error)
NewLogDataProtectionPolicy(ctx, name, args, opts) (*LogDataProtectionPolicy, error)
NewLogDelivery(ctx, name, args, opts) (*LogDelivery, error)
NewLogDeliveryDestination(ctx, name, args, opts) (*LogDeliveryDestination, error)
NewLogDeliveryDestinationPolicy(ctx, name, args, opts) (*LogDeliveryDestinationPolicy, error)
NewLogDeliverySource(ctx, name, args, opts) (*LogDeliverySource, error)
NewLogDestination(ctx, name, args, opts) (*LogDestination, error)
NewLogDestinationPolicy(ctx, name, args, opts) (*LogDestinationPolicy, error)
NewLogGroup(ctx, name, args, opts) (*LogGroup, error)
NewLogIndexPolicy(ctx, name, args, opts) (*LogIndexPolicy, error)
NewLogMetricFilter(ctx, name, args, opts) (*LogMetricFilter, error)
NewLogResourcePolicy(ctx, name, args, opts) (*LogResourcePolicy, error)
NewLogStream(ctx, name, args, opts) (*LogStream, error)
NewLogSubscriptionFilter(ctx, name, args, opts) (*LogSubscriptionFilter, error)
NewLogTransformer(ctx, name, args, opts) (*LogTransformer, error)
NewMetricAlarm(ctx, name, args, opts) (*MetricAlarm, error)
NewMetricStream(ctx, name, args, opts) (*MetricStream, error)
NewQueryDefinition(ctx, name, args, opts) (*QueryDefinition, error)
// Data source lookups (selection)
GetCompositeAlarm(ctx, name, id, state, opts) (*CompositeAlarm, error)
GetDashboard(ctx, name, id, state, opts) (*Dashboard, error)
GetLogGroup(ctx, name, id, state, opts) (*LogGroup, error)
GetLogGroups(ctx, args, opts) (*GetLogGroupsResult, error)
GetMetricAlarm(ctx, name, id, state, opts) (*MetricAlarm, error)
GetEventBus(ctx, name, id, state, opts) (*EventBus, error)
GetEventRule(ctx, name, id, state, opts) (*EventRule, error)
GetLogDataProtectionPolicyDocument(ctx, args, opts) (*GetLogDataProtectionPolicyDocumentResult, error)Provides a CloudWatch Metric Alarm that triggers actions based on metric thresholds or anomaly detection models.
func NewMetricAlarm(ctx *pulumi.Context,
name string, args *MetricAlarmArgs, opts ...pulumi.ResourceOption) (*MetricAlarm, error)type MetricAlarmArgs struct {
// Execute actions on alarm state changes. Default: true
ActionsEnabled pulumi.BoolPtrInput
// ARNs of actions to execute when transitioning to ALARM state (max 5 per state)
AlarmActions pulumi.ArrayInput
// Human-readable description for the alarm
AlarmDescription pulumi.StringPtrInput
// Comparison operator. Valid values:
// "GreaterThanOrEqualToThreshold", "GreaterThanThreshold",
// "LessThanThreshold", "LessThanOrEqualToThreshold",
// "LessThanLowerOrGreaterThanUpperThreshold",
// "LessThanLowerThreshold", "GreaterThanUpperThreshold"
ComparisonOperator pulumi.StringInput
// Number of data points that must breach to trigger the alarm
DatapointsToAlarm pulumi.IntPtrInput
// Metric dimensions (key-value map)
Dimensions pulumi.StringMapInput
// Behavior for alarms based on percentiles with insufficient data:
// "ignore" or "evaluate"
EvaluateLowSampleCountPercentiles pulumi.StringPtrInput
// Number of periods over which data is compared to the threshold (required)
EvaluationPeriods pulumi.IntInput
// Percentile statistic, e.g. "p99". Conflicts with Statistic
ExtendedStatistic pulumi.StringPtrInput
// ARNs of actions for INSUFFICIENT_DATA state transitions
InsufficientDataActions pulumi.ArrayInput
// Name of the metric (required unless using MetricQueries)
MetricName pulumi.StringPtrInput
// Metric math expressions (max 20). Conflicts with simple metric fields
MetricQueries MetricAlarmMetricQueryArrayInput
// Unique alarm name within the AWS account (required)
Name pulumi.StringPtrInput
// Metric namespace (required unless using MetricQueries)
Namespace pulumi.StringPtrInput
// ARNs of actions for OK state transitions
OkActions pulumi.ArrayInput
// Period in seconds: 10, 20, 30, or any multiple of 60
Period pulumi.IntPtrInput
// AWS region override
Region pulumi.StringPtrInput
// Statistic: "SampleCount", "Average", "Sum", "Minimum", "Maximum"
// Conflicts with ExtendedStatistic
Statistic pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
// Threshold value for comparison (required for static threshold alarms)
Threshold pulumi.Float64PtrInput
// ID of the ANOMALY_DETECTION_BAND function for anomaly-based alarms
ThresholdMetricId pulumi.StringPtrInput
// Missing data treatment: "missing", "ignore", "breaching", "notBreaching"
TreatMissingData pulumi.StringPtrInput
// Metric unit (e.g. "Percent", "Count", "Bytes")
Unit pulumi.StringPtrInput
}type MetricAlarm struct {
pulumi.CustomResourceState
ActionsEnabled pulumi.BoolPtrOutput
AlarmActions pulumi.StringArrayOutput
AlarmDescription pulumi.StringPtrOutput
Arn pulumi.StringOutput // ARN of the CloudWatch Metric Alarm
ComparisonOperator pulumi.StringOutput
DatapointsToAlarm pulumi.IntPtrOutput
Dimensions pulumi.StringMapOutput
EvaluateLowSampleCountPercentiles pulumi.StringOutput
EvaluationPeriods pulumi.IntOutput
ExtendedStatistic pulumi.StringPtrOutput
InsufficientDataActions pulumi.StringArrayOutput
MetricName pulumi.StringPtrOutput
MetricQueries MetricAlarmMetricQueryArrayOutput
Name pulumi.StringOutput
Namespace pulumi.StringPtrOutput
OkActions pulumi.StringArrayOutput
Period pulumi.IntPtrOutput
Region pulumi.StringOutput
Statistic pulumi.StringPtrOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
Threshold pulumi.Float64PtrOutput
ThresholdMetricId pulumi.StringPtrOutput
TreatMissingData pulumi.StringPtrOutput
Unit pulumi.StringPtrOutput
}func GetMetricAlarm(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *MetricAlarmState,
opts ...pulumi.ResourceOption) (*MetricAlarm, error)_, err := cloudwatch.NewMetricAlarm(ctx, "cpuAlarm", &cloudwatch.MetricAlarmArgs{
Name: pulumi.String("high-cpu-utilization"),
ComparisonOperator: pulumi.String("GreaterThanOrEqualToThreshold"),
EvaluationPeriods: pulumi.Int(2),
MetricName: pulumi.String("CPUUtilization"),
Namespace: pulumi.String("AWS/EC2"),
Period: pulumi.Int(120),
Statistic: pulumi.String("Average"),
Threshold: pulumi.Float64(80),
AlarmDescription: pulumi.String("CPU utilization exceeds 80%"),
AlarmActions: pulumi.Array{
snsTopic.Arn,
},
OkActions: pulumi.Array{
snsTopic.Arn,
},
Dimensions: pulumi.StringMap{
"InstanceId": ec2Instance.ID(),
},
TreatMissingData: pulumi.String("notBreaching"),
})_, err := cloudwatch.NewMetricAlarm(ctx, "errorRateAlarm", &cloudwatch.MetricAlarmArgs{
Name: pulumi.String("high-error-rate"),
ComparisonOperator: pulumi.String("GreaterThanOrEqualToThreshold"),
EvaluationPeriods: pulumi.Int(2),
Threshold: pulumi.Float64(10),
AlarmDescription: pulumi.String("Request error rate has exceeded 10%"),
MetricQueries: cloudwatch.MetricAlarmMetricQueryArray{
&cloudwatch.MetricAlarmMetricQueryArgs{
Id: pulumi.String("e1"),
Expression: pulumi.String("m2/m1*100"),
Label: pulumi.String("Error Rate"),
ReturnData: pulumi.Bool(true),
},
&cloudwatch.MetricAlarmMetricQueryArgs{
Id: pulumi.String("m1"),
Metric: &cloudwatch.MetricAlarmMetricQueryMetricArgs{
MetricName: pulumi.String("RequestCount"),
Namespace: pulumi.String("AWS/ApplicationELB"),
Period: pulumi.Int(120),
Stat: pulumi.String("Sum"),
},
},
&cloudwatch.MetricAlarmMetricQueryArgs{
Id: pulumi.String("m2"),
Metric: &cloudwatch.MetricAlarmMetricQueryMetricArgs{
MetricName: pulumi.String("HTTPCode_ELB_5XX_Count"),
Namespace: pulumi.String("AWS/ApplicationELB"),
Period: pulumi.Int(120),
Stat: pulumi.String("Sum"),
},
},
},
})A composite alarm combines multiple alarms using a logical expression (AND/OR/NOT) to reduce alarm noise.
Note: A composite alarm cannot be destroyed while other composite alarms depend on it. Use
dependsOnand two-stage updates to manage cyclic dependencies.
func NewCompositeAlarm(ctx *pulumi.Context,
name string, args *CompositeAlarmArgs, opts ...pulumi.ResourceOption) (*CompositeAlarm, error)type CompositeAlarmArgs struct {
// Execute actions on alarm state changes. Default: true
ActionsEnabled pulumi.BoolPtrInput
// Suppressor alarm configuration
ActionsSuppressor CompositeAlarmActionsSuppressorPtrInput
// ARNs of actions for ALARM state (max 5)
AlarmActions pulumi.StringArrayInput
// Human-readable description
AlarmDescription pulumi.StringPtrInput
// Unique alarm name within the region (required)
AlarmName pulumi.StringInput
// Logical alarm rule expression (max 10240 chars), e.g.:
// "ALARM(alarm1) OR ALARM(alarm2)"
AlarmRule pulumi.StringInput
// ARNs of actions for INSUFFICIENT_DATA state (max 5)
InsufficientDataActions pulumi.StringArrayInput
// ARNs of actions for OK state (max 5)
OkActions pulumi.StringArrayInput
// AWS region override
Region pulumi.StringPtrInput
// Resource tags (max 50)
Tags pulumi.StringMapInput
}type CompositeAlarm struct {
pulumi.CustomResourceState
ActionsEnabled pulumi.BoolPtrOutput
ActionsSuppressor CompositeAlarmActionsSuppressorPtrOutput
AlarmActions pulumi.StringArrayOutput
AlarmDescription pulumi.StringPtrOutput
AlarmName pulumi.StringOutput
AlarmRule pulumi.StringOutput
Arn pulumi.StringOutput // ARN of the composite alarm
InsufficientDataActions pulumi.StringArrayOutput
OkActions pulumi.StringArrayOutput
Region pulumi.StringOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
}_, err := cloudwatch.NewCompositeAlarm(ctx, "serviceHealthAlarm", &cloudwatch.CompositeAlarmArgs{
AlarmName: pulumi.String("service-health"),
AlarmDescription: pulumi.String("Service is unhealthy when both CPU and error rate are high"),
AlarmRule: pulumi.Sprintf("ALARM(%v) AND ALARM(%v)",
cpuAlarm.Name, errorAlarm.Name),
AlarmActions: pulumi.StringArray{
pagerdutyTopic.Arn,
},
OkActions: pulumi.StringArray{
pagerdutyTopic.Arn,
},
})Manages a CloudWatch Logs log group. Supports retention policies, KMS encryption, and deletion protection.
func NewLogGroup(ctx *pulumi.Context,
name string, args *LogGroupArgs, opts ...pulumi.ResourceOption) (*LogGroup, error)type LogGroupArgs struct {
// Enable deletion protection. Default: false
// Once enabled, must be explicitly set to false to disable
DeletionProtectionEnabled pulumi.BoolPtrInput
// KMS CMK ARN for encrypting log data
KmsKeyId pulumi.StringPtrInput
// Log group class: "STANDARD", "INFREQUENT_ACCESS", or "DELIVERY"
// If "DELIVERY", RetentionInDays is forced to 2
LogGroupClass pulumi.StringPtrInput
// Log group name. Conflicts with NamePrefix
Name pulumi.StringPtrInput
// Unique name prefix. Conflicts with Name
NamePrefix pulumi.StringPtrInput
// AWS region override
Region pulumi.StringPtrInput
// Retention in days. Valid values: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150,
// 180, 365, 400, 545, 731, 1096, 1827, 2192, 2557, 2922, 3288, 3653, 0
// 0 = never expire
RetentionInDays pulumi.IntPtrInput
// If true, skip deletion on destroy (remove from state only)
SkipDestroy pulumi.BoolPtrInput
// Resource tags
Tags pulumi.StringMapInput
}type LogGroup struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput // ARN without ":*" suffix
DeletionProtectionEnabled pulumi.BoolOutput
KmsKeyId pulumi.StringPtrOutput
LogGroupClass pulumi.StringOutput
Name pulumi.StringOutput
NamePrefix pulumi.StringOutput
Region pulumi.StringOutput
RetentionInDays pulumi.IntPtrOutput
SkipDestroy pulumi.BoolPtrOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
}func GetLogGroup(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *LogGroupState,
opts ...pulumi.ResourceOption) (*LogGroup, error)Data source args for looking up an existing log group:
// Use cloudwatch.LookupLogGroup with:
// Required: Name string
// Returns: Arn, KmsKeyId, RetentionInDays, TagslogGroup, err := cloudwatch.NewLogGroup(ctx, "appLogs", &cloudwatch.LogGroupArgs{
Name: pulumi.String("/aws/app/my-service"),
RetentionInDays: pulumi.Int(30),
KmsKeyId: kmsKey.Arn,
Tags: pulumi.StringMap{
"Application": pulumi.String("my-service"),
"Environment": pulumi.String("production"),
},
})type GetLogDataProtectionPolicyDocumentArgs struct {
// Optional configuration block
Configuration *GetLogDataProtectionPolicyDocumentConfiguration
// Optional description
Description *string
// Policy document name (required)
Name string
// Policy statements (must be exactly two:
// first with "audit" operation, second with "deidentify" operation)
Statements []GetLogDataProtectionPolicyDocumentStatement
// Optional policy version
Version *string
}Provides a CloudWatch Dashboard resource for visualizing metrics and logs.
func NewDashboard(ctx *pulumi.Context,
name string, args *DashboardArgs, opts ...pulumi.ResourceOption) (*Dashboard, error)type DashboardArgs struct {
// Dashboard body JSON defining widgets and layout (required)
DashboardBody pulumi.StringInput
// Dashboard name (required)
DashboardName pulumi.StringInput
// AWS region override
Region pulumi.StringPtrInput
}type Dashboard struct {
pulumi.CustomResourceState
DashboardArn pulumi.StringOutput // ARN of the dashboard
DashboardBody pulumi.StringOutput
DashboardName pulumi.StringOutput
Region pulumi.StringOutput
}import "encoding/json"
dashboardBody, _ := json.Marshal(map[string]interface{}{
"widgets": []interface{}{
map[string]interface{}{
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties": map[string]interface{}{
"metrics": [][]string{
{"AWS/EC2", "CPUUtilization", "InstanceId", "i-012345"},
},
"period": 300,
"stat": "Average",
"region": "us-east-1",
"title": "EC2 Instance CPU",
},
},
map[string]interface{}{
"type": "alarm",
"x": 12,
"y": 0,
"width": 6,
"height": 6,
"properties": map[string]interface{}{
"title": "Alarms",
"alarms": []string{"arn:aws:cloudwatch:us-east-1:123456789012:alarm:my-alarm"},
},
},
},
})
_, err := cloudwatch.NewDashboard(ctx, "mainDashboard", &cloudwatch.DashboardArgs{
DashboardName: pulumi.String("production-overview"),
DashboardBody: pulumi.String(string(dashboardBody)),
})Provides an EventBridge Rule resource. EventBridge was formerly known as CloudWatch Events.
func NewEventRule(ctx *pulumi.Context,
name string, args *EventRuleArgs, opts ...pulumi.ResourceOption) (*EventRule, error)type EventRuleArgs struct {
// Description of the rule
Description pulumi.StringPtrInput
// Event bus name or ARN. Default: "default"
EventBusName pulumi.StringPtrInput
// Event pattern JSON (required if ScheduleExpression is not set)
// Max size: 2048 chars (adjustable to 4096 via service quota)
EventPattern pulumi.StringPtrInput
// Delete managed rules created by AWS. Default: false
ForceDestroy pulumi.BoolPtrInput
// Deprecated: Use State instead
IsEnabled pulumi.BoolPtrInput
// Rule name. Conflicts with NamePrefix
Name pulumi.StringPtrInput
// Unique name prefix (max 38 chars). Conflicts with Name
NamePrefix pulumi.StringPtrInput
// AWS region override
Region pulumi.StringPtrInput
// IAM role ARN for target invocation
RoleArn pulumi.StringPtrInput
// Schedule expression, e.g. "cron(0 20 * * ? *)" or "rate(5 minutes)"
// Required if EventPattern is not set. Only works on default event bus
ScheduleExpression pulumi.StringPtrInput
// Rule state: "DISABLED", "ENABLED",
// or "ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS"
// Default: "ENABLED". Conflicts with IsEnabled
State pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
}type EventRule struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput // ARN of the EventBridge rule
Description pulumi.StringPtrOutput
EventBusName pulumi.StringPtrOutput
EventPattern pulumi.StringPtrOutput
ForceDestroy pulumi.BoolPtrOutput
IsEnabled pulumi.BoolPtrOutput // Deprecated
Name pulumi.StringOutput
NamePrefix pulumi.StringOutput
Region pulumi.StringOutput
RoleArn pulumi.StringPtrOutput
ScheduleExpression pulumi.StringPtrOutput
State pulumi.StringPtrOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
}func GetEventRule(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *EventRuleState,
opts ...pulumi.ResourceOption) (*EventRule, error)Configures a target for an EventBridge rule. Supports Lambda, SQS, SNS, ECS, Step Functions, API Gateway, Batch, and more.
func NewEventTarget(ctx *pulumi.Context,
name string, args *EventTargetArgs, opts ...pulumi.ResourceOption) (*EventTarget, error)type EventTargetArgs struct {
// ARN of the target resource (required)
Arn pulumi.StringInput
// AppSync GraphQL API mutation target
AppsyncTarget EventTargetAppsyncTargetPtrInput
// AWS Batch job target
BatchTarget EventTargetBatchTargetPtrInput
// Dead letter queue configuration
DeadLetterConfig EventTargetDeadLetterConfigPtrInput
// ECS task target
EcsTarget EventTargetEcsTargetPtrInput
// Event bus name or ARN. Default: "default"
EventBusName pulumi.StringPtrInput
// Delete managed rules. Default: false
ForceDestroy pulumi.BoolPtrInput
// API Gateway target
HttpTarget EventTargetHttpTargetPtrInput
// JSON input passed directly to the target. Conflicts with InputPath/InputTransformer
Input pulumi.StringPtrInput
// JSONPath expression to extract part of the event
InputPath pulumi.StringPtrInput
// Input transformer to reshape event data
InputTransformer EventTargetInputTransformerPtrInput
// Kinesis stream target
KinesisTarget EventTargetKinesisTargetPtrInput
// AWS region override
Region pulumi.StringPtrInput
// Retry policy for failed invocations
RetryPolicy EventTargetRetryPolicyPtrInput
// Name of the EventBridge rule (required)
Rule pulumi.StringInput
// IAM role ARN for sending events to the target
RoleArn pulumi.StringPtrInput
// SSM Run Command targets
RunCommandTargets EventTargetRunCommandTargetArrayInput
// SageMaker pipeline target
SagemakerPipelineTarget EventTargetSagemakerPipelineTargetPtrInput
// SQS FIFO queue configuration
SqsTarget EventTargetSqsTargetPtrInput
// Unique target ID within the rule (default: random)
TargetId pulumi.StringPtrInput
}import "encoding/json"
patternJSON, _ := json.Marshal(map[string]interface{}{
"detail-type": []string{"AWS Console Sign In via CloudTrail"},
})
rule, _ := cloudwatch.NewEventRule(ctx, "signInMonitor", &cloudwatch.EventRuleArgs{
Name: pulumi.String("capture-console-signin"),
Description: pulumi.String("Capture AWS Console sign-in events"),
EventPattern: pulumi.String(string(patternJSON)),
})
_, err := cloudwatch.NewEventTarget(ctx, "signInAlert", &cloudwatch.EventTargetArgs{
Rule: rule.Name,
TargetId: pulumi.String("NotifySNS"),
Arn: alertTopic.Arn,
})rule, _ := cloudwatch.NewEventRule(ctx, "dailyReport", &cloudwatch.EventRuleArgs{
Name: pulumi.String("daily-report-generator"),
ScheduleExpression: pulumi.String("cron(0 8 * * ? *)"),
Description: pulumi.String("Generate daily report at 8 AM UTC"),
})
_, err := cloudwatch.NewEventTarget(ctx, "reportLambda", &cloudwatch.EventTargetArgs{
Rule: rule.Name,
TargetId: pulumi.String("ReportGeneratorLambda"),
Arn: reportLambda.Arn,
})// Resource constructors
NewEventDataStore(ctx, name, args, opts) (*EventDataStore, error)
NewOrganizationDelegatedAdminAccount(ctx, name, args, opts) (*OrganizationDelegatedAdminAccount, error)
NewTrail(ctx, name, args, opts) (*Trail, error)
// Data source lookups
GetEventDataStore(ctx, name, id, state, opts) (*EventDataStore, error)
GetOrganizationDelegatedAdminAccount(ctx, name, id, state, opts) (*OrganizationDelegatedAdminAccount, error)
GetServiceAccount(ctx, args, opts) (*GetServiceAccountResult, error)
GetTrail(ctx, name, id, state, opts) (*Trail, error)Provides a CloudTrail resource that logs AWS API calls to S3 and optionally CloudWatch Logs.
Tip: For a multi-region trail, this resource must be in the home region of the trail. Tip: For an organization trail, this resource must be in the master account of the organization.
func NewTrail(ctx *pulumi.Context,
name string, args *TrailArgs, opts ...pulumi.ResourceOption) (*Trail, error)type TrailArgs struct {
// Advanced event selectors for data event logging. Conflicts with EventSelectors
AdvancedEventSelectors TrailAdvancedEventSelectorArrayInput
// Log group ARN for CloudWatch Logs delivery (must include ":*" wildcard)
CloudWatchLogsGroupArn pulumi.StringPtrInput
// IAM role ARN for CloudWatch Logs delivery
CloudWatchLogsRoleArn pulumi.StringPtrInput
// Enable log file integrity validation. Default: false
EnableLogFileValidation pulumi.BoolPtrInput
// Enable/disable CloudTrail logging. Default: true
EnableLogging pulumi.BoolPtrInput
// Event selectors for data event logging. Conflicts with AdvancedEventSelectors
EventSelectors TrailEventSelectorArrayInput
// Log IAM global service events (e.g. IAM). Default: true
IncludeGlobalServiceEvents pulumi.BoolPtrInput
// Anomaly detection insight selectors
InsightSelectors TrailInsightSelectorArrayInput
// Log events in all regions. Default: false
IsMultiRegionTrail pulumi.BoolPtrInput
// Log events for all accounts in the organization. Default: false
IsOrganizationTrail pulumi.BoolPtrInput
// KMS key ARN for encrypting CloudTrail logs
KmsKeyId pulumi.StringPtrInput
// Trail name (required)
Name pulumi.StringPtrInput
// AWS region override
Region pulumi.StringPtrInput
// S3 bucket name for log delivery (required)
S3BucketName pulumi.StringInput
// S3 key prefix for log files
S3KeyPrefix pulumi.StringPtrInput
// SNS topic ARN for log file delivery notifications
SnsTopicName pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
}type Trail struct {
pulumi.CustomResourceState
AdvancedEventSelectors TrailAdvancedEventSelectorArrayOutput
Arn pulumi.StringOutput // ARN of the trail
CloudWatchLogsGroupArn pulumi.StringPtrOutput
CloudWatchLogsRoleArn pulumi.StringPtrOutput
EnableLogFileValidation pulumi.BoolPtrOutput
EnableLogging pulumi.BoolPtrOutput
EventSelectors TrailEventSelectorArrayOutput
HomeRegion pulumi.StringOutput // Region the trail was created in
IncludeGlobalServiceEvents pulumi.BoolPtrOutput
InsightSelectors TrailInsightSelectorArrayOutput
IsMultiRegionTrail pulumi.BoolPtrOutput
IsOrganizationTrail pulumi.BoolPtrOutput
KmsKeyId pulumi.StringPtrOutput
Name pulumi.StringOutput
Region pulumi.StringOutput
S3BucketName pulumi.StringOutput
S3KeyPrefix pulumi.StringPtrOutput
SnsTopicArn pulumi.StringOutput
SnsTopicName pulumi.StringPtrOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
}import (
"fmt"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/cloudtrail"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/cloudwatch"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/iam"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/s3"
)
// S3 bucket for CloudTrail logs
trailBucket, _ := s3.NewBucket(ctx, "trailBucket", &s3.BucketArgs{
Bucket: pulumi.String("my-cloudtrail-logs"),
ForceDestroy: pulumi.Bool(true),
})
// CloudWatch log group for CloudTrail
trailLogGroup, _ := cloudwatch.NewLogGroup(ctx, "trailLogs", &cloudwatch.LogGroupArgs{
Name: pulumi.String("/aws/cloudtrail/my-trail"),
RetentionInDays: pulumi.Int(90),
})
// CloudTrail trail
trail, err := cloudtrail.NewTrail(ctx, "mainTrail", &cloudtrail.TrailArgs{
Name: pulumi.String("main-trail"),
S3BucketName: trailBucket.ID(),
IncludeGlobalServiceEvents: pulumi.Bool(true),
IsMultiRegionTrail: pulumi.Bool(true),
EnableLogFileValidation: pulumi.Bool(true),
CloudWatchLogsGroupArn: pulumi.Sprintf("%v:*", trailLogGroup.Arn),
CloudWatchLogsRoleArn: trailRole.Arn,
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})trail, err := cloudtrail.NewTrail(ctx, "fullAuditTrail", &cloudtrail.TrailArgs{
Name: pulumi.String("full-audit-trail"),
S3BucketName: auditBucket.ID(),
IsMultiRegionTrail: pulumi.Bool(true),
IncludeGlobalServiceEvents: pulumi.Bool(true),
EnableLogFileValidation: pulumi.Bool(true),
KmsKeyId: kmsKey.Arn,
EventSelectors: cloudtrail.TrailEventSelectorArray{
&cloudtrail.TrailEventSelectorArgs{
ReadWriteType: pulumi.String("All"),
IncludeManagementEvents: pulumi.Bool(true),
DataResources: cloudtrail.TrailEventSelectorDataResourceArray{
&cloudtrail.TrailEventSelectorDataResourceArgs{
Type: pulumi.String("AWS::S3::Object"),
Values: pulumi.StringArray{
pulumi.String("arn:aws:s3:::"),
},
},
},
},
},
})lambdaErrorAlarm, _ := cloudwatch.NewMetricAlarm(ctx, "lambdaErrors", &cloudwatch.MetricAlarmArgs{
Name: pulumi.String("lambda-error-rate"),
ComparisonOperator: pulumi.String("GreaterThanThreshold"),
EvaluationPeriods: pulumi.Int(1),
MetricName: pulumi.String("Errors"),
Namespace: pulumi.String("AWS/Lambda"),
Period: pulumi.Int(60),
Statistic: pulumi.String("Sum"),
Threshold: pulumi.Float64(0),
TreatMissingData: pulumi.String("notBreaching"),
Dimensions: pulumi.StringMap{
"FunctionName": myLambda.Name,
},
AlarmActions: pulumi.Array{oncallTopic.Arn},
})// Create a metric filter for application errors
filter, _ := cloudwatch.NewLogMetricFilter(ctx, "errorFilter", &cloudwatch.LogMetricFilterArgs{
Name: pulumi.String("application-errors"),
Pattern: pulumi.String("[timestamp, requestId, level=ERROR, ...]"),
LogGroupName: appLogGroup.Name,
MetricTransformation: &cloudwatch.LogMetricFilterMetricTransformationArgs{
Name: pulumi.String("ApplicationErrors"),
Namespace: pulumi.String("MyApp/Logs"),
Value: pulumi.String("1"),
},
})
// Alarm on the custom metric
_, err := cloudwatch.NewMetricAlarm(ctx, "appErrorAlarm", &cloudwatch.MetricAlarmArgs{
Name: pulumi.String("app-error-count"),
ComparisonOperator: pulumi.String("GreaterThanThreshold"),
EvaluationPeriods: pulumi.Int(1),
MetricName: pulumi.String("ApplicationErrors"),
Namespace: pulumi.String("MyApp/Logs"),
Period: pulumi.Int(300),
Statistic: pulumi.String("Sum"),
Threshold: pulumi.Float64(5),
AlarmActions: pulumi.Array{alertTopic.Arn},
})Install with Tessl CLI
npx tessl i tessl/golang-github-com-pulumi-pulumi-aws-sdk-v7docs