Class BucketReplicationConfig


  • public class BucketReplicationConfig
    extends com.pulumi.resources.CustomResource
    Provides an independent configuration resource for S3 bucket [replication configuration](http://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html). > **NOTE:** S3 Buckets only support a single replication configuration. Declaring multiple `aws.s3.BucketReplicationConfig` resources to the same S3 Bucket will cause a perpetual difference in configuration. > This resource cannot be used with S3 directory buckets. ## Example Usage ### Using replication configuration ### Terraform AWS Provider v5 (and below)
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.iam.IamFunctions;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementPrincipalArgs;
     import com.pulumi.aws.iam.Role;
     import com.pulumi.aws.iam.RoleArgs;
     import com.pulumi.aws.s3.Bucket;
     import com.pulumi.aws.s3.BucketArgs;
     import com.pulumi.aws.iam.Policy;
     import com.pulumi.aws.iam.PolicyArgs;
     import com.pulumi.aws.iam.RolePolicyAttachment;
     import com.pulumi.aws.iam.RolePolicyAttachmentArgs;
     import com.pulumi.aws.s3.BucketVersioning;
     import com.pulumi.aws.s3.BucketVersioningArgs;
     import com.pulumi.aws.s3.inputs.BucketVersioningVersioningConfigurationArgs;
     import com.pulumi.aws.s3.BucketAcl;
     import com.pulumi.aws.s3.BucketAclArgs;
     import com.pulumi.aws.s3.BucketReplicationConfig;
     import com.pulumi.aws.s3.BucketReplicationConfigArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleFilterArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleDestinationArgs;
     import com.pulumi.resources.CustomResourceOptions;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             final var assumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(GetPolicyDocumentStatementArgs.builder()
                     .principals(GetPolicyDocumentStatementPrincipalArgs.builder()
                         .type("Service")
                         .identifiers("s3.amazonaws.com")
                         .build())
                     .effect("Allow")
                     .actions("sts:AssumeRole")
                     .build())
                 .build());
     
             var replicationRole = new Role("replicationRole", RoleArgs.builder()
                 .name("tf-iam-role-replication-12345")
                 .assumeRolePolicy(assumeRole.json())
                 .build());
     
             var destination = new Bucket("destination", BucketArgs.builder()
                 .bucket("tf-test-bucket-destination-12345")
                 .build());
     
             var source = new Bucket("source", BucketArgs.builder()
                 .bucket("tf-test-bucket-source-12345")
                 .build());
     
             final var replication = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(            
                     GetPolicyDocumentStatementArgs.builder()
                         .effect("Allow")
                         .actions(                    
                             "s3:GetReplicationConfiguration",
                             "s3:ListBucket")
                         .resources(source.arn())
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .effect("Allow")
                         .actions(                    
                             "s3:GetObjectVersionForReplication",
                             "s3:GetObjectVersionAcl",
                             "s3:GetObjectVersionTagging")
                         .resources(source.arn().applyValue(_arn -> String.format("%s/*", _arn)))
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .effect("Allow")
                         .actions(                    
                             "s3:ReplicateObject",
                             "s3:ReplicateDelete",
                             "s3:ReplicateTags")
                         .resources(destination.arn().applyValue(_arn -> String.format("%s/*", _arn)))
                         .build())
                 .build());
     
             var replicationPolicy = new Policy("replicationPolicy", PolicyArgs.builder()
                 .name("tf-iam-role-policy-replication-12345")
                 .policy(replication.applyValue(_replication -> _replication.json()))
                 .build());
     
             var replicationRolePolicyAttachment = new RolePolicyAttachment("replicationRolePolicyAttachment", RolePolicyAttachmentArgs.builder()
                 .role(replicationRole.name())
                 .policyArn(replicationPolicy.arn())
                 .build());
     
             var destinationBucketVersioning = new BucketVersioning("destinationBucketVersioning", BucketVersioningArgs.builder()
                 .versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
                     .status("Enabled")
                     .build())
                 .bucket(destination.id())
                 .build());
     
             var sourceBucketAcl = new BucketAcl("sourceBucketAcl", BucketAclArgs.builder()
                 .bucket(source.id())
                 .acl("private")
                 .build());
     
             var sourceBucketVersioning = new BucketVersioning("sourceBucketVersioning", BucketVersioningArgs.builder()
                 .versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
                     .status("Enabled")
                     .build())
                 .bucket(source.id())
                 .build());
     
             var replicationBucketReplicationConfig = new BucketReplicationConfig("replicationBucketReplicationConfig", BucketReplicationConfigArgs.builder()
                 .rules(BucketReplicationConfigRuleArgs.builder()
                     .filter(BucketReplicationConfigRuleFilterArgs.builder()
                         .prefix("example")
                         .build())
                     .destination(BucketReplicationConfigRuleDestinationArgs.builder()
                         .bucket(destination.arn())
                         .storageClass("STANDARD")
                         .build())
                     .id("examplerule")
                     .status("Enabled")
                     .build())
                 .role(replicationRole.arn())
                 .bucket(source.id())
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(sourceBucketVersioning)
                     .build());
     
         }
     }
     
     
    ### Terraform AWS Provider v6 (and above)
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.iam.IamFunctions;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementArgs;
     import com.pulumi.aws.iam.inputs.GetPolicyDocumentStatementPrincipalArgs;
     import com.pulumi.aws.iam.Role;
     import com.pulumi.aws.iam.RoleArgs;
     import com.pulumi.aws.s3.Bucket;
     import com.pulumi.aws.s3.BucketArgs;
     import com.pulumi.aws.iam.Policy;
     import com.pulumi.aws.iam.PolicyArgs;
     import com.pulumi.aws.iam.RolePolicyAttachment;
     import com.pulumi.aws.iam.RolePolicyAttachmentArgs;
     import com.pulumi.aws.s3.BucketVersioning;
     import com.pulumi.aws.s3.BucketVersioningArgs;
     import com.pulumi.aws.s3.inputs.BucketVersioningVersioningConfigurationArgs;
     import com.pulumi.aws.s3.BucketAcl;
     import com.pulumi.aws.s3.BucketAclArgs;
     import com.pulumi.aws.s3.BucketReplicationConfig;
     import com.pulumi.aws.s3.BucketReplicationConfigArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleFilterArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleDestinationArgs;
     import com.pulumi.resources.CustomResourceOptions;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             final var assumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(GetPolicyDocumentStatementArgs.builder()
                     .principals(GetPolicyDocumentStatementPrincipalArgs.builder()
                         .type("Service")
                         .identifiers("s3.amazonaws.com")
                         .build())
                     .effect("Allow")
                     .actions("sts:AssumeRole")
                     .build())
                 .build());
     
             var replicationRole = new Role("replicationRole", RoleArgs.builder()
                 .name("tf-iam-role-replication-12345")
                 .assumeRolePolicy(assumeRole.json())
                 .build());
     
             var destination = new Bucket("destination", BucketArgs.builder()
                 .bucket("tf-test-bucket-destination-12345")
                 .build());
     
             var source = new Bucket("source", BucketArgs.builder()
                 .region("eu-central-1")
                 .bucket("tf-test-bucket-source-12345")
                 .build());
     
             final var replication = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()
                 .statements(            
                     GetPolicyDocumentStatementArgs.builder()
                         .effect("Allow")
                         .actions(                    
                             "s3:GetReplicationConfiguration",
                             "s3:ListBucket")
                         .resources(source.arn())
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .effect("Allow")
                         .actions(                    
                             "s3:GetObjectVersionForReplication",
                             "s3:GetObjectVersionAcl",
                             "s3:GetObjectVersionTagging")
                         .resources(source.arn().applyValue(_arn -> String.format("%s/*", _arn)))
                         .build(),
                     GetPolicyDocumentStatementArgs.builder()
                         .effect("Allow")
                         .actions(                    
                             "s3:ReplicateObject",
                             "s3:ReplicateDelete",
                             "s3:ReplicateTags")
                         .resources(destination.arn().applyValue(_arn -> String.format("%s/*", _arn)))
                         .build())
                 .build());
     
             var replicationPolicy = new Policy("replicationPolicy", PolicyArgs.builder()
                 .name("tf-iam-role-policy-replication-12345")
                 .policy(replication.applyValue(_replication -> _replication.json()))
                 .build());
     
             var replicationRolePolicyAttachment = new RolePolicyAttachment("replicationRolePolicyAttachment", RolePolicyAttachmentArgs.builder()
                 .role(replicationRole.name())
                 .policyArn(replicationPolicy.arn())
                 .build());
     
             var destinationBucketVersioning = new BucketVersioning("destinationBucketVersioning", BucketVersioningArgs.builder()
                 .versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
                     .status("Enabled")
                     .build())
                 .bucket(destination.id())
                 .build());
     
             var sourceBucketAcl = new BucketAcl("sourceBucketAcl", BucketAclArgs.builder()
                 .region("eu-central-1")
                 .bucket(source.id())
                 .acl("private")
                 .build());
     
             var sourceBucketVersioning = new BucketVersioning("sourceBucketVersioning", BucketVersioningArgs.builder()
                 .versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
                     .status("Enabled")
                     .build())
                 .region("eu-central-1")
                 .bucket(source.id())
                 .build());
     
             var replicationBucketReplicationConfig = new BucketReplicationConfig("replicationBucketReplicationConfig", BucketReplicationConfigArgs.builder()
                 .rules(BucketReplicationConfigRuleArgs.builder()
                     .filter(BucketReplicationConfigRuleFilterArgs.builder()
                         .prefix("example")
                         .build())
                     .destination(BucketReplicationConfigRuleDestinationArgs.builder()
                         .bucket(destination.arn())
                         .storageClass("STANDARD")
                         .build())
                     .id("examplerule")
                     .status("Enabled")
                     .build())
                 .region("eu-central-1")
                 .role(replicationRole.arn())
                 .bucket(source.id())
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(sourceBucketVersioning)
                     .build());
     
         }
     }
     
     
    ### Bi-Directional Replication
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.s3.Bucket;
     import com.pulumi.aws.s3.BucketArgs;
     import com.pulumi.aws.s3.BucketVersioning;
     import com.pulumi.aws.s3.BucketVersioningArgs;
     import com.pulumi.aws.s3.inputs.BucketVersioningVersioningConfigurationArgs;
     import com.pulumi.aws.s3.BucketReplicationConfig;
     import com.pulumi.aws.s3.BucketReplicationConfigArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleFilterArgs;
     import com.pulumi.aws.s3.inputs.BucketReplicationConfigRuleDestinationArgs;
     import com.pulumi.resources.CustomResourceOptions;
     import java.util.ArrayList;
     import java.util.Arrays;
     import java.util.Map;
     import java.io.File;
     import java.nio.file.Files;
     import java.nio.file.Paths;
     
     public class App {
         public static void main(String[] args) {
             Pulumi.run(App::stack);
         }
     
         public static void stack(Context ctx) {
             // ... other configuration ...
             var east = new Bucket("east", BucketArgs.builder()
                 .bucket("tf-test-bucket-east-12345")
                 .build());
     
             var eastBucketVersioning = new BucketVersioning("eastBucketVersioning", BucketVersioningArgs.builder()
                 .versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
                     .status("Enabled")
                     .build())
                 .bucket(east.id())
                 .build());
     
             var west = new Bucket("west", BucketArgs.builder()
                 .bucket("tf-test-bucket-west-12345")
                 .build());
     
             var westBucketVersioning = new BucketVersioning("westBucketVersioning", BucketVersioningArgs.builder()
                 .versioningConfiguration(BucketVersioningVersioningConfigurationArgs.builder()
                     .status("Enabled")
                     .build())
                 .bucket(west.id())
                 .build());
     
             var eastToWest = new BucketReplicationConfig("eastToWest", BucketReplicationConfigArgs.builder()
                 .rules(BucketReplicationConfigRuleArgs.builder()
                     .filter(BucketReplicationConfigRuleFilterArgs.builder()
                         .prefix("foo")
                         .build())
                     .destination(BucketReplicationConfigRuleDestinationArgs.builder()
                         .bucket(west.arn())
                         .storageClass("STANDARD")
                         .build())
                     .id("foobar")
                     .status("Enabled")
                     .build())
                 .role(eastReplication.arn())
                 .bucket(east.id())
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(eastBucketVersioning)
                     .build());
     
             var westToEast = new BucketReplicationConfig("westToEast", BucketReplicationConfigArgs.builder()
                 .rules(BucketReplicationConfigRuleArgs.builder()
                     .filter(BucketReplicationConfigRuleFilterArgs.builder()
                         .prefix("foo")
                         .build())
                     .destination(BucketReplicationConfigRuleDestinationArgs.builder()
                         .bucket(east.arn())
                         .storageClass("STANDARD")
                         .build())
                     .id("foobar")
                     .status("Enabled")
                     .build())
                 .role(westReplication.arn())
                 .bucket(west.id())
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(westBucketVersioning)
                     .build());
     
         }
     }
     
     
    ## Import Using `pulumi import`, import S3 bucket replication configuration using the `bucket`. For example: ```sh $ pulumi import aws:s3/bucketReplicationConfig:BucketReplicationConfig replication bucket-name ```
    • Nested Class Summary

      • Nested classes/interfaces inherited from class com.pulumi.resources.CustomResource

        com.pulumi.resources.CustomResource.CustomResourceInternal
      • Nested classes/interfaces inherited from class com.pulumi.resources.Resource

        com.pulumi.resources.Resource.LazyField<T extends java.lang.Object>, com.pulumi.resources.Resource.LazyFields, com.pulumi.resources.Resource.ResourceInternal
    • Field Summary

      • Fields inherited from class com.pulumi.resources.Resource

        childResources, remote
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      com.pulumi.core.Output<java.lang.String> bucket()  
      static BucketReplicationConfig get​(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, BucketReplicationConfigState state, com.pulumi.resources.CustomResourceOptions options)
      Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
      com.pulumi.core.Output<java.lang.String> region()  
      com.pulumi.core.Output<java.lang.String> role()  
      com.pulumi.core.Output<java.util.List<BucketReplicationConfigRule>> rules()  
      com.pulumi.core.Output<java.util.Optional<java.lang.String>> token()  
      • Methods inherited from class com.pulumi.resources.CustomResource

        getId, id, idFuture
      • Methods inherited from class com.pulumi.resources.Resource

        getChildResources, getResourceName, getResourceType, getUrn, pulumiChildResources, pulumiResourceName, pulumiResourceType, urn
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • BucketReplicationConfig

        public BucketReplicationConfig​(java.lang.String name)
        Parameters:
        name - The _unique_ name of the resulting resource.
      • BucketReplicationConfig

        public BucketReplicationConfig​(java.lang.String name,
                                       BucketReplicationConfigArgs args)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
      • BucketReplicationConfig

        public BucketReplicationConfig​(java.lang.String name,
                                       BucketReplicationConfigArgs args,
                                       @Nullable
                                       com.pulumi.resources.CustomResourceOptions options)
        Parameters:
        name - The _unique_ name of the resulting resource.
        args - The arguments to use to populate this resource's properties.
        options - A bag of options that control this resource's behavior.
    • Method Detail

      • bucket

        public com.pulumi.core.Output<java.lang.String> bucket()
        Returns:
        Name of the source S3 bucket you want Amazon S3 to monitor.
      • region

        public com.pulumi.core.Output<java.lang.String> region()
        Returns:
        Region where this resource will be [managed](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints). Defaults to the Region set in the provider configuration.
      • role

        public com.pulumi.core.Output<java.lang.String> role()
        Returns:
        ARN of the IAM role for Amazon S3 to assume when replicating the objects.
      • rules

        public com.pulumi.core.Output<java.util.List<BucketReplicationConfigRule>> rules()
        Returns:
        List of configuration blocks describing the rules managing the replication. See below.
      • token

        public com.pulumi.core.Output<java.util.Optional<java.lang.String>> token()
        Returns:
        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". 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).
      • get

        public static BucketReplicationConfig get​(java.lang.String name,
                                                  com.pulumi.core.Output<java.lang.String> id,
                                                  @Nullable
                                                  BucketReplicationConfigState state,
                                                  @Nullable
                                                  com.pulumi.resources.CustomResourceOptions options)
        Get an existing Host resource's state with the given name, ID, and optional extra properties used to qualify the lookup.
        Parameters:
        name - The _unique_ name of the resulting resource.
        id - The _unique_ provider ID of the resource to lookup.
        state -
        options - Optional settings to control the behavior of the CustomResource.