MetricStream

class MetricStream : KotlinCustomResource

Provides a CloudWatch Metric Stream resource.

Example Usage

Filters

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.iam.IamFunctions;
import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
import com.pulumi.aws.iam.Role;
import com.pulumi.aws.iam.RoleArgs;
import com.pulumi.aws.s3.BucketV2;
import com.pulumi.aws.kinesis.FirehoseDeliveryStream;
import com.pulumi.aws.kinesis.FirehoseDeliveryStreamArgs;
import com.pulumi.aws.kinesis.inputs.FirehoseDeliveryStreamS3ConfigurationArgs;
import com.pulumi.aws.cloudwatch.MetricStream;
import com.pulumi.aws.cloudwatch.MetricStreamArgs;
import com.pulumi.aws.cloudwatch.inputs.MetricStreamIncludeFilterArgs;
import com.pulumi.aws.iam.RolePolicy;
import com.pulumi.aws.iam.RolePolicyArgs;
import com.pulumi.aws.s3.BucketAclV2;
import com.pulumi.aws.s3.BucketAclV2Args;
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 streamsAssumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.statements(GetPolicyDocumentStatementArgs.builder()
.effect("Allow")
.principals(GetPolicyDocumentStatementPrincipalArgs.builder()
.type("Service")
.identifiers("streams.metrics.cloudwatch.amazonaws.com")
.build())
.actions("sts:AssumeRole")
.build())
.build());
var metricStreamToFirehoseRole = new Role("metricStreamToFirehoseRole", RoleArgs.builder()
.assumeRolePolicy(streamsAssumeRole.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json()))
.build());
var bucket = new BucketV2("bucket");
final var firehoseAssumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.statements(GetPolicyDocumentStatementArgs.builder()
.effect("Allow")
.principals(GetPolicyDocumentStatementPrincipalArgs.builder()
.type("Service")
.identifiers("firehose.amazonaws.com")
.build())
.actions("sts:AssumeRole")
.build())
.build());
var firehoseToS3Role = new Role("firehoseToS3Role", RoleArgs.builder()
.assumeRolePolicy(firehoseAssumeRole.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json()))
.build());
var s3Stream = new FirehoseDeliveryStream("s3Stream", FirehoseDeliveryStreamArgs.builder()
.destination("s3")
.s3Configuration(FirehoseDeliveryStreamS3ConfigurationArgs.builder()
.roleArn(firehoseToS3Role.arn())
.bucketArn(bucket.arn())
.build())
.build());
var main = new MetricStream("main", MetricStreamArgs.builder()
.roleArn(metricStreamToFirehoseRole.arn())
.firehoseArn(s3Stream.arn())
.outputFormat("json")
.includeFilters(
MetricStreamIncludeFilterArgs.builder()
.namespace("AWS/EC2")
.metricNames(
"CPUUtilization",
"NetworkOut")
.build(),
MetricStreamIncludeFilterArgs.builder()
.namespace("AWS/EBS")
.metricNames()
.build())
.build());
final var metricStreamToFirehosePolicyDocument = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.statements(GetPolicyDocumentStatementArgs.builder()
.effect("Allow")
.actions(
"firehose:PutRecord",
"firehose:PutRecordBatch")
.resources(s3Stream.arn())
.build())
.build());
var metricStreamToFirehoseRolePolicy = new RolePolicy("metricStreamToFirehoseRolePolicy", RolePolicyArgs.builder()
.role(metricStreamToFirehoseRole.id())
.policy(metricStreamToFirehosePolicyDocument.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult).applyValue(metricStreamToFirehosePolicyDocument -> metricStreamToFirehosePolicyDocument.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json())))
.build());
var bucketAcl = new BucketAclV2("bucketAcl", BucketAclV2Args.builder()
.bucket(bucket.id())
.acl("private")
.build());
final var firehoseToS3PolicyDocument = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.statements(GetPolicyDocumentStatementArgs.builder()
.effect("Allow")
.actions(
"s3:AbortMultipartUpload",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:PutObject")
.resources(
bucket.arn(),
bucket.arn().applyValue(arn -> String.format("%s/*", arn)))
.build())
.build());
var firehoseToS3RolePolicy = new RolePolicy("firehoseToS3RolePolicy", RolePolicyArgs.builder()
.role(firehoseToS3Role.id())
.policy(firehoseToS3PolicyDocument.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult).applyValue(firehoseToS3PolicyDocument -> firehoseToS3PolicyDocument.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json())))
.build());
}
}

