Link

class Link : KotlinCustomResource

Resource for managing an AWS CloudWatch Observability Access Manager Link.

NOTE: Creating an aws.oam.Link may sometimes fail if the aws.oam.SinkPolicy for the attached aws.oam.Sink is not created before the aws.oam.Link. To prevent this, declare an explicit dependency using a depends_on meta-argument.

Example Usage

Basic Usage

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const exampleSink = new aws.oam.Sink("example", {});
const exampleSinkPolicy = new aws.oam.SinkPolicy("example", {sinkIdentifier: exampleSink.arn});
const example = new aws.oam.Link("example", {
labelTemplate: "$AccountName",
resourceTypes: ["AWS::CloudWatch::Metric"],
sinkIdentifier: exampleSink.arn,
tags: {
Env: "prod",
},
}, {
dependsOn: [exampleSinkPolicy],
});
import pulumi
import pulumi_aws as aws
example_sink = aws.oam.Sink("example")
example_sink_policy = aws.oam.SinkPolicy("example", sink_identifier=example_sink.arn)
example = aws.oam.Link("example",
label_template="$AccountName",
resource_types=["AWS::CloudWatch::Metric"],
sink_identifier=example_sink.arn,
tags={
"Env": "prod",
},
opts = pulumi.ResourceOptions(depends_on=[example_sink_policy]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var exampleSink = new Aws.Oam.Sink("example");
var exampleSinkPolicy = new Aws.Oam.SinkPolicy("example", new()
{
SinkIdentifier = exampleSink.Arn,
});
var example = new Aws.Oam.Link("example", new()
{
LabelTemplate = "$AccountName",
ResourceTypes = new[]
{
"AWS::CloudWatch::Metric",
},
SinkIdentifier = exampleSink.Arn,
Tags =
{
{ "Env", "prod" },
},
}, new CustomResourceOptions
{
DependsOn =
{
exampleSinkPolicy,
},
});
});
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/oam"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
exampleSink, err := oam.NewSink(ctx, "example", nil)
if err != nil {
return err
}
exampleSinkPolicy, err := oam.NewSinkPolicy(ctx, "example", &oam.SinkPolicyArgs{
SinkIdentifier: exampleSink.Arn,
})
if err != nil {
return err
}
_, err = oam.NewLink(ctx, "example", &oam.LinkArgs{
LabelTemplate: pulumi.String("$AccountName"),
ResourceTypes: pulumi.StringArray{
pulumi.String("AWS::CloudWatch::Metric"),
},
SinkIdentifier: exampleSink.Arn,
Tags: pulumi.StringMap{
"Env": pulumi.String("prod"),
},
}, pulumi.DependsOn([]pulumi.Resource{
exampleSinkPolicy,
}))
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.oam.Sink;
import com.pulumi.aws.oam.SinkPolicy;
import com.pulumi.aws.oam.SinkPolicyArgs;
import com.pulumi.aws.oam.Link;
import com.pulumi.aws.oam.LinkArgs;
import com.pulumi.resources.CustomResourceOptions;
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 exampleSink = new Sink("exampleSink");
var exampleSinkPolicy = new SinkPolicy("exampleSinkPolicy", SinkPolicyArgs.builder()
.sinkIdentifier(exampleSink.arn())
.build());
var example = new Link("example", LinkArgs.builder()
.labelTemplate("$AccountName")
.resourceTypes("AWS::CloudWatch::Metric")
.sinkIdentifier(exampleSink.arn())
.tags(Map.of("Env", "prod"))
.build(), CustomResourceOptions.builder()
.dependsOn(exampleSinkPolicy)
.build());
}
}
resources:
example:
type: aws:oam:Link
properties:
labelTemplate: $AccountName
resourceTypes:
- AWS::CloudWatch::Metric
sinkIdentifier: ${exampleSink.arn}
tags:
Env: prod
options:
dependsOn:
- ${exampleSinkPolicy}
exampleSink:
type: aws:oam:Sink
name: example
exampleSinkPolicy:
type: aws:oam:SinkPolicy
name: example
properties:
sinkIdentifier: ${exampleSink.arn}

