All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.aws.route53.kotlin.Route53Functions.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 6.57.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.aws.route53.kotlin

import com.pulumi.aws.route53.Route53Functions.getDelegationSetPlain
import com.pulumi.aws.route53.Route53Functions.getProfilesProfilesPlain
import com.pulumi.aws.route53.Route53Functions.getQueryLogConfigPlain
import com.pulumi.aws.route53.Route53Functions.getResolverEndpointPlain
import com.pulumi.aws.route53.Route53Functions.getResolverFirewallConfigPlain
import com.pulumi.aws.route53.Route53Functions.getResolverFirewallDomainListPlain
import com.pulumi.aws.route53.Route53Functions.getResolverFirewallRuleGroupAssociationPlain
import com.pulumi.aws.route53.Route53Functions.getResolverFirewallRuleGroupPlain
import com.pulumi.aws.route53.Route53Functions.getResolverFirewallRulesPlain
import com.pulumi.aws.route53.Route53Functions.getResolverRulePlain
import com.pulumi.aws.route53.Route53Functions.getResolverRulesPlain
import com.pulumi.aws.route53.Route53Functions.getTrafficPolicyDocumentPlain
import com.pulumi.aws.route53.Route53Functions.getZonePlain
import com.pulumi.aws.route53.Route53Functions.getZonesPlain
import com.pulumi.aws.route53.kotlin.inputs.GetDelegationSetPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetDelegationSetPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetQueryLogConfigFilter
import com.pulumi.aws.route53.kotlin.inputs.GetQueryLogConfigPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetQueryLogConfigPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverEndpointFilter
import com.pulumi.aws.route53.kotlin.inputs.GetResolverEndpointPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverEndpointPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallConfigPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallConfigPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallDomainListPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallDomainListPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRuleGroupAssociationPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRuleGroupAssociationPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRuleGroupPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRuleGroupPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRulesPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRulesPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverRulePlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverRulePlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetResolverRulesPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetResolverRulesPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetTrafficPolicyDocumentEndpoint
import com.pulumi.aws.route53.kotlin.inputs.GetTrafficPolicyDocumentPlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetTrafficPolicyDocumentPlainArgsBuilder
import com.pulumi.aws.route53.kotlin.inputs.GetTrafficPolicyDocumentRule
import com.pulumi.aws.route53.kotlin.inputs.GetZonePlainArgs
import com.pulumi.aws.route53.kotlin.inputs.GetZonePlainArgsBuilder
import com.pulumi.aws.route53.kotlin.outputs.GetDelegationSetResult
import com.pulumi.aws.route53.kotlin.outputs.GetProfilesProfilesResult
import com.pulumi.aws.route53.kotlin.outputs.GetQueryLogConfigResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverEndpointResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallConfigResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallDomainListResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallRuleGroupAssociationResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallRuleGroupResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallRulesResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverRuleResult
import com.pulumi.aws.route53.kotlin.outputs.GetResolverRulesResult
import com.pulumi.aws.route53.kotlin.outputs.GetTrafficPolicyDocumentResult
import com.pulumi.aws.route53.kotlin.outputs.GetZoneResult
import com.pulumi.aws.route53.kotlin.outputs.GetZonesResult
import kotlinx.coroutines.future.await
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import com.pulumi.aws.route53.kotlin.outputs.GetDelegationSetResult.Companion.toKotlin as getDelegationSetResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetProfilesProfilesResult.Companion.toKotlin as getProfilesProfilesResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetQueryLogConfigResult.Companion.toKotlin as getQueryLogConfigResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverEndpointResult.Companion.toKotlin as getResolverEndpointResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallConfigResult.Companion.toKotlin as getResolverFirewallConfigResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallDomainListResult.Companion.toKotlin as getResolverFirewallDomainListResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallRuleGroupAssociationResult.Companion.toKotlin as getResolverFirewallRuleGroupAssociationResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallRuleGroupResult.Companion.toKotlin as getResolverFirewallRuleGroupResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverFirewallRulesResult.Companion.toKotlin as getResolverFirewallRulesResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverRuleResult.Companion.toKotlin as getResolverRuleResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetResolverRulesResult.Companion.toKotlin as getResolverRulesResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetTrafficPolicyDocumentResult.Companion.toKotlin as getTrafficPolicyDocumentResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetZoneResult.Companion.toKotlin as getZoneResultToKotlin
import com.pulumi.aws.route53.kotlin.outputs.GetZonesResult.Companion.toKotlin as getZonesResultToKotlin

public object Route53Functions {
    /**
     * `aws.route53.DelegationSet` provides details about a specific Route 53 Delegation Set.
     * This data source allows to find a list of name servers associated with a specific delegation set.
     * ## Example Usage
     * The following example shows how to get a delegation set from its id.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const dset = aws.route53.getDelegationSet({
     *     id: "MQWGHCBFAKEID",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * dset = aws.route53.get_delegation_set(id="MQWGHCBFAKEID")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var dset = Aws.Route53.GetDelegationSet.Invoke(new()
     *     {
     *         Id = "MQWGHCBFAKEID",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupDelegationSet(ctx, &route53.LookupDelegationSetArgs{
     * 			Id: "MQWGHCBFAKEID",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetDelegationSetArgs;
     * 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) {
     *         final var dset = Route53Functions.getDelegationSet(GetDelegationSetArgs.builder()
     *             .id("MQWGHCBFAKEID")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   dset:
     *     fn::invoke:
     *       Function: aws:route53:getDelegationSet
     *       Arguments:
     *         id: MQWGHCBFAKEID
     * ```
     * 
     * @param argument A collection of arguments for invoking getDelegationSet.
     * @return A collection of values returned by getDelegationSet.
     */
    public suspend fun getDelegationSet(argument: GetDelegationSetPlainArgs): GetDelegationSetResult =
        getDelegationSetResultToKotlin(getDelegationSetPlain(argument.toJava()).await())

    /**
     * @see [getDelegationSet].
     * @param id Delegation set ID.
     * The following attribute is additionally exported:
     * @return A collection of values returned by getDelegationSet.
     */
    public suspend fun getDelegationSet(id: String): GetDelegationSetResult {
        val argument = GetDelegationSetPlainArgs(
            id = id,
        )
        return getDelegationSetResultToKotlin(getDelegationSetPlain(argument.toJava()).await())
    }

    /**
     * @see [getDelegationSet].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetDelegationSetPlainArgs].
     * @return A collection of values returned by getDelegationSet.
     */
    public suspend fun getDelegationSet(argument: suspend GetDelegationSetPlainArgsBuilder.() -> Unit): GetDelegationSetResult {
        val builder = GetDelegationSetPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDelegationSetResultToKotlin(getDelegationSetPlain(builtArgument.toJava()).await())
    }

    /**
     * Data source for managing an AWS Route 53 Profiles.
     * ## Example Usage
     * ### Basic Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getProfilesProfiles({});
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_profiles_profiles()
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetProfilesProfiles.Invoke();
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetProfilesProfiles(ctx, map[string]interface{}{}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * 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) {
     *         final var example = Route53Functions.getProfilesProfiles();
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getProfilesProfiles
     *       Arguments: {}
     * ```
     * 
     * @param argument Data source for managing an AWS Route 53 Profiles.
     * ## Example Usage
     * ### Basic Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getProfilesProfiles({});
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_profiles_profiles()
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetProfilesProfiles.Invoke();
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetProfilesProfiles(ctx, map[string]interface{}{}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * 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) {
     *         final var example = Route53Functions.getProfilesProfiles();
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getProfilesProfiles
     *       Arguments: {}
     * ```
     * 
     * @return A collection of values returned by getProfilesProfiles.
     */
    public suspend fun getProfilesProfiles(): GetProfilesProfilesResult =
        getProfilesProfilesResultToKotlin(getProfilesProfilesPlain().await())

