CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-pulumi--aws

A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

redshift.mddocs/database/

Redshift - Data Warehouse

Amazon Redshift is a fast, scalable data warehouse for analytics workloads.

Common Tasks

Create a single-node cluster for development

const devCluster = new aws.redshift.Cluster("dev-warehouse", {
    nodeType: "dc2.large",
    clusterType: "single-node",
    databaseName: "analytics",
    masterUsername: "admin",
    masterPassword: adminPassword,
});

Create a production multi-node cluster

const prodCluster = new aws.redshift.Cluster("prod-warehouse", {
    nodeType: "ra3.4xlarge",
    clusterType: "multi-node",
    numberOfNodes: 3,
    databaseName: "analytics",
    masterUsername: "admin",
    masterPassword: adminPassword,
    encrypted: true,
    publiclyAccessible: false,
});

Create a cluster with snapshot schedule

const cluster = new aws.redshift.Cluster("warehouse", {
    nodeType: "dc2.large",
    clusterType: "single-node",
    databaseName: "analytics",
    masterUsername: "admin",
    masterPassword: adminPassword,
    snapshotIdentifier: "my-snapshot",
    automatedSnapshotRetentionPeriod: 7,
});

Core Resources

Cluster

Create Redshift data warehouse clusters.

class Cluster extends pulumi.CustomResource {
    constructor(name: string, args: ClusterArgs, opts?: pulumi.CustomResourceOptions);

    readonly arn: pulumi.Output<string>;
    readonly endpoint: pulumi.Output<string>;
}

interface ClusterArgs {
    clusterIdentifier?: pulumi.Input<string>;
    nodeType: pulumi.Input<string>;
    clusterType?: pulumi.Input<"single-node" | "multi-node">;
    numberOfNodes?: pulumi.Input<number>;
    databaseName?: pulumi.Input<string>;
    masterUsername: pulumi.Input<string>;
    masterPassword: pulumi.Input<string>;
    encrypted?: pulumi.Input<boolean>;
    publiclyAccessible?: pulumi.Input<boolean>;
}

Example: Secure multi-node cluster in VPC

import * as aws from "@pulumi/aws";

const subnetGroup = new aws.redshift.SubnetGroup("redshift-subnet", {
    subnetIds: [privateSubnet1.id, privateSubnet2.id],
    tags: { Name: "redshift-subnet-group" },
});

const cluster = new aws.redshift.Cluster("analytics-warehouse", {
    clusterIdentifier: "analytics-cluster",
    nodeType: "ra3.xlplus",
    clusterType: "multi-node",
    numberOfNodes: 2,
    databaseName: "analytics",
    masterUsername: "admin",
    masterPassword: adminPassword,
    clusterSubnetGroupName: subnetGroup.name,
    vpcSecurityGroupIds: [redshiftSecurityGroup.id],
    encrypted: true,
    publiclyAccessible: false,
    enhancedVpcRouting: true,
    automatedSnapshotRetentionPeriod: 30,
    tags: { Environment: "production" },
});

export const clusterEndpoint = cluster.endpoint;
export const clusterArn = cluster.arn;

Example: Serverless Redshift

const namespace = new aws.redshiftserverless.Namespace("analytics-ns", {
    namespaceName: "analytics",
    dbName: "analytics",
    adminUsername: "admin",
    adminUserPassword: adminPassword,
});

const workgroup = new aws.redshiftserverless.Workgroup("analytics-wg", {
    workgroupName: "analytics",
    namespaceName: namespace.namespaceName,
    baseCapacity: 32,
    subnetIds: [privateSubnet1.id, privateSubnet2.id],
    securityGroupIds: [redshiftSecurityGroup.id],
    publiclyAccessible: false,
});

export const workgroupEndpoint = workgroup.endpoint;

Related Services

  • S3 - Store data lake for Redshift Spectrum queries
  • Glue - ETL jobs to load data into Redshift
  • IAM - Control access to clusters and Spectrum
  • Secrets Manager - Securely store master credentials
  • Lambda - Trigger queries or data loads
  • CloudWatch - Monitor cluster performance

For complete Redshift API with 24 resources, see All Services.

Install with Tessl CLI

npx tessl i tessl/npm-pulumi--aws@7.16.0

docs

index.md

quickstart.md

README.md

tile.json