AWS CDKでSecrets ManagerにRDSの情報を格納する方法

AWS CDKでSecrets ManagerにRDSの情報を格納する方法

項目バージョン
CDK2.27.0

AWS CDKでSecrets ManagerにRDSの情報を格納する方法です。

Secrets Managerデプロイ

aws_secretsmanagerで新しいシークレットをデプロイしてみます。

import { Stack, StackProps, aws_secretsmanager } from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';

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

    const vpc = ec2.Vpc.fromLookup(this, 'Vpc', {
      vpcId: 'vpc-xxxxxxxxxxxxxxxxx'
    }) // 既存VPC

    // Secrets Manager
    const newSecret = new aws_secretsmanager.Secret(
      this,
      'DBCredentialsSecret',
      {
        secretName: 'rds-credentials',
        generateSecretString: {
          excludePunctuation: true,
          includeSpace: false,
          generateStringKey: 'password',
          secretStringTemplate: JSON.stringify({
            username: 'hoge',
          })
       }
      }
    );

  }
}

これでデプロイします。

cdk deploy

新しいシークレットが作成されます。

AWS CDKでSecrets ManagerにRDSの情報を格納する方法

RDSの情報をシークレットマネージャに格納する

RDSデプロイ時にcredentialsオプションにシークレットのインスタンス変数を指定すると、RDS情報が格納されます。

credentials: rds.Credentials.fromSecret(newSecret) // newSecret変数

tsを修正します。

import { Stack, StackProps, aws_secretsmanager } from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
import * as rds from 'aws-cdk-lib/aws-rds';

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

    const vpc = ec2.Vpc.fromLookup(this, 'Vpc', {
      vpcId: 'vpc-xxxxxxxxxxxxxxxxx'
    }) // 既存VPC

    // Secrets Manager
    const newSecret = new aws_secretsmanager.Secret(
      this,
      'DBCredentialsSecret',
      {
        secretName: 'secret-test',
        generateSecretString: {
          excludePunctuation: true,
          includeSpace: false,
          generateStringKey: 'password',
          secretStringTemplate: JSON.stringify({
            username: 'hoge',
          })
        }
      }
    );

    // RDS(postgreSQL)
    const postgres = new rds.DatabaseInstance(this, 'Instance', {
      engine: rds.DatabaseInstanceEngine.postgres({
        version: rds.PostgresEngineVersion.VER_12, // ver12指定
      }),
      vpc, // multi AZ at least 2
      vpcSubnets: {
        subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
      },
      credentials: rds.Credentials.fromSecret(newSecret) // シークレットにRDS情報格納
    });

  }
}

これでデプロイします。

cdk deploy

RDSが作成されます。

AWS CDKでSecrets ManagerにRDSの情報を格納する方法

シークレットにRDS情報が格納されます。

AWS CDKでSecrets ManagerにRDSの情報を格納する方法

これでRDS情報がシークレットに追加されます。

参考サイト

aws-cdk-lib.aws_rds module · AWS CDK
Language | Package
aws-cdk-lib.aws_secretsmanager module · AWS CDK
Language | Package

コメント

タイトルとURLをコピーしました