1. Answers
  2. AWS RDS Multi-AZ Deployment Strategies with Pulumi

How do I create an AWS RDS Multi-AZ deployment strategy?

Explanation

Deploying an AWS RDS instance in a Multi-AZ configuration ensures high availability and failover support for your databases. This setup helps to improve the fault tolerance and reliability of your database deployment. The infrastructure defined here includes:

  1. VPC and Subnets: Subnets are divided across different Availability Zones to ensure Multi-AZ configuration.
  2. Security Group: Controls access to the RDS instance by specifying the allowed inbound and outbound rules.
  3. RDS Instance: An RDS instance configured with Multi-AZ deployment.

Code Implementation

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

// Create a VPC
const main = new aws.ec2.Vpc("main", {
    cidrBlock: "10.0.0.0/16",
    tags: {
        Name: "main-vpc",
    },
});
// Create Public Subnets in two different Availability Zones for Multi-AZ purposes
const subnetA = new aws.ec2.Subnet("subnet_a", {
    vpcId: main.id,
    cidrBlock: "10.0.1.0/24",
    availabilityZone: "us-west-2a",
    tags: {
        Name: "subnet-a",
    },
});
const subnetB = new aws.ec2.Subnet("subnet_b", {
    vpcId: main.id,
    cidrBlock: "10.0.2.0/24",
    availabilityZone: "us-west-2b",
    tags: {
        Name: "subnet-b",
    },
});
// Create a Security Group
const rdsSg = new aws.ec2.SecurityGroup("rds_sg", {
    vpcId: main.id,
    ingress: [{
        fromPort: 3306,
        toPort: 3306,
        protocol: "tcp",
        cidrBlocks: ["0.0.0.0/0"],
    }],
    egress: [{
        fromPort: 0,
        toPort: 0,
        protocol: "-1",
        cidrBlocks: ["0.0.0.0/0"],
    }],
    tags: {
        Name: "rds-sg",
    },
});
// Create a DB Subnet Group
const rdsSubnetGroup = new aws.rds.SubnetGroup("rds_subnet_group", {
    name: "rds-subnet-group",
    subnetIds: [
        subnetA.id,
        subnetB.id,
    ],
    tags: {
        Name: "rds-subnet-group",
    },
});
// Create an RDS instance with Multi-AZ deployment
const mainInstance = new aws.rds.Instance("main", {
    allocatedStorage: 20,
    engine: "mysql",
    instanceClass: aws.rds.InstanceType.T3_Micro,
    name: "mydatabase",
    username: "admin",
    password: "password123",
    dbSubnetGroupName: rdsSubnetGroup.name,
    multiAz: true,
    vpcSecurityGroupIds: [rdsSg.id],
    tags: {
        Name: "rds-main",
    },
});
export const vpcId = main.id;
export const dbInstanceAddress = mainInstance.endpoint;
export const dbInstanceId = mainInstance.id;

Summary

In this example, we’ve set up a Multi-AZ deployment strategy for AWS RDS using infrastructure as code. We created a VPC, two subnets in different availability zones, a security group to control access, a database subnet group, and the RDS instance itself configured for Multi-AZ deployment. This setup enhances the availability and resilience of your database.

Deploy this code

Want to deploy this code? Sign up for a free Pulumi account to deploy in a few clicks.

Sign up

New to Pulumi?

Want to deploy this code? Sign up with Pulumi to deploy in a few clicks.

Sign up