継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

既存の Amazon Aurora MySQL で CloudWatch Database Insights Advanced モードを AWS CLI で設定したメモ✍

タダです.

前回記事で Terraform を使って Aurora MySQL に CloudWatch Database Insights Advanced を設定しました.しかし 既存の Aurora MySQL にて Performance Insights を暗号化した状態で CloudWatch Database Insights Advanced を有効化しようした時にエラーがでたため,AWS CLI で設定したメモをまとめました.

sadayoshi-tada.hatenablog.com

発生したエラー

エラーが発生した Terraform のコードは以下のようなイメージです.予め Performance Insights を有効化して暗号化している状態でした.

resource "aws_rds_cluster" "blog_cluster" {
  cluster_identifier           = "blog-database"
  engine                       = "aurora-mysql"
  engine_version               = "8.0.mysql_aurora.3.09.0"
  master_username              = "admin"
  manage_master_user_password  = true
  storage_encrypted            = true
  kms_key_id                   = aws_kms_key.aurora_kms.arn
  port                         = 3306
  vpc_security_group_ids       = [aws_security_group.aurora_sg.id]
  db_subnet_group_name         = "db-subnet"
  backup_retention_period      = 1
  preferred_backup_window      = "17:15-17:45"
  preferred_maintenance_window = "sat:19:01-sat:19:31"
  performance_insights_enabled          = true
  performance_insights_kms_key_id       = aws_kms_key.aurora_kms.arn
  performance_insights_retention_period = 7
  skip_final_snapshot                   = true
}

この状態で以下のように database_insights_mode の追加と performance_insights_retention_period の値を 465 に変更して適用します.

resource "aws_rds_cluster" "blog_cluster" {
  cluster_identifier           = "blog-database"
  engine                       = "aurora-mysql"
  engine_version               = "8.0.mysql_aurora.3.09.0"
  master_username              = "admin"
  manage_master_user_password  = true
  storage_encrypted            = true
  kms_key_id                   = aws_kms_key.aurora_kms.arn
  port                         = 3306
  vpc_security_group_ids       = [aws_security_group.aurora_sg.id]
  db_subnet_group_name         = "db-subnet"
  backup_retention_period      = 1
  preferred_backup_window      = "17:15-17:45"
  preferred_maintenance_window = "sat:19:01-sat:19:31"
  database_insights_mode                = "advanced"
  performance_insights_enabled          = true
  performance_insights_kms_key_id       = aws_kms_key.aurora_kms.arn
  performance_insights_retention_period = 465
  skip_final_snapshot                   = true
}

適用しようとすると You can't change your Performance Insights KMS key というエラーがでました.同じ KMS キーを使用しているのにも関わらず左記のようにエラーが出たのでおかしい...

│ Error: updating RDS Cluster (blog-database): operation error RDS: ModifyDBCluster, https response error StatusCode: 400, RequestID: 99ad2517-d19f-4ecb-8380-01d04aff721a, api error InvalidParameterCombination: You can't change your Performance Insights KMS key.

│   with aws_rds_cluster.blog_cluster,
│   on aurora.tf line 16, in resource "aws_rds_cluster" "blog_cluster":
│   16: resource "aws_rds_cluster" "blog_cluster" {


そこで,調べたところ本件に関する issue がありました.この issue に原因に関する記載があったのですが,更新リクエスト時に Peformance Insights の KMS キー ID が送信されていないのが問題のようです.修正が行われるまで暫定対応で AWS CLI で回避できるかを確認してみることにしました.

The root cause of this error is performance_insights_kms_key_id is not sent in the update request. Even if it has been configured before, the AWS API always requires it, otherwise it defaults to aws/rds. Therefore, from AWS perspective I want to change the performance_insights_kms_key_id, which I don't.

github.com

AWS CLI で CloudWatch Database Insights Advanced を有効化する

AWS CLI で CloudWatch Database Insights Advanced を有効化するためのコマンドの以下のとおりです.これで既存の Aurora クラスターで CloudWatch Database Insights Advanced を有効化できました.

$ aws rds modify-db-cluster \
      --db-cluster-identifier blog-database \
      --database-insights-mode advanced \
      --enable-performance-insights \     
      --performance-insights-kms-key-id arn:aws:kms:ap-northeast-1:123456789101112:key/hoge \
      --performance-insights-retention-period 465
{
    "DBCluster": {
~中略~
        "DatabaseInsightsMode": "advanced",
        "PerformanceInsightsEnabled": true,
        "PerformanceInsightsKMSKeyId": "arn:aws:kms:ap-northeast-1:123456789101112:key/hoge",
        "PerformanceInsightsRetentionPeriod": 465,
~中略~
    }
}

docs.aws.amazon.com

そしてこの状態で実行計画を確認してみましたが,差分がないため現時点の暫定対応としては以上となります.

まとめ

Terraformで 既存の Aurora MySQL にて CloudWatch Database Insights Advanced を有効化した時に発生したエラーと暫定対応をまとめました.