更新メモ
- 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 に対応したら、内容を更新しますぞ〜。
以上。