CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/golang-github-com-pulumi-pulumi-aws-sdk-v7

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.

Overview
Eval results
Files

elasticache.mddocs/reference/database/

Database: ElastiCache and MemoryDB

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.

Package Imports

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"
)

ElastiCache

Available Functions

// 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)

elasticache.Cluster

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.ReplicationGroup instead.

Note: Changes to applyImmediately=false attributes take effect in the next maintenance window, which may cause a diff in plan output until the change is applied.

Constructor

func NewCluster(ctx *pulumi.Context,
    name string, args *ClusterArgs, opts ...pulumi.ResourceOption) (*Cluster, error)

ClusterArgs

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
}

Cluster Output Fields

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
}

Lookup

func GetCluster(ctx *pulumi.Context,
    name string, id pulumi.IDInput, state *ClusterState,
    opts ...pulumi.ResourceOption) (*Cluster, error)

Example: Memcached Cluster

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"),
    },
})

Example: Single-Node Redis Cluster

_, 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"),
})

elasticache.ReplicationGroup

Provides a Redis or Valkey replication group. Use this for multi-node Redis deployments with read replicas and optional cluster mode (sharding).

Constructor

func NewReplicationGroup(ctx *pulumi.Context,
    name string, args *ReplicationGroupArgs, opts ...pulumi.ResourceOption) (*ReplicationGroup, error)

ReplicationGroupArgs (key fields)

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
}

ReplicationGroup Output Fields (key)

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
}

Lookup

func GetReplicationGroup(ctx *pulumi.Context,
    name string, id pulumi.IDInput, state *ReplicationGroupState,
    opts ...pulumi.ResourceOption) (*ReplicationGroup, error)

Example: Redis Replication Group (Primary + Replica)

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"),
    },
})

Example: Redis Cluster Mode (Sharding)

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),
})

elasticache.SubnetGroup

Provides an ElastiCache Subnet Group for deploying cache clusters within a VPC.

Constructor

func NewSubnetGroup(ctx *pulumi.Context,
    name string, args *SubnetGroupArgs, opts ...pulumi.ResourceOption) (*SubnetGroup, error)

SubnetGroupArgs

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
}

SubnetGroup Output Fields

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
}

Example: Subnet Group for VPC Cache Clusters

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"),
    },
})

elasticache.ParameterGroup

Provides an ElastiCache parameter group for customizing cache engine configuration.

Note: Removing the reserved-memory parameter on Redis 2.6/2.8 may cause a perpetual diff. Leave it configured with any value as a workaround.

Constructor

func NewParameterGroup(ctx *pulumi.Context,
    name string, args *ParameterGroupArgs, opts ...pulumi.ResourceOption) (*ParameterGroup, error)

ParameterGroupArgs

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
}

ParameterGroup Output Fields

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
}

Example: Custom Redis Parameter Group

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

MemoryDB for Redis is a durable, in-memory database service that provides Redis compatibility with Multi-AZ durability, persistent storage, and strong consistency.

Available Functions

// 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)

memorydb.Cluster

Provides a MemoryDB Cluster resource. MemoryDB provides Redis-compatible in-memory database service with durable, multi-AZ storage.

Constructor

func NewCluster(ctx *pulumi.Context,
    name string, args *ClusterArgs, opts ...pulumi.ResourceOption) (*Cluster, error)

ClusterArgs

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
}

Cluster Output Fields

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
}

Example: MemoryDB Cluster

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"),
    },
})

Example: Secure MemoryDB with KMS and ACL

// 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),
})

Common Caching Patterns

ElastiCache vs MemoryDB: When to Use Each

FeatureElastiCacheMemoryDB
Use caseCaching, sessions, pub/subDurable primary database
DurabilityOptional (snaps to S3)Durable (Multi-AZ transaction log)
ConsistencyEventually consistentStrongly consistent
Data persistenceOptionalAlways-on
CostLowerHigher
Redis compatibilityFullFull

Full ElastiCache Stack with VPC

// 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-v7@7.16.1

docs

index.md

tile.json