github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/s3/bucketReplicationConfig.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 [replication configuration](http://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html).
    16  //
    17  // > **NOTE:** S3 Buckets only support a single replication configuration. Declaring multiple `s3.BucketReplicationConfig` resources to the same S3 Bucket will cause a perpetual difference in configuration.
    18  //
    19  // > This resource cannot be used with S3 directory buckets.
    20  //
    21  // ## Example Usage
    22  //
    23  // ### Using replication configuration
    24  //
    25  // <!--Start PulumiCodeChooser -->
    26  // ```go
    27  // package main
    28  //
    29  // import (
    30  //
    31  //	"fmt"
    32  //
    33  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam"
    34  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
    35  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    36  //
    37  // )
    38  //
    39  //	func main() {
    40  //		pulumi.Run(func(ctx *pulumi.Context) error {
    41  //			assumeRole, err := iam.GetPolicyDocument(ctx, &iam.GetPolicyDocumentArgs{
    42  //				Statements: []iam.GetPolicyDocumentStatement{
    43  //					{
    44  //						Effect: pulumi.StringRef("Allow"),
    45  //						Principals: []iam.GetPolicyDocumentStatementPrincipal{
    46  //							{
    47  //								Type: "Service",
    48  //								Identifiers: []string{
    49  //									"s3.amazonaws.com",
    50  //								},
    51  //							},
    52  //						},
    53  //						Actions: []string{
    54  //							"sts:AssumeRole",
    55  //						},
    56  //					},
    57  //				},
    58  //			}, nil)
    59  //			if err != nil {
    60  //				return err
    61  //			}
    62  //			replicationRole, err := iam.NewRole(ctx, "replication", &iam.RoleArgs{
    63  //				Name:             pulumi.String("tf-iam-role-replication-12345"),
    64  //				AssumeRolePolicy: pulumi.String(assumeRole.Json),
    65  //			})
    66  //			if err != nil {
    67  //				return err
    68  //			}
    69  //			destination, err := s3.NewBucketV2(ctx, "destination", &s3.BucketV2Args{
    70  //				Bucket: pulumi.String("tf-test-bucket-destination-12345"),
    71  //			})
    72  //			if err != nil {
    73  //				return err
    74  //			}
    75  //			source, err := s3.NewBucketV2(ctx, "source", &s3.BucketV2Args{
    76  //				Bucket: pulumi.String("tf-test-bucket-source-12345"),
    77  //			})
    78  //			if err != nil {
    79  //				return err
    80  //			}
    81  //			replication := iam.GetPolicyDocumentOutput(ctx, iam.GetPolicyDocumentOutputArgs{
    82  //				Statements: iam.GetPolicyDocumentStatementArray{
    83  //					&iam.GetPolicyDocumentStatementArgs{
    84  //						Effect: pulumi.String("Allow"),
    85  //						Actions: pulumi.StringArray{
    86  //							pulumi.String("s3:GetReplicationConfiguration"),
    87  //							pulumi.String("s3:ListBucket"),
    88  //						},
    89  //						Resources: pulumi.StringArray{
    90  //							source.Arn,
    91  //						},
    92  //					},
    93  //					&iam.GetPolicyDocumentStatementArgs{
    94  //						Effect: pulumi.String("Allow"),
    95  //						Actions: pulumi.StringArray{
    96  //							pulumi.String("s3:GetObjectVersionForReplication"),
    97  //							pulumi.String("s3:GetObjectVersionAcl"),
    98  //							pulumi.String("s3:GetObjectVersionTagging"),
    99  //						},
   100  //						Resources: pulumi.StringArray{
   101  //							source.Arn.ApplyT(func(arn string) (string, error) {
   102  //								return fmt.Sprintf("%v/*", arn), nil
   103  //							}).(pulumi.StringOutput),
   104  //						},
   105  //					},
   106  //					&iam.GetPolicyDocumentStatementArgs{
   107  //						Effect: pulumi.String("Allow"),
   108  //						Actions: pulumi.StringArray{
   109  //							pulumi.String("s3:ReplicateObject"),
   110  //							pulumi.String("s3:ReplicateDelete"),
   111  //							pulumi.String("s3:ReplicateTags"),
   112  //						},
   113  //						Resources: pulumi.StringArray{
   114  //							destination.Arn.ApplyT(func(arn string) (string, error) {
   115  //								return fmt.Sprintf("%v/*", arn), nil
   116  //							}).(pulumi.StringOutput),
   117  //						},
   118  //					},
   119  //				},
   120  //			}, nil)
   121  //			replicationPolicy, err := iam.NewPolicy(ctx, "replication", &iam.PolicyArgs{
   122  //				Name: pulumi.String("tf-iam-role-policy-replication-12345"),
   123  //				Policy: replication.ApplyT(func(replication iam.GetPolicyDocumentResult) (*string, error) {
   124  //					return &replication.Json, nil
   125  //				}).(pulumi.StringPtrOutput),
   126  //			})
   127  //			if err != nil {
   128  //				return err
   129  //			}
   130  //			_, err = iam.NewRolePolicyAttachment(ctx, "replication", &iam.RolePolicyAttachmentArgs{
   131  //				Role:      replicationRole.Name,
   132  //				PolicyArn: replicationPolicy.Arn,
   133  //			})
   134  //			if err != nil {
   135  //				return err
   136  //			}
   137  //			_, err = s3.NewBucketVersioningV2(ctx, "destination", &s3.BucketVersioningV2Args{
   138  //				Bucket: destination.ID(),
   139  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   140  //					Status: pulumi.String("Enabled"),
   141  //				},
   142  //			})
   143  //			if err != nil {
   144  //				return err
   145  //			}
   146  //			_, err = s3.NewBucketAclV2(ctx, "source_bucket_acl", &s3.BucketAclV2Args{
   147  //				Bucket: source.ID(),
   148  //				Acl:    pulumi.String("private"),
   149  //			})
   150  //			if err != nil {
   151  //				return err
   152  //			}
   153  //			sourceBucketVersioningV2, err := s3.NewBucketVersioningV2(ctx, "source", &s3.BucketVersioningV2Args{
   154  //				Bucket: source.ID(),
   155  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   156  //					Status: pulumi.String("Enabled"),
   157  //				},
   158  //			})
   159  //			if err != nil {
   160  //				return err
   161  //			}
   162  //			_, err = s3.NewBucketReplicationConfig(ctx, "replication", &s3.BucketReplicationConfigArgs{
   163  //				Role:   replicationRole.Arn,
   164  //				Bucket: source.ID(),
   165  //				Rules: s3.BucketReplicationConfigRuleArray{
   166  //					&s3.BucketReplicationConfigRuleArgs{
   167  //						Id: pulumi.String("foobar"),
   168  //						Filter: &s3.BucketReplicationConfigRuleFilterArgs{
   169  //							Prefix: pulumi.String("foo"),
   170  //						},
   171  //						Status: pulumi.String("Enabled"),
   172  //						Destination: &s3.BucketReplicationConfigRuleDestinationArgs{
   173  //							Bucket:       destination.Arn,
   174  //							StorageClass: pulumi.String("STANDARD"),
   175  //						},
   176  //					},
   177  //				},
   178  //			}, pulumi.DependsOn([]pulumi.Resource{
   179  //				sourceBucketVersioningV2,
   180  //			}))
   181  //			if err != nil {
   182  //				return err
   183  //			}
   184  //			return nil
   185  //		})
   186  //	}
   187  //
   188  // ```
   189  // <!--End PulumiCodeChooser -->
   190  //
   191  // ### Bi-Directional Replication
   192  //
   193  // <!--Start PulumiCodeChooser -->
   194  // ```go
   195  // package main
   196  //
   197  // import (
   198  //
   199  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/s3"
   200  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   201  //
   202  // )
   203  //
   204  //	func main() {
   205  //		pulumi.Run(func(ctx *pulumi.Context) error {
   206  //			// ... other configuration ...
   207  //			east, err := s3.NewBucketV2(ctx, "east", &s3.BucketV2Args{
   208  //				Bucket: pulumi.String("tf-test-bucket-east-12345"),
   209  //			})
   210  //			if err != nil {
   211  //				return err
   212  //			}
   213  //			eastBucketVersioningV2, err := s3.NewBucketVersioningV2(ctx, "east", &s3.BucketVersioningV2Args{
   214  //				Bucket: east.ID(),
   215  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   216  //					Status: pulumi.String("Enabled"),
   217  //				},
   218  //			})
   219  //			if err != nil {
   220  //				return err
   221  //			}
   222  //			west, err := s3.NewBucketV2(ctx, "west", &s3.BucketV2Args{
   223  //				Bucket: pulumi.String("tf-test-bucket-west-12345"),
   224  //			})
   225  //			if err != nil {
   226  //				return err
   227  //			}
   228  //			westBucketVersioningV2, err := s3.NewBucketVersioningV2(ctx, "west", &s3.BucketVersioningV2Args{
   229  //				Bucket: west.ID(),
   230  //				VersioningConfiguration: &s3.BucketVersioningV2VersioningConfigurationArgs{
   231  //					Status: pulumi.String("Enabled"),
   232  //				},
   233  //			})
   234  //			if err != nil {
   235  //				return err
   236  //			}
   237  //			_, err = s3.NewBucketReplicationConfig(ctx, "east_to_west", &s3.BucketReplicationConfigArgs{
   238  //				Role:   pulumi.Any(eastReplication.Arn),
   239  //				Bucket: east.ID(),
   240  //				Rules: s3.BucketReplicationConfigRuleArray{
   241  //					&s3.BucketReplicationConfigRuleArgs{
   242  //						Id: pulumi.String("foobar"),
   243  //						Filter: &s3.BucketReplicationConfigRuleFilterArgs{
   244  //							Prefix: pulumi.String("foo"),
   245  //						},
   246  //						Status: pulumi.String("Enabled"),
   247  //						Destination: &s3.BucketReplicationConfigRuleDestinationArgs{
   248  //							Bucket:       west.Arn,
   249  //							StorageClass: pulumi.String("STANDARD"),
   250  //						},
   251  //					},
   252  //				},
   253  //			}, pulumi.DependsOn([]pulumi.Resource{
   254  //				eastBucketVersioningV2,
   255  //			}))
   256  //			if err != nil {
   257  //				return err
   258  //			}
   259  //			_, err = s3.NewBucketReplicationConfig(ctx, "west_to_east", &s3.BucketReplicationConfigArgs{
   260  //				Role:   pulumi.Any(westReplication.Arn),
   261  //				Bucket: west.ID(),
   262  //				Rules: s3.BucketReplicationConfigRuleArray{
   263  //					&s3.BucketReplicationConfigRuleArgs{
   264  //						Id: pulumi.String("foobar"),
   265  //						Filter: &s3.BucketReplicationConfigRuleFilterArgs{
   266  //							Prefix: pulumi.String("foo"),
   267  //						},
   268  //						Status: pulumi.String("Enabled"),
   269  //						Destination: &s3.BucketReplicationConfigRuleDestinationArgs{
   270  //							Bucket:       east.Arn,
   271  //							StorageClass: pulumi.String("STANDARD"),
   272  //						},
   273  //					},
   274  //				},
   275  //			}, pulumi.DependsOn([]pulumi.Resource{
   276  //				westBucketVersioningV2,
   277  //			}))
   278  //			if err != nil {
   279  //				return err
   280  //			}
   281  //			return nil
   282  //		})
   283  //	}
   284  //
   285  // ```
   286  // <!--End PulumiCodeChooser -->
   287  //
   288  // ## Import
   289  //
   290  // Using `pulumi import`, import S3 bucket replication configuration using the `bucket`. For example:
   291  //
   292  // ```sh
   293  // $ pulumi import aws:s3/bucketReplicationConfig:BucketReplicationConfig replication bucket-name
   294  // ```
   295  type BucketReplicationConfig struct {
   296  	pulumi.CustomResourceState
   297  
   298  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   299  	Bucket pulumi.StringOutput `pulumi:"bucket"`
   300  	// ARN of the IAM role for Amazon S3 to assume when replicating the objects.
   301  	Role pulumi.StringOutput `pulumi:"role"`
   302  	// List of configuration blocks describing the rules managing the replication. See below.
   303  	Rules BucketReplicationConfigRuleArrayOutput `pulumi:"rules"`
   304  	// Token to allow replication to be enabled on an Object Lock-enabled bucket. You must contact AWS support for the bucket's "Object Lock token".
   305  	// For more details, see [Using S3 Object Lock with replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-replication).
   306  	Token pulumi.StringPtrOutput `pulumi:"token"`
   307  }
   308  
   309  // NewBucketReplicationConfig registers a new resource with the given unique name, arguments, and options.
   310  func NewBucketReplicationConfig(ctx *pulumi.Context,
   311  	name string, args *BucketReplicationConfigArgs, opts ...pulumi.ResourceOption) (*BucketReplicationConfig, error) {
   312  	if args == nil {
   313  		return nil, errors.New("missing one or more required arguments")
   314  	}
   315  
   316  	if args.Bucket == nil {
   317  		return nil, errors.New("invalid value for required argument 'Bucket'")
   318  	}
   319  	if args.Role == nil {
   320  		return nil, errors.New("invalid value for required argument 'Role'")
   321  	}
   322  	if args.Rules == nil {
   323  		return nil, errors.New("invalid value for required argument 'Rules'")
   324  	}
   325  	if args.Token != nil {
   326  		args.Token = pulumi.ToSecret(args.Token).(pulumi.StringPtrInput)
   327  	}
   328  	secrets := pulumi.AdditionalSecretOutputs([]string{
   329  		"token",
   330  	})
   331  	opts = append(opts, secrets)
   332  	opts = internal.PkgResourceDefaultOpts(opts)
   333  	var resource BucketReplicationConfig
   334  	err := ctx.RegisterResource("aws:s3/bucketReplicationConfig:BucketReplicationConfig", name, args, &resource, opts...)
   335  	if err != nil {
   336  		return nil, err
   337  	}
   338  	return &resource, nil
   339  }
   340  
   341  // GetBucketReplicationConfig gets an existing BucketReplicationConfig resource's state with the given name, ID, and optional
   342  // state properties that are used to uniquely qualify the lookup (nil if not required).
   343  func GetBucketReplicationConfig(ctx *pulumi.Context,
   344  	name string, id pulumi.IDInput, state *BucketReplicationConfigState, opts ...pulumi.ResourceOption) (*BucketReplicationConfig, error) {
   345  	var resource BucketReplicationConfig
   346  	err := ctx.ReadResource("aws:s3/bucketReplicationConfig:BucketReplicationConfig", name, id, state, &resource, opts...)
   347  	if err != nil {
   348  		return nil, err
   349  	}
   350  	return &resource, nil
   351  }
   352  
   353  // Input properties used for looking up and filtering BucketReplicationConfig resources.
   354  type bucketReplicationConfigState struct {
   355  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   356  	Bucket *string `pulumi:"bucket"`
   357  	// ARN of the IAM role for Amazon S3 to assume when replicating the objects.
   358  	Role *string `pulumi:"role"`
   359  	// List of configuration blocks describing the rules managing the replication. See below.
   360  	Rules []BucketReplicationConfigRule `pulumi:"rules"`
   361  	// Token to allow replication to be enabled on an Object Lock-enabled bucket. You must contact AWS support for the bucket's "Object Lock token".
   362  	// For more details, see [Using S3 Object Lock with replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-replication).
   363  	Token *string `pulumi:"token"`
   364  }
   365  
   366  type BucketReplicationConfigState struct {
   367  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   368  	Bucket pulumi.StringPtrInput
   369  	// ARN of the IAM role for Amazon S3 to assume when replicating the objects.
   370  	Role pulumi.StringPtrInput
   371  	// List of configuration blocks describing the rules managing the replication. See below.
   372  	Rules BucketReplicationConfigRuleArrayInput
   373  	// Token to allow replication to be enabled on an Object Lock-enabled bucket. You must contact AWS support for the bucket's "Object Lock token".
   374  	// For more details, see [Using S3 Object Lock with replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-replication).
   375  	Token pulumi.StringPtrInput
   376  }
   377  
   378  func (BucketReplicationConfigState) ElementType() reflect.Type {
   379  	return reflect.TypeOf((*bucketReplicationConfigState)(nil)).Elem()
   380  }
   381  
   382  type bucketReplicationConfigArgs struct {
   383  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   384  	Bucket string `pulumi:"bucket"`
   385  	// ARN of the IAM role for Amazon S3 to assume when replicating the objects.
   386  	Role string `pulumi:"role"`
   387  	// List of configuration blocks describing the rules managing the replication. See below.
   388  	Rules []BucketReplicationConfigRule `pulumi:"rules"`
   389  	// Token to allow replication to be enabled on an Object Lock-enabled bucket. You must contact AWS support for the bucket's "Object Lock token".
   390  	// For more details, see [Using S3 Object Lock with replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-replication).
   391  	Token *string `pulumi:"token"`
   392  }
   393  
   394  // The set of arguments for constructing a BucketReplicationConfig resource.
   395  type BucketReplicationConfigArgs struct {
   396  	// Name of the source S3 bucket you want Amazon S3 to monitor.
   397  	Bucket pulumi.StringInput
   398  	// ARN of the IAM role for Amazon S3 to assume when replicating the objects.
   399  	Role pulumi.StringInput
   400  	// List of configuration blocks describing the rules managing the replication. See below.
   401  	Rules BucketReplicationConfigRuleArrayInput
   402  	// Token to allow replication to be enabled on an Object Lock-enabled bucket. You must contact AWS support for the bucket's "Object Lock token".
   403  	// For more details, see [Using S3 Object Lock with replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-replication).
   404  	Token pulumi.StringPtrInput
   405  }
   406  
   407  func (BucketReplicationConfigArgs) ElementType() reflect.Type {
   408  	return reflect.TypeOf((*bucketReplicationConfigArgs)(nil)).Elem()
   409  }
   410  
   411  type BucketReplicationConfigInput interface {
   412  	pulumi.Input
   413  
   414  	ToBucketReplicationConfigOutput() BucketReplicationConfigOutput
   415  	ToBucketReplicationConfigOutputWithContext(ctx context.Context) BucketReplicationConfigOutput
   416  }
   417  
   418  func (*BucketReplicationConfig) ElementType() reflect.Type {
   419  	return reflect.TypeOf((**BucketReplicationConfig)(nil)).Elem()
   420  }
   421  
   422  func (i *BucketReplicationConfig) ToBucketReplicationConfigOutput() BucketReplicationConfigOutput {
   423  	return i.ToBucketReplicationConfigOutputWithContext(context.Background())
   424  }
   425  
   426  func (i *BucketReplicationConfig) ToBucketReplicationConfigOutputWithContext(ctx context.Context) BucketReplicationConfigOutput {
   427  	return pulumi.ToOutputWithContext(ctx, i).(BucketReplicationConfigOutput)
   428  }
   429  
   430  // BucketReplicationConfigArrayInput is an input type that accepts BucketReplicationConfigArray and BucketReplicationConfigArrayOutput values.
   431  // You can construct a concrete instance of `BucketReplicationConfigArrayInput` via:
   432  //
   433  //	BucketReplicationConfigArray{ BucketReplicationConfigArgs{...} }
   434  type BucketReplicationConfigArrayInput interface {
   435  	pulumi.Input
   436  
   437  	ToBucketReplicationConfigArrayOutput() BucketReplicationConfigArrayOutput
   438  	ToBucketReplicationConfigArrayOutputWithContext(context.Context) BucketReplicationConfigArrayOutput
   439  }
   440  
   441  type BucketReplicationConfigArray []BucketReplicationConfigInput
   442  
   443  func (BucketReplicationConfigArray) ElementType() reflect.Type {
   444  	return reflect.TypeOf((*[]*BucketReplicationConfig)(nil)).Elem()
   445  }
   446  
   447  func (i BucketReplicationConfigArray) ToBucketReplicationConfigArrayOutput() BucketReplicationConfigArrayOutput {
   448  	return i.ToBucketReplicationConfigArrayOutputWithContext(context.Background())
   449  }
   450  
   451  func (i BucketReplicationConfigArray) ToBucketReplicationConfigArrayOutputWithContext(ctx context.Context) BucketReplicationConfigArrayOutput {
   452  	return pulumi.ToOutputWithContext(ctx, i).(BucketReplicationConfigArrayOutput)
   453  }
   454  
   455  // BucketReplicationConfigMapInput is an input type that accepts BucketReplicationConfigMap and BucketReplicationConfigMapOutput values.
   456  // You can construct a concrete instance of `BucketReplicationConfigMapInput` via:
   457  //
   458  //	BucketReplicationConfigMap{ "key": BucketReplicationConfigArgs{...} }
   459  type BucketReplicationConfigMapInput interface {
   460  	pulumi.Input
   461  
   462  	ToBucketReplicationConfigMapOutput() BucketReplicationConfigMapOutput
   463  	ToBucketReplicationConfigMapOutputWithContext(context.Context) BucketReplicationConfigMapOutput
   464  }
   465  
   466  type BucketReplicationConfigMap map[string]BucketReplicationConfigInput
   467  
   468  func (BucketReplicationConfigMap) ElementType() reflect.Type {
   469  	return reflect.TypeOf((*map[string]*BucketReplicationConfig)(nil)).Elem()
   470  }
   471  
   472  func (i BucketReplicationConfigMap) ToBucketReplicationConfigMapOutput() BucketReplicationConfigMapOutput {
   473  	return i.ToBucketReplicationConfigMapOutputWithContext(context.Background())
   474  }
   475  
   476  func (i BucketReplicationConfigMap) ToBucketReplicationConfigMapOutputWithContext(ctx context.Context) BucketReplicationConfigMapOutput {
   477  	return pulumi.ToOutputWithContext(ctx, i).(BucketReplicationConfigMapOutput)
   478  }
   479  
   480  type BucketReplicationConfigOutput struct{ *pulumi.OutputState }
   481  
   482  func (BucketReplicationConfigOutput) ElementType() reflect.Type {
   483  	return reflect.TypeOf((**BucketReplicationConfig)(nil)).Elem()
   484  }
   485  
   486  func (o BucketReplicationConfigOutput) ToBucketReplicationConfigOutput() BucketReplicationConfigOutput {
   487  	return o
   488  }
   489  
   490  func (o BucketReplicationConfigOutput) ToBucketReplicationConfigOutputWithContext(ctx context.Context) BucketReplicationConfigOutput {
   491  	return o
   492  }
   493  
   494  // Name of the source S3 bucket you want Amazon S3 to monitor.
   495  func (o BucketReplicationConfigOutput) Bucket() pulumi.StringOutput {
   496  	return o.ApplyT(func(v *BucketReplicationConfig) pulumi.StringOutput { return v.Bucket }).(pulumi.StringOutput)
   497  }
   498  
   499  // ARN of the IAM role for Amazon S3 to assume when replicating the objects.
   500  func (o BucketReplicationConfigOutput) Role() pulumi.StringOutput {
   501  	return o.ApplyT(func(v *BucketReplicationConfig) pulumi.StringOutput { return v.Role }).(pulumi.StringOutput)
   502  }
   503  
   504  // List of configuration blocks describing the rules managing the replication. See below.
   505  func (o BucketReplicationConfigOutput) Rules() BucketReplicationConfigRuleArrayOutput {
   506  	return o.ApplyT(func(v *BucketReplicationConfig) BucketReplicationConfigRuleArrayOutput { return v.Rules }).(BucketReplicationConfigRuleArrayOutput)
   507  }
   508  
   509  // Token to allow replication to be enabled on an Object Lock-enabled bucket. You must contact AWS support for the bucket's "Object Lock token".
   510  // For more details, see [Using S3 Object Lock with replication](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-managing.html#object-lock-managing-replication).
   511  func (o BucketReplicationConfigOutput) Token() pulumi.StringPtrOutput {
   512  	return o.ApplyT(func(v *BucketReplicationConfig) pulumi.StringPtrOutput { return v.Token }).(pulumi.StringPtrOutput)
   513  }
   514  
   515  type BucketReplicationConfigArrayOutput struct{ *pulumi.OutputState }
   516  
   517  func (BucketReplicationConfigArrayOutput) ElementType() reflect.Type {
   518  	return reflect.TypeOf((*[]*BucketReplicationConfig)(nil)).Elem()
   519  }
   520  
   521  func (o BucketReplicationConfigArrayOutput) ToBucketReplicationConfigArrayOutput() BucketReplicationConfigArrayOutput {
   522  	return o
   523  }
   524  
   525  func (o BucketReplicationConfigArrayOutput) ToBucketReplicationConfigArrayOutputWithContext(ctx context.Context) BucketReplicationConfigArrayOutput {
   526  	return o
   527  }
   528  
   529  func (o BucketReplicationConfigArrayOutput) Index(i pulumi.IntInput) BucketReplicationConfigOutput {
   530  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *BucketReplicationConfig {
   531  		return vs[0].([]*BucketReplicationConfig)[vs[1].(int)]
   532  	}).(BucketReplicationConfigOutput)
   533  }
   534  
   535  type BucketReplicationConfigMapOutput struct{ *pulumi.OutputState }
   536  
   537  func (BucketReplicationConfigMapOutput) ElementType() reflect.Type {
   538  	return reflect.TypeOf((*map[string]*BucketReplicationConfig)(nil)).Elem()
   539  }
   540  
   541  func (o BucketReplicationConfigMapOutput) ToBucketReplicationConfigMapOutput() BucketReplicationConfigMapOutput {
   542  	return o
   543  }
   544  
   545  func (o BucketReplicationConfigMapOutput) ToBucketReplicationConfigMapOutputWithContext(ctx context.Context) BucketReplicationConfigMapOutput {
   546  	return o
   547  }
   548  
   549  func (o BucketReplicationConfigMapOutput) MapIndex(k pulumi.StringInput) BucketReplicationConfigOutput {
   550  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *BucketReplicationConfig {
   551  		return vs[0].(map[string]*BucketReplicationConfig)[vs[1].(string)]
   552  	}).(BucketReplicationConfigOutput)
   553  }
   554  
   555  func init() {
   556  	pulumi.RegisterInputType(reflect.TypeOf((*BucketReplicationConfigInput)(nil)).Elem(), &BucketReplicationConfig{})
   557  	pulumi.RegisterInputType(reflect.TypeOf((*BucketReplicationConfigArrayInput)(nil)).Elem(), BucketReplicationConfigArray{})
   558  	pulumi.RegisterInputType(reflect.TypeOf((*BucketReplicationConfigMapInput)(nil)).Elem(), BucketReplicationConfigMap{})
   559  	pulumi.RegisterOutputType(BucketReplicationConfigOutput{})
   560  	pulumi.RegisterOutputType(BucketReplicationConfigArrayOutput{})
   561  	pulumi.RegisterOutputType(BucketReplicationConfigMapOutput{})
   562  }