Log Group Filtering

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.oam.Link("example", {
labelTemplate: "$AccountName",
linkConfiguration: {
logGroupConfiguration: {
filter: "LogGroupName LIKE 'aws/lambda/%' OR LogGroupName LIKE 'AWSLogs%'",
},
},
resourceTypes: ["AWS::Logs::LogGroup"],
sinkIdentifier: exampleAwsOamSink.arn,
}, {
dependsOn: [exampleAwsOamSinkPolicy],
});
import pulumi
import pulumi_aws as aws
example = aws.oam.Link("example",
label_template="$AccountName",
link_configuration={
"log_group_configuration": {
"filter": "LogGroupName LIKE 'aws/lambda/%' OR LogGroupName LIKE 'AWSLogs%'",
},
},
resource_types=["AWS::Logs::LogGroup"],
sink_identifier=example_aws_oam_sink["arn"],
opts = pulumi.ResourceOptions(depends_on=[example_aws_oam_sink_policy]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Oam.Link("example", new()
{
LabelTemplate = "$AccountName",
LinkConfiguration = new Aws.Oam.Inputs.LinkLinkConfigurationArgs
{
LogGroupConfiguration = new Aws.Oam.Inputs.LinkLinkConfigurationLogGroupConfigurationArgs
{
Filter = "LogGroupName LIKE 'aws/lambda/%' OR LogGroupName LIKE 'AWSLogs%'",
},
},
ResourceTypes = new[]
{
"AWS::Logs::LogGroup",
},
SinkIdentifier = exampleAwsOamSink.Arn,
}, new CustomResourceOptions
{
DependsOn =
{
exampleAwsOamSinkPolicy,
},
});
});
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/oam"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := oam.NewLink(ctx, "example", &oam.LinkArgs{
LabelTemplate: pulumi.String("$AccountName"),
LinkConfiguration: &oam.LinkLinkConfigurationArgs{
LogGroupConfiguration: &oam.LinkLinkConfigurationLogGroupConfigurationArgs{
Filter: pulumi.String("LogGroupName LIKE 'aws/lambda/%' OR LogGroupName LIKE 'AWSLogs%'"),
},
},
ResourceTypes: pulumi.StringArray{
pulumi.String("AWS::Logs::LogGroup"),
},
SinkIdentifier: pulumi.Any(exampleAwsOamSink.Arn),
}, pulumi.DependsOn([]pulumi.Resource{
exampleAwsOamSinkPolicy,
}))
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.oam.Link;
import com.pulumi.aws.oam.LinkArgs;
import com.pulumi.aws.oam.inputs.LinkLinkConfigurationArgs;
import com.pulumi.aws.oam.inputs.LinkLinkConfigurationLogGroupConfigurationArgs;
import com.pulumi.resources.CustomResourceOptions;
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 example = new Link("example", LinkArgs.builder()
.labelTemplate("$AccountName")
.linkConfiguration(LinkLinkConfigurationArgs.builder()
.logGroupConfiguration(LinkLinkConfigurationLogGroupConfigurationArgs.builder()
.filter("LogGroupName LIKE 'aws/lambda/%' OR LogGroupName LIKE 'AWSLogs%'")
.build())
.build())
.resourceTypes("AWS::Logs::LogGroup")
.sinkIdentifier(exampleAwsOamSink.arn())
.build(), CustomResourceOptions.builder()
.dependsOn(exampleAwsOamSinkPolicy)
.build());
}
}
resources:
example:
type: aws:oam:Link
properties:
labelTemplate: $AccountName
linkConfiguration:
logGroupConfiguration:
filter: LogGroupName LIKE 'aws/lambda/%' OR LogGroupName LIKE 'AWSLogs%'
resourceTypes:
- AWS::Logs::LogGroup
sinkIdentifier: ${exampleAwsOamSink.arn}
options:
dependsOn:
- ${exampleAwsOamSinkPolicy}

Metric Filtering

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const example = new aws.oam.Link("example", {
labelTemplate: "$AccountName",
linkConfiguration: {
metricConfiguration: {
filter: "Namespace IN ('AWS/EC2', 'AWS/ELB', 'AWS/S3')",
},
},
resourceTypes: ["AWS::CloudWatch::Metric"],
sinkIdentifier: exampleAwsOamSink.arn,
}, {
dependsOn: [exampleAwsOamSinkPolicy],
});
import pulumi
import pulumi_aws as aws
example = aws.oam.Link("example",
label_template="$AccountName",
link_configuration={
"metric_configuration": {
"filter": "Namespace IN ('AWS/EC2', 'AWS/ELB', 'AWS/S3')",
},
},
resource_types=["AWS::CloudWatch::Metric"],
sink_identifier=example_aws_oam_sink["arn"],
opts = pulumi.ResourceOptions(depends_on=[example_aws_oam_sink_policy]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Aws = Pulumi.Aws;
return await Deployment.RunAsync(() =>
{
var example = new Aws.Oam.Link("example", new()
{
LabelTemplate = "$AccountName",
LinkConfiguration = new Aws.Oam.Inputs.LinkLinkConfigurationArgs
{
MetricConfiguration = new Aws.Oam.Inputs.LinkLinkConfigurationMetricConfigurationArgs
{
Filter = "Namespace IN ('AWS/EC2', 'AWS/ELB', 'AWS/S3')",
},
},
ResourceTypes = new[]
{
"AWS::CloudWatch::Metric",
},
SinkIdentifier = exampleAwsOamSink.Arn,
}, new CustomResourceOptions
{
DependsOn =
{
exampleAwsOamSinkPolicy,
},
});
});
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/oam"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := oam.NewLink(ctx, "example", &oam.LinkArgs{
LabelTemplate: pulumi.String("$AccountName"),
LinkConfiguration: &oam.LinkLinkConfigurationArgs{
MetricConfiguration: &oam.LinkLinkConfigurationMetricConfigurationArgs{
Filter: pulumi.String("Namespace IN ('AWS/EC2', 'AWS/ELB', 'AWS/S3')"),
},
},
ResourceTypes: pulumi.StringArray{
pulumi.String("AWS::CloudWatch::Metric"),
},
SinkIdentifier: pulumi.Any(exampleAwsOamSink.Arn),
}, pulumi.DependsOn([]pulumi.Resource{
exampleAwsOamSinkPolicy,
}))
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.oam.Link;
import com.pulumi.aws.oam.LinkArgs;
import com.pulumi.aws.oam.inputs.LinkLinkConfigurationArgs;
import com.pulumi.aws.oam.inputs.LinkLinkConfigurationMetricConfigurationArgs;
import com.pulumi.resources.CustomResourceOptions;
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 example = new Link("example", LinkArgs.builder()
.labelTemplate("$AccountName")
.linkConfiguration(LinkLinkConfigurationArgs.builder()
.metricConfiguration(LinkLinkConfigurationMetricConfigurationArgs.builder()
.filter("Namespace IN ('AWS/EC2', 'AWS/ELB', 'AWS/S3')")
.build())
.build())
.resourceTypes("AWS::CloudWatch::Metric")
.sinkIdentifier(exampleAwsOamSink.arn())
.build(), CustomResourceOptions.builder()
.dependsOn(exampleAwsOamSinkPolicy)
.build());
}
}
resources:
example:
type: aws:oam:Link
properties:
labelTemplate: $AccountName
linkConfiguration:
metricConfiguration:
filter: Namespace IN ('AWS/EC2', 'AWS/ELB', 'AWS/S3')
resourceTypes:
- AWS::CloudWatch::Metric
sinkIdentifier: ${exampleAwsOamSink.arn}
options:
dependsOn:
- ${exampleAwsOamSinkPolicy}

Import

Using pulumi import, import CloudWatch Observability Access Manager Link using the arn. For example:

$ pulumi import aws:oam/link:Link example arn:aws:oam:us-west-2:123456789012:link/link-id

Properties

Link copied to clipboard
val arn: Output<String>

ARN of the link.

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

Label that is assigned to this link.

Link copied to clipboard
val labelTemplate: Output<String>

Human-readable name to use to identify this source account when you are viewing data from it in the monitoring account.

Link copied to clipboard

Configuration for creating filters that specify that only some metric namespaces or log groups are to be shared from the source account to the monitoring account. See link_configuration Block for details.

Link copied to clipboard
val linkId: Output<String>

ID string that AWS generated as part of the link ARN.

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

Types of data that the source account shares with the monitoring account.

Link copied to clipboard
val sinkArn: Output<String>

ARN of the sink that is used for this link.

Link copied to clipboard
val sinkIdentifier: Output<String>

Identifier of the sink to use to create this link. The following arguments are optional:

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

A 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>>
Link copied to clipboard
val urn: Output<String>