github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/apigatewayv2/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 apigatewayv2
     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  // Manages an Amazon API Gateway Version 2 domain name.
    16  // More information can be found in the [Amazon API Gateway Developer Guide](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).
    17  //
    18  // > **Note:** This resource establishes ownership of and the TLS settings for
    19  // a particular domain name. An API stage can be associated with the domain name using the `apigatewayv2.ApiMapping` resource.
    20  //
    21  // ## Example Usage
    22  //
    23  // ### Basic
    24  //
    25  // <!--Start PulumiCodeChooser -->
    26  // ```go
    27  // package main
    28  //
    29  // import (
    30  //
    31  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/apigatewayv2"
    32  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    33  //
    34  // )
    35  //
    36  //	func main() {
    37  //		pulumi.Run(func(ctx *pulumi.Context) error {
    38  //			_, err := apigatewayv2.NewDomainName(ctx, "example", &apigatewayv2.DomainNameArgs{
    39  //				DomainName: pulumi.String("ws-api.example.com"),
    40  //				DomainNameConfiguration: &apigatewayv2.DomainNameDomainNameConfigurationArgs{
    41  //					CertificateArn: pulumi.Any(exampleAwsAcmCertificate.Arn),
    42  //					EndpointType:   pulumi.String("REGIONAL"),
    43  //					SecurityPolicy: pulumi.String("TLS_1_2"),
    44  //				},
    45  //			})
    46  //			if err != nil {
    47  //				return err
    48  //			}
    49  //			return nil
    50  //		})
    51  //	}
    52  //
    53  // ```
    54  // <!--End PulumiCodeChooser -->
    55  //
    56  // ### Associated Route 53 Resource Record
    57  //
    58  // <!--Start PulumiCodeChooser -->
    59  // ```go
    60  // package main
    61  //
    62  // import (
    63  //
    64  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/apigatewayv2"
    65  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/route53"
    66  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    67  //
    68  // )
    69  //
    70  //	func main() {
    71  //		pulumi.Run(func(ctx *pulumi.Context) error {
    72  //			example, err := apigatewayv2.NewDomainName(ctx, "example", &apigatewayv2.DomainNameArgs{
    73  //				DomainName: pulumi.String("http-api.example.com"),
    74  //				DomainNameConfiguration: &apigatewayv2.DomainNameDomainNameConfigurationArgs{
    75  //					CertificateArn: pulumi.Any(exampleAwsAcmCertificate.Arn),
    76  //					EndpointType:   pulumi.String("REGIONAL"),
    77  //					SecurityPolicy: pulumi.String("TLS_1_2"),
    78  //				},
    79  //			})
    80  //			if err != nil {
    81  //				return err
    82  //			}
    83  //			_, err = route53.NewRecord(ctx, "example", &route53.RecordArgs{
    84  //				Name:   example.DomainName,
    85  //				Type:   pulumi.String(route53.RecordTypeA),
    86  //				ZoneId: pulumi.Any(exampleAwsRoute53Zone.ZoneId),
    87  //				Aliases: route53.RecordAliasArray{
    88  //					&route53.RecordAliasArgs{
    89  //						Name: example.DomainNameConfiguration.ApplyT(func(domainNameConfiguration apigatewayv2.DomainNameDomainNameConfiguration) (*string, error) {
    90  //							return &domainNameConfiguration.TargetDomainName, nil
    91  //						}).(pulumi.StringPtrOutput),
    92  //						ZoneId: example.DomainNameConfiguration.ApplyT(func(domainNameConfiguration apigatewayv2.DomainNameDomainNameConfiguration) (*string, error) {
    93  //							return &domainNameConfiguration.HostedZoneId, nil
    94  //						}).(pulumi.StringPtrOutput),
    95  //						EvaluateTargetHealth: pulumi.Bool(false),
    96  //					},
    97  //				},
    98  //			})
    99  //			if err != nil {
   100  //				return err
   101  //			}
   102  //			return nil
   103  //		})
   104  //	}
   105  //
   106  // ```
   107  // <!--End PulumiCodeChooser -->
   108  //
   109  // ## Import
   110  //
   111  // Using `pulumi import`, import `aws_apigatewayv2_domain_name` using the domain name. For example:
   112  //
   113  // ```sh
   114  // $ pulumi import aws:apigatewayv2/domainName:DomainName example ws-api.example.com
   115  // ```
   116  type DomainName struct {
   117  	pulumi.CustomResourceState
   118  
   119  	// [API mapping selection expression](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-mapping-selection-expressions) for the domain name.
   120  	ApiMappingSelectionExpression pulumi.StringOutput `pulumi:"apiMappingSelectionExpression"`
   121  	// ARN of the domain name.
   122  	Arn pulumi.StringOutput `pulumi:"arn"`
   123  	// Domain name. Must be between 1 and 512 characters in length.
   124  	DomainName pulumi.StringOutput `pulumi:"domainName"`
   125  	// Domain name configuration. See below.
   126  	DomainNameConfiguration DomainNameDomainNameConfigurationOutput `pulumi:"domainNameConfiguration"`
   127  	// Mutual TLS authentication configuration for the domain name.
   128  	MutualTlsAuthentication DomainNameMutualTlsAuthenticationPtrOutput `pulumi:"mutualTlsAuthentication"`
   129  	// Map of tags to assign to the domain name. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   130  	Tags pulumi.StringMapOutput `pulumi:"tags"`
   131  	// Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   132  	//
   133  	// Deprecated: Please use `tags` instead.
   134  	TagsAll pulumi.StringMapOutput `pulumi:"tagsAll"`
   135  }
   136  
   137  // NewDomainName registers a new resource with the given unique name, arguments, and options.
   138  func NewDomainName(ctx *pulumi.Context,
   139  	name string, args *DomainNameArgs, opts ...pulumi.ResourceOption) (*DomainName, error) {
   140  	if args == nil {
   141  		return nil, errors.New("missing one or more required arguments")
   142  	}
   143  
   144  	if args.DomainName == nil {
   145  		return nil, errors.New("invalid value for required argument 'DomainName'")
   146  	}
   147  	if args.DomainNameConfiguration == nil {
   148  		return nil, errors.New("invalid value for required argument 'DomainNameConfiguration'")
   149  	}
   150  	opts = internal.PkgResourceDefaultOpts(opts)
   151  	var resource DomainName
   152  	err := ctx.RegisterResource("aws:apigatewayv2/domainName:DomainName", name, args, &resource, opts...)
   153  	if err != nil {
   154  		return nil, err
   155  	}
   156  	return &resource, nil
   157  }
   158  
   159  // GetDomainName gets an existing DomainName resource's state with the given name, ID, and optional
   160  // state properties that are used to uniquely qualify the lookup (nil if not required).
   161  func GetDomainName(ctx *pulumi.Context,
   162  	name string, id pulumi.IDInput, state *DomainNameState, opts ...pulumi.ResourceOption) (*DomainName, error) {
   163  	var resource DomainName
   164  	err := ctx.ReadResource("aws:apigatewayv2/domainName:DomainName", name, id, state, &resource, opts...)
   165  	if err != nil {
   166  		return nil, err
   167  	}
   168  	return &resource, nil
   169  }
   170  
   171  // Input properties used for looking up and filtering DomainName resources.
   172  type domainNameState struct {
   173  	// [API mapping selection expression](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-mapping-selection-expressions) for the domain name.
   174  	ApiMappingSelectionExpression *string `pulumi:"apiMappingSelectionExpression"`
   175  	// ARN of the domain name.
   176  	Arn *string `pulumi:"arn"`
   177  	// Domain name. Must be between 1 and 512 characters in length.
   178  	DomainName *string `pulumi:"domainName"`
   179  	// Domain name configuration. See below.
   180  	DomainNameConfiguration *DomainNameDomainNameConfiguration `pulumi:"domainNameConfiguration"`
   181  	// Mutual TLS authentication configuration for the domain name.
   182  	MutualTlsAuthentication *DomainNameMutualTlsAuthentication `pulumi:"mutualTlsAuthentication"`
   183  	// Map of tags to assign to the domain name. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   184  	Tags map[string]string `pulumi:"tags"`
   185  	// Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   186  	//
   187  	// Deprecated: Please use `tags` instead.
   188  	TagsAll map[string]string `pulumi:"tagsAll"`
   189  }
   190  
   191  type DomainNameState struct {
   192  	// [API mapping selection expression](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-mapping-selection-expressions) for the domain name.
   193  	ApiMappingSelectionExpression pulumi.StringPtrInput
   194  	// ARN of the domain name.
   195  	Arn pulumi.StringPtrInput
   196  	// Domain name. Must be between 1 and 512 characters in length.
   197  	DomainName pulumi.StringPtrInput
   198  	// Domain name configuration. See below.
   199  	DomainNameConfiguration DomainNameDomainNameConfigurationPtrInput
   200  	// Mutual TLS authentication configuration for the domain name.
   201  	MutualTlsAuthentication DomainNameMutualTlsAuthenticationPtrInput
   202  	// Map of tags to assign to the domain name. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   203  	Tags pulumi.StringMapInput
   204  	// Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   205  	//
   206  	// Deprecated: Please use `tags` instead.
   207  	TagsAll pulumi.StringMapInput
   208  }
   209  
   210  func (DomainNameState) ElementType() reflect.Type {
   211  	return reflect.TypeOf((*domainNameState)(nil)).Elem()
   212  }
   213  
   214  type domainNameArgs struct {
   215  	// Domain name. Must be between 1 and 512 characters in length.
   216  	DomainName string `pulumi:"domainName"`
   217  	// Domain name configuration. See below.
   218  	DomainNameConfiguration DomainNameDomainNameConfiguration `pulumi:"domainNameConfiguration"`
   219  	// Mutual TLS authentication configuration for the domain name.
   220  	MutualTlsAuthentication *DomainNameMutualTlsAuthentication `pulumi:"mutualTlsAuthentication"`
   221  	// Map of tags to assign to the domain name. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   222  	Tags map[string]string `pulumi:"tags"`
   223  }
   224  
   225  // The set of arguments for constructing a DomainName resource.
   226  type DomainNameArgs struct {
   227  	// Domain name. Must be between 1 and 512 characters in length.
   228  	DomainName pulumi.StringInput
   229  	// Domain name configuration. See below.
   230  	DomainNameConfiguration DomainNameDomainNameConfigurationInput
   231  	// Mutual TLS authentication configuration for the domain name.
   232  	MutualTlsAuthentication DomainNameMutualTlsAuthenticationPtrInput
   233  	// Map of tags to assign to the domain name. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   234  	Tags pulumi.StringMapInput
   235  }
   236  
   237  func (DomainNameArgs) ElementType() reflect.Type {
   238  	return reflect.TypeOf((*domainNameArgs)(nil)).Elem()
   239  }
   240  
   241  type DomainNameInput interface {
   242  	pulumi.Input
   243  
   244  	ToDomainNameOutput() DomainNameOutput
   245  	ToDomainNameOutputWithContext(ctx context.Context) DomainNameOutput
   246  }
   247  
   248  func (*DomainName) ElementType() reflect.Type {
   249  	return reflect.TypeOf((**DomainName)(nil)).Elem()
   250  }
   251  
   252  func (i *DomainName) ToDomainNameOutput() DomainNameOutput {
   253  	return i.ToDomainNameOutputWithContext(context.Background())
   254  }
   255  
   256  func (i *DomainName) ToDomainNameOutputWithContext(ctx context.Context) DomainNameOutput {
   257  	return pulumi.ToOutputWithContext(ctx, i).(DomainNameOutput)
   258  }
   259  
   260  // DomainNameArrayInput is an input type that accepts DomainNameArray and DomainNameArrayOutput values.
   261  // You can construct a concrete instance of `DomainNameArrayInput` via:
   262  //
   263  //	DomainNameArray{ DomainNameArgs{...} }
   264  type DomainNameArrayInput interface {
   265  	pulumi.Input
   266  
   267  	ToDomainNameArrayOutput() DomainNameArrayOutput
   268  	ToDomainNameArrayOutputWithContext(context.Context) DomainNameArrayOutput
   269  }
   270  
   271  type DomainNameArray []DomainNameInput
   272  
   273  func (DomainNameArray) ElementType() reflect.Type {
   274  	return reflect.TypeOf((*[]*DomainName)(nil)).Elem()
   275  }
   276  
   277  func (i DomainNameArray) ToDomainNameArrayOutput() DomainNameArrayOutput {
   278  	return i.ToDomainNameArrayOutputWithContext(context.Background())
   279  }
   280  
   281  func (i DomainNameArray) ToDomainNameArrayOutputWithContext(ctx context.Context) DomainNameArrayOutput {
   282  	return pulumi.ToOutputWithContext(ctx, i).(DomainNameArrayOutput)
   283  }
   284  
   285  // DomainNameMapInput is an input type that accepts DomainNameMap and DomainNameMapOutput values.
   286  // You can construct a concrete instance of `DomainNameMapInput` via:
   287  //
   288  //	DomainNameMap{ "key": DomainNameArgs{...} }
   289  type DomainNameMapInput interface {
   290  	pulumi.Input
   291  
   292  	ToDomainNameMapOutput() DomainNameMapOutput
   293  	ToDomainNameMapOutputWithContext(context.Context) DomainNameMapOutput
   294  }
   295  
   296  type DomainNameMap map[string]DomainNameInput
   297  
   298  func (DomainNameMap) ElementType() reflect.Type {
   299  	return reflect.TypeOf((*map[string]*DomainName)(nil)).Elem()
   300  }
   301  
   302  func (i DomainNameMap) ToDomainNameMapOutput() DomainNameMapOutput {
   303  	return i.ToDomainNameMapOutputWithContext(context.Background())
   304  }
   305  
   306  func (i DomainNameMap) ToDomainNameMapOutputWithContext(ctx context.Context) DomainNameMapOutput {
   307  	return pulumi.ToOutputWithContext(ctx, i).(DomainNameMapOutput)
   308  }
   309  
   310  type DomainNameOutput struct{ *pulumi.OutputState }
   311  
   312  func (DomainNameOutput) ElementType() reflect.Type {
   313  	return reflect.TypeOf((**DomainName)(nil)).Elem()
   314  }
   315  
   316  func (o DomainNameOutput) ToDomainNameOutput() DomainNameOutput {
   317  	return o
   318  }
   319  
   320  func (o DomainNameOutput) ToDomainNameOutputWithContext(ctx context.Context) DomainNameOutput {
   321  	return o
   322  }
   323  
   324  // [API mapping selection expression](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-mapping-selection-expressions) for the domain name.
   325  func (o DomainNameOutput) ApiMappingSelectionExpression() pulumi.StringOutput {
   326  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.ApiMappingSelectionExpression }).(pulumi.StringOutput)
   327  }
   328  
   329  // ARN of the domain name.
   330  func (o DomainNameOutput) Arn() pulumi.StringOutput {
   331  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.Arn }).(pulumi.StringOutput)
   332  }
   333  
   334  // Domain name. Must be between 1 and 512 characters in length.
   335  func (o DomainNameOutput) DomainName() pulumi.StringOutput {
   336  	return o.ApplyT(func(v *DomainName) pulumi.StringOutput { return v.DomainName }).(pulumi.StringOutput)
   337  }
   338  
   339  // Domain name configuration. See below.
   340  func (o DomainNameOutput) DomainNameConfiguration() DomainNameDomainNameConfigurationOutput {
   341  	return o.ApplyT(func(v *DomainName) DomainNameDomainNameConfigurationOutput { return v.DomainNameConfiguration }).(DomainNameDomainNameConfigurationOutput)
   342  }
   343  
   344  // Mutual TLS authentication configuration for the domain name.
   345  func (o DomainNameOutput) MutualTlsAuthentication() DomainNameMutualTlsAuthenticationPtrOutput {
   346  	return o.ApplyT(func(v *DomainName) DomainNameMutualTlsAuthenticationPtrOutput { return v.MutualTlsAuthentication }).(DomainNameMutualTlsAuthenticationPtrOutput)
   347  }
   348  
   349  // Map of tags to assign to the domain name. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
   350  func (o DomainNameOutput) Tags() pulumi.StringMapOutput {
   351  	return o.ApplyT(func(v *DomainName) pulumi.StringMapOutput { return v.Tags }).(pulumi.StringMapOutput)
   352  }
   353  
   354  // Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
   355  //
   356  // Deprecated: Please use `tags` instead.
   357  func (o DomainNameOutput) TagsAll() pulumi.StringMapOutput {
   358  	return o.ApplyT(func(v *DomainName) pulumi.StringMapOutput { return v.TagsAll }).(pulumi.StringMapOutput)
   359  }
   360  
   361  type DomainNameArrayOutput struct{ *pulumi.OutputState }
   362  
   363  func (DomainNameArrayOutput) ElementType() reflect.Type {
   364  	return reflect.TypeOf((*[]*DomainName)(nil)).Elem()
   365  }
   366  
   367  func (o DomainNameArrayOutput) ToDomainNameArrayOutput() DomainNameArrayOutput {
   368  	return o
   369  }
   370  
   371  func (o DomainNameArrayOutput) ToDomainNameArrayOutputWithContext(ctx context.Context) DomainNameArrayOutput {
   372  	return o
   373  }
   374  
   375  func (o DomainNameArrayOutput) Index(i pulumi.IntInput) DomainNameOutput {
   376  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *DomainName {
   377  		return vs[0].([]*DomainName)[vs[1].(int)]
   378  	}).(DomainNameOutput)
   379  }
   380  
   381  type DomainNameMapOutput struct{ *pulumi.OutputState }
   382  
   383  func (DomainNameMapOutput) ElementType() reflect.Type {
   384  	return reflect.TypeOf((*map[string]*DomainName)(nil)).Elem()
   385  }
   386  
   387  func (o DomainNameMapOutput) ToDomainNameMapOutput() DomainNameMapOutput {
   388  	return o
   389  }
   390  
   391  func (o DomainNameMapOutput) ToDomainNameMapOutputWithContext(ctx context.Context) DomainNameMapOutput {
   392  	return o
   393  }
   394  
   395  func (o DomainNameMapOutput) MapIndex(k pulumi.StringInput) DomainNameOutput {
   396  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *DomainName {
   397  		return vs[0].(map[string]*DomainName)[vs[1].(string)]
   398  	}).(DomainNameOutput)
   399  }
   400  
   401  func init() {
   402  	pulumi.RegisterInputType(reflect.TypeOf((*DomainNameInput)(nil)).Elem(), &DomainName{})
   403  	pulumi.RegisterInputType(reflect.TypeOf((*DomainNameArrayInput)(nil)).Elem(), DomainNameArray{})
   404  	pulumi.RegisterInputType(reflect.TypeOf((*DomainNameMapInput)(nil)).Elem(), DomainNameMap{})
   405  	pulumi.RegisterOutputType(DomainNameOutput{})
   406  	pulumi.RegisterOutputType(DomainNameArrayOutput{})
   407  	pulumi.RegisterOutputType(DomainNameMapOutput{})
   408  }