Package com.pulumi.aws.amp
Class Scraper
- java.lang.Object
-
- com.pulumi.resources.Resource
-
- com.pulumi.resources.CustomResource
-
- com.pulumi.aws.amp.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
### CloudWatch Destinationpackage 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()); } }
### VPC Configurationpackage 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()); } }
### OpenSearch Exporterpackage 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()); } }
### 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.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()); } }
### 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.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()); } }
### 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.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()); } }
## 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 ```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()); } }
-
-
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 Scraperget(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()
-
-
-
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.
-
-