github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/s3/bucketLifecycleConfigurationV2.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 an independent configuration resource for S3 bucket [lifecycle configuration](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).
    16  //
    17  // An S3 Lifecycle configuration consists of one or more Lifecycle rules. Each rule consists of the following:
    18  //
    19  // * Rule metadata (`id` and `status`)
    20  // * Filter identifying objects to which the rule applies
    21  // * One or more transition or expiration actions
    22  //
    23  // For more information see the Amazon S3 User Guide on [`Lifecycle Configuration Elements`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html).
    24  //
    25  // > **NOTE:** S3 Buckets only support a single lifecycle configuration. Declaring multiple `s3.BucketLifecycleConfigurationV2` resources to the same S3 Bucket will cause a perpetual difference in configuration.
    26  //
    27  // > **NOTE:** Lifecycle configurations may take some time to fully propagate to all AWS S3 systems.
    28  // Running Pulumi operations shortly after creating a lifecycle configuration may result in changes that affect configuration idempotence.
    29  // See the Amazon S3 User Guide on [setting lifecycle configuration on a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html).
    30  //
    31  // > This resource cannot be used with S3 directory buckets.
    32  //
    33  // ## Example Usage
    34  //
    35  // ### With neither a filter nor prefix specified
    36  //
    37  // The Lifecycle rule applies to a subset of objects based on the key name prefix (`""`).
    38  //
    39  // This configuration is intended to replicate the default behavior of the `lifecycleRule`
    40  // parameter in the AWS Provider `s3.BucketV2` resource prior to `v4.0`.
    41  //
    42  // <!--Start PulumiCodeChooser -->
    43  // ```go
    44  // package main
    45  //
    46  // import (
    47  //
    48  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
    49  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    50  //
    51  // )
    52  //
    53  //	func main() {
    54  //		pulumi.Run(func(ctx *pulumi.Context) error {
    55  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
    56  //				Bucket: pulumi.Any(bucket.Id),
    57  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
    58  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
    59  //						Id:     pulumi.String("rule-1"),
    60  //						Status: pulumi.String("Enabled"),
    61  //					},
    62  //				},
    63  //			})
    64  //			if err != nil {
    65  //				return err
    66  //			}
    67  //			return nil
    68  //		})
    69  //	}
    70  //
    71  // ```
    72  // <!--End PulumiCodeChooser -->
    73  //
    74  // ### Specifying an empty filter
    75  //
    76  // The Lifecycle rule applies to all objects in the bucket.
    77  //
    78  // <!--Start PulumiCodeChooser -->
    79  // ```go
    80  // package main
    81  //
    82  // import (
    83  //
    84  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
    85  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    86  //
    87  // )
    88  //
    89  //	func main() {
    90  //		pulumi.Run(func(ctx *pulumi.Context) error {
    91  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
    92  //				Bucket: pulumi.Any(bucket.Id),
    93  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
    94  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
    95  //						Id:     pulumi.String("rule-1"),
    96  //						Filter: nil,
    97  //						Status: pulumi.String("Enabled"),
    98  //					},
    99  //				},
   100  //			})
   101  //			if err != nil {
   102  //				return err
   103  //			}
   104  //			return nil
   105  //		})
   106  //	}
   107  //
   108  // ```
   109  // <!--End PulumiCodeChooser -->
   110  //
   111  // ### Specifying a filter using key prefixes
   112  //
   113  // The Lifecycle rule applies to a subset of objects based on the key name prefix (`logs/`).
   114  //
   115  // <!--Start PulumiCodeChooser -->
   116  // ```go
   117  // package main
   118  //
   119  // import (
   120  //
   121  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   122  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   123  //
   124  // )
   125  //
   126  //	func main() {
   127  //		pulumi.Run(func(ctx *pulumi.Context) error {
   128  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   129  //				Bucket: pulumi.Any(bucket.Id),
   130  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   131  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   132  //						Id: pulumi.String("rule-1"),
   133  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   134  //							Prefix: pulumi.String("logs/"),
   135  //						},
   136  //						Status: pulumi.String("Enabled"),
   137  //					},
   138  //				},
   139  //			})
   140  //			if err != nil {
   141  //				return err
   142  //			}
   143  //			return nil
   144  //		})
   145  //	}
   146  //
   147  // ```
   148  // <!--End PulumiCodeChooser -->
   149  //
   150  // If you want to apply a Lifecycle action to a subset of objects based on different key name prefixes, specify separate rules.
   151  //
   152  // <!--Start PulumiCodeChooser -->
   153  // ```go
   154  // package main
   155  //
   156  // import (
   157  //
   158  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   159  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   160  //
   161  // )
   162  //
   163  //	func main() {
   164  //		pulumi.Run(func(ctx *pulumi.Context) error {
   165  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   166  //				Bucket: pulumi.Any(bucket.Id),
   167  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   168  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   169  //						Id: pulumi.String("rule-1"),
   170  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   171  //							Prefix: pulumi.String("logs/"),
   172  //						},
   173  //						Status: pulumi.String("Enabled"),
   174  //					},
   175  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   176  //						Id: pulumi.String("rule-2"),
   177  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   178  //							Prefix: pulumi.String("tmp/"),
   179  //						},
   180  //						Status: pulumi.String("Enabled"),
   181  //					},
   182  //				},
   183  //			})
   184  //			if err != nil {
   185  //				return err
   186  //			}
   187  //			return nil
   188  //		})
   189  //	}
   190  //
   191  // ```
   192  // <!--End PulumiCodeChooser -->
   193  //
   194  // ### Specifying a filter based on an object tag
   195  //
   196  // The Lifecycle rule specifies a filter based on a tag key and value. The rule then applies only to a subset of objects with the specific tag.
   197  //
   198  // <!--Start PulumiCodeChooser -->
   199  // ```go
   200  // package main
   201  //
   202  // import (
   203  //
   204  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   205  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   206  //
   207  // )
   208  //
   209  //	func main() {
   210  //		pulumi.Run(func(ctx *pulumi.Context) error {
   211  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   212  //				Bucket: pulumi.Any(bucket.Id),
   213  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   214  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   215  //						Id: pulumi.String("rule-1"),
   216  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   217  //							Tag: &s3.BucketLifecycleConfigurationV2RuleFilterTagArgs{
   218  //								Key:   pulumi.String("Name"),
   219  //								Value: pulumi.String("Staging"),
   220  //							},
   221  //						},
   222  //						Status: pulumi.String("Enabled"),
   223  //					},
   224  //				},
   225  //			})
   226  //			if err != nil {
   227  //				return err
   228  //			}
   229  //			return nil
   230  //		})
   231  //	}
   232  //
   233  // ```
   234  // <!--End PulumiCodeChooser -->
   235  //
   236  // ### Specifying a filter based on multiple tags
   237  //
   238  // The Lifecycle rule directs Amazon S3 to perform lifecycle actions on objects with two tags (with the specific tag keys and values). Notice `tags` is wrapped in the `and` configuration block.
   239  //
   240  // <!--Start PulumiCodeChooser -->
   241  // ```go
   242  // package main
   243  //
   244  // import (
   245  //
   246  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   247  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   248  //
   249  // )
   250  //
   251  //	func main() {
   252  //		pulumi.Run(func(ctx *pulumi.Context) error {
   253  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   254  //				Bucket: pulumi.Any(bucket.Id),
   255  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   256  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   257  //						Id: pulumi.String("rule-1"),
   258  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   259  //							And: &s3.BucketLifecycleConfigurationV2RuleFilterAndArgs{
   260  //								Tags: pulumi.StringMap{
   261  //									"Key1": pulumi.String("Value1"),
   262  //									"Key2": pulumi.String("Value2"),
   263  //								},
   264  //							},
   265  //						},
   266  //						Status: pulumi.String("Enabled"),
   267  //					},
   268  //				},
   269  //			})
   270  //			if err != nil {
   271  //				return err
   272  //			}
   273  //			return nil
   274  //		})
   275  //	}
   276  //
   277  // ```
   278  // <!--End PulumiCodeChooser -->
   279  //
   280  // ### Specifying a filter based on both prefix and one or more tags
   281  //
   282  // The Lifecycle rule directs Amazon S3 to perform lifecycle actions on objects with the specified prefix and two tags (with the specific tag keys and values). Notice both `prefix` and `tags` are wrapped in the `and` configuration block.
   283  //
   284  // <!--Start PulumiCodeChooser -->
   285  // ```go
   286  // package main
   287  //
   288  // import (
   289  //
   290  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   291  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   292  //
   293  // )
   294  //
   295  //	func main() {
   296  //		pulumi.Run(func(ctx *pulumi.Context) error {
   297  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   298  //				Bucket: pulumi.Any(bucket.Id),
   299  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   300  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   301  //						Id: pulumi.String("rule-1"),
   302  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   303  //							And: &s3.BucketLifecycleConfigurationV2RuleFilterAndArgs{
   304  //								Prefix: pulumi.String("logs/"),
   305  //								Tags: pulumi.StringMap{
   306  //									"Key1": pulumi.String("Value1"),
   307  //									"Key2": pulumi.String("Value2"),
   308  //								},
   309  //							},
   310  //						},
   311  //						Status: pulumi.String("Enabled"),
   312  //					},
   313  //				},
   314  //			})
   315  //			if err != nil {
   316  //				return err
   317  //			}
   318  //			return nil
   319  //		})
   320  //	}
   321  //
   322  // ```
   323  // <!--End PulumiCodeChooser -->
   324  //
   325  // ### Specifying a filter based on object size
   326  //
   327  // Object size values are in bytes. Maximum filter size is 5TB. Some storage classes have minimum object size limitations, for more information, see [Comparing the Amazon S3 storage classes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html#sc-compare).
   328  //
   329  // <!--Start PulumiCodeChooser -->
   330  // ```go
   331  // package main
   332  //
   333  // import (
   334  //
   335  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   336  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   337  //
   338  // )
   339  //
   340  //	func main() {
   341  //		pulumi.Run(func(ctx *pulumi.Context) error {
   342  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   343  //				Bucket: pulumi.Any(bucket.Id),
   344  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   345  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   346  //						Id: pulumi.String("rule-1"),
   347  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   348  //							ObjectSizeGreaterThan: pulumi.String("500"),
   349  //						},
   350  //						Status: pulumi.String("Enabled"),
   351  //					},
   352  //				},
   353  //			})
   354  //			if err != nil {
   355  //				return err
   356  //			}
   357  //			return nil
   358  //		})
   359  //	}
   360  //
   361  // ```
   362  // <!--End PulumiCodeChooser -->
   363  //
   364  // ### Specifying a filter based on object size range and prefix
   365  //
   366  // The `objectSizeGreaterThan` must be less than the `objectSizeLessThan`. Notice both the object size range and prefix are wrapped in the `and` configuration block.
   367  //
   368  // <!--Start PulumiCodeChooser -->
   369  // ```go
   370  // package main
   371  //
   372  // import (
   373  //
   374  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   375  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   376  //
   377  // )
   378  //
   379  //	func main() {
   380  //		pulumi.Run(func(ctx *pulumi.Context) error {
   381  //			_, err := s3.NewBucketLifecycleConfigurationV2(ctx, "example", &s3.BucketLifecycleConfigurationV2Args{
   382  //				Bucket: pulumi.Any(bucket.Id),
   383  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   384  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   385  //						Id: pulumi.String("rule-1"),
   386  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   387  //							And: &s3.BucketLifecycleConfigurationV2RuleFilterAndArgs{
   388  //								Prefix:                pulumi.String("logs/"),
   389  //								ObjectSizeGreaterThan: pulumi.Int(500),
   390  //								ObjectSizeLessThan:    pulumi.Int(64000),
   391  //							},
   392  //						},
   393  //						Status: pulumi.String("Enabled"),
   394  //					},
   395  //				},
   396  //			})
   397  //			if err != nil {
   398  //				return err
   399  //			}
   400  //			return nil
   401  //		})
   402  //	}
   403  //
   404  // ```
   405  // <!--End PulumiCodeChooser -->
   406  //
   407  // ### Creating a Lifecycle Configuration for a bucket with versioning
   408  //
   409  // <!--Start PulumiCodeChooser -->
   410  // ```go
   411  // package main
   412  //
   413  // import (
   414  //
   415  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   416  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   417  //
   418  // )
   419  //
   420  //	func main() {
   421  //		pulumi.Run(func(ctx *pulumi.Context) error {
   422  //			bucket, err := s3.NewBucketV2(ctx, "bucket", &s3.BucketV2Args{
   423  //				Bucket: pulumi.String("my-bucket"),
   424  //			})
   425  //			if err != nil {
   426  //				return err
   427  //			}
   428  //			_, err = s3.NewBucketAclV2(ctx, "bucket_acl", &s3.BucketAclV2Args{
   429  //				Bucket: bucket.ID(),
   430  //				Acl:    pulumi.String("private"),
   431  //			})
   432  //			if err != nil {
   433  //				return err
   434  //			}
   435  //			_, err = s3.NewBucketLifecycleConfigurationV2(ctx, "bucket-config", &s3.BucketLifecycleConfigurationV2Args{
   436  //				Bucket: bucket.ID(),
   437  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   438  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   439  //						Id: pulumi.String("log"),
   440  //						Expiration: &s3.BucketLifecycleConfigurationV2RuleExpirationArgs{
   441  //							Days: pulumi.Int(90),
   442  //						},
   443  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   444  //							And: &s3.BucketLifecycleConfigurationV2RuleFilterAndArgs{
   445  //								Prefix: pulumi.String("log/"),
   446  //								Tags: pulumi.StringMap{
   447  //									"rule":      pulumi.String("log"),
   448  //									"autoclean": pulumi.String("true"),
   449  //								},
   450  //							},
   451  //						},
   452  //						Status: pulumi.String("Enabled"),
   453  //						Transitions: s3.BucketLifecycleConfigurationV2RuleTransitionArray{
   454  //							&s3.BucketLifecycleConfigurationV2RuleTransitionArgs{
   455  //								Days:         pulumi.Int(30),
   456  //								StorageClass: pulumi.String("STANDARD_IA"),
   457  //							},
   458  //							&s3.BucketLifecycleConfigurationV2RuleTransitionArgs{
   459  //								Days:         pulumi.Int(60),
   460  //								StorageClass: pulumi.String("GLACIER"),
   461  //							},
   462  //						},
   463  //					},
   464  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   465  //						Id: pulumi.String("tmp"),
   466  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   467  //							Prefix: pulumi.String("tmp/"),
   468  //						},
   469  //						Expiration: &s3.BucketLifecycleConfigurationV2RuleExpirationArgs{
   470  //							Date: pulumi.String("2023-01-13T00:00:00Z"),
   471  //						},
   472  //						Status: pulumi.String("Enabled"),
   473  //					},
   474  //				},
   475  //			})
   476  //			if err != nil {
   477  //				return err
   478  //			}
   479  //			versioningBucket, err := s3.NewBucketV2(ctx, "versioning_bucket", &s3.BucketV2Args{
   480  //				Bucket: pulumi.String("my-versioning-bucket"),
   481  //			})
   482  //			if err != nil {
   483  //				return err
   484  //			}
   485  //			_, err = s3.NewBucketAclV2(ctx, "versioning_bucket_acl", &s3.BucketAclV2Args{
   486  //				Bucket: versioningBucket.ID(),
   487  //				Acl:    pulumi.String("private"),
   488  //			})
   489  //			if err != nil {
   490  //				return err
   491  //			}
   492  //			versioning, err := s3.NewBucketVersioningV2(ctx, "versioning", &s3.BucketVersioningV2Args{
   493  //				Bucket: versioningBucket.ID(),
   494  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   495  //					Status: pulumi.String("Enabled"),
   496  //				},
   497  //			})
   498  //			if err != nil {
   499  //				return err
   500  //			}
   501  //			_, err = s3.NewBucketLifecycleConfigurationV2(ctx, "versioning-bucket-config", &s3.BucketLifecycleConfigurationV2Args{
   502  //				Bucket: versioningBucket.ID(),
   503  //				Rules: s3.BucketLifecycleConfigurationV2RuleArray{
   504  //					&s3.BucketLifecycleConfigurationV2RuleArgs{
   505  //						Id: pulumi.String("config"),
   506  //						Filter: &s3.BucketLifecycleConfigurationV2RuleFilterArgs{
   507  //							Prefix: pulumi.String("config/"),
   508  //						},
   509  //						NoncurrentVersionExpiration: &s3.BucketLifecycleConfigurationV2RuleNoncurrentVersionExpirationArgs{
   510  //							NoncurrentDays: pulumi.Int(90),
   511  //						},
   512  //						NoncurrentVersionTransitions: s3.BucketLifecycleConfigurationV2RuleNoncurrentVersionTransitionArray{
   513  //							&s3.BucketLifecycleConfigurationV2RuleNoncurrentVersionTransitionArgs{
   514  //								NoncurrentDays: pulumi.Int(30),
   515  //								StorageClass:   pulumi.String("STANDARD_IA"),
   516  //							},
   517  //							&s3.BucketLifecycleConfigurationV2RuleNoncurrentVersionTransitionArgs{
   518  //								NoncurrentDays: pulumi.Int(60),
   519  //								StorageClass:   pulumi.String("GLACIER"),
   520  //							},
   521  //						},
   522  //						Status: pulumi.String("Enabled"),
   523  //					},
   524  //				},
   525  //			}, pulumi.DependsOn([]pulumi.Resource{
   526  //				versioning,
   527  //			}))
   528  //			if err != nil {
   529  //				return err
   530  //			}
   531  //			return nil
   532  //		})
   533  //	}
   534  //
   535  // ```
   536  // <!--End PulumiCodeChooser -->
   537  //
   538  // ## Import
   539  //
   540  // 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 (`,`):
   541  //
   542  // __Using `pulumi import` to import__ S3 bucket lifecycle configuration using the `bucket` or using the `bucket` and `expected_bucket_owner` separated by a comma (`,`). For example:
   543  //
   544  // If the owner (account ID) of the source bucket is the same account used to configure the AWS Provider, import using the `bucket`:
   545  //
   546  // ```sh
   547  // $ pulumi import aws:s3/bucketLifecycleConfigurationV2:BucketLifecycleConfigurationV2 example bucket-name
   548  // ```
   549  // 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 (`,`):
   550  //
   551  // ```sh
   552  // $ pulumi import aws:s3/bucketLifecycleConfigurationV2:BucketLifecycleConfigurationV2 example bucket-name,123456789012
   553  // ```
   554  type BucketLifecycleConfigurationV2 struct {
   555  	pulumi.CustomResourceState
   556  
   557  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   558  	Bucket pulumi.StringOutput `pulumi:"bucket"`
   559  	// Account ID of the expected bucket owner. If the bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
   560  	ExpectedBucketOwner pulumi.StringPtrOutput `pulumi:"expectedBucketOwner"`
   561  	// List of configuration blocks describing the rules managing the replication. See below.
   562  	Rules BucketLifecycleConfigurationV2RuleArrayOutput `pulumi:"rules"`
   563  }
   564  
   565  // NewBucketLifecycleConfigurationV2 registers a new resource with the given unique name, arguments, and options.
   566  func NewBucketLifecycleConfigurationV2(ctx *pulumi.Context,
   567  	name string, args *BucketLifecycleConfigurationV2Args, opts ...pulumi.ResourceOption) (*BucketLifecycleConfigurationV2, error) {
   568  	if args == nil {
   569  		return nil, errors.New("missing one or more required arguments")
   570  	}
   571  
   572  	if args.Bucket == nil {
   573  		return nil, errors.New("invalid value for required argument 'Bucket'")
   574  	}
   575  	if args.Rules == nil {
   576  		return nil, errors.New("invalid value for required argument 'Rules'")
   577  	}
   578  	opts = internal.PkgResourceDefaultOpts(opts)
   579  	var resource BucketLifecycleConfigurationV2
   580  	err := ctx.RegisterResource("aws:s3/bucketLifecycleConfigurationV2:BucketLifecycleConfigurationV2", name, args, &resource, opts...)
   581  	if err != nil {
   582  		return nil, err
   583  	}
   584  	return &resource, nil
   585  }
   586  
   587  // GetBucketLifecycleConfigurationV2 gets an existing BucketLifecycleConfigurationV2 resource's state with the given name, ID, and optional
   588  // state properties that are used to uniquely qualify the lookup (nil if not required).
   589  func GetBucketLifecycleConfigurationV2(ctx *pulumi.Context,
   590  	name string, id pulumi.IDInput, state *BucketLifecycleConfigurationV2State, opts ...pulumi.ResourceOption) (*BucketLifecycleConfigurationV2, error) {
   591  	var resource BucketLifecycleConfigurationV2
   592  	err := ctx.ReadResource("aws:s3/bucketLifecycleConfigurationV2:BucketLifecycleConfigurationV2", name, id, state, &resource, opts...)
   593  	if err != nil {
   594  		return nil, err
   595  	}
   596  	return &resource, nil
   597  }
   598  
   599  // Input properties used for looking up and filtering BucketLifecycleConfigurationV2 resources.
   600  type bucketLifecycleConfigurationV2State struct {
   601  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   602  	Bucket *string `pulumi:"bucket"`
   603  	// Account ID of the expected bucket owner. If the bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
   604  	ExpectedBucketOwner *string `pulumi:"expectedBucketOwner"`
   605  	// List of configuration blocks describing the rules managing the replication. See below.
   606  	Rules []BucketLifecycleConfigurationV2Rule `pulumi:"rules"`
   607  }
   608  
   609  type BucketLifecycleConfigurationV2State struct {
   610  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   611  	Bucket pulumi.StringPtrInput
   612  	// Account ID of the expected bucket owner. If the bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
   613  	ExpectedBucketOwner pulumi.StringPtrInput
   614  	// List of configuration blocks describing the rules managing the replication. See below.
   615  	Rules BucketLifecycleConfigurationV2RuleArrayInput
   616  }
   617  
   618  func (BucketLifecycleConfigurationV2State) ElementType() reflect.Type {
   619  	return reflect.TypeOf((*bucketLifecycleConfigurationV2State)(nil)).Elem()
   620  }
   621  
   622  type bucketLifecycleConfigurationV2Args struct {
   623  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   624  	Bucket string `pulumi:"bucket"`
   625  	// Account ID of the expected bucket owner. If the bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
   626  	ExpectedBucketOwner *string `pulumi:"expectedBucketOwner"`
   627  	// List of configuration blocks describing the rules managing the replication. See below.
   628  	Rules []BucketLifecycleConfigurationV2Rule `pulumi:"rules"`
   629  }
   630  
   631  // The set of arguments for constructing a BucketLifecycleConfigurationV2 resource.
   632  type BucketLifecycleConfigurationV2Args struct {
   633  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   634  	Bucket pulumi.StringInput
   635  	// Account ID of the expected bucket owner. If the bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
   636  	ExpectedBucketOwner pulumi.StringPtrInput
   637  	// List of configuration blocks describing the rules managing the replication. See below.
   638  	Rules BucketLifecycleConfigurationV2RuleArrayInput
   639  }
   640  
   641  func (BucketLifecycleConfigurationV2Args) ElementType() reflect.Type {
   642  	return reflect.TypeOf((*bucketLifecycleConfigurationV2Args)(nil)).Elem()
   643  }
   644  
   645  type BucketLifecycleConfigurationV2Input interface {
   646  	pulumi.Input
   647  
   648  	ToBucketLifecycleConfigurationV2Output() BucketLifecycleConfigurationV2Output
   649  	ToBucketLifecycleConfigurationV2OutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2Output
   650  }
   651  
   652  func (*BucketLifecycleConfigurationV2) ElementType() reflect.Type {
   653  	return reflect.TypeOf((**BucketLifecycleConfigurationV2)(nil)).Elem()
   654  }
   655  
   656  func (i *BucketLifecycleConfigurationV2) ToBucketLifecycleConfigurationV2Output() BucketLifecycleConfigurationV2Output {
   657  	return i.ToBucketLifecycleConfigurationV2OutputWithContext(context.Background())
   658  }
   659  
   660  func (i *BucketLifecycleConfigurationV2) ToBucketLifecycleConfigurationV2OutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2Output {
   661  	return pulumi.ToOutputWithContext(ctx, i).(BucketLifecycleConfigurationV2Output)
   662  }
   663  
   664  // BucketLifecycleConfigurationV2ArrayInput is an input type that accepts BucketLifecycleConfigurationV2Array and BucketLifecycleConfigurationV2ArrayOutput values.
   665  // You can construct a concrete instance of `BucketLifecycleConfigurationV2ArrayInput` via:
   666  //
   667  //	BucketLifecycleConfigurationV2Array{ BucketLifecycleConfigurationV2Args{...} }
   668  type BucketLifecycleConfigurationV2ArrayInput interface {
   669  	pulumi.Input
   670  
   671  	ToBucketLifecycleConfigurationV2ArrayOutput() BucketLifecycleConfigurationV2ArrayOutput
   672  	ToBucketLifecycleConfigurationV2ArrayOutputWithContext(context.Context) BucketLifecycleConfigurationV2ArrayOutput
   673  }
   674  
   675  type BucketLifecycleConfigurationV2Array []BucketLifecycleConfigurationV2Input
   676  
   677  func (BucketLifecycleConfigurationV2Array) ElementType() reflect.Type {
   678  	return reflect.TypeOf((*[]*BucketLifecycleConfigurationV2)(nil)).Elem()
   679  }
   680  
   681  func (i BucketLifecycleConfigurationV2Array) ToBucketLifecycleConfigurationV2ArrayOutput() BucketLifecycleConfigurationV2ArrayOutput {
   682  	return i.ToBucketLifecycleConfigurationV2ArrayOutputWithContext(context.Background())
   683  }
   684  
   685  func (i BucketLifecycleConfigurationV2Array) ToBucketLifecycleConfigurationV2ArrayOutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2ArrayOutput {
   686  	return pulumi.ToOutputWithContext(ctx, i).(BucketLifecycleConfigurationV2ArrayOutput)
   687  }
   688  
   689  // BucketLifecycleConfigurationV2MapInput is an input type that accepts BucketLifecycleConfigurationV2Map and BucketLifecycleConfigurationV2MapOutput values.
   690  // You can construct a concrete instance of `BucketLifecycleConfigurationV2MapInput` via:
   691  //
   692  //	BucketLifecycleConfigurationV2Map{ "key": BucketLifecycleConfigurationV2Args{...} }
   693  type BucketLifecycleConfigurationV2MapInput interface {
   694  	pulumi.Input
   695  
   696  	ToBucketLifecycleConfigurationV2MapOutput() BucketLifecycleConfigurationV2MapOutput
   697  	ToBucketLifecycleConfigurationV2MapOutputWithContext(context.Context) BucketLifecycleConfigurationV2MapOutput
   698  }
   699  
   700  type BucketLifecycleConfigurationV2Map map[string]BucketLifecycleConfigurationV2Input
   701  
   702  func (BucketLifecycleConfigurationV2Map) ElementType() reflect.Type {
   703  	return reflect.TypeOf((*map[string]*BucketLifecycleConfigurationV2)(nil)).Elem()
   704  }
   705  
   706  func (i BucketLifecycleConfigurationV2Map) ToBucketLifecycleConfigurationV2MapOutput() BucketLifecycleConfigurationV2MapOutput {
   707  	return i.ToBucketLifecycleConfigurationV2MapOutputWithContext(context.Background())
   708  }
   709  
   710  func (i BucketLifecycleConfigurationV2Map) ToBucketLifecycleConfigurationV2MapOutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2MapOutput {
   711  	return pulumi.ToOutputWithContext(ctx, i).(BucketLifecycleConfigurationV2MapOutput)
   712  }
   713  
   714  type BucketLifecycleConfigurationV2Output struct{ *pulumi.OutputState }
   715  
   716  func (BucketLifecycleConfigurationV2Output) ElementType() reflect.Type {
   717  	return reflect.TypeOf((**BucketLifecycleConfigurationV2)(nil)).Elem()
   718  }
   719  
   720  func (o BucketLifecycleConfigurationV2Output) ToBucketLifecycleConfigurationV2Output() BucketLifecycleConfigurationV2Output {
   721  	return o
   722  }
   723  
   724  func (o BucketLifecycleConfigurationV2Output) ToBucketLifecycleConfigurationV2OutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2Output {
   725  	return o
   726  }
   727  
   728  // Name of the source S3 bucket you want Amazon S3 to monitor.
   729  func (o BucketLifecycleConfigurationV2Output) Bucket() pulumi.StringOutput {
   730  	return o.ApplyT(func(v *BucketLifecycleConfigurationV2) pulumi.StringOutput { return v.Bucket }).(pulumi.StringOutput)
   731  }
   732  
   733  // Account ID of the expected bucket owner. If the bucket is owned by a different account, the request will fail with an HTTP 403 (Access Denied) error.
   734  func (o BucketLifecycleConfigurationV2Output) ExpectedBucketOwner() pulumi.StringPtrOutput {
   735  	return o.ApplyT(func(v *BucketLifecycleConfigurationV2) pulumi.StringPtrOutput { return v.ExpectedBucketOwner }).(pulumi.StringPtrOutput)
   736  }
   737  
   738  // List of configuration blocks describing the rules managing the replication. See below.
   739  func (o BucketLifecycleConfigurationV2Output) Rules() BucketLifecycleConfigurationV2RuleArrayOutput {
   740  	return o.ApplyT(func(v *BucketLifecycleConfigurationV2) BucketLifecycleConfigurationV2RuleArrayOutput { return v.Rules }).(BucketLifecycleConfigurationV2RuleArrayOutput)
   741  }
   742  
   743  type BucketLifecycleConfigurationV2ArrayOutput struct{ *pulumi.OutputState }
   744  
   745  func (BucketLifecycleConfigurationV2ArrayOutput) ElementType() reflect.Type {
   746  	return reflect.TypeOf((*[]*BucketLifecycleConfigurationV2)(nil)).Elem()
   747  }
   748  
   749  func (o BucketLifecycleConfigurationV2ArrayOutput) ToBucketLifecycleConfigurationV2ArrayOutput() BucketLifecycleConfigurationV2ArrayOutput {
   750  	return o
   751  }
   752  
   753  func (o BucketLifecycleConfigurationV2ArrayOutput) ToBucketLifecycleConfigurationV2ArrayOutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2ArrayOutput {
   754  	return o
   755  }
   756  
   757  func (o BucketLifecycleConfigurationV2ArrayOutput) Index(i pulumi.IntInput) BucketLifecycleConfigurationV2Output {
   758  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *BucketLifecycleConfigurationV2 {
   759  		return vs[0].([]*BucketLifecycleConfigurationV2)[vs[1].(int)]
   760  	}).(BucketLifecycleConfigurationV2Output)
   761  }
   762  
   763  type BucketLifecycleConfigurationV2MapOutput struct{ *pulumi.OutputState }
   764  
   765  func (BucketLifecycleConfigurationV2MapOutput) ElementType() reflect.Type {
   766  	return reflect.TypeOf((*map[string]*BucketLifecycleConfigurationV2)(nil)).Elem()
   767  }
   768  
   769  func (o BucketLifecycleConfigurationV2MapOutput) ToBucketLifecycleConfigurationV2MapOutput() BucketLifecycleConfigurationV2MapOutput {
   770  	return o
   771  }
   772  
   773  func (o BucketLifecycleConfigurationV2MapOutput) ToBucketLifecycleConfigurationV2MapOutputWithContext(ctx context.Context) BucketLifecycleConfigurationV2MapOutput {
   774  	return o
   775  }
   776  
   777  func (o BucketLifecycleConfigurationV2MapOutput) MapIndex(k pulumi.StringInput) BucketLifecycleConfigurationV2Output {
   778  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *BucketLifecycleConfigurationV2 {
   779  		return vs[0].(map[string]*BucketLifecycleConfigurationV2)[vs[1].(string)]
   780  	}).(BucketLifecycleConfigurationV2Output)
   781  }
   782  
   783  func init() {
   784  	pulumi.RegisterInputType(reflect.TypeOf((*BucketLifecycleConfigurationV2Input)(nil)).Elem(), &BucketLifecycleConfigurationV2{})
   785  	pulumi.RegisterInputType(reflect.TypeOf((*BucketLifecycleConfigurationV2ArrayInput)(nil)).Elem(), BucketLifecycleConfigurationV2Array{})
   786  	pulumi.RegisterInputType(reflect.TypeOf((*BucketLifecycleConfigurationV2MapInput)(nil)).Elem(), BucketLifecycleConfigurationV2Map{})
   787  	pulumi.RegisterOutputType(BucketLifecycleConfigurationV2Output{})
   788  	pulumi.RegisterOutputType(BucketLifecycleConfigurationV2ArrayOutput{})
   789  	pulumi.RegisterOutputType(BucketLifecycleConfigurationV2MapOutput{})
   790  }