LoginSignup
7
3

More than 5 years have passed since last update.

Terraformで管理しているAWS EBSボリュームを入れ替える

Last updated at Posted at 2017-12-03

Terraform v0.8 以降で state をローカル以外にしていた時に、terraform importできない、aws_volume_attachmentのようなresourceを入れ替える方法です。

ディスクサイズの拡張はオンラインで出来るようになったため、EBSを切り替える必要はなくなっていますがディスクサイズの縮小が必要になってしまったので。

環境

  • terraform v0.11.0
    • stateのバックエンドをs3にしている。他のバックエンドでも同じ手順でいけるとは思います。

手順

aws_ebs_volume

EBSの入れ替えを行なった後にそのボリュームIDを控えておきます。
リソース名がnameとして

terraform state rm aws_ebs_volume.name
terraform import aws_ebs_volume.name vol-id

aws_ebs_volume については入れ替えできます。

aws_volume_attachment

まず、いまの stateファイルを取得します。

terraform state pull > state.tfstate

リソース名がnameだったとして、stateファイルから aws_volume_attachment.name を探すとこんな感じになっているはずです。

                "aws_volume_attachment.name": {
                    "type": "aws_volume_attachment",
                    "depends_on": [
                        "aws_ebs_volume.name",
                        "aws_instance.name"
                    ],
                    "primary": {
                        "id": "vai-id",
                        "attributes": {
                            "device_name": "/dev/sdb",
                            "id": "vai-id",
                            "instance_id": "i-id",
                            "volume_id": "vol-id"
                        },
                        "meta": {},
                        "tainted": false
                    },
                    "deposed": [],
                    "provider": "provider.aws"
                },

今回はこのボリュームを入れ替えたので、attributesvolume_idの値を、新しくしたEBSのボリュームIDにします。
また、この後stateファイルを入れ替えるので、stateファイルのserial を一つカウントアップしておきます。 serial でバージョンが管理されているためです。

書き換え終わったら下記を実行してバックエンド上のstateファイルを書き換えます。

terraform state push state.tfstate

これで terraform plan しても齟齬が出なくなって入れば完了です。

7
3
0

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
7
3