Cluster class
A Google Cloud Redis Cluster instance.
To get more information about Cluster, see:
- API documentation
- How-to Guides
- Official Documentation
> Note: For Multiple VPC Networking if you want to use
User-registered PSC Connections,
then please use gcp.redis.ClusterUserCreatedConnections resource.
For Cross Region Replication, please follow the instructions below for performing certain update and failover (switchover and detach) operations
Cross Region Replication
Settings updated on primary and propagated to secondaries
The settings listed here are only allowed to be updated on the primary cluster and the changes are automatically propagated to the secondary clusters. To keep the Terraform configuration and state in sync for such settings, please follow the below steps to update them:
- Update the setting on the primary cluster:
- Update the setting to its new desired value in the Terraform configuration file.
- Execute
pulumi upto apply the change and wait for it to complete.
- Detect configuration drift on the secondary cluster(s):
- Execute
pulumi preview. This should reveal a diff for the modified setting. The proposed value in the pulumi preview should align with the updated value applied to the primary cluster in the preceding step.
- Reconcile secondary cluster(s) configuration:
- Manually edit the Terraform configuration file(s) for the secondary cluster(s) to update the setting with the latest value from the state.
- Execute
pulumi previewonce again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
Switchover
To perform a switchover, please follow the below steps:
- Ensure that the Terraform configuration file for the secondary cluster that needs to become the new primary has the
crossClusterReplicationConfigfield. If it is not present:
- Add the
crossClusterReplicationConfigfield to the configuration file to match the latest value in the state. - Execute
pulumi preview. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
- Update the
crossClusterReplicationConfigfield of the secondary that needs to become the new primary:
- Change
cross_cluster_replication_config.cluster_rolefromSECONDARYtoPRIMARY. - Remove
cross_cluster_replication_config.primary_clusterfield. - Set
cross_cluster_replication_config.secondary_clusterslist with the new secondaries. The new secondaries are the current primary and other secondary clusters(if any).
> You can refer to the current value of cross_cluster_replication_config.membership field to lookup the current primary and secondary clusters.
- Execute switchover:
- Execute
pulumi upto apply the change and wait for it to complete.
- Fix any configuration drifts on the previous primary and other secondary clusters:
- Execute
pulumi preview. If any diffs are reported forcrossClusterReplicationConfigfield: - Manually update
crossClusterReplicationConfigfield in the configuration file(s) for those clusters with the latest value from the state. - Execute
pulumi previewonce again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
Detach a secondary cluster
To detach a secondary cluster, please follow the below steps:
- Ensure that the Terraform configuration file for the secondary cluster that needs to be detached has the
crossClusterReplicationConfigfield. If it is not present:
- Add the
crossClusterReplicationConfigfield to the configuration file to match the latest value in the state. - Execute
pulumi preview. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
- Update the
crossClusterReplicationConfigfield of the secondary that needs to be detached:
- Change
cross_cluster_replication_config.cluster_rolefromSECONDARYtoNONE. - Remove
cross_cluster_replication_config.primary_cluster.
- Execute detach:
- Execute
pulumi upto apply the change and wait for it to complete.
- Fix any configuration drifts on the primary cluster:
- Execute
pulumi preview. If any diff is reported forcrossClusterReplicationConfigfield: - Manually update
crossClusterReplicationConfigfield in the configuration file with the latest value from the state. - Execute
pulumi previewonce again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
Detach secondary cluster(s) via primary cluster
To detach secondary clusters via primary, please follow the below steps:
- Ensure that the Terraform configuration file for the primary cluster from which the secondary(ies) has(ve) to be detached has the
crossClusterReplicationConfigfield. If it is not present:
- Add the
crossClusterReplicationConfigfield to the configuration file to match the latest value in the state. - Execute
pulumi preview. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
- Update the
crossClusterReplicationConfigfield of the primary cluster:
- If you are detaching all secondaries from the primary:
- Change
cross_cluster_replication_config.cluster_rolefromPRIMARYtoNONE. - Remove
cross_cluster_replication_config.secondary_clusterslist field. - If you are detaching a subset of secondaries:
- Update
cross_cluster_replication_config.secondary_clusterslist field to remove the secondary clusters that need to be detached.
- Execute detach:
- Execute
pulumi upto apply the change and wait for it to complete.
- Fix any configuration drifts on the secondary cluster(s) that was detached:
- Execute
pulumi preview. If any diffs are reported forcrossClusterReplicationConfigfield: - Manually update
crossClusterReplicationConfigfield in the configuration file(s) for those clusters with the latest value from the state. - Execute
pulumi previewonce again. This should not generate any diff, confirming the configuration is in sync with the infrastructure.
Example Usage
Redis Cluster Ha With Labels
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "my-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "my-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "my-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
description: "my basic service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const cluster_ha_with_labels = new gcp.redis.Cluster("cluster-ha-with-labels", {
name: "ha-cluster",
shardCount: 3,
labels: {
my_key: "my_val",
other_key: "other_val",
},
pscConfigs: [{
network: consumerNet.id,
}],
region: "us-central1",
replicaCount: 1,
nodeType: "REDIS_SHARED_CORE_NANO",
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED",
authorizationMode: "AUTH_MODE_DISABLED",
redisConfigs: {
"maxmemory-policy": "volatile-ttl",
},
deletionProtectionEnabled: true,
zoneDistributionConfig: {
mode: "MULTI_ZONE",
},
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "MONDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
}, {
dependsOn: [_default],
});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="my-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="my-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="my-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
description="my basic service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
cluster_ha_with_labels = gcp.redis.Cluster("cluster-ha-with-labels",
name="ha-cluster",
shard_count=3,
labels={
"my_key": "my_val",
"other_key": "other_val",
},
psc_configs=[{
"network": consumer_net.id,
}],
region="us-central1",
replica_count=1,
node_type="REDIS_SHARED_CORE_NANO",
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED",
authorization_mode="AUTH_MODE_DISABLED",
redis_configs={
"maxmemory-policy": "volatile-ttl",
},
deletion_protection_enabled=True,
zone_distribution_config={
"mode": "MULTI_ZONE",
},
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "MONDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
opts = pulumi.ResourceOptions(depends_on=[default]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "my-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "my-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "my-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Description = "my basic service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var cluster_ha_with_labels = new Gcp.Redis.Cluster("cluster-ha-with-labels", new()
{
Name = "ha-cluster",
ShardCount = 3,
Labels =
{
{ "my_key", "my_val" },
{ "other_key", "other_val" },
},
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
Region = "us-central1",
ReplicaCount = 1,
NodeType = "REDIS_SHARED_CORE_NANO",
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED",
AuthorizationMode = "AUTH_MODE_DISABLED",
RedisConfigs =
{
{ "maxmemory-policy", "volatile-ttl" },
},
DeletionProtectionEnabled = true,
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "MULTI_ZONE",
},
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "MONDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
}, new CustomResourceOptions
{
DependsOn =
{
@default,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("my-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("my-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
_default, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("my-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("my basic service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "cluster-ha-with-labels", &redis.ClusterArgs{
Name: pulumi.String("ha-cluster"),
ShardCount: pulumi.Int(3),
Labels: pulumi.StringMap{
"my_key": pulumi.String("my_val"),
"other_key": pulumi.String("other_val"),
},
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
Region: pulumi.String("us-central1"),
ReplicaCount: pulumi.Int(1),
NodeType: pulumi.String("REDIS_SHARED_CORE_NANO"),
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"),
AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"),
RedisConfigs: pulumi.StringMap{
"maxmemory-policy": pulumi.String("volatile-ttl"),
},
DeletionProtectionEnabled: pulumi.Bool(true),
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("MULTI_ZONE"),
},
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("MONDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
}, pulumi.DependsOn([]pulumi.Resource{
_default,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_redis_cluster" "cluster-ha-with-labels" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default]
name = "ha-cluster"
shard_count = 3
labels = {
"my_key" = "my_val"
"other_key" = "other_val"
}
psc_configs {
network = gcp_compute_network.consumer_net.id
}
region = "us-central1"
replica_count = 1
node_type = "REDIS_SHARED_CORE_NANO"
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
authorization_mode = "AUTH_MODE_DISABLED"
redis_configs = {
"maxmemory-policy" = "volatile-ttl"
}
deletion_protection_enabled = true
zone_distribution_config = {
mode = "MULTI_ZONE"
}
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "MONDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "my-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
description = "my basic service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "my-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("my-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("my-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
.name("my-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.description("my basic service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var cluster_ha_with_labels = new Cluster("cluster-ha-with-labels", ClusterArgs.builder()
.name("ha-cluster")
.shardCount(3)
.labels(Map.ofEntries(
Map.entry("my_key", "my_val"),
Map.entry("other_key", "other_val")
))
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.region("us-central1")
.replicaCount(1)
.nodeType("REDIS_SHARED_CORE_NANO")
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
.authorizationMode("AUTH_MODE_DISABLED")
.redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
.deletionProtectionEnabled(true)
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("MULTI_ZONE")
.build())
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("MONDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
}
}
resources:
cluster-ha-with-labels:
type: gcp:redis:Cluster
properties:
name: ha-cluster
shardCount: 3
labels:
my_key: my_val
other_key: other_val
pscConfigs:
- network: ${consumerNet.id}
region: us-central1
replicaCount: 1
nodeType: REDIS_SHARED_CORE_NANO
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
authorizationMode: AUTH_MODE_DISABLED
redisConfigs:
maxmemory-policy: volatile-ttl
deletionProtectionEnabled: true
zoneDistributionConfig:
mode: MULTI_ZONE
maintenancePolicy:
weeklyMaintenanceWindows:
- day: MONDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
options:
dependsOn:
- ${default}
default:
type: gcp:networkconnectivity:ServiceConnectionPolicy
properties:
name: my-policy
location: us-central1
serviceClass: gcp-memorystore-redis
description: my basic service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: my-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: my-network
autoCreateSubnetworks: false
Redis Cluster Ha
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "my-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "my-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "my-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
description: "my basic service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const cluster_ha = new gcp.redis.Cluster("cluster-ha", {
name: "ha-cluster",
shardCount: 3,
pscConfigs: [{
network: consumerNet.id,
}],
region: "us-central1",
replicaCount: 1,
nodeType: "REDIS_SHARED_CORE_NANO",
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED",
authorizationMode: "AUTH_MODE_DISABLED",
redisConfigs: {
"maxmemory-policy": "volatile-ttl",
},
deletionProtectionEnabled: true,
zoneDistributionConfig: {
mode: "MULTI_ZONE",
},
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "MONDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
}, {
dependsOn: [_default],
});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="my-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="my-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="my-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
description="my basic service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
cluster_ha = gcp.redis.Cluster("cluster-ha",
name="ha-cluster",
shard_count=3,
psc_configs=[{
"network": consumer_net.id,
}],
region="us-central1",
replica_count=1,
node_type="REDIS_SHARED_CORE_NANO",
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED",
authorization_mode="AUTH_MODE_DISABLED",
redis_configs={
"maxmemory-policy": "volatile-ttl",
},
deletion_protection_enabled=True,
zone_distribution_config={
"mode": "MULTI_ZONE",
},
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "MONDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
opts = pulumi.ResourceOptions(depends_on=[default]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "my-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "my-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "my-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Description = "my basic service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var cluster_ha = new Gcp.Redis.Cluster("cluster-ha", new()
{
Name = "ha-cluster",
ShardCount = 3,
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
Region = "us-central1",
ReplicaCount = 1,
NodeType = "REDIS_SHARED_CORE_NANO",
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED",
AuthorizationMode = "AUTH_MODE_DISABLED",
RedisConfigs =
{
{ "maxmemory-policy", "volatile-ttl" },
},
DeletionProtectionEnabled = true,
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "MULTI_ZONE",
},
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "MONDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
}, new CustomResourceOptions
{
DependsOn =
{
@default,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("my-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("my-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
_default, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("my-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("my basic service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "cluster-ha", &redis.ClusterArgs{
Name: pulumi.String("ha-cluster"),
ShardCount: pulumi.Int(3),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
Region: pulumi.String("us-central1"),
ReplicaCount: pulumi.Int(1),
NodeType: pulumi.String("REDIS_SHARED_CORE_NANO"),
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"),
AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"),
RedisConfigs: pulumi.StringMap{
"maxmemory-policy": pulumi.String("volatile-ttl"),
},
DeletionProtectionEnabled: pulumi.Bool(true),
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("MULTI_ZONE"),
},
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("MONDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
}, pulumi.DependsOn([]pulumi.Resource{
_default,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_redis_cluster" "cluster-ha" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default]
name = "ha-cluster"
shard_count = 3
psc_configs {
network = gcp_compute_network.consumer_net.id
}
region = "us-central1"
replica_count = 1
node_type = "REDIS_SHARED_CORE_NANO"
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
authorization_mode = "AUTH_MODE_DISABLED"
redis_configs = {
"maxmemory-policy" = "volatile-ttl"
}
deletion_protection_enabled = true
zone_distribution_config = {
mode = "MULTI_ZONE"
}
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "MONDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "my-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
description = "my basic service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "my-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("my-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("my-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
.name("my-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.description("my basic service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var cluster_ha = new Cluster("cluster-ha", ClusterArgs.builder()
.name("ha-cluster")
.shardCount(3)
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.region("us-central1")
.replicaCount(1)
.nodeType("REDIS_SHARED_CORE_NANO")
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
.authorizationMode("AUTH_MODE_DISABLED")
.redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
.deletionProtectionEnabled(true)
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("MULTI_ZONE")
.build())
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("MONDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
}
}
resources:
cluster-ha:
type: gcp:redis:Cluster
properties:
name: ha-cluster
shardCount: 3
pscConfigs:
- network: ${consumerNet.id}
region: us-central1
replicaCount: 1
nodeType: REDIS_SHARED_CORE_NANO
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
authorizationMode: AUTH_MODE_DISABLED
redisConfigs:
maxmemory-policy: volatile-ttl
deletionProtectionEnabled: true
zoneDistributionConfig:
mode: MULTI_ZONE
maintenancePolicy:
weeklyMaintenanceWindows:
- day: MONDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
options:
dependsOn:
- ${default}
default:
type: gcp:networkconnectivity:ServiceConnectionPolicy
properties:
name: my-policy
location: us-central1
serviceClass: gcp-memorystore-redis
description: my basic service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: my-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: my-network
autoCreateSubnetworks: false
Redis Cluster Ha Single Zone
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "my-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "my-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "my-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
description: "my basic service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const cluster_ha_single_zone = new gcp.redis.Cluster("cluster-ha-single-zone", {
name: "ha-cluster-single-zone",
shardCount: 3,
pscConfigs: [{
network: consumerNet.id,
}],
region: "us-central1",
zoneDistributionConfig: {
mode: "SINGLE_ZONE",
zone: "us-central1-f",
},
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "MONDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
deletionProtectionEnabled: true,
}, {
dependsOn: [_default],
});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="my-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="my-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="my-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
description="my basic service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
cluster_ha_single_zone = gcp.redis.Cluster("cluster-ha-single-zone",
name="ha-cluster-single-zone",
shard_count=3,
psc_configs=[{
"network": consumer_net.id,
}],
region="us-central1",
zone_distribution_config={
"mode": "SINGLE_ZONE",
"zone": "us-central1-f",
},
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "MONDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
deletion_protection_enabled=True,
opts = pulumi.ResourceOptions(depends_on=[default]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "my-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "my-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "my-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Description = "my basic service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var cluster_ha_single_zone = new Gcp.Redis.Cluster("cluster-ha-single-zone", new()
{
Name = "ha-cluster-single-zone",
ShardCount = 3,
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
Region = "us-central1",
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "SINGLE_ZONE",
Zone = "us-central1-f",
},
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "MONDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
DeletionProtectionEnabled = true,
}, new CustomResourceOptions
{
DependsOn =
{
@default,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("my-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("my-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
_default, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("my-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("my basic service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "cluster-ha-single-zone", &redis.ClusterArgs{
Name: pulumi.String("ha-cluster-single-zone"),
ShardCount: pulumi.Int(3),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
Region: pulumi.String("us-central1"),
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("SINGLE_ZONE"),
Zone: pulumi.String("us-central1-f"),
},
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("MONDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
DeletionProtectionEnabled: pulumi.Bool(true),
}, pulumi.DependsOn([]pulumi.Resource{
_default,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_redis_cluster" "cluster-ha-single-zone" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default]
name = "ha-cluster-single-zone"
shard_count = 3
psc_configs {
network = gcp_compute_network.consumer_net.id
}
region = "us-central1"
zone_distribution_config = {
mode = "SINGLE_ZONE"
zone = "us-central1-f"
}
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "MONDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
deletion_protection_enabled = true
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "my-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
description = "my basic service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "my-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("my-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("my-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
.name("my-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.description("my basic service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var cluster_ha_single_zone = new Cluster("cluster-ha-single-zone", ClusterArgs.builder()
.name("ha-cluster-single-zone")
.shardCount(3)
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.region("us-central1")
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("SINGLE_ZONE")
.zone("us-central1-f")
.build())
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("MONDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.deletionProtectionEnabled(true)
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
}
}
resources:
cluster-ha-single-zone:
type: gcp:redis:Cluster
properties:
name: ha-cluster-single-zone
shardCount: 3
pscConfigs:
- network: ${consumerNet.id}
region: us-central1
zoneDistributionConfig:
mode: SINGLE_ZONE
zone: us-central1-f
maintenancePolicy:
weeklyMaintenanceWindows:
- day: MONDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
deletionProtectionEnabled: true
options:
dependsOn:
- ${default}
default:
type: gcp:networkconnectivity:ServiceConnectionPolicy
properties:
name: my-policy
location: us-central1
serviceClass: gcp-memorystore-redis
description: my basic service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: my-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: my-network
autoCreateSubnetworks: false
Redis Cluster Secondary
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "mynetwork",
autoCreateSubnetworks: false,
});
const primaryClusterConsumerSubnet = new gcp.compute.Subnetwork("primary_cluster_consumer_subnet", {
name: "mysubnet-primary-cluster",
ipCidrRange: "10.0.1.0/29",
region: "us-east1",
network: consumerNet.id,
});
const primaryClusterRegionScp = new gcp.networkconnectivity.ServiceConnectionPolicy("primary_cluster_region_scp", {
name: "mypolicy-primary-cluster",
location: "us-east1",
serviceClass: "gcp-memorystore-redis",
description: "Primary cluster service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [primaryClusterConsumerSubnet.id],
},
});
// Primary cluster
const primaryCluster = new gcp.redis.Cluster("primary_cluster", {
name: "my-primary-cluster",
region: "us-east1",
pscConfigs: [{
network: consumerNet.id,
}],
authorizationMode: "AUTH_MODE_DISABLED",
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED",
shardCount: 3,
redisConfigs: {
"maxmemory-policy": "volatile-ttl",
},
nodeType: "REDIS_HIGHMEM_MEDIUM",
persistenceConfig: {
mode: "RDB",
rdbConfig: {
rdbSnapshotPeriod: "ONE_HOUR",
rdbSnapshotStartTime: "2024-10-02T15:01:23Z",
},
},
zoneDistributionConfig: {
mode: "MULTI_ZONE",
},
replicaCount: 1,
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "MONDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
deletionProtectionEnabled: true,
}, {
dependsOn: [primaryClusterRegionScp],
});
const secondaryClusterConsumerSubnet = new gcp.compute.Subnetwork("secondary_cluster_consumer_subnet", {
name: "mysubnet-secondary-cluster",
ipCidrRange: "10.0.2.0/29",
region: "europe-west1",
network: consumerNet.id,
});
const secondaryClusterRegionScp = new gcp.networkconnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp", {
name: "mypolicy-secondary-cluster",
location: "europe-west1",
serviceClass: "gcp-memorystore-redis",
description: "Secondary cluster service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [secondaryClusterConsumerSubnet.id],
},
});
// Secondary cluster
const secondaryCluster = new gcp.redis.Cluster("secondary_cluster", {
name: "my-secondary-cluster",
region: "europe-west1",
pscConfigs: [{
network: consumerNet.id,
}],
authorizationMode: "AUTH_MODE_DISABLED",
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED",
shardCount: 3,
redisConfigs: {
"maxmemory-policy": "volatile-ttl",
},
nodeType: "REDIS_HIGHMEM_MEDIUM",
persistenceConfig: {
mode: "RDB",
rdbConfig: {
rdbSnapshotPeriod: "ONE_HOUR",
rdbSnapshotStartTime: "2024-10-02T15:01:23Z",
},
},
zoneDistributionConfig: {
mode: "MULTI_ZONE",
},
replicaCount: 2,
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "WEDNESDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
deletionProtectionEnabled: true,
crossClusterReplicationConfig: {
clusterRole: "SECONDARY",
primaryCluster: {
cluster: primaryCluster.id,
},
},
}, {
dependsOn: [secondaryClusterRegionScp],
});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="mynetwork",
auto_create_subnetworks=False)
primary_cluster_consumer_subnet = gcp.compute.Subnetwork("primary_cluster_consumer_subnet",
name="mysubnet-primary-cluster",
ip_cidr_range="10.0.1.0/29",
region="us-east1",
network=consumer_net.id)
primary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy("primary_cluster_region_scp",
name="mypolicy-primary-cluster",
location="us-east1",
service_class="gcp-memorystore-redis",
description="Primary cluster service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [primary_cluster_consumer_subnet.id],
})
# Primary cluster
primary_cluster = gcp.redis.Cluster("primary_cluster",
name="my-primary-cluster",
region="us-east1",
psc_configs=[{
"network": consumer_net.id,
}],
authorization_mode="AUTH_MODE_DISABLED",
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED",
shard_count=3,
redis_configs={
"maxmemory-policy": "volatile-ttl",
},
node_type="REDIS_HIGHMEM_MEDIUM",
persistence_config={
"mode": "RDB",
"rdb_config": {
"rdb_snapshot_period": "ONE_HOUR",
"rdb_snapshot_start_time": "2024-10-02T15:01:23Z",
},
},
zone_distribution_config={
"mode": "MULTI_ZONE",
},
replica_count=1,
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "MONDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
deletion_protection_enabled=True,
opts = pulumi.ResourceOptions(depends_on=[primary_cluster_region_scp]))
secondary_cluster_consumer_subnet = gcp.compute.Subnetwork("secondary_cluster_consumer_subnet",
name="mysubnet-secondary-cluster",
ip_cidr_range="10.0.2.0/29",
region="europe-west1",
network=consumer_net.id)
secondary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp",
name="mypolicy-secondary-cluster",
location="europe-west1",
service_class="gcp-memorystore-redis",
description="Secondary cluster service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [secondary_cluster_consumer_subnet.id],
})
# Secondary cluster
secondary_cluster = gcp.redis.Cluster("secondary_cluster",
name="my-secondary-cluster",
region="europe-west1",
psc_configs=[{
"network": consumer_net.id,
}],
authorization_mode="AUTH_MODE_DISABLED",
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED",
shard_count=3,
redis_configs={
"maxmemory-policy": "volatile-ttl",
},
node_type="REDIS_HIGHMEM_MEDIUM",
persistence_config={
"mode": "RDB",
"rdb_config": {
"rdb_snapshot_period": "ONE_HOUR",
"rdb_snapshot_start_time": "2024-10-02T15:01:23Z",
},
},
zone_distribution_config={
"mode": "MULTI_ZONE",
},
replica_count=2,
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "WEDNESDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
deletion_protection_enabled=True,
cross_cluster_replication_config={
"cluster_role": "SECONDARY",
"primary_cluster": {
"cluster": primary_cluster.id,
},
},
opts = pulumi.ResourceOptions(depends_on=[secondary_cluster_region_scp]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "mynetwork",
AutoCreateSubnetworks = false,
});
var primaryClusterConsumerSubnet = new Gcp.Compute.Subnetwork("primary_cluster_consumer_subnet", new()
{
Name = "mysubnet-primary-cluster",
IpCidrRange = "10.0.1.0/29",
Region = "us-east1",
Network = consumerNet.Id,
});
var primaryClusterRegionScp = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("primary_cluster_region_scp", new()
{
Name = "mypolicy-primary-cluster",
Location = "us-east1",
ServiceClass = "gcp-memorystore-redis",
Description = "Primary cluster service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
primaryClusterConsumerSubnet.Id,
},
},
});
// Primary cluster
var primaryCluster = new Gcp.Redis.Cluster("primary_cluster", new()
{
Name = "my-primary-cluster",
Region = "us-east1",
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
AuthorizationMode = "AUTH_MODE_DISABLED",
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED",
ShardCount = 3,
RedisConfigs =
{
{ "maxmemory-policy", "volatile-ttl" },
},
NodeType = "REDIS_HIGHMEM_MEDIUM",
PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs
{
Mode = "RDB",
RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs
{
RdbSnapshotPeriod = "ONE_HOUR",
RdbSnapshotStartTime = "2024-10-02T15:01:23Z",
},
},
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "MULTI_ZONE",
},
ReplicaCount = 1,
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "MONDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
DeletionProtectionEnabled = true,
}, new CustomResourceOptions
{
DependsOn =
{
primaryClusterRegionScp,
},
});
var secondaryClusterConsumerSubnet = new Gcp.Compute.Subnetwork("secondary_cluster_consumer_subnet", new()
{
Name = "mysubnet-secondary-cluster",
IpCidrRange = "10.0.2.0/29",
Region = "europe-west1",
Network = consumerNet.Id,
});
var secondaryClusterRegionScp = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp", new()
{
Name = "mypolicy-secondary-cluster",
Location = "europe-west1",
ServiceClass = "gcp-memorystore-redis",
Description = "Secondary cluster service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
secondaryClusterConsumerSubnet.Id,
},
},
});
// Secondary cluster
var secondaryCluster = new Gcp.Redis.Cluster("secondary_cluster", new()
{
Name = "my-secondary-cluster",
Region = "europe-west1",
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
AuthorizationMode = "AUTH_MODE_DISABLED",
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED",
ShardCount = 3,
RedisConfigs =
{
{ "maxmemory-policy", "volatile-ttl" },
},
NodeType = "REDIS_HIGHMEM_MEDIUM",
PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs
{
Mode = "RDB",
RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs
{
RdbSnapshotPeriod = "ONE_HOUR",
RdbSnapshotStartTime = "2024-10-02T15:01:23Z",
},
},
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "MULTI_ZONE",
},
ReplicaCount = 2,
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "WEDNESDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
DeletionProtectionEnabled = true,
CrossClusterReplicationConfig = new Gcp.Redis.Inputs.ClusterCrossClusterReplicationConfigArgs
{
ClusterRole = "SECONDARY",
PrimaryCluster = new Gcp.Redis.Inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs
{
Cluster = primaryCluster.Id,
},
},
}, new CustomResourceOptions
{
DependsOn =
{
secondaryClusterRegionScp,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("mynetwork"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
primaryClusterConsumerSubnet, err := compute.NewSubnetwork(ctx, "primary_cluster_consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("mysubnet-primary-cluster"),
IpCidrRange: pulumi.String("10.0.1.0/29"),
Region: pulumi.String("us-east1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
primaryClusterRegionScp, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "primary_cluster_region_scp", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("mypolicy-primary-cluster"),
Location: pulumi.String("us-east1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("Primary cluster service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
primaryClusterConsumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
// Primary cluster
primaryCluster, err := redis.NewCluster(ctx, "primary_cluster", &redis.ClusterArgs{
Name: pulumi.String("my-primary-cluster"),
Region: pulumi.String("us-east1"),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"),
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"),
ShardCount: pulumi.Int(3),
RedisConfigs: pulumi.StringMap{
"maxmemory-policy": pulumi.String("volatile-ttl"),
},
NodeType: pulumi.String("REDIS_HIGHMEM_MEDIUM"),
PersistenceConfig: &redis.ClusterPersistenceConfigArgs{
Mode: pulumi.String("RDB"),
RdbConfig: &redis.ClusterPersistenceConfigRdbConfigArgs{
RdbSnapshotPeriod: pulumi.String("ONE_HOUR"),
RdbSnapshotStartTime: pulumi.String("2024-10-02T15:01:23Z"),
},
},
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("MULTI_ZONE"),
},
ReplicaCount: pulumi.Int(1),
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("MONDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
DeletionProtectionEnabled: pulumi.Bool(true),
}, pulumi.DependsOn([]pulumi.Resource{
primaryClusterRegionScp,
}))
if err != nil {
return err
}
secondaryClusterConsumerSubnet, err := compute.NewSubnetwork(ctx, "secondary_cluster_consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("mysubnet-secondary-cluster"),
IpCidrRange: pulumi.String("10.0.2.0/29"),
Region: pulumi.String("europe-west1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
secondaryClusterRegionScp, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "secondary_cluster_region_scp", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("mypolicy-secondary-cluster"),
Location: pulumi.String("europe-west1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("Secondary cluster service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
secondaryClusterConsumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
// Secondary cluster
_, err = redis.NewCluster(ctx, "secondary_cluster", &redis.ClusterArgs{
Name: pulumi.String("my-secondary-cluster"),
Region: pulumi.String("europe-west1"),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"),
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"),
ShardCount: pulumi.Int(3),
RedisConfigs: pulumi.StringMap{
"maxmemory-policy": pulumi.String("volatile-ttl"),
},
NodeType: pulumi.String("REDIS_HIGHMEM_MEDIUM"),
PersistenceConfig: &redis.ClusterPersistenceConfigArgs{
Mode: pulumi.String("RDB"),
RdbConfig: &redis.ClusterPersistenceConfigRdbConfigArgs{
RdbSnapshotPeriod: pulumi.String("ONE_HOUR"),
RdbSnapshotStartTime: pulumi.String("2024-10-02T15:01:23Z"),
},
},
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("MULTI_ZONE"),
},
ReplicaCount: pulumi.Int(2),
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("WEDNESDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
DeletionProtectionEnabled: pulumi.Bool(true),
CrossClusterReplicationConfig: &redis.ClusterCrossClusterReplicationConfigArgs{
ClusterRole: pulumi.String("SECONDARY"),
PrimaryCluster: &redis.ClusterCrossClusterReplicationConfigPrimaryClusterArgs{
Cluster: primaryCluster.ID().ToIDOutput().ToStringOutput(),
},
},
}, pulumi.DependsOn([]pulumi.Resource{
secondaryClusterRegionScp,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
// Primary cluster
resource "gcp_redis_cluster" "primary_cluster" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.primary_cluster_region_scp]
name = "my-primary-cluster"
region = "us-east1"
psc_configs {
network = gcp_compute_network.consumer_net.id
}
authorization_mode = "AUTH_MODE_DISABLED"
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
shard_count = 3
redis_configs = {
"maxmemory-policy" = "volatile-ttl"
}
node_type = "REDIS_HIGHMEM_MEDIUM"
persistence_config = {
mode = "RDB"
rdb_config = {
rdb_snapshot_period = "ONE_HOUR"
rdb_snapshot_start_time = "2024-10-02T15:01:23Z"
}
}
zone_distribution_config = {
mode = "MULTI_ZONE"
}
replica_count = 1
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "MONDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
deletion_protection_enabled = true
}
// Secondary cluster
resource "gcp_redis_cluster" "secondary_cluster" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.secondary_cluster_region_scp]
name = "my-secondary-cluster"
region = "europe-west1"
psc_configs {
network = gcp_compute_network.consumer_net.id
}
authorization_mode = "AUTH_MODE_DISABLED"
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
shard_count = 3
redis_configs = {
"maxmemory-policy" = "volatile-ttl"
}
node_type = "REDIS_HIGHMEM_MEDIUM"
persistence_config = {
mode = "RDB"
rdb_config = {
rdb_snapshot_period = "ONE_HOUR"
rdb_snapshot_start_time = "2024-10-02T15:01:23Z"
}
}
zone_distribution_config = {
mode = "MULTI_ZONE"
}
replica_count = 2
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "WEDNESDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
deletion_protection_enabled = true
// Cross cluster replication config
cross_cluster_replication_config = {
cluster_role = "SECONDARY"
primary_cluster = {
cluster = gcp_redis_cluster.primary_cluster.id
}
}
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "primary_cluster_region_scp" {
name = "mypolicy-primary-cluster"
location = "us-east1"
service_class = "gcp-memorystore-redis"
description = "Primary cluster service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.primary_cluster_consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "primary_cluster_consumer_subnet" {
name = "mysubnet-primary-cluster"
ip_cidr_range = "10.0.1.0/29"
region = "us-east1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "secondary_cluster_region_scp" {
name = "mypolicy-secondary-cluster"
location = "europe-west1"
service_class = "gcp-memorystore-redis"
description = "Secondary cluster service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.secondary_cluster_consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "secondary_cluster_consumer_subnet" {
name = "mysubnet-secondary-cluster"
ip_cidr_range = "10.0.2.0/29"
region = "europe-west1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "mynetwork"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigRdbConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs;
import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("mynetwork")
.autoCreateSubnetworks(false)
.build());
var primaryClusterConsumerSubnet = new Subnetwork("primaryClusterConsumerSubnet", SubnetworkArgs.builder()
.name("mysubnet-primary-cluster")
.ipCidrRange("10.0.1.0/29")
.region("us-east1")
.network(consumerNet.id())
.build());
var primaryClusterRegionScp = new ServiceConnectionPolicy("primaryClusterRegionScp", ServiceConnectionPolicyArgs.builder()
.name("mypolicy-primary-cluster")
.location("us-east1")
.serviceClass("gcp-memorystore-redis")
.description("Primary cluster service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(primaryClusterConsumerSubnet.id())
.build())
.build());
// Primary cluster
var primaryCluster = new Cluster("primaryCluster", ClusterArgs.builder()
.name("my-primary-cluster")
.region("us-east1")
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.authorizationMode("AUTH_MODE_DISABLED")
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
.shardCount(3)
.redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
.nodeType("REDIS_HIGHMEM_MEDIUM")
.persistenceConfig(ClusterPersistenceConfigArgs.builder()
.mode("RDB")
.rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()
.rdbSnapshotPeriod("ONE_HOUR")
.rdbSnapshotStartTime("2024-10-02T15:01:23Z")
.build())
.build())
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("MULTI_ZONE")
.build())
.replicaCount(1)
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("MONDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.deletionProtectionEnabled(true)
.build(), CustomResourceOptions.builder()
.dependsOn(primaryClusterRegionScp)
.build());
var secondaryClusterConsumerSubnet = new Subnetwork("secondaryClusterConsumerSubnet", SubnetworkArgs.builder()
.name("mysubnet-secondary-cluster")
.ipCidrRange("10.0.2.0/29")
.region("europe-west1")
.network(consumerNet.id())
.build());
var secondaryClusterRegionScp = new ServiceConnectionPolicy("secondaryClusterRegionScp", ServiceConnectionPolicyArgs.builder()
.name("mypolicy-secondary-cluster")
.location("europe-west1")
.serviceClass("gcp-memorystore-redis")
.description("Secondary cluster service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(secondaryClusterConsumerSubnet.id())
.build())
.build());
// Secondary cluster
var secondaryCluster = new Cluster("secondaryCluster", ClusterArgs.builder()
.name("my-secondary-cluster")
.region("europe-west1")
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.authorizationMode("AUTH_MODE_DISABLED")
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
.shardCount(3)
.redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
.nodeType("REDIS_HIGHMEM_MEDIUM")
.persistenceConfig(ClusterPersistenceConfigArgs.builder()
.mode("RDB")
.rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()
.rdbSnapshotPeriod("ONE_HOUR")
.rdbSnapshotStartTime("2024-10-02T15:01:23Z")
.build())
.build())
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("MULTI_ZONE")
.build())
.replicaCount(2)
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("WEDNESDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.deletionProtectionEnabled(true)
.crossClusterReplicationConfig(ClusterCrossClusterReplicationConfigArgs.builder()
.clusterRole("SECONDARY")
.primaryCluster(ClusterCrossClusterReplicationConfigPrimaryClusterArgs.builder()
.cluster(primaryCluster.id())
.build())
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(secondaryClusterRegionScp)
.build());
}
}
resources:
# Primary cluster
primaryCluster:
type: gcp:redis:Cluster
name: primary_cluster
properties:
name: my-primary-cluster
region: us-east1
pscConfigs:
- network: ${consumerNet.id}
authorizationMode: AUTH_MODE_DISABLED
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
shardCount: 3
redisConfigs:
maxmemory-policy: volatile-ttl
nodeType: REDIS_HIGHMEM_MEDIUM
persistenceConfig:
mode: RDB
rdbConfig:
rdbSnapshotPeriod: ONE_HOUR
rdbSnapshotStartTime: 2024-10-02T15:01:23Z
zoneDistributionConfig:
mode: MULTI_ZONE
replicaCount: 1
maintenancePolicy:
weeklyMaintenanceWindows:
- day: MONDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
deletionProtectionEnabled: true
options:
dependsOn:
- ${primaryClusterRegionScp}
# Secondary cluster
secondaryCluster:
type: gcp:redis:Cluster
name: secondary_cluster
properties:
name: my-secondary-cluster
region: europe-west1
pscConfigs:
- network: ${consumerNet.id}
authorizationMode: AUTH_MODE_DISABLED
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
shardCount: 3
redisConfigs:
maxmemory-policy: volatile-ttl
nodeType: REDIS_HIGHMEM_MEDIUM
persistenceConfig:
mode: RDB
rdbConfig:
rdbSnapshotPeriod: ONE_HOUR
rdbSnapshotStartTime: 2024-10-02T15:01:23Z
zoneDistributionConfig:
mode: MULTI_ZONE
replicaCount: 2
maintenancePolicy:
weeklyMaintenanceWindows:
- day: WEDNESDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
deletionProtectionEnabled: true # Cross cluster replication config
crossClusterReplicationConfig:
clusterRole: SECONDARY
primaryCluster:
cluster: ${primaryCluster.id}
options:
dependsOn:
- ${secondaryClusterRegionScp}
primaryClusterRegionScp:
type: gcp:networkconnectivity:ServiceConnectionPolicy
name: primary_cluster_region_scp
properties:
name: mypolicy-primary-cluster
location: us-east1
serviceClass: gcp-memorystore-redis
description: Primary cluster service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${primaryClusterConsumerSubnet.id}
primaryClusterConsumerSubnet:
type: gcp:compute:Subnetwork
name: primary_cluster_consumer_subnet
properties:
name: mysubnet-primary-cluster
ipCidrRange: 10.0.1.0/29
region: us-east1
network: ${consumerNet.id}
secondaryClusterRegionScp:
type: gcp:networkconnectivity:ServiceConnectionPolicy
name: secondary_cluster_region_scp
properties:
name: mypolicy-secondary-cluster
location: europe-west1
serviceClass: gcp-memorystore-redis
description: Secondary cluster service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${secondaryClusterConsumerSubnet.id}
secondaryClusterConsumerSubnet:
type: gcp:compute:Subnetwork
name: secondary_cluster_consumer_subnet
properties:
name: mysubnet-secondary-cluster
ipCidrRange: 10.0.2.0/29
region: europe-west1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: mynetwork
autoCreateSubnetworks: false
Redis Cluster Rdb
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "my-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "my-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "my-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
description: "my basic service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const cluster_rdb = new gcp.redis.Cluster("cluster-rdb", {
name: "rdb-cluster",
shardCount: 3,
pscConfigs: [{
network: consumerNet.id,
}],
region: "us-central1",
replicaCount: 0,
nodeType: "REDIS_SHARED_CORE_NANO",
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED",
authorizationMode: "AUTH_MODE_DISABLED",
redisConfigs: {
"maxmemory-policy": "volatile-ttl",
},
deletionProtectionEnabled: true,
zoneDistributionConfig: {
mode: "MULTI_ZONE",
},
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "MONDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
persistenceConfig: {
mode: "RDB",
rdbConfig: {
rdbSnapshotPeriod: "ONE_HOUR",
rdbSnapshotStartTime: "2024-10-02T15:01:23Z",
},
},
}, {
dependsOn: [_default],
});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="my-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="my-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="my-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
description="my basic service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
cluster_rdb = gcp.redis.Cluster("cluster-rdb",
name="rdb-cluster",
shard_count=3,
psc_configs=[{
"network": consumer_net.id,
}],
region="us-central1",
replica_count=0,
node_type="REDIS_SHARED_CORE_NANO",
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED",
authorization_mode="AUTH_MODE_DISABLED",
redis_configs={
"maxmemory-policy": "volatile-ttl",
},
deletion_protection_enabled=True,
zone_distribution_config={
"mode": "MULTI_ZONE",
},
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "MONDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
persistence_config={
"mode": "RDB",
"rdb_config": {
"rdb_snapshot_period": "ONE_HOUR",
"rdb_snapshot_start_time": "2024-10-02T15:01:23Z",
},
},
opts = pulumi.ResourceOptions(depends_on=[default]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "my-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "my-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "my-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Description = "my basic service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var cluster_rdb = new Gcp.Redis.Cluster("cluster-rdb", new()
{
Name = "rdb-cluster",
ShardCount = 3,
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
Region = "us-central1",
ReplicaCount = 0,
NodeType = "REDIS_SHARED_CORE_NANO",
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED",
AuthorizationMode = "AUTH_MODE_DISABLED",
RedisConfigs =
{
{ "maxmemory-policy", "volatile-ttl" },
},
DeletionProtectionEnabled = true,
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "MULTI_ZONE",
},
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "MONDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs
{
Mode = "RDB",
RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs
{
RdbSnapshotPeriod = "ONE_HOUR",
RdbSnapshotStartTime = "2024-10-02T15:01:23Z",
},
},
}, new CustomResourceOptions
{
DependsOn =
{
@default,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("my-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("my-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
_default, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("my-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("my basic service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "cluster-rdb", &redis.ClusterArgs{
Name: pulumi.String("rdb-cluster"),
ShardCount: pulumi.Int(3),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
Region: pulumi.String("us-central1"),
ReplicaCount: pulumi.Int(0),
NodeType: pulumi.String("REDIS_SHARED_CORE_NANO"),
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"),
AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"),
RedisConfigs: pulumi.StringMap{
"maxmemory-policy": pulumi.String("volatile-ttl"),
},
DeletionProtectionEnabled: pulumi.Bool(true),
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("MULTI_ZONE"),
},
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("MONDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
PersistenceConfig: &redis.ClusterPersistenceConfigArgs{
Mode: pulumi.String("RDB"),
RdbConfig: &redis.ClusterPersistenceConfigRdbConfigArgs{
RdbSnapshotPeriod: pulumi.String("ONE_HOUR"),
RdbSnapshotStartTime: pulumi.String("2024-10-02T15:01:23Z"),
},
},
}, pulumi.DependsOn([]pulumi.Resource{
_default,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_redis_cluster" "cluster-rdb" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default]
name = "rdb-cluster"
shard_count = 3
psc_configs {
network = gcp_compute_network.consumer_net.id
}
region = "us-central1"
replica_count = 0
node_type = "REDIS_SHARED_CORE_NANO"
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
authorization_mode = "AUTH_MODE_DISABLED"
redis_configs = {
"maxmemory-policy" = "volatile-ttl"
}
deletion_protection_enabled = true
zone_distribution_config = {
mode = "MULTI_ZONE"
}
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "MONDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
persistence_config = {
mode = "RDB"
rdb_config = {
rdb_snapshot_period = "ONE_HOUR"
rdb_snapshot_start_time = "2024-10-02T15:01:23Z"
}
}
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "my-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
description = "my basic service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "my-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs;
import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigRdbConfigArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("my-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("my-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
.name("my-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.description("my basic service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var cluster_rdb = new Cluster("cluster-rdb", ClusterArgs.builder()
.name("rdb-cluster")
.shardCount(3)
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.region("us-central1")
.replicaCount(0)
.nodeType("REDIS_SHARED_CORE_NANO")
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
.authorizationMode("AUTH_MODE_DISABLED")
.redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
.deletionProtectionEnabled(true)
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("MULTI_ZONE")
.build())
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("MONDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.persistenceConfig(ClusterPersistenceConfigArgs.builder()
.mode("RDB")
.rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()
.rdbSnapshotPeriod("ONE_HOUR")
.rdbSnapshotStartTime("2024-10-02T15:01:23Z")
.build())
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
}
}
resources:
cluster-rdb:
type: gcp:redis:Cluster
properties:
name: rdb-cluster
shardCount: 3
pscConfigs:
- network: ${consumerNet.id}
region: us-central1
replicaCount: 0
nodeType: REDIS_SHARED_CORE_NANO
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
authorizationMode: AUTH_MODE_DISABLED
redisConfigs:
maxmemory-policy: volatile-ttl
deletionProtectionEnabled: true
zoneDistributionConfig:
mode: MULTI_ZONE
maintenancePolicy:
weeklyMaintenanceWindows:
- day: MONDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
persistenceConfig:
mode: RDB
rdbConfig:
rdbSnapshotPeriod: ONE_HOUR
rdbSnapshotStartTime: 2024-10-02T15:01:23Z
options:
dependsOn:
- ${default}
default:
type: gcp:networkconnectivity:ServiceConnectionPolicy
properties:
name: my-policy
location: us-central1
serviceClass: gcp-memorystore-redis
description: my basic service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: my-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: my-network
autoCreateSubnetworks: false
Redis Cluster Aof
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "my-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "my-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "my-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
description: "my basic service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const cluster_aof = new gcp.redis.Cluster("cluster-aof", {
name: "aof-cluster",
shardCount: 3,
pscConfigs: [{
network: consumerNet.id,
}],
region: "us-central1",
replicaCount: 0,
nodeType: "REDIS_SHARED_CORE_NANO",
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED",
authorizationMode: "AUTH_MODE_DISABLED",
redisConfigs: {
"maxmemory-policy": "volatile-ttl",
},
deletionProtectionEnabled: true,
zoneDistributionConfig: {
mode: "MULTI_ZONE",
},
maintenancePolicy: {
weeklyMaintenanceWindows: [{
day: "MONDAY",
startTime: {
hours: 1,
minutes: 0,
seconds: 0,
nanos: 0,
},
}],
},
persistenceConfig: {
mode: "AOF",
aofConfig: {
appendFsync: "EVERYSEC",
},
},
}, {
dependsOn: [_default],
});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="my-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="my-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="my-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
description="my basic service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
cluster_aof = gcp.redis.Cluster("cluster-aof",
name="aof-cluster",
shard_count=3,
psc_configs=[{
"network": consumer_net.id,
}],
region="us-central1",
replica_count=0,
node_type="REDIS_SHARED_CORE_NANO",
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED",
authorization_mode="AUTH_MODE_DISABLED",
redis_configs={
"maxmemory-policy": "volatile-ttl",
},
deletion_protection_enabled=True,
zone_distribution_config={
"mode": "MULTI_ZONE",
},
maintenance_policy={
"weekly_maintenance_windows": [{
"day": "MONDAY",
"start_time": {
"hours": 1,
"minutes": 0,
"seconds": 0,
"nanos": 0,
},
}],
},
persistence_config={
"mode": "AOF",
"aof_config": {
"append_fsync": "EVERYSEC",
},
},
opts = pulumi.ResourceOptions(depends_on=[default]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "my-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "my-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "my-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Description = "my basic service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var cluster_aof = new Gcp.Redis.Cluster("cluster-aof", new()
{
Name = "aof-cluster",
ShardCount = 3,
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
Region = "us-central1",
ReplicaCount = 0,
NodeType = "REDIS_SHARED_CORE_NANO",
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED",
AuthorizationMode = "AUTH_MODE_DISABLED",
RedisConfigs =
{
{ "maxmemory-policy", "volatile-ttl" },
},
DeletionProtectionEnabled = true,
ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs
{
Mode = "MULTI_ZONE",
},
MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs
{
WeeklyMaintenanceWindows = new[]
{
new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs
{
Day = "MONDAY",
StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs
{
Hours = 1,
Minutes = 0,
Seconds = 0,
Nanos = 0,
},
},
},
},
PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs
{
Mode = "AOF",
AofConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigAofConfigArgs
{
AppendFsync = "EVERYSEC",
},
},
}, new CustomResourceOptions
{
DependsOn =
{
@default,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("my-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("my-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
_default, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("my-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("my basic service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "cluster-aof", &redis.ClusterArgs{
Name: pulumi.String("aof-cluster"),
ShardCount: pulumi.Int(3),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
Region: pulumi.String("us-central1"),
ReplicaCount: pulumi.Int(0),
NodeType: pulumi.String("REDIS_SHARED_CORE_NANO"),
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"),
AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"),
RedisConfigs: pulumi.StringMap{
"maxmemory-policy": pulumi.String("volatile-ttl"),
},
DeletionProtectionEnabled: pulumi.Bool(true),
ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{
Mode: pulumi.String("MULTI_ZONE"),
},
MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{
WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{
&redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{
Day: pulumi.String("MONDAY"),
StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{
Hours: pulumi.Int(1),
Minutes: pulumi.Int(0),
Seconds: pulumi.Int(0),
Nanos: pulumi.Int(0),
},
},
},
},
PersistenceConfig: &redis.ClusterPersistenceConfigArgs{
Mode: pulumi.String("AOF"),
AofConfig: &redis.ClusterPersistenceConfigAofConfigArgs{
AppendFsync: pulumi.String("EVERYSEC"),
},
},
}, pulumi.DependsOn([]pulumi.Resource{
_default,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_redis_cluster" "cluster-aof" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default]
name = "aof-cluster"
shard_count = 3
psc_configs {
network = gcp_compute_network.consumer_net.id
}
region = "us-central1"
replica_count = 0
node_type = "REDIS_SHARED_CORE_NANO"
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_DISABLED"
authorization_mode = "AUTH_MODE_DISABLED"
redis_configs = {
"maxmemory-policy" = "volatile-ttl"
}
deletion_protection_enabled = true
zone_distribution_config = {
mode = "MULTI_ZONE"
}
maintenance_policy = {
weekly_maintenance_windows = [{
"day" = "MONDAY"
"startTime" = {
"hours" = 1
"minutes" = 0
"seconds" = 0
"nanos" = 0
}
}]
}
persistence_config = {
mode = "AOF"
aof_config = {
append_fsync = "EVERYSEC"
}
}
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "my-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
description = "my basic service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "my-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs;
import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs;
import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;
import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigAofConfigArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("my-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("my-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
.name("my-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.description("my basic service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var cluster_aof = new Cluster("cluster-aof", ClusterArgs.builder()
.name("aof-cluster")
.shardCount(3)
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.region("us-central1")
.replicaCount(0)
.nodeType("REDIS_SHARED_CORE_NANO")
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
.authorizationMode("AUTH_MODE_DISABLED")
.redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
.deletionProtectionEnabled(true)
.zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
.mode("MULTI_ZONE")
.build())
.maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
.weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
.day("MONDAY")
.startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
.hours(1)
.minutes(0)
.seconds(0)
.nanos(0)
.build())
.build())
.build())
.persistenceConfig(ClusterPersistenceConfigArgs.builder()
.mode("AOF")
.aofConfig(ClusterPersistenceConfigAofConfigArgs.builder()
.appendFsync("EVERYSEC")
.build())
.build())
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
}
}
resources:
cluster-aof:
type: gcp:redis:Cluster
properties:
name: aof-cluster
shardCount: 3
pscConfigs:
- network: ${consumerNet.id}
region: us-central1
replicaCount: 0
nodeType: REDIS_SHARED_CORE_NANO
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
authorizationMode: AUTH_MODE_DISABLED
redisConfigs:
maxmemory-policy: volatile-ttl
deletionProtectionEnabled: true
zoneDistributionConfig:
mode: MULTI_ZONE
maintenancePolicy:
weeklyMaintenanceWindows:
- day: MONDAY
startTime:
hours: 1
minutes: 0
seconds: 0
nanos: 0
persistenceConfig:
mode: AOF
aofConfig:
appendFsync: EVERYSEC
options:
dependsOn:
- ${default}
default:
type: gcp:networkconnectivity:ServiceConnectionPolicy
properties:
name: my-policy
location: us-central1
serviceClass: gcp-memorystore-redis
description: my basic service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: my-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: my-network
autoCreateSubnetworks: false
Redis Cluster Cmek
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "my-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "my-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const _default = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "my-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
description: "my basic service connection policy",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const cluster_cmek = new gcp.redis.Cluster("cluster-cmek", {
name: "cmek-cluster",
shardCount: 3,
pscConfigs: [{
network: consumerNet.id,
}],
kmsKey: "my-key",
region: "us-central1",
deletionProtectionEnabled: true,
}, {
dependsOn: [_default],
});
const project = gcp.organizations.getProject({});
import pulumi
import pulumi_gcp as gcp
consumer_net = gcp.compute.Network("consumer_net",
name="my-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="my-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="my-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
description="my basic service connection policy",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
cluster_cmek = gcp.redis.Cluster("cluster-cmek",
name="cmek-cluster",
shard_count=3,
psc_configs=[{
"network": consumer_net.id,
}],
kms_key="my-key",
region="us-central1",
deletion_protection_enabled=True,
opts = pulumi.ResourceOptions(depends_on=[default]))
project = gcp.organizations.get_project()
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "my-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "my-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "my-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Description = "my basic service connection policy",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var cluster_cmek = new Gcp.Redis.Cluster("cluster-cmek", new()
{
Name = "cmek-cluster",
ShardCount = 3,
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
KmsKey = "my-key",
Region = "us-central1",
DeletionProtectionEnabled = true,
}, new CustomResourceOptions
{
DependsOn =
{
@default,
},
});
var project = Gcp.Organizations.GetProject.Invoke();
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/organizations"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("my-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("my-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
_default, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("my-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Description: pulumi.String("my basic service connection policy"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "cluster-cmek", &redis.ClusterArgs{
Name: pulumi.String("cmek-cluster"),
ShardCount: pulumi.Int(3),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
KmsKey: pulumi.String("my-key"),
Region: pulumi.String("us-central1"),
DeletionProtectionEnabled: pulumi.Bool(true),
}, pulumi.DependsOn([]pulumi.Resource{
_default,
}))
if err != nil {
return err
}
_, err = organizations.LookupProject(ctx, &organizations.LookupProjectArgs{}, nil)
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
data "gcp_organizations_getproject" "project" {
}
resource "gcp_redis_cluster" "cluster-cmek" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default]
name = "cmek-cluster"
shard_count = 3
psc_configs {
network = gcp_compute_network.consumer_net.id
}
kms_key = "my-key"
region = "us-central1"
deletion_protection_enabled = true
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "my-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
description = "my basic service connection policy"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "my-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "my-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
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 consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("my-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("my-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var default_ = new ServiceConnectionPolicy("default", ServiceConnectionPolicyArgs.builder()
.name("my-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.description("my basic service connection policy")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var cluster_cmek = new Cluster("cluster-cmek", ClusterArgs.builder()
.name("cmek-cluster")
.shardCount(3)
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.kmsKey("my-key")
.region("us-central1")
.deletionProtectionEnabled(true)
.build(), CustomResourceOptions.builder()
.dependsOn(default_)
.build());
final var project = OrganizationsFunctions.getProject(GetProjectArgs.builder()
.build());
}
}
resources:
cluster-cmek:
type: gcp:redis:Cluster
properties:
name: cmek-cluster
shardCount: 3
pscConfigs:
- network: ${consumerNet.id}
kmsKey: my-key
region: us-central1
deletionProtectionEnabled: true
options:
dependsOn:
- ${default}
default:
type: gcp:networkconnectivity:ServiceConnectionPolicy
properties:
name: my-policy
location: us-central1
serviceClass: gcp-memorystore-redis
description: my basic service connection policy
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: my-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: my-network
autoCreateSubnetworks: false
variables:
project:
fn::invoke:
function: gcp:organizations:getProject
arguments: {}
Redis Cluster Flexible Ca
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const _default = new gcp.certificateauthority.CaPool("default", {
name: "ca-pool",
location: "us-central1",
tier: "ENTERPRISE",
});
const defaultAuthority = new gcp.certificateauthority.Authority("default", {
pool: _default.name,
certificateAuthorityId: "ca-auth",
location: "us-central1",
config: {
subjectConfig: {
subject: {
organization: "Google",
commonName: "my-redis-ca",
},
},
x509Config: {
caOptions: {
isCa: true,
},
keyUsage: {
baseKeyUsage: {
certSign: true,
crlSign: true,
},
extendedKeyUsage: {
serverAuth: true,
},
},
},
},
keySpec: {
algorithm: "RSA_PKCS1_4096_SHA256",
},
ignoreActiveCertificatesOnDeletion: true,
deletionProtection: false,
skipGracePeriod: true,
});
const consumerNet = new gcp.compute.Network("consumer_net", {
name: "ca-network",
autoCreateSubnetworks: false,
});
const consumerSubnet = new gcp.compute.Subnetwork("consumer_subnet", {
name: "ca-subnet",
ipCidrRange: "10.0.0.248/29",
region: "us-central1",
network: consumerNet.id,
});
const defaultServiceConnectionPolicy = new gcp.networkconnectivity.ServiceConnectionPolicy("default", {
name: "ca-policy",
location: "us-central1",
serviceClass: "gcp-memorystore-redis",
network: consumerNet.id,
pscConfig: {
subnetworks: [consumerSubnet.id],
},
});
const test_cluster = new gcp.redis.Cluster("test-cluster", {
name: "ca-cluster",
shardCount: 3,
region: "us-central1",
pscConfigs: [{
network: consumerNet.id,
}],
transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION",
serverCaMode: "SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA",
serverCaPool: _default.id,
deletionProtectionEnabled: true,
}, {
dependsOn: [
defaultServiceConnectionPolicy,
defaultAuthority,
],
});
import pulumi
import pulumi_gcp as gcp
default = gcp.certificateauthority.CaPool("default",
name="ca-pool",
location="us-central1",
tier="ENTERPRISE")
default_authority = gcp.certificateauthority.Authority("default",
pool=default.name,
certificate_authority_id="ca-auth",
location="us-central1",
config={
"subject_config": {
"subject": {
"organization": "Google",
"common_name": "my-redis-ca",
},
},
"x509_config": {
"ca_options": {
"is_ca": True,
},
"key_usage": {
"base_key_usage": {
"cert_sign": True,
"crl_sign": True,
},
"extended_key_usage": {
"server_auth": True,
},
},
},
},
key_spec={
"algorithm": "RSA_PKCS1_4096_SHA256",
},
ignore_active_certificates_on_deletion=True,
deletion_protection=False,
skip_grace_period=True)
consumer_net = gcp.compute.Network("consumer_net",
name="ca-network",
auto_create_subnetworks=False)
consumer_subnet = gcp.compute.Subnetwork("consumer_subnet",
name="ca-subnet",
ip_cidr_range="10.0.0.248/29",
region="us-central1",
network=consumer_net.id)
default_service_connection_policy = gcp.networkconnectivity.ServiceConnectionPolicy("default",
name="ca-policy",
location="us-central1",
service_class="gcp-memorystore-redis",
network=consumer_net.id,
psc_config={
"subnetworks": [consumer_subnet.id],
})
test_cluster = gcp.redis.Cluster("test-cluster",
name="ca-cluster",
shard_count=3,
region="us-central1",
psc_configs=[{
"network": consumer_net.id,
}],
transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION",
server_ca_mode="SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA",
server_ca_pool=default.id,
deletion_protection_enabled=True,
opts = pulumi.ResourceOptions(depends_on=[
default_service_connection_policy,
default_authority,
]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var @default = new Gcp.CertificateAuthority.CaPool("default", new()
{
Name = "ca-pool",
Location = "us-central1",
Tier = "ENTERPRISE",
});
var defaultAuthority = new Gcp.CertificateAuthority.Authority("default", new()
{
Pool = @default.Name,
CertificateAuthorityId = "ca-auth",
Location = "us-central1",
Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs
{
SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs
{
Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs
{
Organization = "Google",
CommonName = "my-redis-ca",
},
},
X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs
{
CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs
{
IsCa = true,
},
KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs
{
BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs
{
CertSign = true,
CrlSign = true,
},
ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs
{
ServerAuth = true,
},
},
},
},
KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs
{
Algorithm = "RSA_PKCS1_4096_SHA256",
},
IgnoreActiveCertificatesOnDeletion = true,
DeletionProtection = false,
SkipGracePeriod = true,
});
var consumerNet = new Gcp.Compute.Network("consumer_net", new()
{
Name = "ca-network",
AutoCreateSubnetworks = false,
});
var consumerSubnet = new Gcp.Compute.Subnetwork("consumer_subnet", new()
{
Name = "ca-subnet",
IpCidrRange = "10.0.0.248/29",
Region = "us-central1",
Network = consumerNet.Id,
});
var defaultServiceConnectionPolicy = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("default", new()
{
Name = "ca-policy",
Location = "us-central1",
ServiceClass = "gcp-memorystore-redis",
Network = consumerNet.Id,
PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs
{
Subnetworks = new[]
{
consumerSubnet.Id,
},
},
});
var test_cluster = new Gcp.Redis.Cluster("test-cluster", new()
{
Name = "ca-cluster",
ShardCount = 3,
Region = "us-central1",
PscConfigs = new[]
{
new Gcp.Redis.Inputs.ClusterPscConfigArgs
{
Network = consumerNet.Id,
},
},
TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION",
ServerCaMode = "SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA",
ServerCaPool = @default.Id,
DeletionProtectionEnabled = true,
}, new CustomResourceOptions
{
DependsOn =
{
defaultServiceConnectionPolicy,
defaultAuthority,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/certificateauthority"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/networkconnectivity"
"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/redis"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_default, err := certificateauthority.NewCaPool(ctx, "default", &certificateauthority.CaPoolArgs{
Name: pulumi.String("ca-pool"),
Location: pulumi.String("us-central1"),
Tier: pulumi.String("ENTERPRISE"),
})
if err != nil {
return err
}
defaultAuthority, err := certificateauthority.NewAuthority(ctx, "default", &certificateauthority.AuthorityArgs{
Pool: _default.Name,
CertificateAuthorityId: pulumi.String("ca-auth"),
Location: pulumi.String("us-central1"),
Config: &certificateauthority.AuthorityConfigArgs{
SubjectConfig: &certificateauthority.AuthorityConfigSubjectConfigArgs{
Subject: &certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{
Organization: pulumi.String("Google"),
CommonName: pulumi.String("my-redis-ca"),
},
},
X509Config: &certificateauthority.AuthorityConfigX509ConfigArgs{
CaOptions: &certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{
IsCa: pulumi.Bool(true),
},
KeyUsage: &certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{
BaseKeyUsage: &certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{
CertSign: pulumi.Bool(true),
CrlSign: pulumi.Bool(true),
},
ExtendedKeyUsage: &certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{
ServerAuth: pulumi.Bool(true),
},
},
},
},
KeySpec: &certificateauthority.AuthorityKeySpecArgs{
Algorithm: pulumi.String("RSA_PKCS1_4096_SHA256"),
},
IgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),
DeletionProtection: pulumi.Bool(false),
SkipGracePeriod: pulumi.Bool(true),
})
if err != nil {
return err
}
consumerNet, err := compute.NewNetwork(ctx, "consumer_net", &compute.NetworkArgs{
Name: pulumi.String("ca-network"),
AutoCreateSubnetworks: pulumi.Bool(false),
})
if err != nil {
return err
}
consumerSubnet, err := compute.NewSubnetwork(ctx, "consumer_subnet", &compute.SubnetworkArgs{
Name: pulumi.String("ca-subnet"),
IpCidrRange: pulumi.String("10.0.0.248/29"),
Region: pulumi.String("us-central1"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
})
if err != nil {
return err
}
defaultServiceConnectionPolicy, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "default", &networkconnectivity.ServiceConnectionPolicyArgs{
Name: pulumi.String("ca-policy"),
Location: pulumi.String("us-central1"),
ServiceClass: pulumi.String("gcp-memorystore-redis"),
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{
Subnetworks: pulumi.StringArray{
consumerSubnet.ID().ToIDOutput().ToStringOutput(),
},
},
})
if err != nil {
return err
}
_, err = redis.NewCluster(ctx, "test-cluster", &redis.ClusterArgs{
Name: pulumi.String("ca-cluster"),
ShardCount: pulumi.Int(3),
Region: pulumi.String("us-central1"),
PscConfigs: redis.ClusterPscConfigArray{
&redis.ClusterPscConfigArgs{
Network: consumerNet.ID().ToIDOutput().ToStringOutput(),
},
},
TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"),
ServerCaMode: pulumi.String("SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA"),
ServerCaPool: _default.ID().ToIDOutput().ToStringOutput(),
DeletionProtectionEnabled: pulumi.Bool(true),
}, pulumi.DependsOn([]pulumi.Resource{
defaultServiceConnectionPolicy,
defaultAuthority,
}))
if err != nil {
return err
}
return nil
})
}
pulumi {
required_providers {
gcp = {
source = "pulumi/gcp"
}
}
}
resource "gcp_redis_cluster" "test-cluster" {
depends_on = [gcp_networkconnectivity_serviceconnectionpolicy.default, gcp_certificateauthority_authority.default]
name = "ca-cluster"
shard_count = 3
region = "us-central1"
psc_configs {
network = gcp_compute_network.consumer_net.id
}
transit_encryption_mode = "TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION"
server_ca_mode = "SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA"
server_ca_pool = gcp_certificateauthority_capool.default.id
deletion_protection_enabled = true
}
resource "gcp_certificateauthority_capool" "default" {
name = "ca-pool"
location = "us-central1"
tier = "ENTERPRISE"
}
resource "gcp_certificateauthority_authority" "default" {
pool = gcp_certificateauthority_capool.default.name
certificate_authority_id = "ca-auth"
location = "us-central1"
config = {
subject_config = {
subject = {
organization = "Google"
common_name = "my-redis-ca"
}
}
x509_config = {
ca_options = {
is_ca = true
}
key_usage = {
base_key_usage = {
cert_sign = true
crl_sign = true
}
extended_key_usage = {
server_auth = true
}
}
}
}
key_spec = {
algorithm = "RSA_PKCS1_4096_SHA256"
}
ignore_active_certificates_on_deletion = true
deletion_protection = false
skip_grace_period = true
}
resource "gcp_networkconnectivity_serviceconnectionpolicy" "default" {
name = "ca-policy"
location = "us-central1"
service_class = "gcp-memorystore-redis"
network = gcp_compute_network.consumer_net.id
psc_config = {
subnetworks = [gcp_compute_subnetwork.consumer_subnet.id]
}
}
resource "gcp_compute_subnetwork" "consumer_subnet" {
name = "ca-subnet"
ip_cidr_range = "10.0.0.248/29"
region = "us-central1"
network = gcp_compute_network.consumer_net.id
}
resource "gcp_compute_network" "consumer_net" {
name = "ca-network"
auto_create_subnetworks = false
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.certificateauthority.CaPool;
import com.pulumi.gcp.certificateauthority.CaPoolArgs;
import com.pulumi.gcp.certificateauthority.Authority;
import com.pulumi.gcp.certificateauthority.AuthorityArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;
import com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
import com.pulumi.gcp.redis.Cluster;
import com.pulumi.gcp.redis.ClusterArgs;
import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
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 default_ = new CaPool("default", CaPoolArgs.builder()
.name("ca-pool")
.location("us-central1")
.tier("ENTERPRISE")
.build());
var defaultAuthority = new Authority("defaultAuthority", AuthorityArgs.builder()
.pool(default_.name())
.certificateAuthorityId("ca-auth")
.location("us-central1")
.config(AuthorityConfigArgs.builder()
.subjectConfig(AuthorityConfigSubjectConfigArgs.builder()
.subject(AuthorityConfigSubjectConfigSubjectArgs.builder()
.organization("Google")
.commonName("my-redis-ca")
.build())
.build())
.x509Config(AuthorityConfigX509ConfigArgs.builder()
.caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()
.isCa(true)
.build())
.keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()
.baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()
.certSign(true)
.crlSign(true)
.build())
.extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()
.serverAuth(true)
.build())
.build())
.build())
.build())
.keySpec(AuthorityKeySpecArgs.builder()
.algorithm("RSA_PKCS1_4096_SHA256")
.build())
.ignoreActiveCertificatesOnDeletion(true)
.deletionProtection(false)
.skipGracePeriod(true)
.build());
var consumerNet = new Network("consumerNet", NetworkArgs.builder()
.name("ca-network")
.autoCreateSubnetworks(false)
.build());
var consumerSubnet = new Subnetwork("consumerSubnet", SubnetworkArgs.builder()
.name("ca-subnet")
.ipCidrRange("10.0.0.248/29")
.region("us-central1")
.network(consumerNet.id())
.build());
var defaultServiceConnectionPolicy = new ServiceConnectionPolicy("defaultServiceConnectionPolicy", ServiceConnectionPolicyArgs.builder()
.name("ca-policy")
.location("us-central1")
.serviceClass("gcp-memorystore-redis")
.network(consumerNet.id())
.pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
.subnetworks(consumerSubnet.id())
.build())
.build());
var test_cluster = new Cluster("test-cluster", ClusterArgs.builder()
.name("ca-cluster")
.shardCount(3)
.region("us-central1")
.pscConfigs(ClusterPscConfigArgs.builder()
.network(consumerNet.id())
.build())
.transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION")
.serverCaMode("SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA")
.serverCaPool(default_.id())
.deletionProtectionEnabled(true)
.build(), CustomResourceOptions.builder()
.dependsOn(
defaultServiceConnectionPolicy,
defaultAuthority)
.build());
}
}
resources:
test-cluster:
type: gcp:redis:Cluster
properties:
name: ca-cluster
shardCount: 3
region: us-central1
pscConfigs:
- network: ${consumerNet.id}
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION
serverCaMode: SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA
serverCaPool: ${default.id}
deletionProtectionEnabled: true
options:
dependsOn:
- ${defaultServiceConnectionPolicy}
- ${defaultAuthority}
default:
type: gcp:certificateauthority:CaPool
properties:
name: ca-pool
location: us-central1
tier: ENTERPRISE
defaultAuthority:
type: gcp:certificateauthority:Authority
name: default
properties:
pool: ${default.name}
certificateAuthorityId: ca-auth
location: us-central1
config:
subjectConfig:
subject:
organization: Google
commonName: my-redis-ca
x509Config:
caOptions:
isCa: true
keyUsage:
baseKeyUsage:
certSign: true
crlSign: true
extendedKeyUsage:
serverAuth: true
keySpec:
algorithm: RSA_PKCS1_4096_SHA256
ignoreActiveCertificatesOnDeletion: true
deletionProtection: false
skipGracePeriod: true
defaultServiceConnectionPolicy:
type: gcp:networkconnectivity:ServiceConnectionPolicy
name: default
properties:
name: ca-policy
location: us-central1
serviceClass: gcp-memorystore-redis
network: ${consumerNet.id}
pscConfig:
subnetworks:
- ${consumerSubnet.id}
consumerSubnet:
type: gcp:compute:Subnetwork
name: consumer_subnet
properties:
name: ca-subnet
ipCidrRange: 10.0.0.248/29
region: us-central1
network: ${consumerNet.id}
consumerNet:
type: gcp:compute:Network
name: consumer_net
properties:
name: ca-network
autoCreateSubnetworks: false
Import
Cluster can be imported using any of these accepted formats:
projects/{{project}}/locations/{{region}}/clusters/{{name}}{{project}}/{{region}}/{{name}}{{region}}/{{name}}{{name}}
When using the pulumi import command, Cluster can be imported using one of the formats above. For example:
$ pulumi import gcp:redis/cluster:Cluster default projects/{{project}}/locations/{{region}}/clusters/{{name}}
$ pulumi import gcp:redis/cluster:Cluster default {{project}}/{{region}}/{{name}}
$ pulumi import gcp:redis/cluster:Cluster default {{region}}/{{name}}
$ pulumi import gcp:redis/cluster:Cluster default {{name}}
Constructors
- Cluster(String name, {ClusterArgs? args, CustomResourceOptions? options})
-
Creates a new Cluster.
nameThe Pulumi resource name.argsArguments used to configure this Cluster. The set of arguments for Cluster.optionsResource options controlling this resource's behavior. - Cluster.reference(String urn)
- Creates a typed reference to an existing Cluster resource.
Properties
-
aclPolicy
↔ Output<
String?> -
Optional. The name of the ACL policy to attach to the cluster.
latefinal
-
Optional. The authorization mode of the Redis cluster. If not provided, auth feature is disabled for the cluster.
Default value is
AUTH_MODE_DISABLED. Possible values are:AUTH_MODE_UNSPECIFIED,AUTH_MODE_IAM_AUTH,AUTH_MODE_DISABLED.latefinal -
automatedBackupConfig
↔ Output<
ClusterAutomatedBackupConfig?> -
The automated backup config for a instance.
Structure is documented below.
latefinal
-
availableMaintenanceVersions
↔ Output<
List< String> > -
This field is used to determine the available maintenance versions for the self service update.
latefinal
-
backupCollection
↔ Output<
String> -
The backup collection full resource name.
Example: projects/{project}/locations/{location}/backupCollections/{collection}
latefinal
-
childResources
→ Set<
Resource> -
finalinherited
-
completionSources
↔ Map<
String, IOutputCompletionSource> -
latefinalinherited
-
createTime
↔ Output<
String> -
The timestamp associated with the cluster creation request. A timestamp in
RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional
digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
latefinal
-
crossClusterReplicationConfig
↔ Output<
ClusterCrossClusterReplicationConfig> -
Cross cluster replication config
Structure is documented below.
latefinal
-
deletionPolicy
↔ Output<
String> -
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
When a 'terraform destroy' or 'pulumi up' would delete the resource,
the command will fail if this field is set to "PREVENT" in Terraform state.
When set to "ABANDON", the command will remove the resource from Terraform
management without updating or deleting the resource in the API.
When set to "DELETE", deleting the resource is allowed.
latefinal
-
deletionProtectionEnabled
↔ Output<
bool?> -
Optional. Indicates if the cluster is deletion protected or not.
If the value if set to true, any delete cluster operation will fail.
Default value is true.
latefinal
-
discoveryEndpoints
↔ Output<
List< ClusterDiscoveryEndpoint> > -
Output only. Endpoints created on each given network,
for Redis clients to connect to the cluster.
Currently only one endpoint is supported.
Structure is documented below.
latefinal
-
effectiveLabels
↔ Output<
Map< String, String> > -
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
latefinal
-
effectiveMaintenanceVersion
↔ Output<
String> -
This field represents the actual maintenance version of the cluster.
latefinal
-
gcsSource
↔ Output<
ClusterGcsSource?> -
Backups stored in Cloud Storage buckets. The Cloud Storage buckets need to be the same region as the clusters.
Structure is documented below.
latefinal
- hashCode → int
-
The hash code for this object.
no setterinherited
-
id
↔ Output<
String> -
getter/setter pairinherited
-
isAclPolicyInSync
↔ Output<
bool> -
Optional. Whether the ACL policy is in sync with the cluster.
latefinal
- isCustom → bool
-
Returns whether this resource is provider-managed.
no setterinherited
- isProtected → bool
-
Returns whether this resource is protected from deletion.
no setterinherited
- isRemote → bool
-
Whether this resource is registered as remote.
no setterinherited
- isResourceReference → bool
-
Whether this instance represents a resource value returned over RPC.
finalinherited
-
kmsKey
↔ Output<
String?> -
The KMS key used to encrypt the at-rest data of the cluster.
latefinal
-
labels
↔ Output<
Map< String, String> ?> -
Resource labels to represent user provided metadata.
Note: This field is non-authoritative, and will only manage the labels present in your configuration.
Please refer to the field
effectiveLabelsfor all of the labels present on the resource.latefinal -
maintenancePolicy
↔ Output<
ClusterMaintenancePolicy?> -
Maintenance policy for a cluster
Structure is documented below.
latefinal
-
maintenanceSchedules
↔ Output<
List< ClusterMaintenanceSchedule> > -
Upcoming maintenance schedule.
Structure is documented below.
latefinal
-
maintenanceVersion
↔ Output<
String?> -
This field can be used to trigger self service update to indicate the desired maintenance version. The input to this field can be determined by the availableMaintenanceVersions field.
Note: This field can only be specified when updating an existing cluster to a newer version. Downgrades are currently not supported!
latefinal
-
managedBackupSource
↔ Output<
ClusterManagedBackupSource?> -
Backups that generated and managed by memorystore.
Structure is documented below.
latefinal
-
managedServerCas
↔ Output<
List< ClusterManagedServerCa> > -
Cluster's Certificate Authority. This field will only be populated if Redis Cluster's transitEncryptionMode is TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION
Structure is documented below.
latefinal
-
name
↔ Output<
String> -
Unique name of the resource in this scope including project and location using the form:
projects/{projectId}/locations/{locationId}/clusters/{clusterId}
latefinal
-
nodeType
↔ Output<
String> -
The nodeType for the Redis cluster.
If not provided, REDIS_HIGHMEM_MEDIUM will be used as default
Possible values are:
REDIS_SHARED_CORE_NANO,REDIS_HIGHMEM_MEDIUM,REDIS_HIGHCPU_MEDIUM,REDIS_STANDARD_LARGE,REDIS_HIGHMEM_XLARGE,REDIS_HIGHMEM_2XLARGE,REDIS_STANDARD_SMALL.latefinal -
persistenceConfig
↔ Output<
ClusterPersistenceConfig> -
Persistence config (RDB, AOF) for the cluster.
Structure is documented below.
latefinal
-
preciseSizeGb
↔ Output<
double> -
Output only. Redis memory precise size in GB for the entire cluster.
latefinal
-
project
↔ Output<
String> -
The ID of the project in which the resource belongs.
If it is not provided, the provider project is used.
latefinal
-
pscConfigs
↔ Output<
List< ClusterPscConfig> ?> -
Required. Each PscConfig configures the consumer network where two
network addresses will be designated to the cluster for client access.
Currently, only one PscConfig is supported.
Structure is documented below.
latefinal
-
pscConnections
↔ Output<
List< ClusterPscConnection> > -
Output only. PSC connections for discovery of the cluster topology and accessing the cluster.
Structure is documented below.
latefinal
-
pscServiceAttachments
↔ Output<
List< ClusterPscServiceAttachment> > -
Service attachment details to configure Psc connections.
Structure is documented below.
latefinal
-
pulumiLabels
↔ Output<
Map< String, String> > -
The combination of labels configured directly on the resource
and default labels configured on the provider.
latefinal
-
redisConfigs
↔ Output<
Map< String, String> ?> -
Configure Redis Cluster behavior using a subset of native Redis configuration parameters.
Please check Memorystore documentation for the list of supported parameters:
https://cloud.google.com/memorystore/docs/cluster/supported-instance-configurations
latefinal
-
region
↔ Output<
String> -
The name of the region of the Redis cluster.
latefinal
-
replicaCount
↔ Output<
int?> -
Optional. The number of replica nodes per shard.
latefinal
-
resourceTransforms
→ List<
ResourceTransform> -
Inherited/explicit async transforms.
no setterinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
serverCaMode
↔ Output<
String> -
The serverCaMode for the TLS enabled Redis cluster.
If not provided, SERVER_CA_MODE_GOOGLE_MANAGED_PER_INSTANCE_CA will be used as default
Possible values are:
SERVER_CA_MODE_GOOGLE_MANAGED_PER_INSTANCE_CA,SERVER_CA_MODE_GOOGLE_MANAGED_SHARED_CA,SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA,SERVER_CA_MODE_UNSPECIFIED.latefinal -
serverCaPool
↔ Output<
String?> -
The resource name of the server CA pool for an instance with SERVER_CA_MODE_CUSTOMER_MANAGED_CAS_CA
as the server_ca_mode.
Format: projects/{project}/locations/{region}/caPools/{caPoolId}
latefinal
-
Required. Number of shards for the Redis cluster.
latefinal
-
sizeGb
↔ Output<
int> -
Output only. Redis memory size in GB for the entire cluster.
latefinal
-
state
↔ Output<
String> -
The current state of this cluster. Can be CREATING, READY, UPDATING, DELETING and SUSPENDED
latefinal
-
stateInfos
↔ Output<
List< ClusterStateInfo> > -
Output only. Additional information about the current state of the cluster.
Structure is documented below.
latefinal
-
transformations
→ List<
ResourceTransformation> -
Inherited/explicit legacy transformations.
no setterinherited
-
transitEncryptionMode
↔ Output<
String?> -
Optional. The in-transit encryption for the Redis cluster.
If not provided, encryption is disabled for the cluster.
Default value is
TRANSIT_ENCRYPTION_MODE_DISABLED. Possible values are:TRANSIT_ENCRYPTION_MODE_UNSPECIFIED,TRANSIT_ENCRYPTION_MODE_DISABLED,TRANSIT_ENCRYPTION_MODE_SERVER_AUTHENTICATION.latefinal -
uid
↔ Output<
String> -
System assigned, unique identifier for the cluster.
latefinal
-
urn
↔ Output<
String> -
latefinalinherited
-
zoneDistributionConfig
↔ Output<
ClusterZoneDistributionConfig> -
Immutable. Zone distribution config for Memorystore Redis cluster.
Structure is documented below.
latefinal
Methods
-
failId(
Object error) → void -
Completes this resource ID with an error when registration fails.
inherited
-
failOutputs(
Object error) → void -
Completes all output properties with
error.inherited -
failUrn(
Object error) → void -
Completes this resource URN with an error when registration fails.
inherited
-
getProvider(
String moduleMember) → ProviderResource? -
Returns provider for
moduleMember's package, if configured.inherited -
getResourceName(
) → String -
Returns this resource's logical name.
inherited
-
getResourceType(
) → String -
Returns this resource's Pulumi type token.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
registerOutput<
T> (String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output< T> -
Registers a dynamic output property for this resource.
inherited
-
resolveId(
String? value, {required bool isKnown}) → void -
Resolves the provider-assigned ID for this resource.
inherited
-
resolveOutputs(
Struct outputs) → void -
Resolves all output properties from a monitor response payload.
inherited
-
resolveUrn(
String value) → void -
Resolves this resource's URN once assigned by the engine.
inherited
-
serializeProperties(
Map< String, dynamic> properties) → Future<Struct> -
Serializes resource properties for RPC transmission.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited