github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/apigateway/domainName.go (about)

     1  // Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT.
     2  // *** WARNING: Do not edit by hand unless you're certain you know what you are doing! ***
     3  
     4  package apigateway
     5  
     6  import (
     7  	"context"
     8  	"reflect"
     9  
    10  	"errors"
    11  	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/internal"
    12  	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    13  )
    14  
    15  // Registers a custom domain name for use with AWS API Gateway. Additional information about this functionality
    16  // can be found in the [API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).
    17  //
    18  // This resource just establishes ownership of and the TLS settings for
    19  // a particular domain name. An API can be attached to a particular path
    20  // under the registered domain name using
    21  // the `apigateway.BasePathMapping` resource.
    22  //
    23  // API Gateway domains can be defined as either 'edge-optimized' or 'regional'.  In an edge-optimized configuration,
    24  // API Gateway internally creates and manages a CloudFront distribution to route requests on the given hostname. In
    25  // addition to this resource it's necessary to create a DNS record corresponding to the given domain name which is an alias
    26  // (either Route53 alias or traditional CNAME) to the Cloudfront domain name exported in the `cloudfrontDomainName`
    27  // attribute.
    28  //
    29  // In a regional configuration, API Gateway does not create a CloudFront distribution to route requests to the API, though
    30  // a distribution can be created if needed. In either case, it is necessary to create a DNS record corresponding to the
    31  // given domain name which is an alias (either Route53 alias or traditional CNAME) to the regional domain name exported in
    32  // the `regionalDomainName` attribute.
    33  //
    34  // > **Note:** API Gateway requires the use of AWS Certificate Manager (ACM) certificates instead of Identity and Access Management (IAM) certificates in regions that support ACM. Regions that support ACM can be found in the [Regions and Endpoints Documentation](https://docs.aws.amazon.com/general/latest/gr/rande.html#acm_region). To import an existing private key and certificate into ACM or request an ACM certificate, see the `acm.Certificate` resource.
    35  //
    36  // > **Note:** The `apigateway.DomainName` resource expects dependency on the `acm.CertificateValidation` as
    37  // only verified certificates can be used. This can be made either explicitly by adding the
    38  // `dependsOn = [aws_acm_certificate_validation.cert]` attribute. Or implicitly by referring certificate ARN
    39  // from the validation resource where it will be available after the resource creation:
    40  // `regionalCertificateArn = aws_acm_certificate_validation.cert.certificate_arn`.
    41  //
    42  // ## Example Usage
    43  //
    44  // ### Edge Optimized (ACM Certificate)
    45  //
    46  // <!--Start PulumiCodeChooser -->
    47  // ```go
    48  // package main
    49  //
    50  // import (
    51  //
    52  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/apigateway"
    53  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
    54  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    55  //
    56  // )
    57  //
    58  //	func main() {
    59  //		pulumi.Run(func(ctx *pulumi.Context) error {
    60  //			example, err := apigateway.NewDomainName(ctx, "example", &apigateway.DomainNameArgs{
    61  //				CertificateArn: pulumi.Any(exampleAwsAcmCertificateValidation.CertificateArn),
    62  //				DomainName:     pulumi.String("api.example.com"),
    63  //			})
    64  //			if err != nil {
    65  //				return err
    66  //			}
    67  //			// Example DNS record using Route53.
    68  //			// Route53 is not specifically required; any DNS host can be used.
    69  //			_, err = route53.NewRecord(ctx, "example", &route53.RecordArgs{
    70  //				Name:   example.DomainName,
    71  //				Type:   pulumi.String(route53.RecordTypeA),
    72  //				ZoneId: pulumi.Any(exampleAwsRoute53Zone.Id),
    73  //				Aliases: route53.RecordAliasArray{
    74  //					&route53.RecordAliasArgs{
    75  //						EvaluateTargetHealth: pulumi.Bool(true),
    76  //						Name:                 example.CloudfrontDomainName,
    77  //						ZoneId:               example.CloudfrontZoneId,
    78  //					},
    79  //				},
    80  //			})
    81  //			if err != nil {
    82  //				return err
    83  //			}
    84  //			return nil
    85  //		})
    86  //	}
    87  //
    88  // ```
    89  // <!--End PulumiCodeChooser -->
    90  //
    91  // ### Regional (ACM Certificate)
    92  //
    93  // <!--Start PulumiCodeChooser -->
    94  // ```go
    95  // package main
    96  //
    97  // import (
    98  //
    99  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/apigateway"
   100  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
   101  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   102  //
   103  // )
   104  //
   105  //	func main() {
   106  //		pulumi.Run(func(ctx *pulumi.Context) error {
   107  //			example, err := apigateway.NewDomainName(ctx, "example", &apigateway.DomainNameArgs{
   108  //				DomainName:             pulumi.String("api.example.com"),
   109  //				RegionalCertificateArn: pulumi.Any(exampleAwsAcmCertificateValidation.CertificateArn),
   110  //				EndpointConfiguration: &apigateway.DomainNameEndpointConfigurationArgs{
   111  //					Types: pulumi.String("REGIONAL"),
   112  //				},
   113  //			})
   114  //			if err != nil {
   115  //				return err
   116  //			}
   117  //			// Example DNS record using Route53.
   118  //			// Route53 is not specifically required; any DNS host can be used.
   119  //			_, err = route53.NewRecord(ctx, "example", &route53.RecordArgs{
   120  //				Name:   example.DomainName,
   121  //				Type:   pulumi.String(route53.RecordTypeA),
   122  //				ZoneId: pulumi.Any(exampleAwsRoute53Zone.Id),
   123  //				Aliases: route53.RecordAliasArray{
   124  //					&route53.RecordAliasArgs{
   125  //						EvaluateTargetHealth: pulumi.Bool(true),
   126  //						Name:                 example.RegionalDomainName,
   127  //						ZoneId:               example.RegionalZoneId,
   128  //					},
   129  //				},
   130  //			})
   131  //			if err != nil {
   132  //				return err
   133  //			}
   134  //			return nil
   135  //		})
   136  //	}
   137  //
   138  // ```
   139  // <!--End PulumiCodeChooser -->
   140  //
   141  // ## Import
   142  //
   143  // Using `pulumi import`, import API Gateway domain names using their `name`. For example:
   144  //
   145  // ```sh
   146  // $ pulumi import aws:apigateway/domainName:DomainName example dev.example.com
   147  // ```
   148  type DomainName struct {
   149  	pulumi.CustomResourceState
   150  
   151  	// ARN of domain name.
   152  	Arn pulumi.StringOutput `pulumi:"arn"`
   153  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificateName`, `certificateBody`, `certificateChain`, `certificatePrivateKey`, `regionalCertificateArn`, and `regionalCertificateName`.
   154  	CertificateArn pulumi.StringPtrOutput `pulumi:"certificateArn"`
   155  	// Certificate issued for the domain name being registered, in PEM format. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   156  	CertificateBody pulumi.StringPtrOutput `pulumi:"certificateBody"`
   157  	// Certificate for the CA that issued the certificate, along with any intermediate CA certificates required to create an unbroken chain to a certificate trusted by the intended API clients. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   158  	CertificateChain pulumi.StringPtrOutput `pulumi:"certificateChain"`
   159  	// Unique name to use when registering this certificate as an IAM server certificate. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`. Required if `certificateArn` is not set.
   160  	CertificateName pulumi.StringPtrOutput `pulumi:"certificateName"`
   161  	// Private key associated with the domain certificate given in `certificateBody`. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   162  	CertificatePrivateKey pulumi.StringPtrOutput `pulumi:"certificatePrivateKey"`
   163  	// Upload date associated with the domain certificate.
   164  	CertificateUploadDate pulumi.StringOutput `pulumi:"certificateUploadDate"`
   165  	// Hostname created by Cloudfront to represent the distribution that implements this domain name mapping.
   166  	CloudfrontDomainName pulumi.StringOutput `pulumi:"cloudfrontDomainName"`
   167  	// For convenience, the hosted zone ID (`Z2FDTNDATAQYW2`) that can be used to create a Route53 alias record for the distribution.
   168  	CloudfrontZoneId pulumi.StringOutput `pulumi:"cloudfrontZoneId"`
   169  	// Fully-qualified domain name to register.
   170  	DomainName pulumi.StringOutput `pulumi:"domainName"`
   171  	// Configuration block defining API endpoint information including type. See below.
   172  	EndpointConfiguration DomainNameEndpointConfigurationOutput `pulumi:"endpointConfiguration"`
   173  	// Mutual TLS authentication configuration for the domain name. See below.
   174  	MutualTlsAuthentication DomainNameMutualTlsAuthenticationPtrOutput `pulumi:"mutualTlsAuthentication"`
   175  	// ARN of the AWS-issued certificate used to validate custom domain ownership (when `certificateArn` is issued via an ACM Private CA or `mutualTlsAuthentication` is configured with an ACM-imported certificate.)
   176  	OwnershipVerificationCertificateArn pulumi.StringOutput `pulumi:"ownershipVerificationCertificateArn"`
   177  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when a regional domain name is desired. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   178  	//
   179  	// When uploading a certificate, the following arguments are supported:
   180  	RegionalCertificateArn pulumi.StringPtrOutput `pulumi:"regionalCertificateArn"`
   181  	// User-friendly name of the certificate that will be used by regional endpoint for this domain name. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   182  	RegionalCertificateName pulumi.StringPtrOutput `pulumi:"regionalCertificateName"`
   183  	// Hostname for the custom domain's regional endpoint.
   184  	RegionalDomainName pulumi.StringOutput `pulumi:"regionalDomainName"`
   185  	// Hosted zone ID that can be used to create a Route53 alias record for the regional endpoint.
   186  	RegionalZoneId pulumi.StringOutput `pulumi:"regionalZoneId"`
   187  	// Transport Layer Security (TLS) version + cipher suite for this DomainName. Valid values are `TLS_1_0` and `TLS_1_2`. Must be configured to perform drift detection.
   188  	SecurityPolicy pulumi.StringOutput `pulumi:"securityPolicy"`
   189  	// Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   190  	//
   191  	// When referencing an AWS-managed certificate, the following arguments are supported:
   192  	Tags pulumi.StringMapOutput `pulumi:"tags"`
   193  	// Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   194  	//
   195  	// Deprecated: Please use `tags` instead.
   196  	TagsAll pulumi.StringMapOutput `pulumi:"tagsAll"`
   197  }
   198  
   199  // NewDomainName registers a new resource with the given unique name, arguments, and options.
   200  func NewDomainName(ctx *pulumi.Context,
   201  	name string, args *DomainNameArgs, opts ...pulumi.ResourceOption) (*DomainName, error) {
   202  	if args == nil {
   203  		return nil, errors.New("missing one or more required arguments")
   204  	}
   205  
   206  	if args.DomainName == nil {
   207  		return nil, errors.New("invalid value for required argument 'DomainName'")
   208  	}
   209  	if args.CertificatePrivateKey != nil {
   210  		args.CertificatePrivateKey = pulumi.ToSecret(args.CertificatePrivateKey).(pulumi.StringPtrInput)
   211  	}
   212  	secrets := pulumi.AdditionalSecretOutputs([]string{
   213  		"certificatePrivateKey",
   214  	})
   215  	opts = append(opts, secrets)
   216  	opts = internal.PkgResourceDefaultOpts(opts)
   217  	var resource DomainName
   218  	err := ctx.RegisterResource("aws:apigateway/domainName:DomainName", name, args, &resource, opts...)
   219  	if err != nil {
   220  		return nil, err
   221  	}
   222  	return &resource, nil
   223  }
   224  
   225  // GetDomainName gets an existing DomainName resource's state with the given name, ID, and optional
   226  // state properties that are used to uniquely qualify the lookup (nil if not required).
   227  func GetDomainName(ctx *pulumi.Context,
   228  	name string, id pulumi.IDInput, state *DomainNameState, opts ...pulumi.ResourceOption) (*DomainName, error) {
   229  	var resource DomainName
   230  	err := ctx.ReadResource("aws:apigateway/domainName:DomainName", name, id, state, &resource, opts...)
   231  	if err != nil {
   232  		return nil, err
   233  	}
   234  	return &resource, nil
   235  }
   236  
   237  // Input properties used for looking up and filtering DomainName resources.
   238  type domainNameState struct {
   239  	// ARN of domain name.
   240  	Arn *string `pulumi:"arn"`
   241  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificateName`, `certificateBody`, `certificateChain`, `certificatePrivateKey`, `regionalCertificateArn`, and `regionalCertificateName`.
   242  	CertificateArn *string `pulumi:"certificateArn"`
   243  	// Certificate issued for the domain name being registered, in PEM format. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   244  	CertificateBody *string `pulumi:"certificateBody"`
   245  	// Certificate for the CA that issued the certificate, along with any intermediate CA certificates required to create an unbroken chain to a certificate trusted by the intended API clients. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   246  	CertificateChain *string `pulumi:"certificateChain"`
   247  	// Unique name to use when registering this certificate as an IAM server certificate. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`. Required if `certificateArn` is not set.
   248  	CertificateName *string `pulumi:"certificateName"`
   249  	// Private key associated with the domain certificate given in `certificateBody`. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   250  	CertificatePrivateKey *string `pulumi:"certificatePrivateKey"`
   251  	// Upload date associated with the domain certificate.
   252  	CertificateUploadDate *string `pulumi:"certificateUploadDate"`
   253  	// Hostname created by Cloudfront to represent the distribution that implements this domain name mapping.
   254  	CloudfrontDomainName *string `pulumi:"cloudfrontDomainName"`
   255  	// For convenience, the hosted zone ID (`Z2FDTNDATAQYW2`) that can be used to create a Route53 alias record for the distribution.
   256  	CloudfrontZoneId *string `pulumi:"cloudfrontZoneId"`
   257  	// Fully-qualified domain name to register.
   258  	DomainName *string `pulumi:"domainName"`
   259  	// Configuration block defining API endpoint information including type. See below.
   260  	EndpointConfiguration *DomainNameEndpointConfiguration `pulumi:"endpointConfiguration"`
   261  	// Mutual TLS authentication configuration for the domain name. See below.
   262  	MutualTlsAuthentication *DomainNameMutualTlsAuthentication `pulumi:"mutualTlsAuthentication"`
   263  	// ARN of the AWS-issued certificate used to validate custom domain ownership (when `certificateArn` is issued via an ACM Private CA or `mutualTlsAuthentication` is configured with an ACM-imported certificate.)
   264  	OwnershipVerificationCertificateArn *string `pulumi:"ownershipVerificationCertificateArn"`
   265  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when a regional domain name is desired. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   266  	//
   267  	// When uploading a certificate, the following arguments are supported:
   268  	RegionalCertificateArn *string `pulumi:"regionalCertificateArn"`
   269  	// User-friendly name of the certificate that will be used by regional endpoint for this domain name. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   270  	RegionalCertificateName *string `pulumi:"regionalCertificateName"`
   271  	// Hostname for the custom domain's regional endpoint.
   272  	RegionalDomainName *string `pulumi:"regionalDomainName"`
   273  	// Hosted zone ID that can be used to create a Route53 alias record for the regional endpoint.
   274  	RegionalZoneId *string `pulumi:"regionalZoneId"`
   275  	// Transport Layer Security (TLS) version + cipher suite for this DomainName. Valid values are `TLS_1_0` and `TLS_1_2`. Must be configured to perform drift detection.
   276  	SecurityPolicy *string `pulumi:"securityPolicy"`
   277  	// Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   278  	//
   279  	// When referencing an AWS-managed certificate, the following arguments are supported:
   280  	Tags map[string]string `pulumi:"tags"`
   281  	// Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   282  	//
   283  	// Deprecated: Please use `tags` instead.
   284  	TagsAll map[string]string `pulumi:"tagsAll"`
   285  }
   286  
   287  type DomainNameState struct {
   288  	// ARN of domain name.
   289  	Arn pulumi.StringPtrInput
   290  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificateName`, `certificateBody`, `certificateChain`, `certificatePrivateKey`, `regionalCertificateArn`, and `regionalCertificateName`.
   291  	CertificateArn pulumi.StringPtrInput
   292  	// Certificate issued for the domain name being registered, in PEM format. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   293  	CertificateBody pulumi.StringPtrInput
   294  	// Certificate for the CA that issued the certificate, along with any intermediate CA certificates required to create an unbroken chain to a certificate trusted by the intended API clients. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   295  	CertificateChain pulumi.StringPtrInput
   296  	// Unique name to use when registering this certificate as an IAM server certificate. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`. Required if `certificateArn` is not set.
   297  	CertificateName pulumi.StringPtrInput
   298  	// Private key associated with the domain certificate given in `certificateBody`. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   299  	CertificatePrivateKey pulumi.StringPtrInput
   300  	// Upload date associated with the domain certificate.
   301  	CertificateUploadDate pulumi.StringPtrInput
   302  	// Hostname created by Cloudfront to represent the distribution that implements this domain name mapping.
   303  	CloudfrontDomainName pulumi.StringPtrInput
   304  	// For convenience, the hosted zone ID (`Z2FDTNDATAQYW2`) that can be used to create a Route53 alias record for the distribution.
   305  	CloudfrontZoneId pulumi.StringPtrInput
   306  	// Fully-qualified domain name to register.
   307  	DomainName pulumi.StringPtrInput
   308  	// Configuration block defining API endpoint information including type. See below.
   309  	EndpointConfiguration DomainNameEndpointConfigurationPtrInput
   310  	// Mutual TLS authentication configuration for the domain name. See below.
   311  	MutualTlsAuthentication DomainNameMutualTlsAuthenticationPtrInput
   312  	// ARN of the AWS-issued certificate used to validate custom domain ownership (when `certificateArn` is issued via an ACM Private CA or `mutualTlsAuthentication` is configured with an ACM-imported certificate.)
   313  	OwnershipVerificationCertificateArn pulumi.StringPtrInput
   314  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when a regional domain name is desired. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   315  	//
   316  	// When uploading a certificate, the following arguments are supported:
   317  	RegionalCertificateArn pulumi.StringPtrInput
   318  	// User-friendly name of the certificate that will be used by regional endpoint for this domain name. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   319  	RegionalCertificateName pulumi.StringPtrInput
   320  	// Hostname for the custom domain's regional endpoint.
   321  	RegionalDomainName pulumi.StringPtrInput
   322  	// Hosted zone ID that can be used to create a Route53 alias record for the regional endpoint.
   323  	RegionalZoneId pulumi.StringPtrInput
   324  	// Transport Layer Security (TLS) version + cipher suite for this DomainName. Valid values are `TLS_1_0` and `TLS_1_2`. Must be configured to perform drift detection.
   325  	SecurityPolicy pulumi.StringPtrInput
   326  	// Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   327  	//
   328  	// When referencing an AWS-managed certificate, the following arguments are supported:
   329  	Tags pulumi.StringMapInput
   330  	// Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   331  	//
   332  	// Deprecated: Please use `tags` instead.
   333  	TagsAll pulumi.StringMapInput
   334  }
   335  
   336  func (DomainNameState) ElementType() reflect.Type {
   337  	return reflect.TypeOf((*domainNameState)(nil)).Elem()
   338  }
   339  
   340  type domainNameArgs struct {
   341  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificateName`, `certificateBody`, `certificateChain`, `certificatePrivateKey`, `regionalCertificateArn`, and `regionalCertificateName`.
   342  	CertificateArn *string `pulumi:"certificateArn"`
   343  	// Certificate issued for the domain name being registered, in PEM format. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   344  	CertificateBody *string `pulumi:"certificateBody"`
   345  	// Certificate for the CA that issued the certificate, along with any intermediate CA certificates required to create an unbroken chain to a certificate trusted by the intended API clients. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   346  	CertificateChain *string `pulumi:"certificateChain"`
   347  	// Unique name to use when registering this certificate as an IAM server certificate. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`. Required if `certificateArn` is not set.
   348  	CertificateName *string `pulumi:"certificateName"`
   349  	// Private key associated with the domain certificate given in `certificateBody`. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   350  	CertificatePrivateKey *string `pulumi:"certificatePrivateKey"`
   351  	// Fully-qualified domain name to register.
   352  	DomainName string `pulumi:"domainName"`
   353  	// Configuration block defining API endpoint information including type. See below.
   354  	EndpointConfiguration *DomainNameEndpointConfiguration `pulumi:"endpointConfiguration"`
   355  	// Mutual TLS authentication configuration for the domain name. See below.
   356  	MutualTlsAuthentication *DomainNameMutualTlsAuthentication `pulumi:"mutualTlsAuthentication"`
   357  	// ARN of the AWS-issued certificate used to validate custom domain ownership (when `certificateArn` is issued via an ACM Private CA or `mutualTlsAuthentication` is configured with an ACM-imported certificate.)
   358  	OwnershipVerificationCertificateArn *string `pulumi:"ownershipVerificationCertificateArn"`
   359  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when a regional domain name is desired. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   360  	//
   361  	// When uploading a certificate, the following arguments are supported:
   362  	RegionalCertificateArn *string `pulumi:"regionalCertificateArn"`
   363  	// User-friendly name of the certificate that will be used by regional endpoint for this domain name. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   364  	RegionalCertificateName *string `pulumi:"regionalCertificateName"`
   365  	// Transport Layer Security (TLS) version + cipher suite for this DomainName. Valid values are `TLS_1_0` and `TLS_1_2`. Must be configured to perform drift detection.
   366  	SecurityPolicy *string `pulumi:"securityPolicy"`
   367  	// Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   368  	//
   369  	// When referencing an AWS-managed certificate, the following arguments are supported:
   370  	Tags map[string]string `pulumi:"tags"`
   371  }
   372  
   373  // The set of arguments for constructing a DomainName resource.
   374  type DomainNameArgs struct {
   375  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificateName`, `certificateBody`, `certificateChain`, `certificatePrivateKey`, `regionalCertificateArn`, and `regionalCertificateName`.
   376  	CertificateArn pulumi.StringPtrInput
   377  	// Certificate issued for the domain name being registered, in PEM format. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   378  	CertificateBody pulumi.StringPtrInput
   379  	// Certificate for the CA that issued the certificate, along with any intermediate CA certificates required to create an unbroken chain to a certificate trusted by the intended API clients. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   380  	CertificateChain pulumi.StringPtrInput
   381  	// Unique name to use when registering this certificate as an IAM server certificate. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`. Required if `certificateArn` is not set.
   382  	CertificateName pulumi.StringPtrInput
   383  	// Private key associated with the domain certificate given in `certificateBody`. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   384  	CertificatePrivateKey pulumi.StringPtrInput
   385  	// Fully-qualified domain name to register.
   386  	DomainName pulumi.StringInput
   387  	// Configuration block defining API endpoint information including type. See below.
   388  	EndpointConfiguration DomainNameEndpointConfigurationPtrInput
   389  	// Mutual TLS authentication configuration for the domain name. See below.
   390  	MutualTlsAuthentication DomainNameMutualTlsAuthenticationPtrInput
   391  	// ARN of the AWS-issued certificate used to validate custom domain ownership (when `certificateArn` is issued via an ACM Private CA or `mutualTlsAuthentication` is configured with an ACM-imported certificate.)
   392  	OwnershipVerificationCertificateArn pulumi.StringPtrInput
   393  	// ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when a regional domain name is desired. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   394  	//
   395  	// When uploading a certificate, the following arguments are supported:
   396  	RegionalCertificateArn pulumi.StringPtrInput
   397  	// User-friendly name of the certificate that will be used by regional endpoint for this domain name. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   398  	RegionalCertificateName pulumi.StringPtrInput
   399  	// Transport Layer Security (TLS) version + cipher suite for this DomainName. Valid values are `TLS_1_0` and `TLS_1_2`. Must be configured to perform drift detection.
   400  	SecurityPolicy pulumi.StringPtrInput
   401  	// Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   402  	//
   403  	// When referencing an AWS-managed certificate, the following arguments are supported:
   404  	Tags pulumi.StringMapInput
   405  }
   406  
   407  func (DomainNameArgs) ElementType() reflect.Type {
   408  	return reflect.TypeOf((*domainNameArgs)(nil)).Elem()
   409  }
   410  
   411  type DomainNameInput interface {
   412  	pulumi.Input
   413  
   414  	ToDomainNameOutput() DomainNameOutput
   415  	ToDomainNameOutputWithContext(ctx context.Context) DomainNameOutput
   416  }
   417  
   418  func (*DomainName) ElementType() reflect.Type {
   419  	return reflect.TypeOf((**DomainName)(nil)).Elem()
   420  }
   421  
   422  func (i *DomainName) ToDomainNameOutput() DomainNameOutput {
   423  	return i.ToDomainNameOutputWithContext(context.Background())
   424  }
   425  
   426  func (i *DomainName) ToDomainNameOutputWithContext(ctx context.Context) DomainNameOutput {
   427  	return pulumi.ToOutputWithContext(ctx, i).(DomainNameOutput)
   428  }
   429  
   430  // DomainNameArrayInput is an input type that accepts DomainNameArray and DomainNameArrayOutput values.
   431  // You can construct a concrete instance of `DomainNameArrayInput` via:
   432  //
   433  //	DomainNameArray{ DomainNameArgs{...} }
   434  type DomainNameArrayInput interface {
   435  	pulumi.Input
   436  
   437  	ToDomainNameArrayOutput() DomainNameArrayOutput
   438  	ToDomainNameArrayOutputWithContext(context.Context) DomainNameArrayOutput
   439  }
   440  
   441  type DomainNameArray []DomainNameInput
   442  
   443  func (DomainNameArray) ElementType() reflect.Type {
   444  	return reflect.TypeOf((*[]*DomainName)(nil)).Elem()
   445  }
   446  
   447  func (i DomainNameArray) ToDomainNameArrayOutput() DomainNameArrayOutput {
   448  	return i.ToDomainNameArrayOutputWithContext(context.Background())
   449  }
   450  
   451  func (i DomainNameArray) ToDomainNameArrayOutputWithContext(ctx context.Context) DomainNameArrayOutput {
   452  	return pulumi.ToOutputWithContext(ctx, i).(DomainNameArrayOutput)
   453  }
   454  
   455  // DomainNameMapInput is an input type that accepts DomainNameMap and DomainNameMapOutput values.
   456  // You can construct a concrete instance of `DomainNameMapInput` via:
   457  //
   458  //	DomainNameMap{ "key": DomainNameArgs{...} }
   459  type DomainNameMapInput interface {
   460  	pulumi.Input
   461  
   462  	ToDomainNameMapOutput() DomainNameMapOutput
   463  	ToDomainNameMapOutputWithContext(context.Context) DomainNameMapOutput
   464  }
   465  
   466  type DomainNameMap map[string]DomainNameInput
   467  
   468  func (DomainNameMap) ElementType() reflect.Type {
   469  	return reflect.TypeOf((*map[string]*DomainName)(nil)).Elem()
   470  }
   471  
   472  func (i DomainNameMap) ToDomainNameMapOutput() DomainNameMapOutput {
   473  	return i.ToDomainNameMapOutputWithContext(context.Background())
   474  }
   475  
   476  func (i DomainNameMap) ToDomainNameMapOutputWithContext(ctx context.Context) DomainNameMapOutput {
   477  	return pulumi.ToOutputWithContext(ctx, i).(DomainNameMapOutput)
   478  }
   479  
   480  type DomainNameOutput struct{ *pulumi.OutputState }
   481  
   482  func (DomainNameOutput) ElementType() reflect.Type {
   483  	return reflect.TypeOf((**DomainName)(nil)).Elem()
   484  }
   485  
   486  func (o DomainNameOutput) ToDomainNameOutput() DomainNameOutput {
   487  	return o
   488  }
   489  
   490  func (o DomainNameOutput) ToDomainNameOutputWithContext(ctx context.Context) DomainNameOutput {
   491  	return o
   492  }
   493  
   494  // ARN of domain name.
   495  func (o DomainNameOutput) Arn() pulumi.StringOutput {
   496  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.Arn }).(pulumi.StringOutput)
   497  }
   498  
   499  // ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when an edge-optimized domain name is desired. Conflicts with `certificateName`, `certificateBody`, `certificateChain`, `certificatePrivateKey`, `regionalCertificateArn`, and `regionalCertificateName`.
   500  func (o DomainNameOutput) CertificateArn() pulumi.StringPtrOutput {
   501  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.CertificateArn }).(pulumi.StringPtrOutput)
   502  }
   503  
   504  // Certificate issued for the domain name being registered, in PEM format. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   505  func (o DomainNameOutput) CertificateBody() pulumi.StringPtrOutput {
   506  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.CertificateBody }).(pulumi.StringPtrOutput)
   507  }
   508  
   509  // Certificate for the CA that issued the certificate, along with any intermediate CA certificates required to create an unbroken chain to a certificate trusted by the intended API clients. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   510  func (o DomainNameOutput) CertificateChain() pulumi.StringPtrOutput {
   511  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.CertificateChain }).(pulumi.StringPtrOutput)
   512  }
   513  
   514  // Unique name to use when registering this certificate as an IAM server certificate. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`. Required if `certificateArn` is not set.
   515  func (o DomainNameOutput) CertificateName() pulumi.StringPtrOutput {
   516  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.CertificateName }).(pulumi.StringPtrOutput)
   517  }
   518  
   519  // Private key associated with the domain certificate given in `certificateBody`. Only valid for `EDGE` endpoint configuration type. Conflicts with `certificateArn`, `regionalCertificateArn`, and `regionalCertificateName`.
   520  func (o DomainNameOutput) CertificatePrivateKey() pulumi.StringPtrOutput {
   521  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.CertificatePrivateKey }).(pulumi.StringPtrOutput)
   522  }
   523  
   524  // Upload date associated with the domain certificate.
   525  func (o DomainNameOutput) CertificateUploadDate() pulumi.StringOutput {
   526  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.CertificateUploadDate }).(pulumi.StringOutput)
   527  }
   528  
   529  // Hostname created by Cloudfront to represent the distribution that implements this domain name mapping.
   530  func (o DomainNameOutput) CloudfrontDomainName() pulumi.StringOutput {
   531  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.CloudfrontDomainName }).(pulumi.StringOutput)
   532  }
   533  
   534  // For convenience, the hosted zone ID (`Z2FDTNDATAQYW2`) that can be used to create a Route53 alias record for the distribution.
   535  func (o DomainNameOutput) CloudfrontZoneId() pulumi.StringOutput {
   536  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.CloudfrontZoneId }).(pulumi.StringOutput)
   537  }
   538  
   539  // Fully-qualified domain name to register.
   540  func (o DomainNameOutput) DomainName() pulumi.StringOutput {
   541  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.DomainName }).(pulumi.StringOutput)
   542  }
   543  
   544  // Configuration block defining API endpoint information including type. See below.
   545  func (o DomainNameOutput) EndpointConfiguration() DomainNameEndpointConfigurationOutput {
   546  	return o.ApplyT(func(v *DomainName) DomainNameEndpointConfigurationOutput { return v.EndpointConfiguration }).(DomainNameEndpointConfigurationOutput)
   547  }
   548  
   549  // Mutual TLS authentication configuration for the domain name. See below.
   550  func (o DomainNameOutput) MutualTlsAuthentication() DomainNameMutualTlsAuthenticationPtrOutput {
   551  	return o.ApplyT(func(v *DomainName) DomainNameMutualTlsAuthenticationPtrOutput { return v.MutualTlsAuthentication }).(DomainNameMutualTlsAuthenticationPtrOutput)
   552  }
   553  
   554  // ARN of the AWS-issued certificate used to validate custom domain ownership (when `certificateArn` is issued via an ACM Private CA or `mutualTlsAuthentication` is configured with an ACM-imported certificate.)
   555  func (o DomainNameOutput) OwnershipVerificationCertificateArn() pulumi.StringOutput {
   556  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.OwnershipVerificationCertificateArn }).(pulumi.StringOutput)
   557  }
   558  
   559  // ARN for an AWS-managed certificate. AWS Certificate Manager is the only supported source. Used when a regional domain name is desired. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   560  //
   561  // When uploading a certificate, the following arguments are supported:
   562  func (o DomainNameOutput) RegionalCertificateArn() pulumi.StringPtrOutput {
   563  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.RegionalCertificateArn }).(pulumi.StringPtrOutput)
   564  }
   565  
   566  // User-friendly name of the certificate that will be used by regional endpoint for this domain name. Conflicts with `certificateArn`, `certificateName`, `certificateBody`, `certificateChain`, and `certificatePrivateKey`.
   567  func (o DomainNameOutput) RegionalCertificateName() pulumi.StringPtrOutput {
   568  	return o.ApplyT(func(v *DomainName) pulumi.StringPtrOutput { return v.RegionalCertificateName }).(pulumi.StringPtrOutput)
   569  }
   570  
   571  // Hostname for the custom domain's regional endpoint.
   572  func (o DomainNameOutput) RegionalDomainName() pulumi.StringOutput {
   573  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.RegionalDomainName }).(pulumi.StringOutput)
   574  }
   575  
   576  // Hosted zone ID that can be used to create a Route53 alias record for the regional endpoint.
   577  func (o DomainNameOutput) RegionalZoneId() pulumi.StringOutput {
   578  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.RegionalZoneId }).(pulumi.StringOutput)
   579  }
   580  
   581  // Transport Layer Security (TLS) version + cipher suite for this DomainName. Valid values are `TLS_1_0` and `TLS_1_2`. Must be configured to perform drift detection.
   582  func (o DomainNameOutput) SecurityPolicy() pulumi.StringOutput {
   583  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.SecurityPolicy }).(pulumi.StringOutput)
   584  }
   585  
   586  // Key-value map of resource tags. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   587  //
   588  // When referencing an AWS-managed certificate, the following arguments are supported:
   589  func (o DomainNameOutput) Tags() pulumi.StringMapOutput {
   590  	return o.ApplyT(func(v *DomainName) pulumi.StringMapOutput { return v.Tags }).(pulumi.StringMapOutput)
   591  }
   592  
   593  // Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   594  //
   595  // Deprecated: Please use `tags` instead.
   596  func (o DomainNameOutput) TagsAll() pulumi.StringMapOutput {
   597  	return o.ApplyT(func(v *DomainName) pulumi.StringMapOutput { return v.TagsAll }).(pulumi.StringMapOutput)
   598  }
   599  
   600  type DomainNameArrayOutput struct{ *pulumi.OutputState }
   601  
   602  func (DomainNameArrayOutput) ElementType() reflect.Type {
   603  	return reflect.TypeOf((*[]*DomainName)(nil)).Elem()
   604  }
   605  
   606  func (o DomainNameArrayOutput) ToDomainNameArrayOutput() DomainNameArrayOutput {
   607  	return o
   608  }
   609  
   610  func (o DomainNameArrayOutput) ToDomainNameArrayOutputWithContext(ctx context.Context) DomainNameArrayOutput {
   611  	return o
   612  }
   613  
   614  func (o DomainNameArrayOutput) Index(i pulumi.IntInput) DomainNameOutput {
   615  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *DomainName {
   616  		return vs[0].([]*DomainName)[vs[1].(int)]
   617  	}).(DomainNameOutput)
   618  }
   619  
   620  type DomainNameMapOutput struct{ *pulumi.OutputState }
   621  
   622  func (DomainNameMapOutput) ElementType() reflect.Type {
   623  	return reflect.TypeOf((*map[string]*DomainName)(nil)).Elem()
   624  }
   625  
   626  func (o DomainNameMapOutput) ToDomainNameMapOutput() DomainNameMapOutput {
   627  	return o
   628  }
   629  
   630  func (o DomainNameMapOutput) ToDomainNameMapOutputWithContext(ctx context.Context) DomainNameMapOutput {
   631  	return o
   632  }
   633  
   634  func (o DomainNameMapOutput) MapIndex(k pulumi.StringInput) DomainNameOutput {
   635  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *DomainName {
   636  		return vs[0].(map[string]*DomainName)[vs[1].(string)]
   637  	}).(DomainNameOutput)
   638  }
   639  
   640  func init() {
   641  	pulumi.RegisterInputType(reflect.TypeOf((*DomainNameInput)(nil)).Elem(), &DomainName{})
   642  	pulumi.RegisterInputType(reflect.TypeOf((*DomainNameArrayInput)(nil)).Elem(), DomainNameArray{})
   643  	pulumi.RegisterInputType(reflect.TypeOf((*DomainNameMapInput)(nil)).Elem(), DomainNameMap{})
   644  	pulumi.RegisterOutputType(DomainNameOutput{})
   645  	pulumi.RegisterOutputType(DomainNameArrayOutput{})
   646  	pulumi.RegisterOutputType(DomainNameMapOutput{})
   647  }