    /**
     * `aws.route53.ResolverQueryLogConfig` provides details about a specific Route53 Resolver Query Logging Configuration.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getQueryLogConfig({
     *     resolverQueryLogConfigId: "rqlc-1abc2345ef678g91h",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_query_log_config(resolver_query_log_config_id="rqlc-1abc2345ef678g91h")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetQueryLogConfig.Invoke(new()
     *     {
     *         ResolverQueryLogConfigId = "rqlc-1abc2345ef678g91h",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetQueryLogConfig(ctx, &route53.GetQueryLogConfigArgs{
     * 			ResolverQueryLogConfigId: pulumi.StringRef("rqlc-1abc2345ef678g91h"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetQueryLogConfigArgs;
     * 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) {
     *         final var example = Route53Functions.getQueryLogConfig(GetQueryLogConfigArgs.builder()
     *             .resolverQueryLogConfigId("rqlc-1abc2345ef678g91h")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getQueryLogConfig
     *       Arguments:
     *         resolverQueryLogConfigId: rqlc-1abc2345ef678g91h
     * ```
     * 
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getQueryLogConfig({
     *     filters: [
     *         {
     *             name: "Name",
     *             values: ["shared-query-log-config"],
     *         },
     *         {
     *             name: "ShareStatus",
     *             values: ["SHARED_WITH_ME"],
     *         },
     *     ],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_query_log_config(filters=[
     *     {
     *         "name": "Name",
     *         "values": ["shared-query-log-config"],
     *     },
     *     {
     *         "name": "ShareStatus",
     *         "values": ["SHARED_WITH_ME"],
     *     },
     * ])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetQueryLogConfig.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new Aws.Route53.Inputs.GetQueryLogConfigFilterInputArgs
     *             {
     *                 Name = "Name",
     *                 Values = new[]
     *                 {
     *                     "shared-query-log-config",
     *                 },
     *             },
     *             new Aws.Route53.Inputs.GetQueryLogConfigFilterInputArgs
     *             {
     *                 Name = "ShareStatus",
     *                 Values = new[]
     *                 {
     *                     "SHARED_WITH_ME",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetQueryLogConfig(ctx, &route53.GetQueryLogConfigArgs{
     * 			Filters: []route53.GetQueryLogConfigFilter{
     * 				{
     * 					Name: "Name",
     * 					Values: []string{
     * 						"shared-query-log-config",
     * 					},
     * 				},
     * 				{
     * 					Name: "ShareStatus",
     * 					Values: []string{
     * 						"SHARED_WITH_ME",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetQueryLogConfigArgs;
     * 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) {
     *         final var example = Route53Functions.getQueryLogConfig(GetQueryLogConfigArgs.builder()
     *             .filters(
     *                 GetQueryLogConfigFilterArgs.builder()
     *                     .name("Name")
     *                     .values("shared-query-log-config")
     *                     .build(),
     *                 GetQueryLogConfigFilterArgs.builder()
     *                     .name("ShareStatus")
     *                     .values("SHARED_WITH_ME")
     *                     .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getQueryLogConfig
     *       Arguments:
     *         filters:
     *           - name: Name
     *             values:
     *               - shared-query-log-config
     *           - name: ShareStatus
     *             values:
     *               - SHARED_WITH_ME
     * ```
     * 
     * @param argument A collection of arguments for invoking getQueryLogConfig.
     * @return A collection of values returned by getQueryLogConfig.
     */
    public suspend fun getQueryLogConfig(argument: GetQueryLogConfigPlainArgs): GetQueryLogConfigResult =
        getQueryLogConfigResultToKotlin(getQueryLogConfigPlain(argument.toJava()).await())

    /**
     * @see [getQueryLogConfig].
     * @param filters One or more name/value pairs to use as filters. There are
     * several valid keys, for a full reference, check out
     * [Route53resolver Filter value in the AWS API reference][1].
     * In addition to all arguments above, the following attributes are exported:
     * @param name The name of the query logging configuration.
     * @param resolverQueryLogConfigId ID of the Route53 Resolver Query Logging Configuration.
     * @param tags Map of tags to assign to the service.
     * [1]: https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_Filter.html
     * @return A collection of values returned by getQueryLogConfig.
     */
    public suspend fun getQueryLogConfig(
        filters: List? = null,
        name: String? = null,
        resolverQueryLogConfigId: String? = null,
        tags: Map? = null,
    ): GetQueryLogConfigResult {
        val argument = GetQueryLogConfigPlainArgs(
            filters = filters,
            name = name,
            resolverQueryLogConfigId = resolverQueryLogConfigId,
            tags = tags,
        )
        return getQueryLogConfigResultToKotlin(getQueryLogConfigPlain(argument.toJava()).await())
    }

