Comprehensive Amazon Web Services (AWS) infrastructure provider for Pulumi enabling multi-language infrastructure-as-code with 225+ AWS services
—
Comprehensive database solutions including relational databases (RDS), NoSQL databases (DynamoDB), caching systems (ElastiCache), and data warehousing solutions.
Managed relational database service supporting MySQL, PostgreSQL, MariaDB, Oracle, and SQL Server.
/**
* RDS database instance
*/
class rds.Instance extends pulumi.CustomResource {
constructor(name: string, args: rds.InstanceArgs, opts?: pulumi.CustomResourceOptions);
/** Database instance ARN */
readonly arn: pulumi.Output<string>;
/** Database instance identifier */
readonly identifier: pulumi.Output<string>;
/** Database engine */
readonly engine: pulumi.Output<string>;
/** Engine version */
readonly engineVersion: pulumi.Output<string>;
/** Instance class */
readonly instanceClass: pulumi.Output<string>;
/** Database name */
readonly dbName: pulumi.Output<string>;
/** Allocated storage in GB */
readonly allocatedStorage: pulumi.Output<number>;
/** Storage type */
readonly storageType: pulumi.Output<string>;
/** Storage encrypted */
readonly storageEncrypted: pulumi.Output<boolean>;
/** Database endpoint */
readonly endpoint: pulumi.Output<string>;
/** Database port */
readonly port: pulumi.Output<number>;
/** Master username */
readonly username: pulumi.Output<string>;
/** VPC security group IDs */
readonly vpcSecurityGroupIds: pulumi.Output<string[]>;
/** DB subnet group name */
readonly dbSubnetGroupName: pulumi.Output<string>;
/** Parameter group name */
readonly parameterGroupName: pulumi.Output<string>;
/** Multi-AZ deployment */
readonly multiAz: pulumi.Output<boolean>;
/** Availability zone */
readonly availabilityZone: pulumi.Output<string>;
/** Backup retention period */
readonly backupRetentionPeriod: pulumi.Output<number>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface rds.InstanceArgs {
/** Database instance identifier */
identifier?: pulumi.Input<string>;
/** Database engine (mysql, postgres, mariadb, oracle-ee, sqlserver-ex) */
engine: pulumi.Input<string>;
/** Engine version */
engineVersion?: pulumi.Input<string>;
/** Instance class (db.t3.micro, db.r5.large, etc.) */
instanceClass: pulumi.Input<string>;
/** Initial database name */
dbName?: pulumi.Input<string>;
/** Master username */
username: pulumi.Input<string>;
/** Master password */
password?: pulumi.Input<string>;
/** Manage master user password */
manageMasterUserPassword?: pulumi.Input<boolean>;
/** Allocated storage in GB */
allocatedStorage?: pulumi.Input<number>;
/** Maximum allocated storage (auto-scaling) */
maxAllocatedStorage?: pulumi.Input<number>;
/** Storage type (gp2, gp3, io1, standard) */
storageType?: pulumi.Input<string>;
/** Storage IOPS */
iops?: pulumi.Input<number>;
/** Enable storage encryption */
storageEncrypted?: pulumi.Input<boolean>;
/** KMS key ID for encryption */
kmsKeyId?: pulumi.Input<string>;
/** VPC security group IDs */
vpcSecurityGroupIds?: pulumi.Input<pulumi.Input<string>[]>;
/** DB subnet group name */
dbSubnetGroupName?: pulumi.Input<string>;
/** Parameter group name */
parameterGroupName?: pulumi.Input<string>;
/** Enable multi-AZ deployment */
multiAz?: pulumi.Input<boolean>;
/** Availability zone */
availabilityZone?: pulumi.Input<string>;
/** Backup retention period (0-35 days) */
backupRetentionPeriod?: pulumi.Input<number>;
/** Backup window */
backupWindow?: pulumi.Input<string>;
/** Maintenance window */
maintenanceWindow?: pulumi.Input<string>;
/** Enable auto minor version upgrade */
autoMinorVersionUpgrade?: pulumi.Input<boolean>;
/** Enable deletion protection */
deletionProtection?: pulumi.Input<boolean>;
/** Skip final snapshot */
skipFinalSnapshot?: pulumi.Input<boolean>;
/** Final snapshot identifier */
finalSnapshotIdentifier?: pulumi.Input<string>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
/**
* RDS subnet group for VPC deployment
*/
class rds.SubnetGroup extends pulumi.CustomResource {
constructor(name: string, args: rds.SubnetGroupArgs, opts?: pulumi.CustomResourceOptions);
/** Subnet group name */
readonly name: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Subnet IDs */
readonly subnetIds: pulumi.Output<string[]>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
/**
* RDS parameter group for configuration
*/
class rds.ParameterGroup extends pulumi.CustomResource {
constructor(name: string, args: rds.ParameterGroupArgs, opts?: pulumi.CustomResourceOptions);
/** Parameter group name */
readonly name: pulumi.Output<string>;
/** Database family */
readonly family: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Parameters */
readonly parameters: pulumi.Output<rds.ParameterGroupParameter[]>;
}Usage Examples:
// Create RDS subnet group
const dbSubnetGroup = new aws.rds.SubnetGroup("db-subnet-group", {
name: "main-db-subnet-group",
subnetIds: privateSubnets.map(s => s.id),
description: "Subnet group for RDS instances",
tags: {
Name: "MainDBSubnetGroup"
}
});
// Create parameter group for PostgreSQL
const dbParameterGroup = new aws.rds.ParameterGroup("db-params", {
family: "postgres14",
description: "Custom parameter group for PostgreSQL 14",
parameters: [
{
name: "shared_preload_libraries",
value: "pg_stat_statements"
},
{
name: "log_statement",
value: "all"
}
]
});
// Create RDS instance
const database = new aws.rds.Instance("main-db", {
identifier: "main-database",
engine: "postgres",
engineVersion: "14.9",
instanceClass: "db.r5.large",
allocatedStorage: 100,
maxAllocatedStorage: 1000,
storageType: "gp3",
storageEncrypted: true,
dbName: "mainapp",
username: "dbadmin",
manageMasterUserPassword: true,
dbSubnetGroupName: dbSubnetGroup.name,
parameterGroupName: dbParameterGroup.name,
vpcSecurityGroupIds: [dbSecurityGroup.id],
backupRetentionPeriod: 7,
backupWindow: "03:00-04:00",
maintenanceWindow: "sun:04:00-sun:05:00",
multiAz: true,
deletionProtection: true,
skipFinalSnapshot: false,
finalSnapshotIdentifier: "main-db-final-snapshot",
tags: {
Name: "MainDatabase",
Environment: "production"
}
});Fully managed NoSQL database service with single-digit millisecond latency at any scale.
/**
* DynamoDB table
*/
class dynamodb.Table extends pulumi.CustomResource {
constructor(name: string, args: dynamodb.TableArgs, opts?: pulumi.CustomResourceOptions);
/** Table ARN */
readonly arn: pulumi.Output<string>;
/** Table name */
readonly name: pulumi.Output<string>;
/** Hash key (partition key) */
readonly hashKey: pulumi.Output<string>;
/** Range key (sort key) */
readonly rangeKey: pulumi.Output<string>;
/** Billing mode */
readonly billingMode: pulumi.Output<string>;
/** Read capacity units */
readonly readCapacity: pulumi.Output<number>;
/** Write capacity units */
readonly writeCapacity: pulumi.Output<number>;
/** Attribute definitions */
readonly attributes: pulumi.Output<dynamodb.TableAttribute[]>;
/** Global secondary indexes */
readonly globalSecondaryIndexes: pulumi.Output<dynamodb.TableGlobalSecondaryIndex[]>;
/** Local secondary indexes */
readonly localSecondaryIndexes: pulumi.Output<dynamodb.TableLocalSecondaryIndex[]>;
/** Server-side encryption */
readonly serverSideEncryption: pulumi.Output<dynamodb.TableServerSideEncryption>;
/** Stream specification */
readonly streamSpecification: pulumi.Output<dynamodb.TableStreamSpecification>;
/** Time to live */
readonly ttl: pulumi.Output<dynamodb.TableTtl>;
/** Point-in-time recovery */
readonly pointInTimeRecovery: pulumi.Output<dynamodb.TablePointInTimeRecovery>;
/** Resource tags */
readonly tags: pulumi.Output<{[key: string]: string}>;
}
interface dynamodb.TableArgs {
/** Table name */
name?: pulumi.Input<string>;
/** Hash key attribute name */
hashKey: pulumi.Input<string>;
/** Range key attribute name */
rangeKey?: pulumi.Input<string>;
/** Billing mode (PROVISIONED or PAY_PER_REQUEST) */
billingMode?: pulumi.Input<string>;
/** Read capacity units (for PROVISIONED) */
readCapacity?: pulumi.Input<number>;
/** Write capacity units (for PROVISIONED) */
writeCapacity?: pulumi.Input<number>;
/** Attribute definitions */
attributes: pulumi.Input<pulumi.Input<dynamodb.TableAttribute>[]>;
/** Global secondary indexes */
globalSecondaryIndexes?: pulumi.Input<pulumi.Input<dynamodb.TableGlobalSecondaryIndex>[]>;
/** Local secondary indexes */
localSecondaryIndexes?: pulumi.Input<pulumi.Input<dynamodb.TableLocalSecondaryIndex>[]>;
/** Server-side encryption */
serverSideEncryption?: pulumi.Input<dynamodb.TableServerSideEncryption>;
/** DynamoDB Streams */
streamSpecification?: pulumi.Input<dynamodb.TableStreamSpecification>;
/** Time to live configuration */
ttl?: pulumi.Input<dynamodb.TableTtl>;
/** Point-in-time recovery */
pointInTimeRecovery?: pulumi.Input<dynamodb.TablePointInTimeRecovery>;
/** Resource tags */
tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}
interface dynamodb.TableAttribute {
/** Attribute name */
name: pulumi.Input<string>;
/** Attribute type (S, N, B) */
type: pulumi.Input<string>;
}
interface dynamodb.TableGlobalSecondaryIndex {
/** Index name */
name: pulumi.Input<string>;
/** Hash key */
hashKey: pulumi.Input<string>;
/** Range key */
rangeKey?: pulumi.Input<string>;
/** Projection type */
projectionType: pulumi.Input<string>;
/** Non-key attributes to project */
nonKeyAttributes?: pulumi.Input<pulumi.Input<string>[]>;
/** Read capacity units */
readCapacity?: pulumi.Input<number>;
/** Write capacity units */
writeCapacity?: pulumi.Input<number>;
}Usage Examples:
// Create DynamoDB table with GSI
const userTable = new aws.dynamodb.Table("users", {
name: "users",
billingMode: "PAY_PER_REQUEST",
hashKey: "userId",
attributes: [
{ name: "userId", type: "S" },
{ name: "email", type: "S" },
{ name: "createdAt", type: "N" }
],
globalSecondaryIndexes: [{
name: "email-index",
hashKey: "email",
projectionType: "ALL"
}, {
name: "created-index",
hashKey: "createdAt",
projectionType: "KEYS_ONLY"
}],
serverSideEncryption: {
enabled: true
},
pointInTimeRecovery: {
enabled: true
},
ttl: {
attributeName: "expires",
enabled: true
},
tags: {
Name: "UserTable",
Environment: "production"
}
});
// Provisioned capacity table
const sessionTable = new aws.dynamodb.Table("sessions", {
name: "user-sessions",
billingMode: "PROVISIONED",
hashKey: "sessionId",
readCapacity: 10,
writeCapacity: 10,
attributes: [
{ name: "sessionId", type: "S" }
],
streamSpecification: {
streamEnabled: true,
streamViewType: "NEW_AND_OLD_IMAGES"
}
});Fully managed in-memory caching service supporting Redis and Memcached.
/**
* ElastiCache Redis cluster
*/
class elasticache.ReplicationGroup extends pulumi.CustomResource {
constructor(name: string, args: elasticache.ReplicationGroupArgs, opts?: pulumi.CustomResourceOptions);
/** Replication group ID */
readonly replicationGroupId: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Node type */
readonly nodeType: pulumi.Output<string>;
/** Port */
readonly port: pulumi.Output<number>;
/** Parameter group name */
readonly parameterGroupName: pulumi.Output<string>;
/** Subnet group name */
readonly subnetGroupName: pulumi.Output<string>;
/** Security group IDs */
readonly securityGroupIds: pulumi.Output<string[]>;
/** Number of cache clusters */
readonly numCacheClusters: pulumi.Output<number>;
/** Automatic failover enabled */
readonly automaticFailoverEnabled: pulumi.Output<boolean>;
/** Multi-AZ enabled */
readonly multiAzEnabled: pulumi.Output<boolean>;
/** Engine version */
readonly engineVersion: pulumi.Output<string>;
/** At-rest encryption enabled */
readonly atRestEncryptionEnabled: pulumi.Output<boolean>;
/** Transit encryption enabled */
readonly transitEncryptionEnabled: pulumi.Output<boolean>;
/** Auth token */
readonly authToken: pulumi.Output<string>;
/** Configuration endpoint */
readonly configurationEndpoint: pulumi.Output<elasticache.ReplicationGroupConfigurationEndpoint>;
/** Primary endpoint */
readonly primaryEndpoint: pulumi.Output<string>;
/** Reader endpoint */
readonly readerEndpoint: pulumi.Output<string>;
}
/**
* ElastiCache subnet group
*/
class elasticache.SubnetGroup extends pulumi.CustomResource {
constructor(name: string, args: elasticache.SubnetGroupArgs, opts?: pulumi.CustomResourceOptions);
/** Subnet group name */
readonly name: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Subnet IDs */
readonly subnetIds: pulumi.Output<string[]>;
}
/**
* ElastiCache parameter group
*/
class elasticache.ParameterGroup extends pulumi.CustomResource {
constructor(name: string, args: elasticache.ParameterGroupArgs, opts?: pulumi.CustomResourceOptions);
/** Parameter group name */
readonly name: pulumi.Output<string>;
/** Family */
readonly family: pulumi.Output<string>;
/** Description */
readonly description: pulumi.Output<string>;
/** Parameters */
readonly parameters: pulumi.Output<elasticache.ParameterGroupParameter[]>;
}Usage Examples:
// Create ElastiCache subnet group
const cacheSubnetGroup = new aws.elasticache.SubnetGroup("cache-subnet", {
name: "cache-subnet-group",
subnetIds: privateSubnets.map(s => s.id),
description: "Subnet group for ElastiCache"
});
// Create Redis parameter group
const redisParams = new aws.elasticache.ParameterGroup("redis-params", {
family: "redis7.x",
description: "Custom Redis parameters",
parameters: [
{
name: "maxmemory-policy",
value: "allkeys-lru"
}
]
});
// Create Redis replication group
const redisCluster = new aws.elasticache.ReplicationGroup("redis", {
replicationGroupId: "app-redis",
description: "Redis cluster for application caching",
nodeType: "cache.r6g.large",
port: 6379,
parameterGroupName: redisParams.name,
subnetGroupName: cacheSubnetGroup.name,
securityGroupIds: [cacheSecurityGroup.id],
numCacheClusters: 3,
automaticFailoverEnabled: true,
multiAzEnabled: true,
engineVersion: "7.0",
atRestEncryptionEnabled: true,
transitEncryptionEnabled: true,
authToken: "my-secure-auth-token",
tags: {
Name: "AppRedisCluster",
Environment: "production"
}
});Install with Tessl CLI
npx tessl i tessl/generic-pulumi--aws@7.6.2