diff --git a/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs b/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs
--- a/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs
+++ b/integration/Test/Data/RdsData/Migration/ConnectionSpec.hs
@@ -37,11 +37,18 @@
 -- cabal test rds-data-test --test-options "--pattern \"/RDS integration test/\""
 tasty_rds_integration_test :: Tasty.TestTree
 tasty_rds_integration_test =
-  TC.withContainers (setupContainers' "localstack/localstack-pro:3.1.0") $ \getContainer ->
+  TC.withContainers (setupContainers' "localstack/localstack-pro:latest") $ \getContainer ->
     H.testProperty "RDS integration test" $ propertyOnce $ localWorkspace "rds-data" $ runLocalTestEnv getContainer $ do
       rdsClusterDetails <- createRdsDbCluster "rds_data_migration" getContainer
 
+      dbClusterArn <- rdsClusterDetails ^. the @"createDbClusterResponse" . the @"dbCluster" . _Just . the @"dbClusterArn"
+        & nothingFail
+
       runReaderResourceAndSecretArnsFromResponses rdsClusterDetails $ do
+        waitUntilRdsDbClusterAvailable dbClusterArn
+          & trapFail @AWS.Error
+          & jotShowDataLog @AwsLogEntry
+
         initialiseDb
           & trapFail @RdsDataError
           & trapFail @AWS.Error
diff --git a/rds-data.cabal b/rds-data.cabal
--- a/rds-data.cabal
+++ b/rds-data.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.6
 
 name:                   rds-data
-version:                0.0.0.3
+version:                0.0.0.4
 synopsis:               Codecs for use with AWS rds-data
 description:            Codecs for use with AWS rds-data.
 category:               Data
@@ -39,10 +39,10 @@
 common hedgehog                                 { build-depends: hedgehog                                 >= 1.4        && < 2      }
 common hedgehog-extras                          { build-depends: hedgehog-extras                          >= 0.6.0.2    && < 0.7    }
 common http-client                              { build-depends: http-client                              >= 0.5.14     && < 0.8    }
-common hw-polysemy-amazonka                     { build-depends: hw-polysemy:amazonka                     >= 0.2.14.2   && < 0.3    }
-common hw-polysemy-core                         { build-depends: hw-polysemy:core                         >= 0.2.14.2   && < 0.3    }
-common hw-polysemy-hedgehog                     { build-depends: hw-polysemy:hedgehog                     >= 0.2.14.2   && < 0.3    }
-common hw-polysemy-testcontainers-localstack    { build-depends: hw-polysemy:testcontainers-localstack    >= 0.2.14.2   && < 0.3    }
+common hw-polysemy-amazonka                     { build-depends: hw-polysemy:amazonka                     >= 0.2.14.5   && < 0.3    }
+common hw-polysemy-core                         { build-depends: hw-polysemy:core                         >= 0.2.14.5   && < 0.3    }
+common hw-polysemy-hedgehog                     { build-depends: hw-polysemy:hedgehog                     >= 0.2.14.5   && < 0.3    }
+common hw-polysemy-testcontainers-localstack    { build-depends: hw-polysemy:testcontainers-localstack    >= 0.2.14.5   && < 0.3    }
 common microlens                                { build-depends: microlens                                >= 0.4.13     && < 0.5    }
 common mtl                                      { build-depends: mtl                                      >= 2          && < 3      }
 common optparse-applicative                     { build-depends: optparse-applicative                     >= 0.18.1.0   && < 0.19   }
diff --git a/testlib/Data/RdsData/Polysemy/Test/Cluster.hs b/testlib/Data/RdsData/Polysemy/Test/Cluster.hs
--- a/testlib/Data/RdsData/Polysemy/Test/Cluster.hs
+++ b/testlib/Data/RdsData/Polysemy/Test/Cluster.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE DataKinds           #-}
 {-# LANGUAGE FlexibleContexts    #-}
+{-# LANGUAGE NumericUnderscores  #-}
 {-# LANGUAGE OverloadedStrings   #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeApplications    #-}
@@ -11,6 +12,7 @@
 module Data.RdsData.Polysemy.Test.Cluster
   ( RdsClusterDetails(..),
     createRdsDbCluster,
+    waitUntilRdsDbClusterAvailable,
   ) where
 
 import qualified Amazonka                                  as AWS
@@ -26,12 +28,14 @@
 import qualified Data.Text.Encoding                        as T
 import qualified Data.UUID                                 as UUID
 import qualified Data.UUID.V4                              as UUID
+import           HaskellWorks.Control.Monad
 import           HaskellWorks.Polysemy
 import           HaskellWorks.Polysemy.Amazonka
 import           HaskellWorks.Polysemy.Amazonka.LocalStack (getLocalStackEndpoint,
                                                             inspectContainer)
+import           HaskellWorks.Polysemy.Control.Concurrent
 import           HaskellWorks.Polysemy.Hedgehog
-import           HaskellWorks.Prelude
+import           HaskellWorks.Polysemy.Prelude
 import           HaskellWorks.TestContainers.LocalStack
 import           Lens.Micro
 
@@ -108,3 +112,25 @@
         & trapFail
 
   pure (RdsClusterDetails createDbClusterResponse createSecetResp)
+
+waitUntilRdsDbClusterAvailable :: ()
+  => HasCallStack
+  => Member (Embed IO) r
+  => Member (Error AWS.Error) r
+  => Member (Reader AWS.Env) r
+  => Member (DataLog AwsLogEntry) r
+  => Member Resource r
+  => Text
+  -> Sem r ()
+waitUntilRdsDbClusterAvailable dbClusterArn =
+  withFrozenCallStack do
+    repeatNWhileM_ 24 $ \_ -> do
+      result <- sendAws $
+        AWS.newDescribeDBClusters
+          & the @"dbClusterIdentifier" .~ Just dbClusterArn
+
+      let mStatus = result ^? the @"dbClusters" . _Just . each . the @"status" . _Just
+
+      if mStatus == Just "available"
+        then pure False
+        else threadDelay 1_000_000 >> pure True
