LoginSignup
0

More than 1 year has passed since last update.

import した aws_db_instance で想定しない差分が出るとき

Posted at

概要

terraform import で RDS の MySQL をインポートした。
差分が出ないように記述したものの、以下のような差分が出てしまう。

  # module.rds.aws_db_instance.primary will be updated in-place
  ~ resource "aws_db_instance" "primary" {
      + character_set_name                    = ""
      + domain                                = ""
      + domain_iam_role_name                  = ""
        id                                    = "hoge"
      + identifier_prefix                     = ""
      + kms_key_id                            = ""
      + monitoring_role_arn                   = ""
        name                                  = "fuga"
      + nchar_character_set_name              = ""
      + password                              = (sensitive value)
      + performance_insights_kms_key_id       = ""
      + replica_mode                          = ""
      + replicate_source_db                   = ""
      + timezone                              = ""
        # (45 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

character_set_name, domain, ... といった要素が、いずれも空文字で差分が出ていた。

ドキュメント

例えば character_set_name

(Optional) The character set name to use for DB encoding in Oracle and Microsoft SQL instances (collation). This can't be changed.

と書かれており、明らかに MySQL 向けの設定ではない。ほかの空文字の要素も Optional で設定不要なものばかりだった。

import 直後の tfstate

terraform.tfstate
    {
      "module": "module.rds",
      "mode": "managed",
      "type": "aws_db_instance",
      "name": "primary",
      "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
      "instances": [
        {
          "schema_version": 1,
          "attributes": {
                :
            "character_set_name": "",
   :

tfstate には character_set_name がすでに空文字で定義されていた。
つまり、差分として本来出る必要のないものが、 plan 時に差分として出ているようだった。

対応

そのまま apply しても特に支障はなかった。
ただ、apply 中に本来必要でない Resetting-master-credentials というステータスが出たのが気になった。

image.png

文字通り認証情報の更新が行われたと思われる。

ここで冒頭の差分を見てみると、 password でも差分が出ていることがわかる。
これといってパスワードは変えたつもりはないが、同じ値であっても import 直後だと上記「Resetting-master-credentials」がわざわざ生じるのかもしれない。

そこで、別環境で同様の事象が発生した際に password を ignore_changes に入れてみた。すると、冒頭の差分は一切出なくなった。

resource "aws_db_instance" "primary" {
   :
  lifecycle {
    ignore_changes = [
      password,
    ]
  }
}

なぜ password を ignore するとほかの差分も消えるのかはわからないが、そういうものなのかもしれない。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0