Class GlobalCluster


  • public class GlobalCluster
    extends com.pulumi.resources.CustomResource
    Manages an RDS Global Cluster, which is an Aurora global database spread across multiple regions. The global database contains a single primary cluster with read-write capability, and a read-only secondary cluster that receives data from the primary cluster through high-speed replication performed by the Aurora storage subsystem. More information about Aurora global databases can be found in the [Aurora User Guide](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database-creating). ## Example Usage ### New MySQL Global Cluster
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.rds.GlobalCluster;
     import com.pulumi.aws.rds.GlobalClusterArgs;
     import com.pulumi.aws.rds.Cluster;
     import com.pulumi.aws.rds.ClusterArgs;
     import com.pulumi.aws.rds.ClusterInstance;
     import com.pulumi.aws.rds.ClusterInstanceArgs;
     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) {
             var example = new GlobalCluster("example", GlobalClusterArgs.builder()
                 .globalClusterIdentifier("global-test")
                 .engine("aurora")
                 .engineVersion("5.6.mysql_aurora.1.22.2")
                 .databaseName("example_db")
                 .build());
     
             var primary = new Cluster("primary", ClusterArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .clusterIdentifier("test-primary-cluster")
                 .masterUsername("username")
                 .masterPassword("somepass123")
                 .databaseName("example_db")
                 .globalClusterIdentifier(example.id())
                 .dbSubnetGroupName("default")
                 .build());
     
             var primaryClusterInstance = new ClusterInstance("primaryClusterInstance", ClusterInstanceArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .identifier("test-primary-cluster-instance")
                 .clusterIdentifier(primary.id())
                 .instanceClass("db.r4.large")
                 .dbSubnetGroupName("default")
                 .build());
     
             var secondary = new Cluster("secondary", ClusterArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .clusterIdentifier("test-secondary-cluster")
                 .globalClusterIdentifier(example.id())
                 .dbSubnetGroupName("default")
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(primaryClusterInstance)
                     .ignoreChanges("replicationSourceIdentifier")
                     .build());
     
             var secondaryClusterInstance = new ClusterInstance("secondaryClusterInstance", ClusterInstanceArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .identifier("test-secondary-cluster-instance")
                 .clusterIdentifier(secondary.id())
                 .instanceClass("db.r4.large")
                 .dbSubnetGroupName("default")
                 .build());
     
         }
     }
     
     
    ### New PostgreSQL Global Cluster
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.rds.GlobalCluster;
     import com.pulumi.aws.rds.GlobalClusterArgs;
     import com.pulumi.aws.rds.Cluster;
     import com.pulumi.aws.rds.ClusterArgs;
     import com.pulumi.aws.rds.ClusterInstance;
     import com.pulumi.aws.rds.ClusterInstanceArgs;
     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) {
             var example = new GlobalCluster("example", GlobalClusterArgs.builder()
                 .globalClusterIdentifier("global-test")
                 .engine("aurora-postgresql")
                 .engineVersion("11.9")
                 .databaseName("example_db")
                 .build());
     
             var primary = new Cluster("primary", ClusterArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .clusterIdentifier("test-primary-cluster")
                 .masterUsername("username")
                 .masterPassword("somepass123")
                 .databaseName("example_db")
                 .globalClusterIdentifier(example.id())
                 .dbSubnetGroupName("default")
                 .build());
     
             var primaryClusterInstance = new ClusterInstance("primaryClusterInstance", ClusterInstanceArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .identifier("test-primary-cluster-instance")
                 .clusterIdentifier(primary.id())
                 .instanceClass("db.r4.large")
                 .dbSubnetGroupName("default")
                 .build());
     
             var secondary = new Cluster("secondary", ClusterArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .clusterIdentifier("test-secondary-cluster")
                 .globalClusterIdentifier(example.id())
                 .skipFinalSnapshot(true)
                 .dbSubnetGroupName("default")
                 .build(), CustomResourceOptions.builder()
                     .dependsOn(primaryClusterInstance)
                     .ignoreChanges("replicationSourceIdentifier")
                     .build());
     
             var secondaryClusterInstance = new ClusterInstance("secondaryClusterInstance", ClusterInstanceArgs.builder()
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .identifier("test-secondary-cluster-instance")
                 .clusterIdentifier(secondary.id())
                 .instanceClass("db.r4.large")
                 .dbSubnetGroupName("default")
                 .build());
     
         }
     }
     
     
    ### New Global Cluster From Existing DB Cluster
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.rds.Cluster;
     import com.pulumi.aws.rds.ClusterArgs;
     import com.pulumi.aws.rds.GlobalCluster;
     import com.pulumi.aws.rds.GlobalClusterArgs;
     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) {
             var example = new Cluster("example", ClusterArgs.Empty, CustomResourceOptions.builder()
                 .ignoreChanges("globalClusterIdentifier")
                 .build());
     
             var exampleGlobalCluster = new GlobalCluster("exampleGlobalCluster", GlobalClusterArgs.builder()
                 .forceDestroy(true)
                 .globalClusterIdentifier("example")
                 .sourceDbClusterIdentifier(example.arn())
                 .build());
     
         }
     }
     
     
    ### Upgrading Engine Versions When you upgrade the version of an `aws.rds.GlobalCluster`, the provider will attempt to in-place upgrade the engine versions of all associated clusters. Since the `aws.rds.Cluster` resource is being updated through the `aws.rds.GlobalCluster`, you are likely to get an error (`Provider produced inconsistent final plan`). To avoid this, use the `lifecycle` `ignoreChanges` meta argument as shown below on the `aws.rds.Cluster`.
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.rds.GlobalCluster;
     import com.pulumi.aws.rds.GlobalClusterArgs;
     import com.pulumi.aws.rds.Cluster;
     import com.pulumi.aws.rds.ClusterArgs;
     import com.pulumi.aws.rds.ClusterInstance;
     import com.pulumi.aws.rds.ClusterInstanceArgs;
     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) {
             var example = new GlobalCluster("example", GlobalClusterArgs.builder()
                 .globalClusterIdentifier("kyivkharkiv")
                 .engine("aurora-mysql")
                 .engineVersion("5.7.mysql_aurora.2.07.5")
                 .build());
     
             var primary = new Cluster("primary", ClusterArgs.builder()
                 .allowMajorVersionUpgrade(true)
                 .applyImmediately(true)
                 .clusterIdentifier("odessadnipro")
                 .databaseName("totoro")
                 .engine(example.engine())
                 .engineVersion(example.engineVersion())
                 .globalClusterIdentifier(example.id())
                 .masterPassword("satsukimae")
                 .masterUsername("maesatsuki")
                 .skipFinalSnapshot(true)
                 .build(), CustomResourceOptions.builder()
                     .ignoreChanges("engineVersion")
                     .build());
     
             var primaryClusterInstance = new ClusterInstance("primaryClusterInstance", ClusterInstanceArgs.builder()
                 .applyImmediately(true)
                 .clusterIdentifier(primary.id())
                 .engine(primary.engine())
                 .engineVersion(primary.engineVersion())
                 .identifier("donetsklviv")
                 .instanceClass("db.r4.large")
                 .build());
     
         }
     }
     
     
    ## Import Using `pulumi import`, import `aws.rds.GlobalCluster` using the RDS Global Cluster identifier. For example: ```sh $ pulumi import aws:rds/globalCluster:GlobalCluster example example ``` Certain resource arguments, like `forceDestroy`, only exist within this provider. If the argument is set in the the provider configuration on an imported resource, This provider will show a difference on the first plan after import to update the state value. This change is safe to apply immediately so the state matches the desired configuration. Certain resource arguments, like `sourceDbClusterIdentifier`, do not have an API method for reading the information after creation. If the argument is set in the Pulumi program on an imported resource, Pulumi will always show a difference. To workaround this behavior, either omit the argument from the Pulumi program or use `ignoreChanges` to hide the difference. For example:
     
     package generated_program;
     
     import com.pulumi.Context;
     import com.pulumi.Pulumi;
     import com.pulumi.core.Output;
     import com.pulumi.aws.rds.GlobalCluster;
     import com.pulumi.aws.rds.GlobalClusterArgs;
     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) {
             var example = new GlobalCluster("example", GlobalClusterArgs.Empty, CustomResourceOptions.builder()
                 .ignoreChanges("sourceDbClusterIdentifier")
                 .build());
     
         }
     }
     
     
    • 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> arn()  
      com.pulumi.core.Output<java.lang.String> databaseName()  
      com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> deletionProtection()  
      com.pulumi.core.Output<java.lang.String> endpoint()  
      com.pulumi.core.Output<java.lang.String> engine()  
      com.pulumi.core.Output<java.lang.String> engineLifecycleSupport()  
      com.pulumi.core.Output<java.lang.String> engineVersion()  
      com.pulumi.core.Output<java.lang.String> engineVersionActual()  
      com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> forceDestroy()  
      static GlobalCluster get​(java.lang.String name, com.pulumi.core.Output<java.lang.String> id, GlobalClusterState 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> globalClusterIdentifier()  
      com.pulumi.core.Output<java.util.List<GlobalClusterGlobalClusterMember>> globalClusterMembers()  
      com.pulumi.core.Output<java.lang.String> globalClusterResourceId()  
      com.pulumi.core.Output<java.lang.String> region()  
      com.pulumi.core.Output<java.lang.String> sourceDbClusterIdentifier()  
      com.pulumi.core.Output<java.lang.Boolean> storageEncrypted()  
      com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()  
      com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()  
      • 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

      • GlobalCluster

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

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

        public GlobalCluster​(java.lang.String name,
                             GlobalClusterArgs 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

      • arn

        public com.pulumi.core.Output<java.lang.String> arn()
        Returns:
        RDS Global Cluster ARN.
      • databaseName

        public com.pulumi.core.Output<java.lang.String> databaseName()
        Returns:
        Name for an automatically created database on cluster creation. Pulumi will only perform drift detection if a configuration value is provided.
      • deletionProtection

        public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> deletionProtection()
        Returns:
        If the Global Cluster should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.
      • endpoint

        public com.pulumi.core.Output<java.lang.String> endpoint()
        Returns:
        Writer endpoint for the new global database cluster. This endpoint always points to the writer DB instance in the current primary cluster.
      • engine

        public com.pulumi.core.Output<java.lang.String> engine()
        Returns:
        Name of the database engine to be used for this DB cluster. The provider will only perform drift detection if a configuration value is provided. Valid values: `aurora`, `aurora-mysql`, `aurora-postgresql`. Defaults to `aurora`. Conflicts with `sourceDbClusterIdentifier`.
      • engineLifecycleSupport

        public com.pulumi.core.Output<java.lang.String> engineLifecycleSupport()
        Returns:
        Life cycle type for this DB instance. This setting applies only to Aurora PostgreSQL-based global databases. Valid values are `open-source-rds-extended-support`, `open-source-rds-extended-support-disabled`. Default value is `open-source-rds-extended-support`. [Using Amazon RDS Extended Support]: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/extended-support.html
      • engineVersion

        public com.pulumi.core.Output<java.lang.String> engineVersion()
        Returns:
        Engine version of the Aurora global database. The `engine`, `engineVersion`, and `instanceClass` (on the `aws.rds.ClusterInstance`) must together support global databases. See [Using Amazon Aurora global databases](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html) for more information. By upgrading the engine version, the provider will upgrade cluster members. **NOTE:** To avoid an `inconsistent final plan` error while upgrading, use the `lifecycle` `ignoreChanges` for `engineVersion` meta argument on the associated `aws.rds.Cluster` resource as shown above in Upgrading Engine Versions example.
      • engineVersionActual

        public com.pulumi.core.Output<java.lang.String> engineVersionActual()
        Returns:
        Running version of the database engine.
      • forceDestroy

        public com.pulumi.core.Output<java.util.Optional<java.lang.Boolean>> forceDestroy()
        Returns:
        Enable to remove DB Cluster members from Global Cluster on destroy. Required with `sourceDbClusterIdentifier`.
      • globalClusterIdentifier

        public com.pulumi.core.Output<java.lang.String> globalClusterIdentifier()
        Returns:
        Global cluster identifier. The following arguments are optional:
      • globalClusterMembers

        public com.pulumi.core.Output<java.util.List<GlobalClusterGlobalClusterMember>> globalClusterMembers()
        Returns:
        Set of objects containing Global Cluster members.
      • globalClusterResourceId

        public com.pulumi.core.Output<java.lang.String> globalClusterResourceId()
        Returns:
        AWS Region-unique, immutable identifier for the global database cluster. This identifier is found in AWS CloudTrail log entries whenever the AWS KMS key for the DB cluster is accessed.
      • 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.
      • sourceDbClusterIdentifier

        public com.pulumi.core.Output<java.lang.String> sourceDbClusterIdentifier()
        Returns:
        ARN to use as the primary DB Cluster of the Global Cluster on creation. Pulumi cannot perform drift detection of this value. **NOTE:** After initial creation, this argument can be removed and replaced with `engine` and `engineVersion`. This allows upgrading the engine version of the Global Cluster.
      • storageEncrypted

        public com.pulumi.core.Output<java.lang.Boolean> storageEncrypted()
        Returns:
        Whether the DB cluster is encrypted. The default is `false` unless `sourceDbClusterIdentifier` is specified and encrypted. The provider will only perform drift detection if a configuration value is provided.
      • tags

        public com.pulumi.core.Output<java.util.Optional<java.util.Map<java.lang.String,​java.lang.String>>> tags()
        Returns:
        Map of tags to assign to the DB cluster. If configured with a provider `defaultTags` configuration block present, tags with matching keys will overwrite those defined at the provider-level. > When both `sourceDbClusterIdentifier` and `engine`/`engineVersion` are set, all engine related values will be ignored during creation. The global cluster will inherit the `engine` and `engineVersion` values from the source cluster. After the first apply, any differences between the inherited and configured values will trigger an in-place update.
      • tagsAll

        public com.pulumi.core.Output<java.util.Map<java.lang.String,​java.lang.String>> tagsAll()
        Returns:
        Map of tags assigned to the resource, including those inherited from the provider `defaultTags` configuration block.
      • get

        public static GlobalCluster get​(java.lang.String name,
                                        com.pulumi.core.Output<java.lang.String> id,
                                        @Nullable
                                        GlobalClusterState 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.