Additional Statistics

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.cloudwatch.MetricStream;
import com.pulumi.aws.cloudwatch.MetricStreamArgs;
import com.pulumi.aws.cloudwatch.inputs.MetricStreamStatisticsConfigurationArgs;
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 main = new MetricStream("main", MetricStreamArgs.builder()
.roleArn(aws_iam_role.metric_stream_to_firehose().arn())
.firehoseArn(aws_kinesis_firehose_delivery_stream.s3_stream().arn())
.outputFormat("json")
.statisticsConfigurations(
MetricStreamStatisticsConfigurationArgs.builder()
.additionalStatistics(
"p1",
"tm99")
.includeMetrics(MetricStreamStatisticsConfigurationIncludeMetricArgs.builder()
.metricName("CPUUtilization")
.namespace("AWS/EC2")
.build())
.build(),
MetricStreamStatisticsConfigurationArgs.builder()
.additionalStatistics("TS(50.5:)")
.includeMetrics(MetricStreamStatisticsConfigurationIncludeMetricArgs.builder()
.metricName("CPUUtilization")
.namespace("AWS/EC2")
.build())
.build())
.build());
}
}

Import

CloudWatch metric streams can be imported using the name, e.g.,

$ pulumi import aws:cloudwatch/metricStream:MetricStream sample sample-stream-name

*/

Properties

Link copied to clipboard
val arn: Output<String>

ARN of the metric stream.

Link copied to clipboard
val creationDate: Output<String>

Date and time in RFC3339 format that the metric stream was created.

Link copied to clipboard

List of exclusive metric filters. If you specify this parameter, the stream sends metrics from all metric namespaces except for the namespaces and the conditional metric names that you specify here. If you don't specify metric names or provide empty metric names whole metric namespace is excluded. Conflicts with include_filter.

Link copied to clipboard
val firehoseArn: Output<String>

ARN of the Amazon Kinesis Firehose delivery stream to use for this metric stream.

Link copied to clipboard
val id: Output<String>
Link copied to clipboard

List of inclusive metric filters. If you specify this parameter, the stream sends only the conditional metric names from the metric namespaces that you specify here. If you don't specify metric names or provide empty metric names whole metric namespace is included. Conflicts with exclude_filter.

Link copied to clipboard

If you are creating a metric stream in a monitoring account, specify true to include metrics from source accounts that are linked to this monitoring account, in the metric stream. The default is false. For more information about linking accounts, see CloudWatch cross-account observability.

Link copied to clipboard
val lastUpdateDate: Output<String>

Date and time in RFC3339 format that the metric stream was last updated.

Link copied to clipboard
val name: Output<String>

Friendly name of the metric stream. If omitted, the provider will assign a random, unique name. Conflicts with name_prefix.

Link copied to clipboard
val namePrefix: Output<String>

Creates a unique friendly name beginning with the specified prefix. Conflicts with name.

Link copied to clipboard
val outputFormat: Output<String>

Output format for the stream. Possible values are json and opentelemetry0.7. For more information about output formats, see Metric streams output formats. The following arguments are optional:

Link copied to clipboard
val pulumiChildResources: Set<KotlinResource>
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
val roleArn: Output<String>

ARN of the IAM role that this metric stream will use to access Amazon Kinesis Firehose resources. For more information about role permissions, see Trust between CloudWatch and Kinesis Data Firehose.

Link copied to clipboard
val state: Output<String>

State of the metric stream. Possible values are running and stopped.

Link copied to clipboard

For each entry in this array, you specify one or more metrics and the list of additional statistics to stream for those metrics. The additional statistics that you can stream depend on the stream's output_format. If the OutputFormat is json, you can stream any additional statistic that is supported by CloudWatch, listed in CloudWatch statistics definitions. If the OutputFormat is opentelemetry0.7, you can stream percentile statistics (p99 etc.). See details below.

Link copied to clipboard
val tags: Output<Map<String, String>>?

Map of tags to assign to the resource. If configured with a provider default_tags configuration block present, tags with matching keys will overwrite those defined at the provider-level.

Link copied to clipboard
val tagsAll: Output<Map<String, String>>

A map of tags assigned to the resource, including those inherited from the provider default_tags configuration block.

Link copied to clipboard
val urn: Output<String>