Package com.pulumi.aws.s3
Class BucketReplicationConfig
- java.lang.Object
-
- com.pulumi.resources.Resource
-
- com.pulumi.resources.CustomResource
-
- com.pulumi.aws.s3.BucketReplicationConfig
-
public class BucketReplicationConfig extends com.pulumi.resources.CustomResourceProvides 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)
### 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() .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()); } }
### Bi-Directional Replicationpackage 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()); } }
## Import Using `pulumi import`, import S3 bucket replication configuration using the `bucket`. For example: ```sh $ pulumi import aws:s3/bucketReplicationConfig:BucketReplicationConfig replication bucket-name ```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()); } }
-
-
Constructor Summary
Constructors Constructor Description BucketReplicationConfig(java.lang.String name)BucketReplicationConfig(java.lang.String name, BucketReplicationConfigArgs args)BucketReplicationConfig(java.lang.String name, BucketReplicationConfigArgs args, com.pulumi.resources.CustomResourceOptions options)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description com.pulumi.core.Output<java.lang.String>bucket()static BucketReplicationConfigget(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()
-
-
-
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.
-
-