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

dms.mddocs/migration/

AWS Database Migration Service (DMS)

AWS Database Migration Service helps you migrate databases to AWS quickly and securely with minimal downtime.

Package

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

Key Resources

Replication Instance

DMS replication instance for running migration tasks.

const replicationInstance = new aws.dms.ReplicationInstance("dms-instance", {
    replicationInstanceId: "my-dms-instance",
    replicationInstanceClass: "dms.t3.medium",
    allocatedStorage: 100,
    vpcSecurityGroupIds: [securityGroup.id],
    replicationSubnetGroupId: subnetGroup.id,
    publiclyAccessible: false,
    multiAz: true,
    engineVersion: "3.4.7",
    tags: {
        Name: "DMS Replication Instance",
    },
});

Replication Subnet Group

Subnet group for the replication instance.

const subnetGroup = new aws.dms.ReplicationSubnetGroup("dms-subnet-group", {
    replicationSubnetGroupId: "dms-subnet-group",
    replicationSubnetGroupDescription: "DMS Replication Subnet Group",
    subnetIds: subnetIds,
    tags: {
        Name: "DMS Subnet Group",
    },
});

Source Endpoint

Source database endpoint configuration.

const sourceEndpoint = new aws.dms.Endpoint("source", {
    endpointId: "source-postgres",
    endpointType: "source",
    engineName: "postgres",
    serverName: sourceDb.address,
    port: 5432,
    databaseName: "mydb",
    username: "admin",
    password: dbPassword,
    sslMode: "require",
    tags: {
        Type: "source",
    },
});

Target Endpoint

Target database endpoint configuration.

const targetEndpoint = new aws.dms.Endpoint("target", {
    endpointId: "target-postgres",
    endpointType: "target",
    engineName: "postgres",
    serverName: targetDb.address,
    port: 5432,
    databaseName: "mydb",
    username: "admin",
    password: dbPassword,
    sslMode: "require",
    tags: {
        Type: "target",
    },
});

Replication Task

Database replication task.

const replicationTask = new aws.dms.ReplicationTask("migration-task", {
    replicationTaskId: "database-migration",
    migrationType: "full-load-and-cdc",
    replicationInstanceArn: replicationInstance.replicationInstanceArn,
    sourceEndpointArn: sourceEndpoint.endpointArn,
    targetEndpointArn: targetEndpoint.endpointArn,
    tableMappings: JSON.stringify({
        rules: [{
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "public",
                "table-name": "%",
            },
            "rule-action": "include",
        }],
    }),
    replicationTaskSettings: JSON.stringify({
        TargetMetadata: {
            TargetSchema: "",
            SupportLobs: true,
            FullLobMode: false,
            LobChunkSize: 64,
            LimitedSizeLobMode: true,
            LobMaxSize: 32,
        },
        FullLoadSettings: {
            TargetTablePrepMode: "DROP_AND_CREATE",
        },
        Logging: {
            EnableLogging: true,
            LogComponents: [{
                Id: "TRANSFORMATION",
                Severity: "LOGGER_SEVERITY_DEFAULT",
            }],
        },
    }),
    tags: {
        Name: "Database Migration Task",
    },
});

Common Patterns

Full Load Migration

const fullLoadTask = new aws.dms.ReplicationTask("full-load", {
    replicationTaskId: "full-load-migration",
    migrationType: "full-load",
    replicationInstanceArn: replicationInstance.replicationInstanceArn,
    sourceEndpointArn: sourceEndpoint.endpointArn,
    targetEndpointArn: targetEndpoint.endpointArn,
    tableMappings: JSON.stringify({
        rules: [{
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
            },
            "rule-action": "include",
        }],
    }),
});

CDC (Change Data Capture) Only

const cdcTask = new aws.dms.ReplicationTask("cdc-only", {
    replicationTaskId: "cdc-replication",
    migrationType: "cdc",
    cdcStartTime: "2024-01-01T00:00:00Z",
    replicationInstanceArn: replicationInstance.replicationInstanceArn,
    sourceEndpointArn: sourceEndpoint.endpointArn,
    targetEndpointArn: targetEndpoint.endpointArn,
    tableMappings: JSON.stringify({
        rules: [{
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "public",
                "table-name": "%",
            },
            "rule-action": "include",
        }],
    }),
});

S3 as Target

const s3Endpoint = new aws.dms.Endpoint("s3-target", {
    endpointId: "target-s3",
    endpointType: "target",
    engineName: "s3",
    s3Settings: {
        bucketName: targetBucket.id,
        bucketFolder: "dms-output",
        compressionType: "GZIP",
        dataFormat: "parquet",
        serviceAccessRoleArn: dmsRole.arn,
    },
});

Event Subscription

Monitor DMS events with SNS.

const eventSubscription = new aws.dms.EventSubscription("dms-events", {
    name: "dms-event-subscription",
    enabled: true,
    eventCategories: [
        "creation",
        "failure",
        "configuration change",
    ],
    sourceType: "replication-task",
    sourceIds: [replicationTask.replicationTaskId],
    snsTopicArn: snsTopic.arn,
});

Key Properties

Replication Instance Properties

  • replicationInstanceClass - Instance class (dms.t3.medium, etc.)
  • allocatedStorage - Storage in GB
  • multiAz - Enable Multi-AZ
  • engineVersion - DMS engine version
  • publiclyAccessible - Public access flag

Endpoint Properties

  • endpointType - Type (source or target)
  • engineName - Database engine
  • serverName - Database server hostname
  • port - Database port
  • databaseName - Database name
  • sslMode - SSL mode (none, require, verify-ca, verify-full)

Replication Task Properties

  • migrationType - Migration type (full-load, cdc, full-load-and-cdc)
  • tableMappings - Selection and transformation rules
  • replicationTaskSettings - Task settings JSON

Output Properties

  • replicationInstanceArn - Replication instance ARN
  • endpointArn - Endpoint ARN
  • replicationTaskArn - Task ARN

Use Cases

  • Database Migration: Move on-premises databases to AWS
  • Database Consolidation: Merge multiple databases
  • Continuous Replication: Keep databases in sync
  • Development/Test: Replicate production data
  • Disaster Recovery: Maintain database replicas

Related Services

  • RDS - Target RDS databases
  • Aurora - Target Aurora databases
  • S3 - Data lake migration
  • DocumentDB - MongoDB migration target

Install with Tessl CLI

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

docs

migration

index.md

quickstart.md

README.md

tile.json