AWS CDK を使用して Aurora PostgreSQL データベースクラスターを作成する

公開日 2025年1月19日
更新日 2025年1月19日
8 分で読める
AWS

この記事では、AWS CDK を使用してスケーラビリティの高い Aurora PostgreSQL データベースクラスターを設定する方法について説明します。この実装では、Serverless v2 インスタンスや Secrets Manager などの最新のベストプラクティスを採用し、セキュリティと効率を向上させています。


前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  1. VPC が作成済みであること
  2. Isolated Subnet と Isolated Security Group が作成済みであること

CDKコード

以下は CDK Stack のコード例です。

import * as cdk from 'aws-cdk-lib';
import { SecurityGroup } from 'aws-cdk-lib/aws-ec2';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import {
  AuroraPostgresEngineVersion,
  ClusterInstance,
  Credentials,
  DatabaseCluster,
  DatabaseClusterEngine,
  SubnetGroup,
} from 'aws-cdk-lib/aws-rds';
import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
import { Construct } from 'constructs';

export class RDSStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // VPC ID
    const vpcId = 'xxx';

    // Isolated Security Group ID
    const isolatedSecurityGroupId = 'xxx';

    // -------------------------------------------

    // VPC を取得
    const vpc = ec2.Vpc.fromLookup(this, 'VPC', { vpcId: vpcId });

    const rdsSubnetGroup = new SubnetGroup(this, `rds-subnet-group`, {
      vpc: vpc,
      vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED },
      description: 'RDS 用のサブネットグループ',
    });

    // RDS セキュリティグループを取得
    const rdsSecurityGroup = SecurityGroup.fromLookupById(this, `rds-sg`, isolatedSecurityGroupId);

    // RDS 用シークレットを作成
    const dbSecret = new Secret(this, `rds-secret`, {
      secretName: `<SECRET_NAME>`,
      generateSecretString: {
        secretStringTemplate: JSON.stringify({ username: 'postgres' }),
        generateStringKey: 'password',
        passwordLength: 10, // パスワードの長さ
        excludeCharacters: '"@/$&:{}()[]+*=^-|', // 除外する特殊文字
      },
    });

    // RDS クラスターを作成
    new DatabaseCluster(this, `db-cluster`, {
      engine: DatabaseClusterEngine.auroraPostgres({ version: AuroraPostgresEngineVersion.VER_17_2 }), // Aurora PostgreSQL 17.2
      clusterIdentifier: `db-cluster`,
      defaultDatabaseName: '<DATABASE_NAME>',
      vpc: vpc,
      vpcSubnets: vpc.selectSubnets({ subnetType: ec2.SubnetType.PRIVATE_ISOLATED }),
      serverlessV2MinCapacity: 0.5,
      serverlessV2MaxCapacity: 64,
      backup: { retention: cdk.Duration.days(7) }, // バックアップ保持期間 7 日
      credentials: Credentials.fromSecret(dbSecret),
      subnetGroup: rdsSubnetGroup,
      securityGroups: [rdsSecurityGroup],
      storageEncrypted: true, // 暗号化を有効化
      writer: ClusterInstance.serverlessV2(`db-instance-1`, {
        autoMinorVersionUpgrade: false,
        instanceIdentifier: `db-instance-1`,
        enablePerformanceInsights: false,
        publiclyAccessible: false,
      }),
      readers: [
        ClusterInstance.serverlessV2(`db-instance-2`, {
          autoMinorVersionUpgrade: false,
          instanceIdentifier: `db-instance-2`,
          enablePerformanceInsights: false,
          publiclyAccessible: false,
        }),
      ],
    });
  }
}

まとめ

この記事では、AWS CDK を使用して Aurora PostgreSQL データベースクラスターを設定する方法について説明しました。Serverless v2 を活用することで、高効率でスケーラブルかつ安全なデータベースソリューションを実現できます。さらに詳細なカスタマイズ内容については、AWS CDK RDS ドキュメント を参照してください。

概要

技術的洞察、経験、思考を共有する個人ブログ

クイックリンク

お問い合わせ

  • Email: hushukang_blog@proton.me
  • GitHub

© 2025 CODE赤兎. 無断転載禁止