github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/s3/bucketVersioningV2.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 s3
     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  // Provides a resource for controlling versioning on an S3 bucket.
    16  // Deleting this resource will either suspend versioning on the associated S3 bucket or
    17  // simply remove the resource from state if the associated S3 bucket is unversioned.
    18  //
    19  // For more information, see [How S3 versioning works](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html).
    20  //
    21  // > **NOTE:** If you are enabling versioning on the bucket for the first time, AWS recommends that you wait for 15 minutes after enabling versioning before issuing write operations (PUT or DELETE) on objects in the bucket.
    22  //
    23  // > This resource cannot be used with S3 directory buckets.
    24  //
    25  // ## Example Usage
    26  //
    27  // ### With Versioning Enabled
    28  //
    29  // <!--Start PulumiCodeChooser -->
    30  // ```go
    31  // package main
    32  //
    33  // import (
    34  //
    35  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
    36  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    37  //
    38  // )
    39  //
    40  //	func main() {
    41  //		pulumi.Run(func(ctx *pulumi.Context) error {
    42  //			example, err := s3.NewBucketV2(ctx, "example", &s3.BucketV2Args{
    43  //				Bucket: pulumi.String("example-bucket"),
    44  //			})
    45  //			if err != nil {
    46  //				return err
    47  //			}
    48  //			_, err = s3.NewBucketAclV2(ctx, "example", &s3.BucketAclV2Args{
    49  //				Bucket: example.ID(),
    50  //				Acl:    pulumi.String("private"),
    51  //			})
    52  //			if err != nil {
    53  //				return err
    54  //			}
    55  //			_, err = s3.NewBucketVersioningV2(ctx, "versioning_example", &s3.BucketVersioningV2Args{
    56  //				Bucket: example.ID(),
    57  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
    58  //					Status: pulumi.String("Enabled"),
    59  //				},
    60  //			})
    61  //			if err != nil {
    62  //				return err
    63  //			}
    64  //			return nil
    65  //		})
    66  //	}
    67  //
    68  // ```
    69  // <!--End PulumiCodeChooser -->
    70  //
    71  // ### With Versioning Disabled
    72  //
    73  // <!--Start PulumiCodeChooser -->
    74  // ```go
    75  // package main
    76  //
    77  // import (
    78  //
    79  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
    80  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    81  //
    82  // )
    83  //
    84  //	func main() {
    85  //		pulumi.Run(func(ctx *pulumi.Context) error {
    86  //			example, err := s3.NewBucketV2(ctx, "example", &s3.BucketV2Args{
    87  //				Bucket: pulumi.String("example-bucket"),
    88  //			})
    89  //			if err != nil {
    90  //				return err
    91  //			}
    92  //			_, err = s3.NewBucketAclV2(ctx, "example", &s3.BucketAclV2Args{
    93  //				Bucket: example.ID(),
    94  //				Acl:    pulumi.String("private"),
    95  //			})
    96  //			if err != nil {
    97  //				return err
    98  //			}
    99  //			_, err = s3.NewBucketVersioningV2(ctx, "versioning_example", &s3.BucketVersioningV2Args{
   100  //				Bucket: example.ID(),
   101  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   102  //					Status: pulumi.String("Disabled"),
   103  //				},
   104  //			})
   105  //			if err != nil {
   106  //				return err
   107  //			}
   108  //			return nil
   109  //		})
   110  //	}
   111  //
   112  // ```
   113  // <!--End PulumiCodeChooser -->
   114  //
   115  // ### Object Dependency On Versioning
   116  //
   117  // When you create an object whose `versionId` you need and an `s3.BucketVersioningV2` resource in the same configuration, you are more likely to have success by ensuring the `s3Object` depends either implicitly (see below) or explicitly (i.e., using `dependsOn = [aws_s3_bucket_versioning.example]`) on the `s3.BucketVersioningV2` resource.
   118  //
   119  // > **NOTE:** For critical and/or production S3 objects, do not create a bucket, enable versioning, and create an object in the bucket within the same configuration. Doing so will not allow the AWS-recommended 15 minutes between enabling versioning and writing to the bucket.
   120  //
   121  // This example shows the `aws_s3_object.example` depending implicitly on the versioning resource through the reference to `aws_s3_bucket_versioning.example.bucket` to define `bucket`:
   122  //
   123  // <!--Start PulumiCodeChooser -->
   124  // ```go
   125  // package main
   126  //
   127  // import (
   128  //
   129  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   130  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   131  //
   132  // )
   133  //
   134  //	func main() {
   135  //		pulumi.Run(func(ctx *pulumi.Context) error {
   136  //			example, err := s3.NewBucketV2(ctx, "example", &s3.BucketV2Args{
   137  //				Bucket: pulumi.String("yotto"),
   138  //			})
   139  //			if err != nil {
   140  //				return err
   141  //			}
   142  //			exampleBucketVersioningV2, err := s3.NewBucketVersioningV2(ctx, "example", &s3.BucketVersioningV2Args{
   143  //				Bucket: example.ID(),
   144  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   145  //					Status: pulumi.String("Enabled"),
   146  //				},
   147  //			})
   148  //			if err != nil {
   149  //				return err
   150  //			}
   151  //			_, err = s3.NewBucketObjectv2(ctx, "example", &s3.BucketObjectv2Args{
   152  //				Bucket: exampleBucketVersioningV2.ID(),
   153  //				Key:    pulumi.String("droeloe"),
   154  //				Source: pulumi.NewFileAsset("example.txt"),
   155  //			})
   156  //			if err != nil {
   157  //				return err
   158  //			}
   159  //			return nil
   160  //		})
   161  //	}
   162  //
   163  // ```
   164  // <!--End PulumiCodeChooser -->
   165  //
   166  // ## Import
   167  //
   168  // If the owner (account ID) of the source bucket differs from the account used to configure the AWS Provider, import using the `bucket` and `expected_bucket_owner` separated by a comma (`,`):
   169  //
   170  // __Using `pulumi import` to import__ S3 bucket versioning using the `bucket` or using the `bucket` and `expected_bucket_owner` separated by a comma (`,`). For example:
   171  //
   172  // If the owner (account ID) of the source bucket is the same account used to configure the AWS Provider, import using the `bucket`:
   173  //
   174  // ```sh
   175  // $ pulumi import aws:s3/bucketVersioningV2:BucketVersioningV2 example bucket-name
   176  // ```
   177  // If the owner (account ID) of the source bucket differs from the account used to configure the AWS Provider, import using the `bucket` and `expected_bucket_owner` separated by a comma (`,`):
   178  //
   179  // ```sh
   180  // $ pulumi import aws:s3/bucketVersioningV2:BucketVersioningV2 example bucket-name,123456789012
   181  // ```
   182  type BucketVersioningV2 struct {
   183  	pulumi.CustomResourceState
   184  
   185  	// Name of the S3 bucket.
   186  	Bucket pulumi.StringOutput `pulumi:"bucket"`
   187  	// Account ID of the expected bucket owner.
   188  	ExpectedBucketOwner pulumi.StringPtrOutput `pulumi:"expectedBucketOwner"`
   189  	// Concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
   190  	Mfa pulumi.StringPtrOutput `pulumi:"mfa"`
   191  	// Configuration block for the versioning parameters. See below.
   192  	VersioningConfiguration BucketVersioningV2VersioningConfigurationOutput `pulumi:"versioningConfiguration"`
   193  }
   194  
   195  // NewBucketVersioningV2 registers a new resource with the given unique name, arguments, and options.
   196  func NewBucketVersioningV2(ctx *pulumi.Context,
   197  	name string, args *BucketVersioningV2Args, opts ...pulumi.ResourceOption) (*BucketVersioningV2, error) {
   198  	if args == nil {
   199  		return nil, errors.New("missing one or more required arguments")
   200  	}
   201  
   202  	if args.Bucket == nil {
   203  		return nil, errors.New("invalid value for required argument 'Bucket'")
   204  	}
   205  	if args.VersioningConfiguration == nil {
   206  		return nil, errors.New("invalid value for required argument 'VersioningConfiguration'")
   207  	}
   208  	opts = internal.PkgResourceDefaultOpts(opts)
   209  	var resource BucketVersioningV2
   210  	err := ctx.RegisterResource("aws:s3/bucketVersioningV2:BucketVersioningV2", name, args, &resource, opts...)
   211  	if err != nil {
   212  		return nil, err
   213  	}
   214  	return &resource, nil
   215  }
   216  
   217  // GetBucketVersioningV2 gets an existing BucketVersioningV2 resource's state with the given name, ID, and optional
   218  // state properties that are used to uniquely qualify the lookup (nil if not required).
   219  func GetBucketVersioningV2(ctx *pulumi.Context,
   220  	name string, id pulumi.IDInput, state *BucketVersioningV2State, opts ...pulumi.ResourceOption) (*BucketVersioningV2, error) {
   221  	var resource BucketVersioningV2
   222  	err := ctx.ReadResource("aws:s3/bucketVersioningV2:BucketVersioningV2", name, id, state, &resource, opts...)
   223  	if err != nil {
   224  		return nil, err
   225  	}
   226  	return &resource, nil
   227  }
   228  
   229  // Input properties used for looking up and filtering BucketVersioningV2 resources.
   230  type bucketVersioningV2State struct {
   231  	// Name of the S3 bucket.
   232  	Bucket *string `pulumi:"bucket"`
   233  	// Account ID of the expected bucket owner.
   234  	ExpectedBucketOwner *string `pulumi:"expectedBucketOwner"`
   235  	// Concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
   236  	Mfa *string `pulumi:"mfa"`
   237  	// Configuration block for the versioning parameters. See below.
   238  	VersioningConfiguration *BucketVersioningV2VersioningConfiguration `pulumi:"versioningConfiguration"`
   239  }
   240  
   241  type BucketVersioningV2State struct {
   242  	// Name of the S3 bucket.
   243  	Bucket pulumi.StringPtrInput
   244  	// Account ID of the expected bucket owner.
   245  	ExpectedBucketOwner pulumi.StringPtrInput
   246  	// Concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
   247  	Mfa pulumi.StringPtrInput
   248  	// Configuration block for the versioning parameters. See below.
   249  	VersioningConfiguration BucketVersioningV2VersioningConfigurationPtrInput
   250  }
   251  
   252  func (BucketVersioningV2State) ElementType() reflect.Type {
   253  	return reflect.TypeOf((*bucketVersioningV2State)(nil)).Elem()
   254  }
   255  
   256  type bucketVersioningV2Args struct {
   257  	// Name of the S3 bucket.
   258  	Bucket string `pulumi:"bucket"`
   259  	// Account ID of the expected bucket owner.
   260  	ExpectedBucketOwner *string `pulumi:"expectedBucketOwner"`
   261  	// Concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
   262  	Mfa *string `pulumi:"mfa"`
   263  	// Configuration block for the versioning parameters. See below.
   264  	VersioningConfiguration BucketVersioningV2VersioningConfiguration `pulumi:"versioningConfiguration"`
   265  }
   266  
   267  // The set of arguments for constructing a BucketVersioningV2 resource.
   268  type BucketVersioningV2Args struct {
   269  	// Name of the S3 bucket.
   270  	Bucket pulumi.StringInput
   271  	// Account ID of the expected bucket owner.
   272  	ExpectedBucketOwner pulumi.StringPtrInput
   273  	// Concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
   274  	Mfa pulumi.StringPtrInput
   275  	// Configuration block for the versioning parameters. See below.
   276  	VersioningConfiguration BucketVersioningV2VersioningConfigurationInput
   277  }
   278  
   279  func (BucketVersioningV2Args) ElementType() reflect.Type {
   280  	return reflect.TypeOf((*bucketVersioningV2Args)(nil)).Elem()
   281  }
   282  
   283  type BucketVersioningV2Input interface {
   284  	pulumi.Input
   285  
   286  	ToBucketVersioningV2Output() BucketVersioningV2Output
   287  	ToBucketVersioningV2OutputWithContext(ctx context.Context) BucketVersioningV2Output
   288  }
   289  
   290  func (*BucketVersioningV2) ElementType() reflect.Type {
   291  	return reflect.TypeOf((**BucketVersioningV2)(nil)).Elem()
   292  }
   293  
   294  func (i *BucketVersioningV2) ToBucketVersioningV2Output() BucketVersioningV2Output {
   295  	return i.ToBucketVersioningV2OutputWithContext(context.Background())
   296  }
   297  
   298  func (i *BucketVersioningV2) ToBucketVersioningV2OutputWithContext(ctx context.Context) BucketVersioningV2Output {
   299  	return pulumi.ToOutputWithContext(ctx, i).(BucketVersioningV2Output)
   300  }
   301  
   302  // BucketVersioningV2ArrayInput is an input type that accepts BucketVersioningV2Array and BucketVersioningV2ArrayOutput values.
   303  // You can construct a concrete instance of `BucketVersioningV2ArrayInput` via:
   304  //
   305  //	BucketVersioningV2Array{ BucketVersioningV2Args{...} }
   306  type BucketVersioningV2ArrayInput interface {
   307  	pulumi.Input
   308  
   309  	ToBucketVersioningV2ArrayOutput() BucketVersioningV2ArrayOutput
   310  	ToBucketVersioningV2ArrayOutputWithContext(context.Context) BucketVersioningV2ArrayOutput
   311  }
   312  
   313  type BucketVersioningV2Array []BucketVersioningV2Input
   314  
   315  func (BucketVersioningV2Array) ElementType() reflect.Type {
   316  	return reflect.TypeOf((*[]*BucketVersioningV2)(nil)).Elem()
   317  }
   318  
   319  func (i BucketVersioningV2Array) ToBucketVersioningV2ArrayOutput() BucketVersioningV2ArrayOutput {
   320  	return i.ToBucketVersioningV2ArrayOutputWithContext(context.Background())
   321  }
   322  
   323  func (i BucketVersioningV2Array) ToBucketVersioningV2ArrayOutputWithContext(ctx context.Context) BucketVersioningV2ArrayOutput {
   324  	return pulumi.ToOutputWithContext(ctx, i).(BucketVersioningV2ArrayOutput)
   325  }
   326  
   327  // BucketVersioningV2MapInput is an input type that accepts BucketVersioningV2Map and BucketVersioningV2MapOutput values.
   328  // You can construct a concrete instance of `BucketVersioningV2MapInput` via:
   329  //
   330  //	BucketVersioningV2Map{ "key": BucketVersioningV2Args{...} }
   331  type BucketVersioningV2MapInput interface {
   332  	pulumi.Input
   333  
   334  	ToBucketVersioningV2MapOutput() BucketVersioningV2MapOutput
   335  	ToBucketVersioningV2MapOutputWithContext(context.Context) BucketVersioningV2MapOutput
   336  }
   337  
   338  type BucketVersioningV2Map map[string]BucketVersioningV2Input
   339  
   340  func (BucketVersioningV2Map) ElementType() reflect.Type {
   341  	return reflect.TypeOf((*map[string]*BucketVersioningV2)(nil)).Elem()
   342  }
   343  
   344  func (i BucketVersioningV2Map) ToBucketVersioningV2MapOutput() BucketVersioningV2MapOutput {
   345  	return i.ToBucketVersioningV2MapOutputWithContext(context.Background())
   346  }
   347  
   348  func (i BucketVersioningV2Map) ToBucketVersioningV2MapOutputWithContext(ctx context.Context) BucketVersioningV2MapOutput {
   349  	return pulumi.ToOutputWithContext(ctx, i).(BucketVersioningV2MapOutput)
   350  }
   351  
   352  type BucketVersioningV2Output struct{ *pulumi.OutputState }
   353  
   354  func (BucketVersioningV2Output) ElementType() reflect.Type {
   355  	return reflect.TypeOf((**BucketVersioningV2)(nil)).Elem()
   356  }
   357  
   358  func (o BucketVersioningV2Output) ToBucketVersioningV2Output() BucketVersioningV2Output {
   359  	return o
   360  }
   361  
   362  func (o BucketVersioningV2Output) ToBucketVersioningV2OutputWithContext(ctx context.Context) BucketVersioningV2Output {
   363  	return o
   364  }
   365  
   366  // Name of the S3 bucket.
   367  func (o BucketVersioningV2Output) Bucket() pulumi.StringOutput {
   368  	return o.ApplyT(func(v *BucketVersioningV2) pulumi.StringOutput { return v.Bucket }).(pulumi.StringOutput)
   369  }
   370  
   371  // Account ID of the expected bucket owner.
   372  func (o BucketVersioningV2Output) ExpectedBucketOwner() pulumi.StringPtrOutput {
   373  	return o.ApplyT(func(v *BucketVersioningV2) pulumi.StringPtrOutput { return v.ExpectedBucketOwner }).(pulumi.StringPtrOutput)
   374  }
   375  
   376  // Concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
   377  func (o BucketVersioningV2Output) Mfa() pulumi.StringPtrOutput {
   378  	return o.ApplyT(func(v *BucketVersioningV2) pulumi.StringPtrOutput { return v.Mfa }).(pulumi.StringPtrOutput)
   379  }
   380  
   381  // Configuration block for the versioning parameters. See below.
   382  func (o BucketVersioningV2Output) VersioningConfiguration() BucketVersioningV2VersioningConfigurationOutput {
   383  	return o.ApplyT(func(v *BucketVersioningV2) BucketVersioningV2VersioningConfigurationOutput {
   384  		return v.VersioningConfiguration
   385  	}).(BucketVersioningV2VersioningConfigurationOutput)
   386  }
   387  
   388  type BucketVersioningV2ArrayOutput struct{ *pulumi.OutputState }
   389  
   390  func (BucketVersioningV2ArrayOutput) ElementType() reflect.Type {
   391  	return reflect.TypeOf((*[]*BucketVersioningV2)(nil)).Elem()
   392  }
   393  
   394  func (o BucketVersioningV2ArrayOutput) ToBucketVersioningV2ArrayOutput() BucketVersioningV2ArrayOutput {
   395  	return o
   396  }
   397  
   398  func (o BucketVersioningV2ArrayOutput) ToBucketVersioningV2ArrayOutputWithContext(ctx context.Context) BucketVersioningV2ArrayOutput {
   399  	return o
   400  }
   401  
   402  func (o BucketVersioningV2ArrayOutput) Index(i pulumi.IntInput) BucketVersioningV2Output {
   403  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *BucketVersioningV2 {
   404  		return vs[0].([]*BucketVersioningV2)[vs[1].(int)]
   405  	}).(BucketVersioningV2Output)
   406  }
   407  
   408  type BucketVersioningV2MapOutput struct{ *pulumi.OutputState }
   409  
   410  func (BucketVersioningV2MapOutput) ElementType() reflect.Type {
   411  	return reflect.TypeOf((*map[string]*BucketVersioningV2)(nil)).Elem()
   412  }
   413  
   414  func (o BucketVersioningV2MapOutput) ToBucketVersioningV2MapOutput() BucketVersioningV2MapOutput {
   415  	return o
   416  }
   417  
   418  func (o BucketVersioningV2MapOutput) ToBucketVersioningV2MapOutputWithContext(ctx context.Context) BucketVersioningV2MapOutput {
   419  	return o
   420  }
   421  
   422  func (o BucketVersioningV2MapOutput) MapIndex(k pulumi.StringInput) BucketVersioningV2Output {
   423  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *BucketVersioningV2 {
   424  		return vs[0].(map[string]*BucketVersioningV2)[vs[1].(string)]
   425  	}).(BucketVersioningV2Output)
   426  }
   427  
   428  func init() {
   429  	pulumi.RegisterInputType(reflect.TypeOf((*BucketVersioningV2Input)(nil)).Elem(), &BucketVersioningV2{})
   430  	pulumi.RegisterInputType(reflect.TypeOf((*BucketVersioningV2ArrayInput)(nil)).Elem(), BucketVersioningV2Array{})
   431  	pulumi.RegisterInputType(reflect.TypeOf((*BucketVersioningV2MapInput)(nil)).Elem(), BucketVersioningV2Map{})
   432  	pulumi.RegisterOutputType(BucketVersioningV2Output{})
   433  	pulumi.RegisterOutputType(BucketVersioningV2ArrayOutput{})
   434  	pulumi.RegisterOutputType(BucketVersioningV2MapOutput{})
   435  }