From ae9a3b93285e92e4227e7ad1eca4cbec13c607f3 Mon Sep 17 00:00:00 2001
From: Matthew Baggett <matthew@baggett.me>
Date: Thu, 26 Dec 2024 15:46:52 +0100
Subject: [PATCH] Refactor to support setting the engine_version.

---
 cloud/aws/rds_serverless/debug.tf |  4 ++--
 cloud/aws/rds_serverless/rds.tf   | 13 ++++++++-----
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/cloud/aws/rds_serverless/debug.tf b/cloud/aws/rds_serverless/debug.tf
index 94a3c52..7a285f2 100644
--- a/cloud/aws/rds_serverless/debug.tf
+++ b/cloud/aws/rds_serverless/debug.tf
@@ -6,8 +6,8 @@ resource "local_file" "debug" {
       application_arn       = try(var.application.arn, null),
       application_name      = try(var.application.name, null),
       engine_user           = var.engine,
-      engine_actual         = data.aws_rds_engine_version.latest.engine
-      engine_version_actual = data.aws_rds_engine_version.latest.version,
+      engine_actual         = data.aws_rds_engine_version.latest[var.engine_version].engine
+      engine_version_actual = data.aws_rds_engine_version.latest[var.engine_version].version,
       endpoints = {
         write = aws_rds_cluster_endpoint.endpoint["write"].endpoint,
         read  = aws_rds_cluster_endpoint.endpoint["read"].endpoint
diff --git a/cloud/aws/rds_serverless/rds.tf b/cloud/aws/rds_serverless/rds.tf
index fb13581..9f62d33 100644
--- a/cloud/aws/rds_serverless/rds.tf
+++ b/cloud/aws/rds_serverless/rds.tf
@@ -1,7 +1,8 @@
 data "aws_rds_engine_version" "latest" {
-  engine  = var.engine
-  version = var.engine_version
-  latest  = true
+  for_each = toset([var.engine_version])
+  engine   = var.engine
+  version  = var.engine_version
+  latest   = true
   filter {
     name   = "engine-version"
     values = [var.engine_version]
@@ -23,8 +24,8 @@ resource "aws_kms_key" "db_key" {
 resource "aws_rds_cluster" "cluster" {
   cluster_identifier                  = local.sanitised_name
   engine_mode                         = "provisioned"
-  engine                              = data.aws_rds_engine_version.latest.engine
-  engine_version                      = data.aws_rds_engine_version.latest.version
+  engine                              = data.aws_rds_engine_version.latest[var.engine_version].engine
+  engine_version                      = data.aws_rds_engine_version.latest[var.engine_version].version
   database_name                       = local.admin_username
   master_username                     = local.admin_username
   master_password                     = local.admin_password
@@ -46,6 +47,7 @@ resource "aws_rds_cluster" "cluster" {
 
   lifecycle {
     create_before_destroy = false
+    replace_triggered_by  = [data.aws_rds_engine_version.latest]
   }
 
   tags = merge(
@@ -54,6 +56,7 @@ resource "aws_rds_cluster" "cluster" {
       Name = var.instance_name
     }
   )
+
 }
 
 data "aws_rds_certificate" "default" {