Class MetricStream


  • public class MetricStream
    extends com.pulumi.resources.CustomResource
    Provides a CloudWatch Metric Stream resource. ## Example Usage ### Filters <!--Start PulumiCodeChooser -->
     
     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.s3.BucketV2Args;
     import com.pulumi.aws.kinesis.FirehoseDeliveryStream;
     import com.pulumi.aws.kinesis.FirehoseDeliveryStreamArgs;
     import com.pulumi.aws.kinesis.inputs.FirehoseDeliveryStreamExtendedS3ConfigurationArgs;
     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) {
             // https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-metric-streams-trustpolicy.html
             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()
                 .name("metric_stream_to_firehose_role")
                 .assumeRolePolicy(streamsAssumeRole.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json()))
                 .build());
     
             var bucket = new BucketV2("bucket", BucketV2Args.builder()
                 .bucket("metric-stream-test-bucket")
                 .build());
     
             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()
                 .name("metric-stream-test-stream")
                 .destination("extended_s3")
                 .extendedS3Configuration(FirehoseDeliveryStreamExtendedS3ConfigurationArgs.builder()
                     .roleArn(firehoseToS3Role.arn())
                     .bucketArn(bucket.arn())
                     .build())
                 .build());
     
             var main = new MetricStream("main", MetricStreamArgs.builder()
                 .name("my-metric-stream")
                 .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());
     
             // https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-metric-streams-trustpolicy.html
             final var metricStreamToFirehose = 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()
                 .name("default")
                 .role(metricStreamToFirehoseRole.id())
                 .policy(metricStreamToFirehose.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult).applyValue(metricStreamToFirehose -> metricStreamToFirehose.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json())))
                 .build());
     
             var bucketAcl = new BucketAclV2("bucketAcl", BucketAclV2Args.builder()
                 .bucket(bucket.id())
                 .acl("private")
                 .build());
     
             final var firehoseToS3 = 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()
                 .name("default")
                 .role(firehoseToS3Role.id())
                 .policy(firehoseToS3.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult).applyValue(firehoseToS3 -> firehoseToS3.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json())))
                 .build());
     
         }
     }
     
     
    <!--End PulumiCodeChooser --> ### Additional Statistics <!--Start PulumiCodeChooser -->
     
     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()
                 .name("my-metric-stream")
                 .roleArn(metricStreamToFirehose.arn())
                 .firehoseArn(s3Stream.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());
     
         }
     }
     
     
    <!--End PulumiCodeChooser --> ## Import Using `pulumi import`, import CloudWatch metric streams using the `name`. For example: ```sh $ pulumi import aws:cloudwatch/metricStream:MetricStream sample sample-stream-name ```
    • Nested Class Summary

      • Nested classes/interfaces inherited from class com.pulumi.resources.CustomResource

        com.pulumi.resources.CustomResource.CustomResourceInternal
      • Nested classes/interfaces inherited from class com.pulumi.resources.Resource

        com.pulumi.resources.Resource.LazyField<T extends java.lang.Object>, com.pulumi.resources.Resource.LazyFields, com.pulumi.resources.Resource.ResourceInternal
    • Field Summary

      • Fields inherited from class com.pulumi.resources.Resource

        childResources, remote
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      com.pulumi.core.Output<java.lang.String> arn()  
      com.pulumi.core.Output<java.lang.String> creationDate()  
      com.pulumi.core.Output<java.util.Optional<java.util.List<MetricStreamExcludeFilter>>> excludeFilters()  
      com.pulumi.core.Output<java.lang.String> firehoseArn()  
      static MetricStream get​(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, MetricStreamState state, com.pulumi.resources.CustomResourceOptions options)
      Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
      com.pulumi.core.Output<java.util.Optional<java.util.List<MetricStreamIncludeFilter>>> includeFilters()  
      com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> includeLinkedAccountsMetrics()  
      com.pulumi.core.Output<java.lang.String> lastUpdateDate()  
      com.pulumi.core.Output<java.lang.String> name()  
      com.pulumi.core.Output<java.lang.String> namePrefix()  
      com.pulumi.core.Output<java.lang.String> outputFormat()  
      com.pulumi.core.Output<java.lang.String> roleArn()  
      com.pulumi.core.Output<java.lang.String> state()  
      com.pulumi.core.Output<java.util.Optional<java.util.List<MetricStreamStatisticsConfiguration>>> statisticsConfigurations()  
      com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()  
      com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()  
      • Methods inherited from class com.pulumi.resources.CustomResource

        getId, id, idFuture
      • Methods inherited from class com.pulumi.resources.Resource

        getChildResources, getResourceName, getResourceType, getUrn, pulumiChildResources, pulumiResourceName, pulumiResourceType, urn
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • MetricStream

        public MetricStream​(java.lang.String name)
        Parameters:
        name - The _unique_ name of the resulting resource.
      • MetricStream

        public MetricStream​(java.lang.String name,
                            MetricStreamArgs args)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
      • MetricStream

        public MetricStream​(java.lang.String name,
                            MetricStreamArgs args,
                            @Nullable
                            com.pulumi.resources.CustomResourceOptions options)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
        options - A bag of options that control this resource's behavior.
    • Method Detail

      • arn

        public com.pulumi.core.Output<java.lang.String> arn()
        Returns:
        ARN of the metric stream.
      • creationDate

        public com.pulumi.core.Output<java.lang.String> creationDate()
        Returns:
        Date and time in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8) that the metric stream was created.
      • excludeFilters

        public com.pulumi.core.Output<java.util.Optional<java.util.List<MetricStreamExcludeFilter>>> excludeFilters()
        Returns:
        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`.
      • firehoseArn

        public com.pulumi.core.Output<java.lang.String> firehoseArn()
        Returns:
        ARN of the Amazon Kinesis Firehose delivery stream to use for this metric stream.
      • includeFilters

        public com.pulumi.core.Output<java.util.Optional<java.util.List<MetricStreamIncludeFilter>>> includeFilters()
        Returns:
        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`.
      • includeLinkedAccountsMetrics

        public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> includeLinkedAccountsMetrics()
        Returns:
        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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html).
      • lastUpdateDate

        public com.pulumi.core.Output<java.lang.String> lastUpdateDate()
        Returns:
        Date and time in [RFC3339 format](https://tools.ietf.org/html/rfc3339#section-5.8) that the metric stream was last updated.
      • name

        public com.pulumi.core.Output<java.lang.String> name()
        Returns:
        Friendly name of the metric stream. If omitted, the provider will assign a random, unique name. Conflicts with `name_prefix`.
      • namePrefix

        public com.pulumi.core.Output<java.lang.String> namePrefix()
        Returns:
        Creates a unique friendly name beginning with the specified prefix. Conflicts with `name`.
      • outputFormat

        public com.pulumi.core.Output<java.lang.String> outputFormat()
        Returns:
        Output format for the stream. Possible values are `json`, `opentelemetry0.7`, and `opentelemetry1.0`. For more information about output formats, see [Metric streams output formats](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-metric-streams-formats.html). The following arguments are optional:
      • roleArn

        public com.pulumi.core.Output<java.lang.String> roleArn()
        Returns:
        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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-metric-streams-trustpolicy.html).
      • state

        public com.pulumi.core.Output<java.lang.String> state()
        Returns:
        State of the metric stream. Possible values are `running` and `stopped`.
      • statisticsConfigurations

        public com.pulumi.core.Output<java.util.Optional<java.util.List<MetricStreamStatisticsConfiguration>>> statisticsConfigurations()
        Returns:
        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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html.html). If the OutputFormat is `opentelemetry0.7` or `opentelemetry1.0`, you can stream percentile statistics (p99 etc.). See details below.
      • tags

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()
        Returns:
        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.
      • tagsAll

        public com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()
        Returns:
        A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
      • get

        public static MetricStream get​(java.lang.String name,
                                       com.pulumi.core.Output<java.lang.String> id,
                                       @Nullable
                                       MetricStreamState state,
                                       @Nullable
                                       com.pulumi.resources.CustomResourceOptions options)
        Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
        Parameters:
        name - The _unique_ name of the resulting resource.
        id - The _unique_ provider ID of the resource to lookup.
        state -
        options - Optional settings to control the behavior of the CustomResource.