Class Scraper


  • public class Scraper
    extends com.pulumi.resources.CustomResource
    > **Note:** If you change a Scraper's source (EKS cluster or VPC configuration), Terraform will delete the current Scraper and create a new one. Provides an Amazon Managed Service for Prometheus fully managed collector (scraper). Read more in the [Amazon Managed Service for Prometheus user guide](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector.html). ## Example Usage ### Basic Usage
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceEksArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationAmpArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 Scraper("example", ScraperArgs.builder()
                 .source(ScraperSourceArgs.builder()
                     .eks(ScraperSourceEksArgs.builder()
                         .clusterArn(exampleAwsEksCluster.arn())
                         .subnetIds(exampleAwsEksCluster.vpcConfig()[0].subnetIds())
                         .build())
                     .build())
                 .destination(ScraperDestinationArgs.builder()
                     .amp(ScraperDestinationAmpArgs.builder()
                         .workspaceArn(exampleAwsPrometheusWorkspace.arn())
                         .build())
                     .build())
                 .scrapeConfiguration("""
     global:
       scrape_interval: 30s
     scrape_configs:
       # pod metrics
       - job_name: pod_exporter
         kubernetes_sd_configs:
           - role: pod
       # container metrics
       - job_name: cadvisor
         scheme: https
         authorization:
           credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
         kubernetes_sd_configs:
           - role: node
         relabel_configs:
           - action: labelmap
             regex: __meta_kubernetes_node_label_(.+)
           - replacement: kubernetes.default.svc:443
             target_label: __address__
           - source_labels: [__meta_kubernetes_node_name]
             regex: (.+)
             target_label: __metrics_path__
             replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
       # apiserver metrics
       - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
         job_name: kubernetes-apiservers
         kubernetes_sd_configs:
         - role: endpoints
         relabel_configs:
         - action: keep
           regex: default;kubernetes;https
           source_labels:
           - __meta_kubernetes_namespace
           - __meta_kubernetes_service_name
           - __meta_kubernetes_endpoint_port_name
         scheme: https
       # kube proxy metrics
       - job_name: kube-proxy
         honor_labels: true
         kubernetes_sd_configs:
         - role: pod
         relabel_configs:
         - action: keep
           source_labels:
           - __meta_kubernetes_namespace
           - __meta_kubernetes_pod_name
           separator: '/'
           regex: 'kube-system/kube-proxy.+'
         - source_labels:
           - __address__
           action: replace
           target_label: __address__
           regex: (.+?)(\\\\:\\\\d+)?
           replacement: $1:10249
                 """)
                 .build());
     
         }
     }
     
     
    ### CloudWatch Destination
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceEksArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationCloudwatchArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 Scraper("example", ScraperArgs.builder()
                 .source(ScraperSourceArgs.builder()
                     .eks(ScraperSourceEksArgs.builder()
                         .clusterArn(exampleAwsEksCluster.arn())
                         .subnetIds(exampleAwsEksCluster.vpcConfig()[0].subnetIds())
                         .build())
                     .build())
                 .destination(ScraperDestinationArgs.builder()
                     .cloudwatch(ScraperDestinationCloudwatchArgs.builder()
                         .datasetArn("arn:aws:cloudwatch:us-west-2:123456789012:dataset/default")
                         .build())
                     .build())
                 .scrapeConfiguration("""
     global:
       scrape_interval: 30s
     scrape_configs:
       - job_name: pod_exporter
         kubernetes_sd_configs:
           - role: pod
                 """)
                 .build());
     
         }
     }
     
     
    ### VPC Configuration
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceVpcArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationAmpArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 Scraper("example", ScraperArgs.builder()
                 .source(ScraperSourceArgs.builder()
                     .vpc(ScraperSourceVpcArgs.builder()
                         .securityGroupIds(exampleAwsSecurityGroup.id())
                         .subnetIds(                    
                             example1.id(),
                             example2.id())
                         .build())
                     .build())
                 .destination(ScraperDestinationArgs.builder()
                     .amp(ScraperDestinationAmpArgs.builder()
                         .workspaceArn(exampleAwsPrometheusWorkspace.arn())
                         .build())
                     .build())
                 .scrapeConfiguration("""
     global:
       scrape_interval: 30s
     scrape_configs:
       - job_name: 'my-service'
         dns_sd_configs:
           - names: ['my-service.my-namespace']
             type: A
             port: 8080
         metrics_path: '/metrics'
         relabel_configs:
           - target_label: service_name
             replacement: 'my-service'
           - target_label: discovery_method
             replacement: 'cloudmap-dns'
                 """)
                 .build());
     
         }
     }
     
     
    ### OpenSearch Exporter
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceVpcArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationAmpArgs;
     import com.pulumi.aws.amp.inputs.ScraperExporterArgs;
     import com.pulumi.aws.amp.inputs.ScraperExporterOpensearchArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 Scraper("example", ScraperArgs.builder()
                 .source(ScraperSourceArgs.builder()
                     .vpc(ScraperSourceVpcArgs.builder()
                         .securityGroupIds(exampleAwsSecurityGroup.id())
                         .subnetIds(                    
                             example1.id(),
                             example2.id())
                         .build())
                     .build())
                 .destination(ScraperDestinationArgs.builder()
                     .amp(ScraperDestinationAmpArgs.builder()
                         .workspaceArn(exampleAwsPrometheusWorkspace.arn())
                         .build())
                     .build())
                 .exporter(ScraperExporterArgs.builder()
                     .opensearch(ScraperExporterOpensearchArgs.builder()
                         .domainArn(exampleAwsOpensearchDomain.arn())
                         .build())
                     .build())
                 .scrapeConfiguration("""
     global:
       scrape_interval: 30s
     scrape_configs:
       - job_name: 'my-service'
         dns_sd_configs:
           - names: ['my-service.my-namespace']
             type: A
             port: 8080
         metrics_path: '/metrics'
                 """)
                 .build());
     
         }
     }
     
     
    ### Use default EKS scraper configuration You can use the data source `aws.amp.getDefaultScraperConfiguration` to use a service managed scrape configuration.
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.amp.AmpFunctions;
     import com.pulumi.aws.amp.inputs.GetDefaultScraperConfigurationArgs;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationAmpArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceEksArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 example = AmpFunctions.getDefaultScraperConfiguration(GetDefaultScraperConfigurationArgs.builder()
                 .build());
     
             var exampleScraper = new Scraper("exampleScraper", ScraperArgs.builder()
                 .destination(ScraperDestinationArgs.builder()
                     .amp(ScraperDestinationAmpArgs.builder()
                         .workspaceArn(exampleAwsPrometheusWorkspace.arn())
                         .build())
                     .build())
                 .source(ScraperSourceArgs.builder()
                     .eks(ScraperSourceEksArgs.builder()
                         .clusterArn(exampleAwsEksCluster.arn())
                         .subnetIds(exampleAwsEksCluster.vpcConfig()[0].subnetIds())
                         .build())
                     .build())
                 .scrapeConfiguration(example.configuration())
                 .build());
     
         }
     }
     
     
    ### Ignoring changes to Prometheus Workspace destination A managed scraper will add a `AMPAgentlessScraper` tag to its Prometheus workspace destination. To avoid Terraform state forcing removing the tag from the workspace, you can add this tag to the destination workspace (preferred) or ignore tags changes with `lifecycle`. See example below.
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.eks.EksFunctions;
     import com.pulumi.aws.eks.inputs.GetClusterArgs;
     import com.pulumi.aws.amp.Workspace;
     import com.pulumi.aws.amp.WorkspaceArgs;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceEksArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationAmpArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 this = EksFunctions.getCluster(GetClusterArgs.builder()
                 .name("example")
                 .build());
     
             var example = new Workspace("example", WorkspaceArgs.builder()
                 .tags(Map.of("AMPAgentlessScraper", ""))
                 .build());
     
             var exampleScraper = new Scraper("exampleScraper", ScraperArgs.builder()
                 .source(ScraperSourceArgs.builder()
                     .eks(ScraperSourceEksArgs.builder()
                         .clusterArn(exampleAwsEksCluster.arn())
                         .subnetIds(exampleAwsEksCluster.vpcConfig()[0].subnetIds())
                         .build())
                     .build())
                 .destination(ScraperDestinationArgs.builder()
                     .amp(ScraperDestinationAmpArgs.builder()
                         .workspaceArn(example.arn())
                         .build())
                     .build())
                 .scrapeConfiguration("...")
                 .build());
     
         }
     }
     
     
    ### Configure aws-auth Your source Amazon EKS cluster must be configured to allow the scraper to access metrics. Follow the [user guide](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-eks-setup) to setup the appropriate Kubernetes permissions. ### Cross-Account Configuration This setup allows the scraper, running in a source account, to remote write its collected metrics to a workspace in a target account. Note that: - The target Role and target Workspace must be in the same account - The source Scraper and target Workspace must be in the same Region Follow [the AWS Best Practices guide](https://aws-observability.github.io/observability-best-practices/patterns/ampxa) to learn about the IAM roles configuration and overall setup.
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.amp.Scraper;
     import com.pulumi.aws.amp.ScraperArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceArgs;
     import com.pulumi.aws.amp.inputs.ScraperSourceEksArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationArgs;
     import com.pulumi.aws.amp.inputs.ScraperDestinationAmpArgs;
     import com.pulumi.aws.amp.inputs.ScraperRoleConfigurationArgs;
     import java.util.ArrayList;
     import java.util.Arrays;
     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 Scraper("example", ScraperArgs.builder()
                 .source(ScraperSourceArgs.builder()
                     .eks(ScraperSourceEksArgs.builder()
                         .clusterArn(exampleAwsEksCluster.arn())
                         .subnetIds(exampleAwsEksCluster.vpcConfig()[0].subnetIds())
                         .build())
                     .build())
                 .destination(ScraperDestinationArgs.builder()
                     .amp(ScraperDestinationAmpArgs.builder()
                         .workspaceArn("<target_account_workspace_arn>")
                         .build())
                     .build())
                 .roleConfiguration(ScraperRoleConfigurationArgs.builder()
                     .sourceRoleArn(source.arn())
                     .targetRoleArn("arn:aws:iam::ACCOUNT-ID:role/target-role-name")
                     .build())
                 .scrapeConfiguration("...")
                 .build());
     
         }
     }
     
     
    ## Import ### Identity Schema #### Required * `id` (String) ID of the scraper. #### Optional * `accountId` (String) AWS Account where this resource is managed. * `region` (String) Region where this resource is managed. Using `pulumi import`, import scrapers using `id`. For example: ```sh $ pulumi import aws:amp/scraper:Scraper example s-b6f487db-4761-4930-9215-e9d588a7efe2 ```
    • 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
    • Constructor Summary

      Constructors 
      Constructor Description
      Scraper​(java.lang.String name)  
      Scraper​(java.lang.String name, ScraperArgs args)  
      Scraper​(java.lang.String name, ScraperArgs args, com.pulumi.resources.CustomResourceOptions options)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      com.pulumi.core.Output<java.util.Optional<java.lang.String>> alias()  
      com.pulumi.core.Output<java.lang.String> arn()  
      com.pulumi.core.Output<ScraperDestination> destination()  
      com.pulumi.core.Output<java.util.Optional<ScraperExporter>> exporter()  
      static Scraper get​(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, ScraperState 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.lang.String> region()  
      com.pulumi.core.Output<java.lang.String> roleArn()  
      com.pulumi.core.Output<java.util.Optional<ScraperRoleConfiguration>> roleConfiguration()  
      com.pulumi.core.Output<java.lang.String> scrapeConfiguration()  
      com.pulumi.core.Output<java.util.Optional<ScraperSource>> source()  
      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()  
      com.pulumi.core.Output<java.util.Optional<ScraperTimeouts>> timeouts()  
      • 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

      • Scraper

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

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

        public Scraper​(java.lang.String name,
                       ScraperArgs 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

      • alias

        public com.pulumi.core.Output<java.util.Optional<java.lang.String>> alias()
        Returns:
        Name to associate with the managed scraper. This is for your use, and does not need to be unique.
      • arn

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

        public com.pulumi.core.Output<ScraperDestination> destination()
        Returns:
        Configuration block for the managed scraper to send metrics to. See `destination` Block for details.
      • exporter

        public com.pulumi.core.Output<java.util.Optional<ScraperExporter>> exporter()
        Returns:
        Configuration block for additional exporters. See `exporter` Block for details.
      • region

        public com.pulumi.core.Output<java.lang.String> region()
        Returns:
        Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
      • roleArn

        public com.pulumi.core.Output<java.lang.String> roleArn()
        Returns:
        ARN of the IAM role that provides permissions for the scraper to discover, collect, and produce metrics
      • roleConfiguration

        public com.pulumi.core.Output<java.util.Optional<ScraperRoleConfiguration>> roleConfiguration()
        Returns:
        Configuration block to enable writing to an Amazon Managed Service for Prometheus workspace in a different account. See `roleConfiguration` Block for details.
      • scrapeConfiguration

        public com.pulumi.core.Output<java.lang.String> scrapeConfiguration()
        Returns:
        Configuration file to use in the new scraper. For more information, see [Scraper configuration](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration).
      • source

        public com.pulumi.core.Output<java.util.Optional<ScraperSource>> source()
        Returns:
        Configuration block to specify where the managed scraper will collect metrics from. See `source` Block for details. The following arguments are optional:
      • 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 `defaultTags` 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:
        Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
      • timeouts

        public com.pulumi.core.Output<java.util.Optional<ScraperTimeouts>> timeouts()
      • get

        public static Scraper get​(java.lang.String name,
                                  com.pulumi.core.Output<java.lang.String> id,
                                  @Nullable
                                  ScraperState 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.