    /**
     * @see [getQueryLogConfig].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetQueryLogConfigPlainArgs].
     * @return A collection of values returned by getQueryLogConfig.
     */
    public suspend fun getQueryLogConfig(argument: suspend GetQueryLogConfigPlainArgsBuilder.() -> Unit): GetQueryLogConfigResult {
        val builder = GetQueryLogConfigPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getQueryLogConfigResultToKotlin(getQueryLogConfigPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.ResolverEndpoint` provides details about a specific Route53 Resolver Endpoint.
     * This data source allows to find a list of IPaddresses associated with a specific Route53 Resolver Endpoint.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverEndpoint({
     *     resolverEndpointId: "rslvr-in-1abc2345ef678g91h",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_endpoint(resolver_endpoint_id="rslvr-in-1abc2345ef678g91h")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverEndpoint.Invoke(new()
     *     {
     *         ResolverEndpointId = "rslvr-in-1abc2345ef678g91h",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverEndpoint(ctx, &route53.LookupResolverEndpointArgs{
     * 			ResolverEndpointId: pulumi.StringRef("rslvr-in-1abc2345ef678g91h"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverEndpointArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverEndpoint(GetResolverEndpointArgs.builder()
     *             .resolverEndpointId("rslvr-in-1abc2345ef678g91h")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverEndpoint
     *       Arguments:
     *         resolverEndpointId: rslvr-in-1abc2345ef678g91h
     * ```
     * 
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverEndpoint({
     *     filters: [{
     *         name: "NAME",
     *         values: ["MyResolverExampleName"],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_endpoint(filters=[{
     *     "name": "NAME",
     *     "values": ["MyResolverExampleName"],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverEndpoint.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new Aws.Route53.Inputs.GetResolverEndpointFilterInputArgs
     *             {
     *                 Name = "NAME",
     *                 Values = new[]
     *                 {
     *                     "MyResolverExampleName",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverEndpoint(ctx, &route53.LookupResolverEndpointArgs{
     * 			Filters: []route53.GetResolverEndpointFilter{
     * 				{
     * 					Name: "NAME",
     * 					Values: []string{
     * 						"MyResolverExampleName",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverEndpointArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverEndpoint(GetResolverEndpointArgs.builder()
     *             .filters(GetResolverEndpointFilterArgs.builder()
     *                 .name("NAME")
     *                 .values("MyResolverExampleName")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverEndpoint
     *       Arguments:
     *         filters:
     *           - name: NAME
     *             values:
     *               - MyResolverExampleName
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverEndpoint.
     * @return A collection of values returned by getResolverEndpoint.
     */
    public suspend fun getResolverEndpoint(argument: GetResolverEndpointPlainArgs): GetResolverEndpointResult =
        getResolverEndpointResultToKotlin(getResolverEndpointPlain(argument.toJava()).await())

    /**
     * @see [getResolverEndpoint].
     * @param filters One or more name/value pairs to use as filters. There are
     * several valid keys, for a full reference, check out
     * [Route53resolver Filter value in the AWS API reference][1].
     * In addition to all arguments above, the following attributes are exported:
     * @param resolverEndpointId ID of the Route53 Resolver Endpoint.
     * @return A collection of values returned by getResolverEndpoint.
     */
    public suspend fun getResolverEndpoint(
        filters: List? = null,
        resolverEndpointId: String? = null,
    ): GetResolverEndpointResult {
        val argument = GetResolverEndpointPlainArgs(
            filters = filters,
            resolverEndpointId = resolverEndpointId,
        )
        return getResolverEndpointResultToKotlin(getResolverEndpointPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverEndpoint].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverEndpointPlainArgs].
     * @return A collection of values returned by getResolverEndpoint.
     */
    public suspend fun getResolverEndpoint(argument: suspend GetResolverEndpointPlainArgsBuilder.() -> Unit): GetResolverEndpointResult {
        val builder = GetResolverEndpointPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverEndpointResultToKotlin(getResolverEndpointPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.ResolverFirewallConfig` provides details about a specific a Route 53 Resolver DNS Firewall config.
     * This data source allows to find a details about a specific a Route 53 Resolver DNS Firewall config.
     * ## Example Usage
     * The following example shows how to get a firewall config using the VPC ID.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverFirewallConfig({
     *     resourceId: "vpc-exampleid",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_firewall_config(resource_id="vpc-exampleid")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverFirewallConfig.Invoke(new()
     *     {
     *         ResourceId = "vpc-exampleid",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverFirewallConfig(ctx, &route53.LookupResolverFirewallConfigArgs{
     * 			ResourceId: "vpc-exampleid",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverFirewallConfigArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverFirewallConfig(GetResolverFirewallConfigArgs.builder()
     *             .resourceId("vpc-exampleid")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverFirewallConfig
     *       Arguments:
     *         resourceId: vpc-exampleid
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverFirewallConfig.
     * @return A collection of values returned by getResolverFirewallConfig.
     */
    public suspend fun getResolverFirewallConfig(argument: GetResolverFirewallConfigPlainArgs): GetResolverFirewallConfigResult =
        getResolverFirewallConfigResultToKotlin(getResolverFirewallConfigPlain(argument.toJava()).await())

    /**
     * @see [getResolverFirewallConfig].
     * @param resourceId The ID of the VPC from Amazon VPC that the configuration is for.
     * The following attribute is additionally exported:
     * @return A collection of values returned by getResolverFirewallConfig.
     */
    public suspend fun getResolverFirewallConfig(resourceId: String): GetResolverFirewallConfigResult {
        val argument = GetResolverFirewallConfigPlainArgs(
            resourceId = resourceId,
        )
        return getResolverFirewallConfigResultToKotlin(getResolverFirewallConfigPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverFirewallConfig].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallConfigPlainArgs].
     * @return A collection of values returned by getResolverFirewallConfig.
     */
    public suspend fun getResolverFirewallConfig(argument: suspend GetResolverFirewallConfigPlainArgsBuilder.() -> Unit): GetResolverFirewallConfigResult {
        val builder = GetResolverFirewallConfigPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverFirewallConfigResultToKotlin(getResolverFirewallConfigPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.ResolverFirewallDomainList` Retrieves the specified firewall domain list.
     * This data source allows to retrieve details about a specific a Route 53 Resolver DNS Firewall domain list.
     * ## Example Usage
     * The following example shows how to get a firewall domain list from its ID.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverFirewallDomainList({
     *     firewallDomainListId: "rslvr-fdl-example",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_firewall_domain_list(firewall_domain_list_id="rslvr-fdl-example")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverFirewallDomainList.Invoke(new()
     *     {
     *         FirewallDomainListId = "rslvr-fdl-example",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverFirewallDomainList(ctx, &route53.LookupResolverFirewallDomainListArgs{
     * 			FirewallDomainListId: "rslvr-fdl-example",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverFirewallDomainListArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverFirewallDomainList(GetResolverFirewallDomainListArgs.builder()
     *             .firewallDomainListId("rslvr-fdl-example")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverFirewallDomainList
     *       Arguments:
     *         firewallDomainListId: rslvr-fdl-example
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverFirewallDomainList.
     * @return A collection of values returned by getResolverFirewallDomainList.
     */
    public suspend fun getResolverFirewallDomainList(argument: GetResolverFirewallDomainListPlainArgs): GetResolverFirewallDomainListResult =
        getResolverFirewallDomainListResultToKotlin(getResolverFirewallDomainListPlain(argument.toJava()).await())

    /**
     * @see [getResolverFirewallDomainList].
     * @param firewallDomainListId The ID of the domain list.
     * The following attribute is additionally exported:
     * @return A collection of values returned by getResolverFirewallDomainList.
     */
    public suspend fun getResolverFirewallDomainList(firewallDomainListId: String): GetResolverFirewallDomainListResult {
        val argument = GetResolverFirewallDomainListPlainArgs(
            firewallDomainListId = firewallDomainListId,
        )
        return getResolverFirewallDomainListResultToKotlin(getResolverFirewallDomainListPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverFirewallDomainList].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallDomainListPlainArgs].
     * @return A collection of values returned by getResolverFirewallDomainList.
     */
    public suspend fun getResolverFirewallDomainList(argument: suspend GetResolverFirewallDomainListPlainArgsBuilder.() -> Unit): GetResolverFirewallDomainListResult {
        val builder = GetResolverFirewallDomainListPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverFirewallDomainListResultToKotlin(getResolverFirewallDomainListPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.ResolverFirewallRuleGroup` Retrieves the specified firewall rule group.
     * This data source allows to retrieve details about a specific a Route 53 Resolver DNS Firewall rule group.
     * ## Example Usage
     * The following example shows how to get a firewall rule group from its ID.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverFirewallRuleGroup({
     *     firewallRuleGroupId: "rslvr-frg-example",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_firewall_rule_group(firewall_rule_group_id="rslvr-frg-example")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverFirewallRuleGroup.Invoke(new()
     *     {
     *         FirewallRuleGroupId = "rslvr-frg-example",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverFirewallRuleGroup(ctx, &route53.LookupResolverFirewallRuleGroupArgs{
     * 			FirewallRuleGroupId: "rslvr-frg-example",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverFirewallRuleGroupArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverFirewallRuleGroup(GetResolverFirewallRuleGroupArgs.builder()
     *             .firewallRuleGroupId("rslvr-frg-example")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverFirewallRuleGroup
     *       Arguments:
     *         firewallRuleGroupId: rslvr-frg-example
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverFirewallRuleGroup.
     * @return A collection of values returned by getResolverFirewallRuleGroup.
     */
    public suspend fun getResolverFirewallRuleGroup(argument: GetResolverFirewallRuleGroupPlainArgs): GetResolverFirewallRuleGroupResult =
        getResolverFirewallRuleGroupResultToKotlin(getResolverFirewallRuleGroupPlain(argument.toJava()).await())

    /**
     * @see [getResolverFirewallRuleGroup].
     * @param firewallRuleGroupId The ID of the rule group.
     * The following attribute is additionally exported:
     * @return A collection of values returned by getResolverFirewallRuleGroup.
     */
    public suspend fun getResolverFirewallRuleGroup(firewallRuleGroupId: String): GetResolverFirewallRuleGroupResult {
        val argument = GetResolverFirewallRuleGroupPlainArgs(
            firewallRuleGroupId = firewallRuleGroupId,
        )
        return getResolverFirewallRuleGroupResultToKotlin(getResolverFirewallRuleGroupPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverFirewallRuleGroup].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRuleGroupPlainArgs].
     * @return A collection of values returned by getResolverFirewallRuleGroup.
     */
    public suspend fun getResolverFirewallRuleGroup(argument: suspend GetResolverFirewallRuleGroupPlainArgsBuilder.() -> Unit): GetResolverFirewallRuleGroupResult {
        val builder = GetResolverFirewallRuleGroupPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverFirewallRuleGroupResultToKotlin(getResolverFirewallRuleGroupPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.ResolverFirewallRuleGroupAssociation` Retrieves the specified firewall rule group association.
     * This data source allows to retrieve details about a specific a Route 53 Resolver DNS Firewall rule group association.
     * ## Example Usage
     * The following example shows how to get a firewall rule group association from its id.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverFirewallRuleGroupAssociation({
     *     firewallRuleGroupAssociationId: "rslvr-frgassoc-example",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_firewall_rule_group_association(firewall_rule_group_association_id="rslvr-frgassoc-example")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverFirewallRuleGroupAssociation.Invoke(new()
     *     {
     *         FirewallRuleGroupAssociationId = "rslvr-frgassoc-example",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverFirewallRuleGroupAssociation(ctx, &route53.LookupResolverFirewallRuleGroupAssociationArgs{
     * 			FirewallRuleGroupAssociationId: "rslvr-frgassoc-example",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverFirewallRuleGroupAssociationArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverFirewallRuleGroupAssociation(GetResolverFirewallRuleGroupAssociationArgs.builder()
     *             .firewallRuleGroupAssociationId("rslvr-frgassoc-example")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverFirewallRuleGroupAssociation
     *       Arguments:
     *         firewallRuleGroupAssociationId: rslvr-frgassoc-example
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverFirewallRuleGroupAssociation.
     * @return A collection of values returned by getResolverFirewallRuleGroupAssociation.
     */
    public suspend fun getResolverFirewallRuleGroupAssociation(argument: GetResolverFirewallRuleGroupAssociationPlainArgs): GetResolverFirewallRuleGroupAssociationResult =
        getResolverFirewallRuleGroupAssociationResultToKotlin(getResolverFirewallRuleGroupAssociationPlain(argument.toJava()).await())

    /**
     * @see [getResolverFirewallRuleGroupAssociation].
     * @param firewallRuleGroupAssociationId The identifier for the association.
     * The following attribute is additionally exported:
     * @return A collection of values returned by getResolverFirewallRuleGroupAssociation.
     */
    public suspend fun getResolverFirewallRuleGroupAssociation(firewallRuleGroupAssociationId: String): GetResolverFirewallRuleGroupAssociationResult {
        val argument = GetResolverFirewallRuleGroupAssociationPlainArgs(
            firewallRuleGroupAssociationId = firewallRuleGroupAssociationId,
        )
        return getResolverFirewallRuleGroupAssociationResultToKotlin(getResolverFirewallRuleGroupAssociationPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverFirewallRuleGroupAssociation].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRuleGroupAssociationPlainArgs].
     * @return A collection of values returned by getResolverFirewallRuleGroupAssociation.
     */
    public suspend fun getResolverFirewallRuleGroupAssociation(argument: suspend GetResolverFirewallRuleGroupAssociationPlainArgsBuilder.() -> Unit): GetResolverFirewallRuleGroupAssociationResult {
        val builder = GetResolverFirewallRuleGroupAssociationPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverFirewallRuleGroupAssociationResultToKotlin(getResolverFirewallRuleGroupAssociationPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.getResolverFirewallRules` Provides details about rules in a specific Route53 Resolver Firewall rule group.
     * ## Example Usage
     * The following example shows how to get Route53 Resolver Firewall rules based on its associated firewall group id.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverFirewallRules({
     *     firewallRuleGroupId: exampleAwsRoute53ResolverFirewallRuleGroup.id,
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_firewall_rules(firewall_rule_group_id=example_aws_route53_resolver_firewall_rule_group["id"])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverFirewallRules.Invoke(new()
     *     {
     *         FirewallRuleGroupId = exampleAwsRoute53ResolverFirewallRuleGroup.Id,
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetResolverFirewallRules(ctx, &route53.GetResolverFirewallRulesArgs{
     * 			FirewallRuleGroupId: exampleAwsRoute53ResolverFirewallRuleGroup.Id,
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverFirewallRulesArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverFirewallRules(GetResolverFirewallRulesArgs.builder()
     *             .firewallRuleGroupId(exampleAwsRoute53ResolverFirewallRuleGroup.id())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverFirewallRules
     *       Arguments:
     *         firewallRuleGroupId: ${exampleAwsRoute53ResolverFirewallRuleGroup.id}
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverFirewallRules.
     * @return A collection of values returned by getResolverFirewallRules.
     */
    public suspend fun getResolverFirewallRules(argument: GetResolverFirewallRulesPlainArgs): GetResolverFirewallRulesResult =
        getResolverFirewallRulesResultToKotlin(getResolverFirewallRulesPlain(argument.toJava()).await())

    /**
     * @see [getResolverFirewallRules].
     * @param action The action that DNS Firewall should take on a DNS query when it matches one of the domains in the rule's domain list.
     * @param firewallRuleGroupId The unique identifier of the firewall rule group that you want to retrieve the rules for.
     * @param priority The setting that determines the processing order of the rules in a rule group.
     * @return A collection of values returned by getResolverFirewallRules.
     */
    public suspend fun getResolverFirewallRules(
        action: String? = null,
        firewallRuleGroupId: String,
        priority: Int? = null,
    ): GetResolverFirewallRulesResult {
        val argument = GetResolverFirewallRulesPlainArgs(
            action = action,
            firewallRuleGroupId = firewallRuleGroupId,
            priority = priority,
        )
        return getResolverFirewallRulesResultToKotlin(getResolverFirewallRulesPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverFirewallRules].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverFirewallRulesPlainArgs].
     * @return A collection of values returned by getResolverFirewallRules.
     */
    public suspend fun getResolverFirewallRules(argument: suspend GetResolverFirewallRulesPlainArgsBuilder.() -> Unit): GetResolverFirewallRulesResult {
        val builder = GetResolverFirewallRulesPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverFirewallRulesResultToKotlin(getResolverFirewallRulesPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.ResolverRule` provides details about a specific Route53 Resolver rule.
     * ## Example Usage
     * The following example shows how to get a Route53 Resolver rule based on its associated domain name and rule type.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverRule({
     *     domainName: "subdomain.example.com",
     *     ruleType: "SYSTEM",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_rule(domain_name="subdomain.example.com",
     *     rule_type="SYSTEM")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverRule.Invoke(new()
     *     {
     *         DomainName = "subdomain.example.com",
     *         RuleType = "SYSTEM",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.LookupResolverRule(ctx, &route53.LookupResolverRuleArgs{
     * 			DomainName: pulumi.StringRef("subdomain.example.com"),
     * 			RuleType:   pulumi.StringRef("SYSTEM"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverRuleArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverRule(GetResolverRuleArgs.builder()
     *             .domainName("subdomain.example.com")
     *             .ruleType("SYSTEM")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverRule
     *       Arguments:
     *         domainName: subdomain.example.com
     *         ruleType: SYSTEM
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverRule.
     * @return A collection of values returned by getResolverRule.
     */
    public suspend fun getResolverRule(argument: GetResolverRulePlainArgs): GetResolverRuleResult =
        getResolverRuleResultToKotlin(getResolverRulePlain(argument.toJava()).await())

    /**
     * @see [getResolverRule].
     * @param domainName Domain name the desired resolver rule forwards DNS queries for. Conflicts with `resolver_rule_id`.
     * @param name Friendly name of the desired resolver rule. Conflicts with `resolver_rule_id`.
     * @param resolverEndpointId ID of the outbound resolver endpoint of the desired resolver rule. Conflicts with `resolver_rule_id`.
     * @param resolverRuleId ID of the desired resolver rule. Conflicts with `domain_name`, `name`, `resolver_endpoint_id` and `rule_type`.
     * @param ruleType Rule type of the desired resolver rule. Valid values are `FORWARD`, `SYSTEM` and `RECURSIVE`. Conflicts with `resolver_rule_id`.
     * @param tags Map of tags assigned to the resolver rule.
     * @return A collection of values returned by getResolverRule.
     */
    public suspend fun getResolverRule(
        domainName: String? = null,
        name: String? = null,
        resolverEndpointId: String? = null,
        resolverRuleId: String? = null,
        ruleType: String? = null,
        tags: Map? = null,
    ): GetResolverRuleResult {
        val argument = GetResolverRulePlainArgs(
            domainName = domainName,
            name = name,
            resolverEndpointId = resolverEndpointId,
            resolverRuleId = resolverRuleId,
            ruleType = ruleType,
            tags = tags,
        )
        return getResolverRuleResultToKotlin(getResolverRulePlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverRule].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverRulePlainArgs].
     * @return A collection of values returned by getResolverRule.
     */
    public suspend fun getResolverRule(argument: suspend GetResolverRulePlainArgsBuilder.() -> Unit): GetResolverRuleResult {
        val builder = GetResolverRulePlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverRuleResultToKotlin(getResolverRulePlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.getResolverRules` provides details about a set of Route53 Resolver rules.
     * ## Example Usage
     * ### Retrieving the default resolver rule
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverRules({
     *     ownerId: "Route 53 Resolver",
     *     ruleType: "RECURSIVE",
     *     shareStatus: "NOT_SHARED",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_rules(owner_id="Route 53 Resolver",
     *     rule_type="RECURSIVE",
     *     share_status="NOT_SHARED")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverRules.Invoke(new()
     *     {
     *         OwnerId = "Route 53 Resolver",
     *         RuleType = "RECURSIVE",
     *         ShareStatus = "NOT_SHARED",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetResolverRules(ctx, &route53.GetResolverRulesArgs{
     * 			OwnerId:     pulumi.StringRef("Route 53 Resolver"),
     * 			RuleType:    pulumi.StringRef("RECURSIVE"),
     * 			ShareStatus: pulumi.StringRef("NOT_SHARED"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverRulesArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverRules(GetResolverRulesArgs.builder()
     *             .ownerId("Route 53 Resolver")
     *             .ruleType("RECURSIVE")
     *             .shareStatus("NOT_SHARED")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverRules
     *       Arguments:
     *         ownerId: Route 53 Resolver
     *         ruleType: RECURSIVE
     *         shareStatus: NOT_SHARED
     * ```
     * 
     * ### Retrieving forward rules shared with me
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverRules({
     *     ruleType: "FORWARD",
     *     shareStatus: "SHARED_WITH_ME",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_rules(rule_type="FORWARD",
     *     share_status="SHARED_WITH_ME")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverRules.Invoke(new()
     *     {
     *         RuleType = "FORWARD",
     *         ShareStatus = "SHARED_WITH_ME",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetResolverRules(ctx, &route53.GetResolverRulesArgs{
     * 			RuleType:    pulumi.StringRef("FORWARD"),
     * 			ShareStatus: pulumi.StringRef("SHARED_WITH_ME"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverRulesArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverRules(GetResolverRulesArgs.builder()
     *             .ruleType("FORWARD")
     *             .shareStatus("SHARED_WITH_ME")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverRules
     *       Arguments:
     *         ruleType: FORWARD
     *         shareStatus: SHARED_WITH_ME
     * ```
     * 
     * ### Retrieving rules by name regex
     * Resolver rules whose name contains `abc`.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getResolverRules({
     *     nameRegex: ".*abc.*",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_resolver_rules(name_regex=".*abc.*")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetResolverRules.Invoke(new()
     *     {
     *         NameRegex = ".*abc.*",
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		_, err := route53.GetResolverRules(ctx, &route53.GetResolverRulesArgs{
     * 			NameRegex: pulumi.StringRef(".*abc.*"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetResolverRulesArgs;
     * 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) {
     *         final var example = Route53Functions.getResolverRules(GetResolverRulesArgs.builder()
     *             .nameRegex(".*abc.*")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getResolverRules
     *       Arguments:
     *         nameRegex: .*abc.*
     * ```
     * 
     * @param argument A collection of arguments for invoking getResolverRules.
     * @return A collection of values returned by getResolverRules.
     */
    public suspend fun getResolverRules(argument: GetResolverRulesPlainArgs): GetResolverRulesResult =
        getResolverRulesResultToKotlin(getResolverRulesPlain(argument.toJava()).await())

    /**
     * @see [getResolverRules].
     * @param nameRegex Regex string to filter resolver rule names.
     * The filtering is done locally, so could have a performance impact if the result is large.
     * This argument should be used along with other arguments to limit the number of results returned.
     * @param ownerId When the desired resolver rules are shared with another AWS account, the account ID of the account that the rules are shared with.
     * @param resolverEndpointId ID of the outbound resolver endpoint for the desired resolver rules.
     * @param ruleType Rule type of the desired resolver rules. Valid values are `FORWARD`, `SYSTEM` and `RECURSIVE`.
     * @param shareStatus Whether the desired resolver rules are shared and, if so, whether the current account is sharing the rules with another account, or another account is sharing the rules with the current account. Valid values are `NOT_SHARED`, `SHARED_BY_ME` or `SHARED_WITH_ME`
     * @return A collection of values returned by getResolverRules.
     */
    public suspend fun getResolverRules(
        nameRegex: String? = null,
        ownerId: String? = null,
        resolverEndpointId: String? = null,
        ruleType: String? = null,
        shareStatus: String? = null,
    ): GetResolverRulesResult {
        val argument = GetResolverRulesPlainArgs(
            nameRegex = nameRegex,
            ownerId = ownerId,
            resolverEndpointId = resolverEndpointId,
            ruleType = ruleType,
            shareStatus = shareStatus,
        )
        return getResolverRulesResultToKotlin(getResolverRulesPlain(argument.toJava()).await())
    }

    /**
     * @see [getResolverRules].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetResolverRulesPlainArgs].
     * @return A collection of values returned by getResolverRules.
     */
    public suspend fun getResolverRules(argument: suspend GetResolverRulesPlainArgsBuilder.() -> Unit): GetResolverRulesResult {
        val builder = GetResolverRulesPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getResolverRulesResultToKotlin(getResolverRulesPlain(builtArgument.toJava()).await())
    }

    /**
     * Generates an Route53 traffic policy document in JSON format for use with resources that expect policy documents such as `aws.route53.TrafficPolicy`.
     * ## Example Usage
     * ### Basic Example
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const current = aws.getRegion({});
     * const example = Promise.all([current, current]).then(([current, current1]) => aws.route53.getTrafficPolicyDocument({
     *     recordType: "A",
     *     startRule: "site_switch",
     *     endpoints: [
     *         {
     *             id: "my_elb",
     *             type: "elastic-load-balancer",
     *             value: `elb-111111.${current.name}.elb.amazonaws.com`,
     *         },
     *         {
     *             id: "site_down_banner",
     *             type: "s3-website",
     *             region: current1.name,
     *             value: "www.example.com",
     *         },
     *     ],
     *     rules: [{
     *         id: "site_switch",
     *         type: "failover",
     *         primary: {
     *             endpointReference: "my_elb",
     *         },
     *         secondary: {
     *             endpointReference: "site_down_banner",
     *         },
     *     }],
     * }));
     * const exampleTrafficPolicy = new aws.route53.TrafficPolicy("example", {
     *     name: "example",
     *     comment: "example comment",
     *     document: example.then(example => example.json),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * current = aws.get_region()
     * example = aws.route53.get_traffic_policy_document(record_type="A",
     *     start_rule="site_switch",
     *     endpoints=[
     *         {
     *             "id": "my_elb",
     *             "type": "elastic-load-balancer",
     *             "value": f"elb-111111.{current.name}.elb.amazonaws.com",
     *         },
     *         {
     *             "id": "site_down_banner",
     *             "type": "s3-website",
     *             "region": current.name,
     *             "value": "www.example.com",
     *         },
     *     ],
     *     rules=[{
     *         "id": "site_switch",
     *         "type": "failover",
     *         "primary": {
     *             "endpoint_reference": "my_elb",
     *         },
     *         "secondary": {
     *             "endpoint_reference": "site_down_banner",
     *         },
     *     }])
     * example_traffic_policy = aws.route53.TrafficPolicy("example",
     *     name="example",
     *     comment="example comment",
     *     document=example.json)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var current = Aws.GetRegion.Invoke();
     *     var example = Aws.Route53.GetTrafficPolicyDocument.Invoke(new()
     *     {
     *         RecordType = "A",
     *         StartRule = "site_switch",
     *         Endpoints = new[]
     *         {
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentEndpointInputArgs
     *             {
     *                 Id = "my_elb",
     *                 Type = "elastic-load-balancer",
     *                 Value = $"elb-111111.{current.Apply(getRegionResult => getRegionResult.Name)}.elb.amazonaws.com",
     *             },
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentEndpointInputArgs
     *             {
     *                 Id = "site_down_banner",
     *                 Type = "s3-website",
     *                 Region = current.Apply(getRegionResult => getRegionResult.Name),
     *                 Value = "www.example.com",
     *             },
     *         },
     *         Rules = new[]
     *         {
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleInputArgs
     *             {
     *                 Id = "site_switch",
     *                 Type = "failover",
     *                 Primary = new Aws.Route53.Inputs.GetTrafficPolicyDocumentRulePrimaryInputArgs
     *                 {
     *                     EndpointReference = "my_elb",
     *                 },
     *                 Secondary = new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleSecondaryInputArgs
     *                 {
     *                     EndpointReference = "site_down_banner",
     *                 },
     *             },
     *         },
     *     });
     *     var exampleTrafficPolicy = new Aws.Route53.TrafficPolicy("example", new()
     *     {
     *         Name = "example",
     *         Comment = "example comment",
     *         Document = example.Apply(getTrafficPolicyDocumentResult => getTrafficPolicyDocumentResult.Json),
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"fmt"
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws"
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		current, err := aws.GetRegion(ctx, &aws.GetRegionArgs{}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		example, err := route53.GetTrafficPolicyDocument(ctx, &route53.GetTrafficPolicyDocumentArgs{
     * 			RecordType: pulumi.StringRef("A"),
     * 			StartRule:  pulumi.StringRef("site_switch"),
     * 			Endpoints: []route53.GetTrafficPolicyDocumentEndpoint{
     * 				{
     * 					Id:    "my_elb",
     * 					Type:  pulumi.StringRef("elastic-load-balancer"),
     * 					Value: pulumi.StringRef(fmt.Sprintf("elb-111111.%v.elb.amazonaws.com", current.Name)),
     * 				},
     * 				{
     * 					Id:     "site_down_banner",
     * 					Type:   pulumi.StringRef("s3-website"),
     * 					Region: pulumi.StringRef(current.Name),
     * 					Value:  pulumi.StringRef("www.example.com"),
     * 				},
     * 			},
     * 			Rules: []route53.GetTrafficPolicyDocumentRule{
     * 				{
     * 					Id:   "site_switch",
     * 					Type: pulumi.StringRef("failover"),
     * 					Primary: {
     * 						EndpointReference: pulumi.StringRef("my_elb"),
     * 					},
     * 					Secondary: {
     * 						EndpointReference: pulumi.StringRef("site_down_banner"),
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = route53.NewTrafficPolicy(ctx, "example", &route53.TrafficPolicyArgs{
     * 			Name:     pulumi.String("example"),
     * 			Comment:  pulumi.String("example comment"),
     * 			Document: pulumi.String(example.Json),
     * 		})
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.AwsFunctions;
     * import com.pulumi.aws.inputs.GetRegionArgs;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetTrafficPolicyDocumentArgs;
     * import com.pulumi.aws.route53.TrafficPolicy;
     * import com.pulumi.aws.route53.TrafficPolicyArgs;
     * 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) {
     *         final var current = AwsFunctions.getRegion();
     *         final var example = Route53Functions.getTrafficPolicyDocument(GetTrafficPolicyDocumentArgs.builder()
     *             .recordType("A")
     *             .startRule("site_switch")
     *             .endpoints(
     *                 GetTrafficPolicyDocumentEndpointArgs.builder()
     *                     .id("my_elb")
     *                     .type("elastic-load-balancer")
     *                     .value(String.format("elb-111111.%s.elb.amazonaws.com", current.applyValue(getRegionResult -> getRegionResult.name())))
     *                     .build(),
     *                 GetTrafficPolicyDocumentEndpointArgs.builder()
     *                     .id("site_down_banner")
     *                     .type("s3-website")
     *                     .region(current.applyValue(getRegionResult -> getRegionResult.name()))
     *                     .value("www.example.com")
     *                     .build())
     *             .rules(GetTrafficPolicyDocumentRuleArgs.builder()
     *                 .id("site_switch")
     *                 .type("failover")
     *                 .primary(GetTrafficPolicyDocumentRulePrimaryArgs.builder()
     *                     .endpointReference("my_elb")
     *                     .build())
     *                 .secondary(GetTrafficPolicyDocumentRuleSecondaryArgs.builder()
     *                     .endpointReference("site_down_banner")
     *                     .build())
     *                 .build())
     *             .build());
     *         var exampleTrafficPolicy = new TrafficPolicy("exampleTrafficPolicy", TrafficPolicyArgs.builder()
     *             .name("example")
     *             .comment("example comment")
     *             .document(example.applyValue(getTrafficPolicyDocumentResult -> getTrafficPolicyDocumentResult.json()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleTrafficPolicy:
     *     type: aws:route53:TrafficPolicy
     *     name: example
     *     properties:
     *       name: example
     *       comment: example comment
     *       document: ${example.json}
     * variables:
     *   current:
     *     fn::invoke:
     *       Function: aws:getRegion
     *       Arguments: {}
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getTrafficPolicyDocument
     *       Arguments:
     *         recordType: A
     *         startRule: site_switch
     *         endpoints:
     *           - id: my_elb
     *             type: elastic-load-balancer
     *             value: elb-111111.${current.name}.elb.amazonaws.com
     *           - id: site_down_banner
     *             type: s3-website
     *             region: ${current.name}
     *             value: www.example.com
     *         rules:
     *           - id: site_switch
     *             type: failover
     *             primary:
     *               endpointReference: my_elb
     *             secondary:
     *               endpointReference: site_down_banner
     * ```
     * 
     * ### Complex Example
     * The following example showcases the use of nested rules within the traffic policy document and introduces the `geoproximity` rule type.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const example = aws.route53.getTrafficPolicyDocument({
     *     recordType: "A",
     *     startRule: "geoproximity_rule",
     *     endpoints: [
     *         {
     *             id: "na_endpoint_a",
     *             type: "elastic-load-balancer",
     *             value: "elb-111111.us-west-1.elb.amazonaws.com",
     *         },
     *         {
     *             id: "na_endpoint_b",
     *             type: "elastic-load-balancer",
     *             value: "elb-222222.us-west-1.elb.amazonaws.com",
     *         },
     *         {
     *             id: "eu_endpoint",
     *             type: "elastic-load-balancer",
     *             value: "elb-333333.eu-west-1.elb.amazonaws.com",
     *         },
     *         {
     *             id: "ap_endpoint",
     *             type: "elastic-load-balancer",
     *             value: "elb-444444.ap-northeast-2.elb.amazonaws.com",
     *         },
     *     ],
     *     rules: [
     *         {
     *             id: "na_rule",
     *             type: "failover",
     *             primary: {
     *                 endpointReference: "na_endpoint_a",
     *             },
     *             secondary: {
     *                 endpointReference: "na_endpoint_b",
     *             },
     *         },
     *         {
     *             id: "geoproximity_rule",
     *             type: "geoproximity",
     *             geoProximityLocations: [
     *                 {
     *                     region: "aws:route53:us-west-1",
     *                     bias: "10",
     *                     evaluateTargetHealth: true,
     *                     ruleReference: "na_rule",
     *                 },
     *                 {
     *                     region: "aws:route53:eu-west-1",
     *                     bias: "10",
     *                     evaluateTargetHealth: true,
     *                     endpointReference: "eu_endpoint",
     *                 },
     *                 {
     *                     region: "aws:route53:ap-northeast-2",
     *                     bias: "0",
     *                     evaluateTargetHealth: true,
     *                     endpointReference: "ap_endpoint",
     *                 },
     *             ],
     *         },
     *     ],
     * });
     * const exampleTrafficPolicy = new aws.route53.TrafficPolicy("example", {
     *     name: "example",
     *     comment: "example comment",
     *     document: example.then(example => example.json),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * example = aws.route53.get_traffic_policy_document(record_type="A",
     *     start_rule="geoproximity_rule",
     *     endpoints=[
     *         {
     *             "id": "na_endpoint_a",
     *             "type": "elastic-load-balancer",
     *             "value": "elb-111111.us-west-1.elb.amazonaws.com",
     *         },
     *         {
     *             "id": "na_endpoint_b",
     *             "type": "elastic-load-balancer",
     *             "value": "elb-222222.us-west-1.elb.amazonaws.com",
     *         },
     *         {
     *             "id": "eu_endpoint",
     *             "type": "elastic-load-balancer",
     *             "value": "elb-333333.eu-west-1.elb.amazonaws.com",
     *         },
     *         {
     *             "id": "ap_endpoint",
     *             "type": "elastic-load-balancer",
     *             "value": "elb-444444.ap-northeast-2.elb.amazonaws.com",
     *         },
     *     ],
     *     rules=[
     *         {
     *             "id": "na_rule",
     *             "type": "failover",
     *             "primary": {
     *                 "endpoint_reference": "na_endpoint_a",
     *             },
     *             "secondary": {
     *                 "endpoint_reference": "na_endpoint_b",
     *             },
     *         },
     *         {
     *             "id": "geoproximity_rule",
     *             "type": "geoproximity",
     *             "geo_proximity_locations": [
     *                 {
     *                     "region": "aws:route53:us-west-1",
     *                     "bias": "10",
     *                     "evaluate_target_health": True,
     *                     "rule_reference": "na_rule",
     *                 },
     *                 {
     *                     "region": "aws:route53:eu-west-1",
     *                     "bias": "10",
     *                     "evaluate_target_health": True,
     *                     "endpoint_reference": "eu_endpoint",
     *                 },
     *                 {
     *                     "region": "aws:route53:ap-northeast-2",
     *                     "bias": "0",
     *                     "evaluate_target_health": True,
     *                     "endpoint_reference": "ap_endpoint",
     *                 },
     *             ],
     *         },
     *     ])
     * example_traffic_policy = aws.route53.TrafficPolicy("example",
     *     name="example",
     *     comment="example comment",
     *     document=example.json)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = Aws.Route53.GetTrafficPolicyDocument.Invoke(new()
     *     {
     *         RecordType = "A",
     *         StartRule = "geoproximity_rule",
     *         Endpoints = new[]
     *         {
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentEndpointInputArgs
     *             {
     *                 Id = "na_endpoint_a",
     *                 Type = "elastic-load-balancer",
     *                 Value = "elb-111111.us-west-1.elb.amazonaws.com",
     *             },
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentEndpointInputArgs
     *             {
     *                 Id = "na_endpoint_b",
     *                 Type = "elastic-load-balancer",
     *                 Value = "elb-222222.us-west-1.elb.amazonaws.com",
     *             },
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentEndpointInputArgs
     *             {
     *                 Id = "eu_endpoint",
     *                 Type = "elastic-load-balancer",
     *                 Value = "elb-333333.eu-west-1.elb.amazonaws.com",
     *             },
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentEndpointInputArgs
     *             {
     *                 Id = "ap_endpoint",
     *                 Type = "elastic-load-balancer",
     *                 Value = "elb-444444.ap-northeast-2.elb.amazonaws.com",
     *             },
     *         },
     *         Rules = new[]
     *         {
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleInputArgs
     *             {
     *                 Id = "na_rule",
     *                 Type = "failover",
     *                 Primary = new Aws.Route53.Inputs.GetTrafficPolicyDocumentRulePrimaryInputArgs
     *                 {
     *                     EndpointReference = "na_endpoint_a",
     *                 },
     *                 Secondary = new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleSecondaryInputArgs
     *                 {
     *                     EndpointReference = "na_endpoint_b",
     *                 },
     *             },
     *             new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleInputArgs
     *             {
     *                 Id = "geoproximity_rule",
     *                 Type = "geoproximity",
     *                 GeoProximityLocations = new[]
     *                 {
     *                     new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleGeoProximityLocationInputArgs
     *                     {
     *                         Region = "aws:route53:us-west-1",
     *                         Bias = "10",
     *                         EvaluateTargetHealth = true,
     *                         RuleReference = "na_rule",
     *                     },
     *                     new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleGeoProximityLocationInputArgs
     *                     {
     *                         Region = "aws:route53:eu-west-1",
     *                         Bias = "10",
     *                         EvaluateTargetHealth = true,
     *                         EndpointReference = "eu_endpoint",
     *                     },
     *                     new Aws.Route53.Inputs.GetTrafficPolicyDocumentRuleGeoProximityLocationInputArgs
     *                     {
     *                         Region = "aws:route53:ap-northeast-2",
     *                         Bias = "0",
     *                         EvaluateTargetHealth = true,
     *                         EndpointReference = "ap_endpoint",
     *                     },
     *                 },
     *             },
     *         },
     *     });
     *     var exampleTrafficPolicy = new Aws.Route53.TrafficPolicy("example", new()
     *     {
     *         Name = "example",
     *         Comment = "example comment",
     *         Document = example.Apply(getTrafficPolicyDocumentResult => getTrafficPolicyDocumentResult.Json),
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		example, err := route53.GetTrafficPolicyDocument(ctx, &route53.GetTrafficPolicyDocumentArgs{
     * 			RecordType: pulumi.StringRef("A"),
     * 			StartRule:  pulumi.StringRef("geoproximity_rule"),
     * 			Endpoints: []route53.GetTrafficPolicyDocumentEndpoint{
     * 				{
     * 					Id:    "na_endpoint_a",
     * 					Type:  pulumi.StringRef("elastic-load-balancer"),
     * 					Value: pulumi.StringRef("elb-111111.us-west-1.elb.amazonaws.com"),
     * 				},
     * 				{
     * 					Id:    "na_endpoint_b",
     * 					Type:  pulumi.StringRef("elastic-load-balancer"),
     * 					Value: pulumi.StringRef("elb-222222.us-west-1.elb.amazonaws.com"),
     * 				},
     * 				{
     * 					Id:    "eu_endpoint",
     * 					Type:  pulumi.StringRef("elastic-load-balancer"),
     * 					Value: pulumi.StringRef("elb-333333.eu-west-1.elb.amazonaws.com"),
     * 				},
     * 				{
     * 					Id:    "ap_endpoint",
     * 					Type:  pulumi.StringRef("elastic-load-balancer"),
     * 					Value: pulumi.StringRef("elb-444444.ap-northeast-2.elb.amazonaws.com"),
     * 				},
     * 			},
     * 			Rules: []route53.GetTrafficPolicyDocumentRule{
     * 				{
     * 					Id:   "na_rule",
     * 					Type: pulumi.StringRef("failover"),
     * 					Primary: {
     * 						EndpointReference: pulumi.StringRef("na_endpoint_a"),
     * 					},
     * 					Secondary: {
     * 						EndpointReference: pulumi.StringRef("na_endpoint_b"),
     * 					},
     * 				},
     * 				{
     * 					Id:   "geoproximity_rule",
     * 					Type: pulumi.StringRef("geoproximity"),
     * 					GeoProximityLocations: []route53.GetTrafficPolicyDocumentRuleGeoProximityLocation{
     * 						{
     * 							Region:               pulumi.StringRef("aws:route53:us-west-1"),
     * 							Bias:                 pulumi.StringRef("10"),
     * 							EvaluateTargetHealth: pulumi.BoolRef(true),
     * 							RuleReference:        pulumi.StringRef("na_rule"),
     * 						},
     * 						{
     * 							Region:               pulumi.StringRef("aws:route53:eu-west-1"),
     * 							Bias:                 pulumi.StringRef("10"),
     * 							EvaluateTargetHealth: pulumi.BoolRef(true),
     * 							EndpointReference:    pulumi.StringRef("eu_endpoint"),
     * 						},
     * 						{
     * 							Region:               pulumi.StringRef("aws:route53:ap-northeast-2"),
     * 							Bias:                 pulumi.StringRef("0"),
     * 							EvaluateTargetHealth: pulumi.BoolRef(true),
     * 							EndpointReference:    pulumi.StringRef("ap_endpoint"),
     * 						},
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = route53.NewTrafficPolicy(ctx, "example", &route53.TrafficPolicyArgs{
     * 			Name:     pulumi.String("example"),
     * 			Comment:  pulumi.String("example comment"),
     * 			Document: pulumi.String(example.Json),
     * 		})
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetTrafficPolicyDocumentArgs;
     * import com.pulumi.aws.route53.TrafficPolicy;
     * import com.pulumi.aws.route53.TrafficPolicyArgs;
     * 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) {
     *         final var example = Route53Functions.getTrafficPolicyDocument(GetTrafficPolicyDocumentArgs.builder()
     *             .recordType("A")
     *             .startRule("geoproximity_rule")
     *             .endpoints(
     *                 GetTrafficPolicyDocumentEndpointArgs.builder()
     *                     .id("na_endpoint_a")
     *                     .type("elastic-load-balancer")
     *                     .value("elb-111111.us-west-1.elb.amazonaws.com")
     *                     .build(),
     *                 GetTrafficPolicyDocumentEndpointArgs.builder()
     *                     .id("na_endpoint_b")
     *                     .type("elastic-load-balancer")
     *                     .value("elb-222222.us-west-1.elb.amazonaws.com")
     *                     .build(),
     *                 GetTrafficPolicyDocumentEndpointArgs.builder()
     *                     .id("eu_endpoint")
     *                     .type("elastic-load-balancer")
     *                     .value("elb-333333.eu-west-1.elb.amazonaws.com")
     *                     .build(),
     *                 GetTrafficPolicyDocumentEndpointArgs.builder()
     *                     .id("ap_endpoint")
     *                     .type("elastic-load-balancer")
     *                     .value("elb-444444.ap-northeast-2.elb.amazonaws.com")
     *                     .build())
     *             .rules(
     *                 GetTrafficPolicyDocumentRuleArgs.builder()
     *                     .id("na_rule")
     *                     .type("failover")
     *                     .primary(GetTrafficPolicyDocumentRulePrimaryArgs.builder()
     *                         .endpointReference("na_endpoint_a")
     *                         .build())
     *                     .secondary(GetTrafficPolicyDocumentRuleSecondaryArgs.builder()
     *                         .endpointReference("na_endpoint_b")
     *                         .build())
     *                     .build(),
     *                 GetTrafficPolicyDocumentRuleArgs.builder()
     *                     .id("geoproximity_rule")
     *                     .type("geoproximity")
     *                     .geoProximityLocations(
     *                         GetTrafficPolicyDocumentRuleGeoProximityLocationArgs.builder()
     *                             .region("aws:route53:us-west-1")
     *                             .bias(10)
     *                             .evaluateTargetHealth(true)
     *                             .ruleReference("na_rule")
     *                             .build(),
     *                         GetTrafficPolicyDocumentRuleGeoProximityLocationArgs.builder()
     *                             .region("aws:route53:eu-west-1")
     *                             .bias(10)
     *                             .evaluateTargetHealth(true)
     *                             .endpointReference("eu_endpoint")
     *                             .build(),
     *                         GetTrafficPolicyDocumentRuleGeoProximityLocationArgs.builder()
     *                             .region("aws:route53:ap-northeast-2")
     *                             .bias(0)
     *                             .evaluateTargetHealth(true)
     *                             .endpointReference("ap_endpoint")
     *                             .build())
     *                     .build())
     *             .build());
     *         var exampleTrafficPolicy = new TrafficPolicy("exampleTrafficPolicy", TrafficPolicyArgs.builder()
     *             .name("example")
     *             .comment("example comment")
     *             .document(example.applyValue(getTrafficPolicyDocumentResult -> getTrafficPolicyDocumentResult.json()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleTrafficPolicy:
     *     type: aws:route53:TrafficPolicy
     *     name: example
     *     properties:
     *       name: example
     *       comment: example comment
     *       document: ${example.json}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: aws:route53:getTrafficPolicyDocument
     *       Arguments:
     *         recordType: A
     *         startRule: geoproximity_rule
     *         endpoints:
     *           - id: na_endpoint_a
     *             type: elastic-load-balancer
     *             value: elb-111111.us-west-1.elb.amazonaws.com
     *           - id: na_endpoint_b
     *             type: elastic-load-balancer
     *             value: elb-222222.us-west-1.elb.amazonaws.com
     *           - id: eu_endpoint
     *             type: elastic-load-balancer
     *             value: elb-333333.eu-west-1.elb.amazonaws.com
     *           - id: ap_endpoint
     *             type: elastic-load-balancer
     *             value: elb-444444.ap-northeast-2.elb.amazonaws.com
     *         rules:
     *           - id: na_rule
     *             type: failover
     *             primary:
     *               endpointReference: na_endpoint_a
     *             secondary:
     *               endpointReference: na_endpoint_b
     *           - id: geoproximity_rule
     *             type: geoproximity
     *             geoProximityLocations:
     *               - region: aws:route53:us-west-1
     *                 bias: 10
     *                 evaluateTargetHealth: true
     *                 ruleReference: na_rule
     *               - region: aws:route53:eu-west-1
     *                 bias: 10
     *                 evaluateTargetHealth: true
     *                 endpointReference: eu_endpoint
     *               - region: aws:route53:ap-northeast-2
     *                 bias: 0
     *                 evaluateTargetHealth: true
     *                 endpointReference: ap_endpoint
     * ```
     * 
     * @param argument A collection of arguments for invoking getTrafficPolicyDocument.
     * @return A collection of values returned by getTrafficPolicyDocument.
     */
    public suspend fun getTrafficPolicyDocument(argument: GetTrafficPolicyDocumentPlainArgs): GetTrafficPolicyDocumentResult =
        getTrafficPolicyDocumentResultToKotlin(getTrafficPolicyDocumentPlain(argument.toJava()).await())

    /**
     * @see [getTrafficPolicyDocument].
     * @param endpoints Configuration block for the definitions of the endpoints that you want to use in this traffic policy. See below
     * @param recordType DNS type of all of the resource record sets that Amazon Route 53 will create based on this traffic policy.
     * @param rules Configuration block for definitions of the rules that you want to use in this traffic policy. See below
     * @param startEndpoint An endpoint to be as the starting point for the traffic policy.
     * @param startRule A rule to be as the starting point for the traffic policy.
     * @param version Version of the traffic policy format.
     * @return A collection of values returned by getTrafficPolicyDocument.
     */
    public suspend fun getTrafficPolicyDocument(
        endpoints: List? = null,
        recordType: String? = null,
        rules: List? = null,
        startEndpoint: String? = null,
        startRule: String? = null,
        version: String? = null,
    ): GetTrafficPolicyDocumentResult {
        val argument = GetTrafficPolicyDocumentPlainArgs(
            endpoints = endpoints,
            recordType = recordType,
            rules = rules,
            startEndpoint = startEndpoint,
            startRule = startRule,
            version = version,
        )
        return getTrafficPolicyDocumentResultToKotlin(getTrafficPolicyDocumentPlain(argument.toJava()).await())
    }

    /**
     * @see [getTrafficPolicyDocument].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetTrafficPolicyDocumentPlainArgs].
     * @return A collection of values returned by getTrafficPolicyDocument.
     */
    public suspend fun getTrafficPolicyDocument(argument: suspend GetTrafficPolicyDocumentPlainArgsBuilder.() -> Unit): GetTrafficPolicyDocumentResult {
        val builder = GetTrafficPolicyDocumentPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getTrafficPolicyDocumentResultToKotlin(getTrafficPolicyDocumentPlain(builtArgument.toJava()).await())
    }

    /**
     * `aws.route53.Zone` provides details about a specific Route 53 Hosted Zone.
     * This data source allows to find a Hosted Zone ID given Hosted Zone name and certain search criteria.
     * ## Example Usage
     * The following example shows how to get a Hosted Zone from its name and from this data how to create a Record Set.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const selected = aws.route53.getZone({
     *     name: "test.com.",
     *     privateZone: true,
     * });
     * const www = new aws.route53.Record("www", {
     *     zoneId: selected.then(selected => selected.zoneId),
     *     name: selected.then(selected => `www.${selected.name}`),
     *     type: aws.route53.RecordType.A,
     *     ttl: 300,
     *     records: ["10.0.0.1"],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * selected = aws.route53.get_zone(name="test.com.",
     *     private_zone=True)
     * www = aws.route53.Record("www",
     *     zone_id=selected.zone_id,
     *     name=f"www.{selected.name}",
     *     type=aws.route53.RecordType.A,
     *     ttl=300,
     *     records=["10.0.0.1"])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var selected = Aws.Route53.GetZone.Invoke(new()
     *     {
     *         Name = "test.com.",
     *         PrivateZone = true,
     *     });
     *     var www = new Aws.Route53.Record("www", new()
     *     {
     *         ZoneId = selected.Apply(getZoneResult => getZoneResult.ZoneId),
     *         Name = $"www.{selected.Apply(getZoneResult => getZoneResult.Name)}",
     *         Type = Aws.Route53.RecordType.A,
     *         Ttl = 300,
     *         Records = new[]
     *         {
     *             "10.0.0.1",
     *         },
     *     });
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"fmt"
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		selected, err := route53.LookupZone(ctx, &route53.LookupZoneArgs{
     * 			Name:        pulumi.StringRef("test.com."),
     * 			PrivateZone: pulumi.BoolRef(true),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = route53.NewRecord(ctx, "www", &route53.RecordArgs{
     * 			ZoneId: pulumi.String(selected.ZoneId),
     * 			Name:   pulumi.Sprintf("www.%v", selected.Name),
     * 			Type:   pulumi.String(route53.RecordTypeA),
     * 			Ttl:    pulumi.Int(300),
     * 			Records: pulumi.StringArray{
     * 				pulumi.String("10.0.0.1"),
     * 			},
     * 		})
     * 		if err != nil {
     * 			return err
     * 		}
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * import com.pulumi.aws.route53.inputs.GetZoneArgs;
     * import com.pulumi.aws.route53.Record;
     * import com.pulumi.aws.route53.RecordArgs;
     * 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) {
     *         final var selected = Route53Functions.getZone(GetZoneArgs.builder()
     *             .name("test.com.")
     *             .privateZone(true)
     *             .build());
     *         var www = new Record("www", RecordArgs.builder()
     *             .zoneId(selected.applyValue(getZoneResult -> getZoneResult.zoneId()))
     *             .name(String.format("www.%s", selected.applyValue(getZoneResult -> getZoneResult.name())))
     *             .type("A")
     *             .ttl("300")
     *             .records("10.0.0.1")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   www:
     *     type: aws:route53:Record
     *     properties:
     *       zoneId: ${selected.zoneId}
     *       name: www.${selected.name}
     *       type: A
     *       ttl: '300'
     *       records:
     *         - 10.0.0.1
     * variables:
     *   selected:
     *     fn::invoke:
     *       Function: aws:route53:getZone
     *       Arguments:
     *         name: test.com.
     *         privateZone: true
     * ```
     * 
     * @param argument A collection of arguments for invoking getZone.
     * @return A collection of values returned by getZone.
     */
    public suspend fun getZone(argument: GetZonePlainArgs): GetZoneResult =
        getZoneResultToKotlin(getZonePlain(argument.toJava()).await())

    /**
     * @see [getZone].
     * @param name Hosted Zone name of the desired Hosted Zone.
     * @param privateZone Used with `name` field to get a private Hosted Zone.
     * @param tags Used with `name` field. A map of tags, each pair of which must exactly match a pair on the desired Hosted Zone.
     * @param vpcId Used with `name` field to get a private Hosted Zone associated with the vpc_id (in this case, private_zone is not mandatory).
     * @param zoneId Hosted Zone id of the desired Hosted Zone.
     * @return A collection of values returned by getZone.
     */
    public suspend fun getZone(
        name: String? = null,
        privateZone: Boolean? = null,
        tags: Map? = null,
        vpcId: String? = null,
        zoneId: String? = null,
    ): GetZoneResult {
        val argument = GetZonePlainArgs(
            name = name,
            privateZone = privateZone,
            tags = tags,
            vpcId = vpcId,
            zoneId = zoneId,
        )
        return getZoneResultToKotlin(getZonePlain(argument.toJava()).await())
    }

    /**
     * @see [getZone].
     * @param argument Builder for [com.pulumi.aws.route53.kotlin.inputs.GetZonePlainArgs].
     * @return A collection of values returned by getZone.
     */
    public suspend fun getZone(argument: suspend GetZonePlainArgsBuilder.() -> Unit): GetZoneResult {
        val builder = GetZonePlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getZoneResultToKotlin(getZonePlain(builtArgument.toJava()).await())
    }

    /**
     * This resource can be useful for getting back a list of Route53 Hosted Zone IDs for a Region.
     * ## Example Usage
     * The following example retrieves a list of all Hosted Zone IDs.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const all = aws.route53.getZones({});
     * export const example = all.then(all => all.ids);
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * all = aws.route53.get_zones()
     * pulumi.export("example", all.ids)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var all = Aws.Route53.GetZones.Invoke();
     *     return new Dictionary
     *     {
     *         ["example"] = all.Apply(getZonesResult => getZonesResult.Ids),
     *     };
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		all, err := route53.GetZones(ctx, map[string]interface{}{}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("example", all.Ids)
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * 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) {
     *         final var all = Route53Functions.getZones();
     *         ctx.export("example", all.applyValue(getZonesResult -> getZonesResult.ids()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   all:
     *     fn::invoke:
     *       Function: aws:route53:getZones
     *       Arguments: {}
     * outputs:
     *   example: ${all.ids}
     * ```
     * 
     * @param argument This resource can be useful for getting back a list of Route53 Hosted Zone IDs for a Region.
     * ## Example Usage
     * The following example retrieves a list of all Hosted Zone IDs.
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as aws from "@pulumi/aws";
     * const all = aws.route53.getZones({});
     * export const example = all.then(all => all.ids);
     * ```
     * ```python
     * import pulumi
     * import pulumi_aws as aws
     * all = aws.route53.get_zones()
     * pulumi.export("example", all.ids)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using Aws = Pulumi.Aws;
     * return await Deployment.RunAsync(() =>
     * {
     *     var all = Aws.Route53.GetZones.Invoke();
     *     return new Dictionary
     *     {
     *         ["example"] = all.Apply(getZonesResult => getZonesResult.Ids),
     *     };
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		all, err := route53.GetZones(ctx, map[string]interface{}{}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("example", all.Ids)
     * 		return nil
     * 	})
     * }
     * ```
     * ```java
     * package generated_program;
     * import com.pulumi.Context;
     * import com.pulumi.Pulumi;
     * import com.pulumi.core.Output;
     * import com.pulumi.aws.route53.Route53Functions;
     * 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) {
     *         final var all = Route53Functions.getZones();
     *         ctx.export("example", all.applyValue(getZonesResult -> getZonesResult.ids()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   all:
     *     fn::invoke:
     *       Function: aws:route53:getZones
     *       Arguments: {}
     * outputs:
     *   example: ${all.ids}
     * ```
     * 
     * @return A collection of values returned by getZones.
     */
    public suspend fun getZones(): GetZonesResult = getZonesResultToKotlin(getZonesPlain().await())
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy