A Pulumi provider SDK for creating and managing Amazon Web Services (AWS) cloud resources in Go, providing strongly-typed resource classes and data sources for all major AWS services.
This document covers the AWS in-memory caching services available in the Pulumi AWS Go SDK, including Amazon ElastiCache (Redis/Memcached/Valkey) and Amazon MemoryDB for Redis.
import (
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/elasticache"
"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/memorydb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)// Resource constructors
NewCluster(ctx, name, args, opts) (*Cluster, error)
NewGlobalReplicationGroup(ctx, name, args, opts) (*GlobalReplicationGroup, error)
NewParameterGroup(ctx, name, args, opts) (*ParameterGroup, error)
NewReplicationGroup(ctx, name, args, opts) (*ReplicationGroup, error)
NewReservedCacheNode(ctx, name, args, opts) (*ReservedCacheNode, error)
NewServerlessCache(ctx, name, args, opts) (*ServerlessCache, error)
NewSubnetGroup(ctx, name, args, opts) (*SubnetGroup, error)
NewUser(ctx, name, args, opts) (*User, error)
NewUserGroup(ctx, name, args, opts) (*UserGroup, error)
NewUserGroupAssociation(ctx, name, args, opts) (*UserGroupAssociation, error)
// Data source lookups
GetCluster(ctx, name, id, state, opts) (*Cluster, error)
GetGlobalReplicationGroup(ctx, name, id, state, opts) (*GlobalReplicationGroup, error)
GetParameterGroup(ctx, name, id, state, opts) (*ParameterGroup, error)
GetReplicationGroup(ctx, name, id, state, opts) (*ReplicationGroup, error)
GetReservedCacheNode(ctx, name, id, state, opts) (*ReservedCacheNode, error)
GetReservedCacheNodeOffering(ctx, args, opts) (*GetReservedCacheNodeOfferingResult, error)
GetServerlessCache(ctx, name, id, state, opts) (*ServerlessCache, error)
GetSubnetGroup(ctx, name, id, state, opts) (*SubnetGroup, error)
GetUser(ctx, name, id, state, opts) (*User, error)
GetUserGroup(ctx, name, id, state, opts) (*UserGroup, error)
GetUserGroupAssociation(ctx, name, id, state, opts) (*UserGroupAssociation, error)Provides an ElastiCache Cluster resource. Manages a Memcached cluster, a single-node Redis/Valkey instance, or a read replica in a Redis Cluster Mode Enabled replication group.
Note: For Redis/Valkey Cluster Mode Enabled replication groups with multiple primaries/shards, use
elasticache.ReplicationGroupinstead.
Note: Changes to
applyImmediately=falseattributes take effect in the next maintenance window, which may cause a diff in plan output until the change is applied.
func NewCluster(ctx *pulumi.Context,
name string, args *ClusterArgs, opts ...pulumi.ResourceOption) (*Cluster, error)type ClusterArgs struct {
// Apply modifications immediately. Default: false (next maintenance window)
ApplyImmediately pulumi.BoolPtrInput
// Auto-apply minor engine upgrades during maintenance. Supported for Redis 6+. Default: true
AutoMinorVersionUpgrade pulumi.StringPtrInput
// Availability Zone for the cluster. Use PreferredAvailabilityZones for multi-AZ
AvailabilityZone pulumi.StringPtrInput
// AZ mode for Memcached: "single-az" (default) or "cross-az"
// For cross-az, NumCacheNodes must be > 1
AzMode pulumi.StringPtrInput
// Unique cluster ID. ElastiCache converts to lowercase (required)
ClusterId pulumi.StringInput
// Cache engine: "memcached", "redis", or "valkey" (required)
Engine pulumi.StringPtrInput
// Engine version. Defaults to latest. For Redis 7+: "7.2"; for Redis 6: "6.2" or "6.x"
EngineVersion pulumi.StringPtrInput
// Snapshot name to create before deletion
FinalSnapshotIdentifier pulumi.StringPtrInput
// IP version for discovery protocol: "ipv4" or "ipv6"
IpDiscovery pulumi.StringPtrInput
// Log delivery configurations (SLOWLOG or Engine Log)
LogDeliveryConfigurations ClusterLogDeliveryConfigurationArrayInput
// Maintenance window in "ddd:hh24:mi-ddd:hh24:mi" UTC format
MaintenanceWindow pulumi.StringPtrInput
// IP versions for connections: "ipv4", "ipv6", or "dualStack"
NetworkType pulumi.StringPtrInput
// Node instance type (e.g. "cache.r6g.large")
NodeType pulumi.StringPtrInput
// SNS topic ARN for ElastiCache notifications
NotificationTopicArn pulumi.StringPtrInput
// Number of cache nodes. Redis: must be 1. Memcached: 1-40
NumCacheNodes pulumi.IntPtrInput
// Outpost mode: "single-outpost" (only supported value)
OutpostMode pulumi.StringPtrInput
// Parameter group name (default group if omitted)
ParameterGroupName pulumi.StringPtrInput
// Port number. Memcached default: 11211; Redis default: 6379
Port pulumi.IntPtrInput
// List of AZs for Memcached nodes (multi-AZ)
PreferredAvailabilityZones pulumi.StringArrayInput
// Outpost ARN for cluster placement
PreferredOutpostArn pulumi.StringPtrInput
// AWS region override
Region pulumi.StringPtrInput
// Replication group ID (makes this cluster a read replica)
ReplicationGroupId pulumi.StringPtrInput
// VPC security group IDs
SecurityGroupIds pulumi.StringArrayInput
// S3 ARN of an RDB snapshot for restore (single ARN string)
SnapshotArns pulumi.StringPtrInput
// Name of snapshot for restore
SnapshotName pulumi.StringPtrInput
// Days to retain automatic snapshots (0=disabled)
SnapshotRetentionLimit pulumi.IntPtrInput
// Daily snapshot window in UTC (e.g. "05:00-09:00")
SnapshotWindow pulumi.StringPtrInput
// Subnet group name for VPC placement
SubnetGroupName pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
// Enable in-transit encryption (TLS). Requires VPC
TransitEncryptionEnabled pulumi.BoolPtrInput
}type Cluster struct {
pulumi.CustomResourceState
ApplyImmediately pulumi.BoolOutput
Arn pulumi.StringOutput // ARN of the ElastiCache cluster
AutoMinorVersionUpgrade pulumi.StringPtrOutput
AvailabilityZone pulumi.StringOutput
AzMode pulumi.StringOutput
CacheNodes ClusterCacheNodeArrayOutput // List: {id, address, port, availabilityZone}
ClusterAddress pulumi.StringOutput // Memcached: DNS name without port
ClusterId pulumi.StringOutput
ConfigurationEndpoint pulumi.StringOutput // Memcached: config endpoint
Engine pulumi.StringOutput
EngineVersion pulumi.StringOutput
EngineVersionActual pulumi.StringOutput // Actual running version
FinalSnapshotIdentifier pulumi.StringPtrOutput
IpDiscovery pulumi.StringOutput
LogDeliveryConfigurations ClusterLogDeliveryConfigurationArrayOutput
MaintenanceWindow pulumi.StringOutput
NetworkType pulumi.StringOutput
NodeType pulumi.StringOutput
NotificationTopicArn pulumi.StringPtrOutput
NumCacheNodes pulumi.IntOutput
OutpostMode pulumi.StringPtrOutput
ParameterGroupName pulumi.StringOutput
Port pulumi.IntOutput
PreferredAvailabilityZones pulumi.StringArrayOutput
PreferredOutpostArn pulumi.StringOutput
Region pulumi.StringOutput
ReplicationGroupId pulumi.StringOutput
SecurityGroupIds pulumi.StringArrayOutput
SnapshotArns pulumi.StringPtrOutput
SnapshotName pulumi.StringPtrOutput
SnapshotRetentionLimit pulumi.IntPtrOutput
SnapshotWindow pulumi.StringOutput
SubnetGroupName pulumi.StringOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
TransitEncryptionEnabled pulumi.BoolOutput
}func GetCluster(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *ClusterState,
opts ...pulumi.ResourceOption) (*Cluster, error)subnetGroup, _ := elasticache.NewSubnetGroup(ctx, "cacheSubnets", &elasticache.SubnetGroupArgs{
Name: pulumi.String("cache-subnet-group"),
SubnetIds: pulumi.StringArray{subnet1.ID(), subnet2.ID()},
})
_, err := elasticache.NewCluster(ctx, "memcachedCluster", &elasticache.ClusterArgs{
ClusterId: pulumi.String("my-memcached"),
Engine: pulumi.String("memcached"),
NodeType: pulumi.String("cache.r6g.large"),
NumCacheNodes: pulumi.Int(3),
ParameterGroupName: pulumi.String("default.memcached1.6"),
Port: pulumi.Int(11211),
SubnetGroupName: subnetGroup.Name,
SecurityGroupIds: pulumi.StringArray{cacheSecurityGroup.ID()},
AzMode: pulumi.String("cross-az"),
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})_, err := elasticache.NewCluster(ctx, "redisCache", &elasticache.ClusterArgs{
ClusterId: pulumi.String("session-cache"),
Engine: pulumi.String("redis"),
NodeType: pulumi.String("cache.t4g.small"),
NumCacheNodes: pulumi.Int(1),
ParameterGroupName: pulumi.String("default.redis7"),
EngineVersion: pulumi.String("7.0"),
Port: pulumi.Int(6379),
SubnetGroupName: subnetGroup.Name,
SecurityGroupIds: pulumi.StringArray{cacheSecurityGroup.ID()},
SnapshotRetentionLimit: pulumi.Int(7),
SnapshotWindow: pulumi.String("03:00-05:00"),
MaintenanceWindow: pulumi.String("sun:05:00-sun:06:00"),
})Provides a Redis or Valkey replication group. Use this for multi-node Redis deployments with read replicas and optional cluster mode (sharding).
func NewReplicationGroup(ctx *pulumi.Context,
name string, args *ReplicationGroupArgs, opts ...pulumi.ResourceOption) (*ReplicationGroup, error)type ReplicationGroupArgs struct {
// Apply modifications immediately. Default: false
ApplyImmediately pulumi.BoolPtrInput
// Enable encryption at rest. Redis default: false; Valkey default: true
AtRestEncryptionEnabled pulumi.BoolPtrInput
// AUTH token for Redis password protection (requires TransitEncryptionEnabled=true)
AuthToken pulumi.StringPtrInput
// AUTH token update strategy: "SET", "ROTATE", "DELETE". Default on update: "ROTATE"
AuthTokenUpdateStrategy pulumi.StringPtrInput
// Auto-apply minor engine upgrades. Supported for Redis/Valkey 6+. Default: true
AutoMinorVersionUpgrade pulumi.BoolPtrInput
// Enable automatic failover. If true, NumCacheClusters must be > 1. Default: false
AutomaticFailoverEnabled pulumi.BoolPtrInput
// Enable/disable cluster mode: "enabled", "disabled", or "compatible"
ClusterMode pulumi.StringPtrInput
// Enable data tiering (r6gd nodes only)
DataTieringEnabled pulumi.BoolPtrInput
// Human-readable description (required, must not be empty)
Description pulumi.StringInput
// Cache engine: "redis" (default) or "valkey"
Engine pulumi.StringPtrInput
// Engine version (e.g. "7.2" for Redis 7, "6.x" for latest Redis 6)
EngineVersion pulumi.StringPtrInput
// Final snapshot name before deletion
FinalSnapshotIdentifier pulumi.StringPtrInput
// Global replication group ID for cross-region replication
GlobalReplicationGroupId pulumi.StringPtrInput
// IP version for discovery: "ipv4" or "ipv6"
IpDiscovery pulumi.StringPtrInput
// KMS key ARN for at-rest encryption
KmsKeyId pulumi.StringPtrInput
// Log delivery configurations
LogDeliveryConfigurations ReplicationGroupLogDeliveryConfigurationArrayInput
// Maintenance window format: "ddd:hh24:mi-ddd:hh24:mi" UTC
MaintenanceWindow pulumi.StringPtrInput
// Enable Multi-AZ. Requires AutomaticFailoverEnabled=true. Default: false
MultiAzEnabled pulumi.BoolPtrInput
// IP versions: "ipv4", "ipv6", or "dualStack"
NetworkType pulumi.StringPtrInput
// Node group (shard) configurations (only when NumNodeGroups is set)
NodeGroupConfigurations ReplicationGroupNodeGroupConfigurationArrayInput
// Node instance type (required unless GlobalReplicationGroupId is set)
NodeType pulumi.StringPtrInput
// SNS topic ARN for notifications
NotificationTopicArn pulumi.StringPtrInput
// Total cache clusters (primary + replicas). Default: 1
// Conflicts with NumNodeGroups and ReplicasPerNodeGroup
NumCacheClusters pulumi.IntPtrInput
// Number of node groups (shards) for cluster mode
// Conflicts with NumCacheClusters
NumNodeGroups pulumi.IntPtrInput
// Parameter group name
ParameterGroupName pulumi.StringPtrInput
// Port number. Default for Redis: 6379
Port pulumi.IntPtrInput
// List of AZs for cache clusters (ordered; first is primary)
PreferredCacheClusterAzs pulumi.StringArrayInput
// AWS region override
Region pulumi.StringPtrInput
// Number of replicas per node group (0-5). Default: 1
ReplicasPerNodeGroup pulumi.IntPtrInput
// Replication group identifier (required)
ReplicationGroupId pulumi.StringInput
// VPC security group IDs
SecurityGroupIds pulumi.StringArrayInput
// S3 ARNs of RDB snapshots for restore
SnapshotArns pulumi.StringArrayInput
// Snapshot name for restore
SnapshotName pulumi.StringPtrInput
// Days to retain automatic snapshots (0=disabled)
SnapshotRetentionLimit pulumi.IntPtrInput
// Daily snapshot window in UTC
SnapshotWindow pulumi.StringPtrInput
// Subnet group name for VPC placement
SubnetGroupName pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
// Enable in-transit encryption (TLS). Default: true for Valkey
TransitEncryptionEnabled pulumi.BoolPtrInput
// In-transit encryption mode: "required" or "preferred"
TransitEncryptionMode pulumi.StringPtrInput
// User group ID to associate with the replication group
UserGroupIds pulumi.StringArrayInput
}type ReplicationGroup struct {
pulumi.CustomResourceState
ApplyImmediately pulumi.BoolOutput
Arn pulumi.StringOutput // ARN of the replication group
AtRestEncryptionEnabled pulumi.BoolOutput
AuthToken pulumi.StringPtrOutput
AuthTokenUpdateStrategy pulumi.StringPtrOutput
AutoMinorVersionUpgrade pulumi.BoolOutput
AutomaticFailoverEnabled pulumi.BoolPtrOutput
ClusterEnabled pulumi.BoolOutput // true when cluster mode is active
ClusterMode pulumi.StringOutput
ConfigurationEndpointAddress pulumi.StringOutput // Cluster mode endpoint
DataTieringEnabled pulumi.BoolOutput
Description pulumi.StringOutput
Engine pulumi.StringOutput
EngineVersion pulumi.StringOutput
EngineVersionActual pulumi.StringOutput // Actual running version
FinalSnapshotIdentifier pulumi.StringPtrOutput
GlobalReplicationGroupId pulumi.StringOutput
IpDiscovery pulumi.StringOutput
KmsKeyId pulumi.StringPtrOutput
LogDeliveryConfigurations ReplicationGroupLogDeliveryConfigurationArrayOutput
MaintenanceWindow pulumi.StringOutput
MemberClusters pulumi.StringArrayOutput // IDs of all member clusters
MultiAzEnabled pulumi.BoolPtrOutput
NetworkType pulumi.StringOutput
NodeGroupConfigurations ReplicationGroupNodeGroupConfigurationArrayOutput
NodeType pulumi.StringOutput
NotificationTopicArn pulumi.StringPtrOutput
NumCacheClusters pulumi.IntOutput
NumNodeGroups pulumi.IntOutput
ParameterGroupName pulumi.StringOutput
Port pulumi.IntPtrOutput
PreferredCacheClusterAzs pulumi.StringArrayOutput
PrimaryEndpointAddress pulumi.StringOutput // Primary node endpoint (non-cluster mode)
ReaderEndpointAddress pulumi.StringOutput // Reader endpoint (non-cluster mode)
Region pulumi.StringOutput
ReplicasPerNodeGroup pulumi.IntOutput
ReplicationGroupId pulumi.StringOutput
SecurityGroupIds pulumi.StringArrayOutput
SnapshotArns pulumi.StringArrayOutput
SnapshotName pulumi.StringPtrOutput
SnapshotRetentionLimit pulumi.IntOutput
SnapshotWindow pulumi.StringOutput
SubnetGroupName pulumi.StringOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
TransitEncryptionEnabled pulumi.BoolOutput
TransitEncryptionMode pulumi.StringOutput
}func GetReplicationGroup(ctx *pulumi.Context,
name string, id pulumi.IDInput, state *ReplicationGroupState,
opts ...pulumi.ResourceOption) (*ReplicationGroup, error)replicationGroup, err := elasticache.NewReplicationGroup(ctx, "redisHA", &elasticache.ReplicationGroupArgs{
ReplicationGroupId: pulumi.String("my-redis-ha"),
Description: pulumi.String("High availability Redis cluster"),
NodeType: pulumi.String("cache.r7g.large"),
Engine: pulumi.String("redis"),
EngineVersion: pulumi.String("7.2"),
NumCacheClusters: pulumi.Int(3),
AutomaticFailoverEnabled: pulumi.Bool(true),
MultiAzEnabled: pulumi.Bool(true),
Port: pulumi.Int(6379),
SubnetGroupName: subnetGroup.Name,
SecurityGroupIds: pulumi.StringArray{cacheSecurityGroup.ID()},
ParameterGroupName: pulumi.String("default.redis7"),
AtRestEncryptionEnabled: pulumi.Bool(true),
TransitEncryptionEnabled: pulumi.Bool(true),
AuthToken: pulumi.String("my-secure-auth-token"),
SnapshotRetentionLimit: pulumi.Int(7),
SnapshotWindow: pulumi.String("03:00-05:00"),
MaintenanceWindow: pulumi.String("sun:05:00-sun:07:00"),
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})replicationGroup, err := elasticache.NewReplicationGroup(ctx, "redisCluster", &elasticache.ReplicationGroupArgs{
ReplicationGroupId: pulumi.String("my-redis-cluster"),
Description: pulumi.String("Redis cluster with sharding"),
NodeType: pulumi.String("cache.r7g.large"),
EngineVersion: pulumi.String("7.2"),
NumNodeGroups: pulumi.Int(3), // 3 shards
ReplicasPerNodeGroup: pulumi.Int(2), // 2 replicas per shard
AutomaticFailoverEnabled: pulumi.Bool(true),
ParameterGroupName: pulumi.String("default.redis7.cluster.on"),
SubnetGroupName: subnetGroup.Name,
SecurityGroupIds: pulumi.StringArray{cacheSecurityGroup.ID()},
AtRestEncryptionEnabled: pulumi.Bool(true),
TransitEncryptionEnabled: pulumi.Bool(true),
})Provides an ElastiCache Subnet Group for deploying cache clusters within a VPC.
func NewSubnetGroup(ctx *pulumi.Context,
name string, args *SubnetGroupArgs, opts ...pulumi.ResourceOption) (*SubnetGroup, error)type SubnetGroupArgs struct {
// Description. Default: "Managed by Pulumi"
Description pulumi.StringPtrInput
// Subnet group name. ElastiCache converts to lowercase (required)
Name pulumi.StringPtrInput
// AWS region override
Region pulumi.StringPtrInput
// List of VPC subnet IDs (required; must be in the same VPC)
SubnetIds pulumi.StringArrayInput
// Resource tags
Tags pulumi.StringMapInput
}type SubnetGroup struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput
Description pulumi.StringOutput
Name pulumi.StringOutput
Region pulumi.StringOutput
SubnetIds pulumi.StringArrayOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
VpcId pulumi.StringOutput // VPC ID of the subnet group
}subnetGroup, err := elasticache.NewSubnetGroup(ctx, "cacheSubnetGroup", &elasticache.SubnetGroupArgs{
Name: pulumi.String("production-cache-subnets"),
Description: pulumi.String("Subnet group for production ElastiCache clusters"),
SubnetIds: pulumi.StringArray{
privateSubnet1.ID(),
privateSubnet2.ID(),
privateSubnet3.ID(),
},
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})Provides an ElastiCache parameter group for customizing cache engine configuration.
Note: Removing the
reserved-memoryparameter on Redis 2.6/2.8 may cause a perpetual diff. Leave it configured with any value as a workaround.
func NewParameterGroup(ctx *pulumi.Context,
name string, args *ParameterGroupArgs, opts ...pulumi.ResourceOption) (*ParameterGroup, error)type ParameterGroupArgs struct {
// Description. Default: "Managed by Pulumi"
Description pulumi.StringPtrInput
// Parameter group family (required), e.g.:
// "redis7", "redis6.x", "redis5.0", "memcached1.6", "valkey7"
Family pulumi.StringInput
// Parameter group name (required)
Name pulumi.StringPtrInput
// List of parameters to set
Parameters ParameterGroupParameterArrayInput
// AWS region override
Region pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
}type ParameterGroup struct {
pulumi.CustomResourceState
Arn pulumi.StringOutput // ARN of the parameter group
Description pulumi.StringOutput
Family pulumi.StringOutput
Name pulumi.StringOutput
Parameters ParameterGroupParameterArrayOutput
Region pulumi.StringOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
}paramGroup, err := elasticache.NewParameterGroup(ctx, "redisParams", &elasticache.ParameterGroupArgs{
Name: pulumi.String("my-redis7-params"),
Family: pulumi.String("redis7"),
Parameters: elasticache.ParameterGroupParameterArray{
&elasticache.ParameterGroupParameterArgs{
Name: pulumi.String("maxmemory-policy"),
Value: pulumi.String("allkeys-lru"),
},
&elasticache.ParameterGroupParameterArgs{
Name: pulumi.String("timeout"),
Value: pulumi.String("300"),
},
&elasticache.ParameterGroupParameterArgs{
Name: pulumi.String("tcp-keepalive"),
Value: pulumi.String("60"),
},
},
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})MemoryDB for Redis is a durable, in-memory database service that provides Redis compatibility with Multi-AZ durability, persistent storage, and strong consistency.
// Resource constructors
NewAcl(ctx, name, args, opts) (*Acl, error)
NewCluster(ctx, name, args, opts) (*Cluster, error)
NewMultiRegionCluster(ctx, name, args, opts) (*MultiRegionCluster, error)
NewParameterGroup(ctx, name, args, opts) (*ParameterGroup, error)
NewSnapshot(ctx, name, args, opts) (*Snapshot, error)
NewSubnetGroup(ctx, name, args, opts) (*SubnetGroup, error)
NewUser(ctx, name, args, opts) (*User, error)Provides a MemoryDB Cluster resource. MemoryDB provides Redis-compatible in-memory database service with durable, multi-AZ storage.
func NewCluster(ctx *pulumi.Context,
name string, args *ClusterArgs, opts ...pulumi.ResourceOption) (*Cluster, error)type ClusterArgs struct {
// Access Control List name (required). Use "open-access" for no auth
AclName pulumi.StringInput
// Auto-apply minor version upgrades. Default: true
AutoMinorVersionUpgrade pulumi.BoolPtrInput
// Enable data tiering (requires r6gd node types)
DataTiering pulumi.BoolPtrInput
// Description. Default: "Managed by Pulumi"
Description pulumi.StringPtrInput
// Cache engine: "redis" or "valkey" (required)
Engine pulumi.StringPtrInput
// Engine version (required for initial creation; downgrades not supported)
EngineVersion pulumi.StringPtrInput
// Snapshot name created at deletion
FinalSnapshotName pulumi.StringPtrInput
// KMS key ARN for encryption at rest
KmsKeyArn pulumi.StringPtrInput
// Maintenance window: "ddd:hh24:mi-ddd:hh24:mi" UTC (min 60 min)
MaintenanceWindow pulumi.StringPtrInput
// Multi-region cluster identifier from memorydb.MultiRegionCluster
MultiRegionClusterName pulumi.StringPtrInput
// Cluster name. Conflicts with NamePrefix
Name pulumi.StringPtrInput
// Unique name prefix. Conflicts with Name
NamePrefix pulumi.StringPtrInput
// Node instance type (required, e.g. "db.t4g.small", "db.r6g.large")
NodeType pulumi.StringInput
// Replicas per shard (0-5). Default: 1 (2 nodes per shard)
NumReplicasPerShard pulumi.IntPtrInput
// Number of shards. Default: 1
NumShards pulumi.IntPtrInput
// Parameter group name
ParameterGroupName pulumi.StringPtrInput
// Port number. Default: 6379
Port pulumi.IntPtrInput
// AWS region override
Region pulumi.StringPtrInput
// VPC security group IDs
SecurityGroupIds pulumi.StringArrayInput
// S3 ARNs of RDB snapshots for restore
SnapshotArns pulumi.StringArrayInput
// Snapshot name for restore
SnapshotName pulumi.StringPtrInput
// Days to retain automatic snapshots (0=disabled). Default: 0
SnapshotRetentionLimit pulumi.IntPtrInput
// Daily snapshot window in UTC (e.g. "05:00-09:00")
SnapshotWindow pulumi.StringPtrInput
// SNS topic ARN for cluster notifications
SnsTopicArn pulumi.StringPtrInput
// Subnet group name (default: subnets from default VPC)
SubnetGroupName pulumi.StringPtrInput
// Resource tags
Tags pulumi.StringMapInput
// Enable TLS. Default: true. When false, AclName must be "open-access"
TlsEnabled pulumi.BoolPtrInput
}type Cluster struct {
pulumi.CustomResourceState
AclName pulumi.StringOutput
Arn pulumi.StringOutput // ARN of the MemoryDB cluster
AutoMinorVersionUpgrade pulumi.BoolPtrOutput
ClusterEndpoints ClusterClusterEndpointArrayOutput
DataTiering pulumi.BoolPtrOutput
Description pulumi.StringPtrOutput
Engine pulumi.StringOutput
EnginePatchVersion pulumi.StringOutput // Patch version of running engine
EngineVersion pulumi.StringOutput
FinalSnapshotName pulumi.StringPtrOutput
KmsKeyArn pulumi.StringPtrOutput
MaintenanceWindow pulumi.StringOutput
MultiRegionClusterName pulumi.StringPtrOutput
Name pulumi.StringOutput
NamePrefix pulumi.StringOutput
NodeType pulumi.StringOutput
NumReplicasPerShard pulumi.IntPtrOutput
NumShards pulumi.IntPtrOutput
ParameterGroupName pulumi.StringOutput
Port pulumi.IntOutput
Region pulumi.StringOutput
SecurityGroupIds pulumi.StringArrayOutput
Shards ClusterShardArrayOutput // Shard details including node endpoints
SnapshotArns pulumi.StringArrayOutput
SnapshotName pulumi.StringPtrOutput
SnapshotRetentionLimit pulumi.IntOutput
SnapshotWindow pulumi.StringOutput
SnsTopicArn pulumi.StringPtrOutput
SubnetGroupName pulumi.StringOutput
Tags pulumi.StringMapOutput
TagsAll pulumi.StringMapOutput
TlsEnabled pulumi.BoolPtrOutput
}memdbCluster, err := memorydb.NewCluster(ctx, "sessionStore", &memorydb.ClusterArgs{
AclName: pulumi.String("open-access"),
Name: pulumi.String("my-session-store"),
NodeType: pulumi.String("db.r6g.large"),
Engine: pulumi.String("redis"),
EngineVersion: pulumi.String("7.1"),
NumShards: pulumi.Int(2),
NumReplicasPerShard: pulumi.Int(1),
SecurityGroupIds: pulumi.StringArray{
cacheSecurityGroup.ID(),
},
SubnetGroupName: memdbSubnetGroup.Name,
SnapshotRetentionLimit: pulumi.Int(7),
SnapshotWindow: pulumi.String("05:00-09:00"),
Tags: pulumi.StringMap{
"Environment": pulumi.String("production"),
},
})// Create a MemoryDB user with access string
user, _ := memorydb.NewUser(ctx, "cacheUser", &memorydb.UserArgs{
UserName: pulumi.String("cache-admin"),
AccessString: pulumi.String("on ~* &* +@all"),
AuthenticationMode: &memorydb.UserAuthenticationModeArgs{
Type: pulumi.String("password"),
Passwords: pulumi.StringArray{pulumi.String("secure-password-here")},
},
})
// Create an ACL with the user
acl, _ := memorydb.NewAcl(ctx, "cacheAcl", &memorydb.AclArgs{
Name: pulumi.String("cache-acl"),
UserNames: pulumi.StringArray{user.UserName},
})
// Create the cluster with ACL and encryption
cluster, err := memorydb.NewCluster(ctx, "secureCluster", &memorydb.ClusterArgs{
AclName: acl.Name,
Name: pulumi.String("secure-memorydb"),
NodeType: pulumi.String("db.r6g.large"),
Engine: pulumi.String("redis"),
EngineVersion: pulumi.String("7.1"),
KmsKeyArn: kmsKey.Arn,
TlsEnabled: pulumi.Bool(true),
SecurityGroupIds: pulumi.StringArray{cacheSecurityGroup.ID()},
SubnetGroupName: subnetGroup.Name,
SnapshotRetentionLimit: pulumi.Int(14),
})| Feature | ElastiCache | MemoryDB |
|---|---|---|
| Use case | Caching, sessions, pub/sub | Durable primary database |
| Durability | Optional (snaps to S3) | Durable (Multi-AZ transaction log) |
| Consistency | Eventually consistent | Strongly consistent |
| Data persistence | Optional | Always-on |
| Cost | Lower | Higher |
| Redis compatibility | Full | Full |
// Subnet group across multiple AZs
subnetGroup, _ := elasticache.NewSubnetGroup(ctx, "cacheSubnets", &elasticache.SubnetGroupArgs{
Name: pulumi.String("prod-cache-subnets"),
SubnetIds: pulumi.StringArray{privateSubnet1.ID(), privateSubnet2.ID()},
})
// Custom parameter group for production tuning
paramGroup, _ := elasticache.NewParameterGroup(ctx, "prodParams", &elasticache.ParameterGroupArgs{
Name: pulumi.String("prod-redis7"),
Family: pulumi.String("redis7"),
Parameters: elasticache.ParameterGroupParameterArray{
&elasticache.ParameterGroupParameterArgs{
Name: pulumi.String("maxmemory-policy"),
Value: pulumi.String("volatile-lru"),
},
},
})
// High-availability replication group
replicationGroup, err := elasticache.NewReplicationGroup(ctx, "prodCache", &elasticache.ReplicationGroupArgs{
ReplicationGroupId: pulumi.String("prod-cache"),
Description: pulumi.String("Production cache cluster"),
NodeType: pulumi.String("cache.r7g.large"),
EngineVersion: pulumi.String("7.2"),
NumCacheClusters: pulumi.Int(2),
AutomaticFailoverEnabled: pulumi.Bool(true),
MultiAzEnabled: pulumi.Bool(true),
ParameterGroupName: paramGroup.Name,
SubnetGroupName: subnetGroup.Name,
SecurityGroupIds: pulumi.StringArray{cacheSecurityGroup.ID()},
AtRestEncryptionEnabled: pulumi.Bool(true),
TransitEncryptionEnabled: pulumi.Bool(true),
SnapshotRetentionLimit: pulumi.Int(7),
})Install with Tessl CLI
npx tessl i tessl/golang-github-com-pulumi-pulumi-aws-sdk-v7docs