AnomalySubscriptionArgs

data class AnomalySubscriptionArgs(val accountId: Output<String>? = null, val frequency: Output<String>? = null, val monitorArnLists: Output<List<String>>? = null, val name: Output<String>? = null, val subscribers: Output<List<AnomalySubscriptionSubscriberArgs>>? = null, val tags: Output<Map<String, String>>? = null, val threshold: Output<Double>? = null, val thresholdExpression: Output<AnomalySubscriptionThresholdExpressionArgs>? = null) : ConvertibleToJava<AnomalySubscriptionArgs>

Provides a CE Anomaly Subscription.

Example Usage

Basic Example

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.costexplorer.AnomalyMonitor;
import com.pulumi.aws.costexplorer.AnomalyMonitorArgs;
import com.pulumi.aws.costexplorer.AnomalySubscription;
import com.pulumi.aws.costexplorer.AnomalySubscriptionArgs;
import com.pulumi.aws.costexplorer.inputs.AnomalySubscriptionSubscriberArgs;
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 testAnomalyMonitor = new AnomalyMonitor("testAnomalyMonitor", AnomalyMonitorArgs.builder()
.monitorType("DIMENSIONAL")
.monitorDimension("SERVICE")
.build());
var testAnomalySubscription = new AnomalySubscription("testAnomalySubscription", AnomalySubscriptionArgs.builder()
.threshold(100)
.frequency("DAILY")
.monitorArnLists(testAnomalyMonitor.arn())
.subscribers(AnomalySubscriptionSubscriberArgs.builder()
.type("EMAIL")
.address("abc@example.com")
.build())
.build());
}
}

Threshold Expression

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.costexplorer.AnomalySubscription;
import com.pulumi.aws.costexplorer.AnomalySubscriptionArgs;
import com.pulumi.aws.costexplorer.inputs.AnomalySubscriptionSubscriberArgs;
import com.pulumi.aws.costexplorer.inputs.AnomalySubscriptionThresholdExpressionArgs;
import com.pulumi.aws.costexplorer.inputs.AnomalySubscriptionThresholdExpressionDimensionArgs;
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 test = new AnomalySubscription("test", AnomalySubscriptionArgs.builder()
.frequency("DAILY")
.monitorArnLists(aws_ce_anomaly_monitor.test().arn())
.subscribers(AnomalySubscriptionSubscriberArgs.builder()
.type("EMAIL")
.address("abc@example.com")
.build())
.thresholdExpression(AnomalySubscriptionThresholdExpressionArgs.builder()
.dimension(AnomalySubscriptionThresholdExpressionDimensionArgs.builder()
.key("ANOMALY_TOTAL_IMPACT_ABSOLUTE")
.values("100.0")
.matchOptions("GREATER_THAN_OR_EQUAL")
.build())
.build())
.build());
}
}

SNS Example

package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.aws.sns.Topic;
import com.pulumi.aws.iam.IamFunctions;
import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
import com.pulumi.aws.sns.TopicPolicy;
import com.pulumi.aws.sns.TopicPolicyArgs;
import com.pulumi.aws.costexplorer.AnomalyMonitor;
import com.pulumi.aws.costexplorer.AnomalyMonitorArgs;
import com.pulumi.aws.costexplorer.AnomalySubscription;
import com.pulumi.aws.costexplorer.AnomalySubscriptionArgs;
import com.pulumi.aws.costexplorer.inputs.AnomalySubscriptionSubscriberArgs;
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 costAnomalyUpdates = new Topic("costAnomalyUpdates");
final var snsTopicPolicy = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
.policyId("__default_policy_ID")
.statements(
GetPolicyDocumentStatementArgs.builder()
.sid("AWSAnomalyDetectionSNSPublishingPermissions")
.actions("SNS:Publish")
.effect("Allow")
.principals(GetPolicyDocumentStatementPrincipalArgs.builder()
.type("Service")
.identifiers("costalerts.amazonaws.com")
.build())
.resources(costAnomalyUpdates.arn())
.build(),
GetPolicyDocumentStatementArgs.builder()
.sid("__default_statement_ID")
.actions(
"SNS:Subscribe",
"SNS:SetTopicAttributes",
"SNS:RemovePermission",
"SNS:Receive",
"SNS:Publish",
"SNS:ListSubscriptionsByTopic",
"SNS:GetTopicAttributes",
"SNS:DeleteTopic",
"SNS:AddPermission")
.conditions(GetPolicyDocumentStatementConditionArgs.builder()
.test("StringEquals")
.variable("AWS:SourceOwner")
.values(var_.account-id())
.build())
.effect("Allow")
.principals(GetPolicyDocumentStatementPrincipalArgs.builder()
.type("AWS")
.identifiers("*")
.build())
.resources(costAnomalyUpdates.arn())
.build())
.build());
var default_ = new TopicPolicy("default", TopicPolicyArgs.builder()
.arn(costAnomalyUpdates.arn())
.policy(snsTopicPolicy.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult).applyValue(snsTopicPolicy -> snsTopicPolicy.applyValue(getPolicyDocumentResult -> getPolicyDocumentResult.json())))
.build());
var anomalyMonitor = new AnomalyMonitor("anomalyMonitor", AnomalyMonitorArgs.builder()
.monitorType("DIMENSIONAL")
.monitorDimension("SERVICE")
.build());
var realtimeSubscription = new AnomalySubscription("realtimeSubscription", AnomalySubscriptionArgs.builder()
.threshold(0)
.frequency("IMMEDIATE")
.monitorArnLists(anomalyMonitor.arn())
.subscribers(AnomalySubscriptionSubscriberArgs.builder()
.type("SNS")
.address(costAnomalyUpdates.arn())
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
}
}

Import

aws_ce_anomaly_subscription can be imported using the id, e.g.

$ pulumi import aws:costexplorer/anomalySubscription:AnomalySubscription example AnomalySubscriptionARN

Constructors

Link copied to clipboard
constructor(accountId: Output<String>? = null, frequency: Output<String>? = null, monitorArnLists: Output<List<String>>? = null, name: Output<String>? = null, subscribers: Output<List<AnomalySubscriptionSubscriberArgs>>? = null, tags: Output<Map<String, String>>? = null, threshold: Output<Double>? = null, thresholdExpression: Output<AnomalySubscriptionThresholdExpressionArgs>? = null)

Properties

Link copied to clipboard
val accountId: Output<String>? = null

The unique identifier for the AWS account in which the anomaly subscription ought to be created.

Link copied to clipboard
val frequency: Output<String>? = null

The frequency that anomaly reports are sent. Valid Values: DAILY | IMMEDIATE | WEEKLY.

Link copied to clipboard
val monitorArnLists: Output<List<String>>? = null

A list of cost anomaly monitors.

Link copied to clipboard
val name: Output<String>? = null

The name for the subscription.

Link copied to clipboard

A subscriber configuration. Multiple subscribers can be defined.

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

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 threshold: Output<Double>? = null

The dollar value that triggers a notification if the threshold is exceeded. Depracated, use threshold_expression instead.

Link copied to clipboard

An Expression object used to specify the anomalies that you want to generate alerts for. See Threshold Expression.

Functions

Link copied to clipboard
open override fun toJava(): AnomalySubscriptionArgs