LoginSignup
7
0

More than 1 year has passed since last update.

Aurora Serverless V2 を CDK v2 で構築できるか試してみたぞい!(2022/10/18版)

Last updated at Posted at 2022-05-25

更新メモ

  • 2022/05/24 新規投稿
  • 2022/10/18 結論に CloudFormation/CDK の最新の状況を記載

2022年4月21日に、Amazon Aurora Serverless V2 の一般提供が開始されたので、遅ればせながら試してみました。

Aurora Serverless(MySQL互換)の自力での構築は初めてなので、プロダクション環境を作るために必要なことを調べながら…という、まだまだ半端な内容が含まれますので、暖かく見守っていただければ。

結論

2022年5月24日時点(CDK v2.25.0)では Aurora Serverless V2 の構築は未対応の状況でした。

(rds): support for Aurora Serverless V2 · Issue #20197 · aws/aws-cdk

  • インスタンスタイプに SERVERLESS という値を指定しないといけないけど、CDK v2 が対応していないため、ServerlessCluster ではなく、DatabaseCluster で無理やりインスタンスタイプを書き換える回避策が Issue の中で紹介されている(自分で試してはいない)

(追記) 2022年10月18日時点

試した内容

利用したライブラリ

ライブラリ名 バージョン
aws-cdk-lib 2.25.0

現時点の実装コード

とりあえず、Aurora Serverless V2 を構築してみようとしたけど、ダメだったので諦めて V1 を構築したコードを参考に貼っておく。

import * as cdk from 'aws-cdk-lib';
import * as rds from 'aws-cdk-lib/aws-rds';

import * as env from './env'; // .env.xxx から環境設定を取得する自作部品

/**
 * Aurora Serverless V1 の定義
 *   - お試しなので VPC, Secret は省略して既定値に委ねる
 * @todo CDK が Aurora Serverless v2 を正式にサポートしたら修正する
 */
const auroraServerlessV1luster = (scope: Construct): rds.ServerlessCluster => {
  return new rds.ServerlessCluster(scope, 'ServerlessCluster', {
    // engine: rds.DatabaseClusterEngine.auroraMysql({
    //   version: rds.AuroraMysqlEngineVersion.of('8.0.mysql_aurora.3.02.0'),
    // }),
    engine: rds.DatabaseClusterEngine.AURORA_MYSQL,
    defaultDatabaseName: env.rdsDatabaseName(),
    enableDataApi: true,
    // 自動バックアップの保持期間
    backupRetention: env.rdsBackupRetention(),
    // キャパシティ
    scaling: {
      autoPause: cdk.Duration.hours(1), // V2だったら 0 を指定するけど、現状は V1 なので1時間で自動停止
      minCapacity: rds.AuroraCapacityUnit.ACU_1,
      maxCapacity: rds.AuroraCapacityUnit.ACU_2,
    },
    // Aurora MySQL のパラメータ
    parameterGroup: new rds.ParameterGroup(scope, 'ParameterGroup', {
      engine: rds.DatabaseClusterEngine.AURORA_MYSQL,
      parameters: {
        // 文字コードの構成:UTF-8 の 4 バイト文字を有効化
        character_set_client: 'utf8mb4',
        character_set_connection: 'utf8mb4',
        character_set_database: 'utf8mb4',
        character_set_results: 'utf8mb4',
        character_set_server: 'utf8mb4',
        collation_connection: 'utf8mb4_bin',
        collation_server: 'utf8mb4_bin',
        // 一般ログの構成
        general_log: '1', // 一般ログを有効化(既定値:0)
        // スロークエリログの構成
        // @see https://dev.mysql.com/doc/refman/8.0/ja/slow-query-log.html
        // log_queries_not_using_indexes: '1',
        // log_output: 'TABLE',
        long_query_time: '3', // 指定時間(秒)を超えるクエリをログ出力(既定値:10秒)
        slow_query_log: '1', // スロークエリログを有効化(既定値:0)
        // 監査ログの構成
        server_audit_events: 'CONNECT,QUERY,QUERY_DCL,QUERY_DDL,QUERY_DML,TABLE', // 監査対象イベント(既定値:なし)
        server_audit_logging: '1', // 監査ログの有効化
        server_audit_logs_upload: '1', // 監査ログの CloudWatch Logs へのアップロードを有効化
        // タイムゾーンの構成:日本
        time_zone: 'Asia/Tokyo',
      },
    }),
    // アンデプロイ時の処理
    removalPolicy: env.removalPolicy(),
  });
};
  • AuroraMysqlEngineVersion が定義している MySQL バージョンの値にも 8.0.mysql_aurora.3.02.0 に対応する値が未定義
  • AuroraCapacityUnit が定義しているキャパシティユニットの最小値にも 0.5 に対応する値が未定義
  • 以下を参考に、各種ログを CloudWatch Logs に出力するようにしてみたけど、構築された環境ではログ保持期間が「失効しない」になっている。ログ保持期間も運用ポリシーに合わせて CDK で設定する方法を継続して調べて見る予定

最後に

CDK が Aurora Serverless V2 に対応したら、内容を更新しますぞ〜。

以上。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0