タダです.
前回記事で Terraform を使って Aurora MySQL に CloudWatch Database Insights Advanced を設定しました.しかし 既存の Aurora MySQL にて Performance Insights を暗号化した状態で CloudWatch Database Insights Advanced を有効化しようした時にエラーがでたため,AWS CLI で設定したメモをまとめました.
発生したエラー
エラーが発生した 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.
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, ~中略~ } }
そしてこの状態で実行計画を確認してみましたが,差分がないため現時点の暫定対応としては以上となります.
まとめ
Terraformで 既存の Aurora MySQL にて CloudWatch Database Insights Advanced を有効化した時に発生したエラーと暫定対応をまとめました.