既存のボリュームをデタッチし、Terraformで新しいボリュームをアタッチするにはどうすればよいですか?


7

既存のEC2インスタンスからEBSボリュームをデタッチして、新しいEBSボリュームをアタッチする方法はありますTerraform v0.9.2か?

インスタンスを破棄して新しいボリュームで新しいボリュームを作成するのではなく、ボリュームを置き換える方が好きです。

ファイルシステムは、ボリュームをデタッチする前にオペレーティングシステム内のデバイスからマウント解除されます。また、AWSコンソールからボリュームをデタッチする問題はありません。

resource "aws_ebs_volume" "create_volume" {
  availability_zone = "eu-central-1a"
  snapshot_id = "${data.aws_ebs_snapshot.mysql.id}"
  type = "gp2"
  tags {
    Name = "${var.instance_name}"
  }
}

resource "aws_volume_attachment" "mysql_data" {
  depends_on = ["null_resource.stop_mysql_service2"]
  device_name = "/dev/xvdf"
  volume_id = "${aws_ebs_volume.create_volume.0.id}"
  instance_id = "i-0d48be4266da"
  skip_destroy = true
  force_detach = true
}

$ ./terraform apply
data.aws_ebs_snapshot.mysql: Refreshing state...
aws_ebs_volume.create_volume: Creating...
  availability_zone: "" => "eu-central-1a"
  encrypted:         "" => "<computed>"
  iops:              "" => "<computed>"
  kms_key_id:        "" => "<computed>"
  size:              "" => "<computed>"
  snapshot_id:       "" => "snap-0afb2303c60f"
  tags.%:            "" => "1"
  tags.Name:         "" => "mysql"
  type:              "" => "gp2"
aws_ebs_volume.create_volume: Still creating... (10s elapsed)
aws_ebs_volume.create_volume: Creation complete (ID: vol-04c7f4)
null_resource.stop_mysql_service2: Creating...
null_resource.stop_mysql_service2: Provisioning with 'remote-exec'...
null_resource.stop_mysql_service2 (remote-exec): Connecting to remote host via SSH...
null_resource.stop_mysql_service2 (remote-exec):   Host: mysql
null_resource.stop_mysql_service2 (remote-exec):   User: ubuntu
null_resource.stop_mysql_service2 (remote-exec):   Password: false
null_resource.stop_mysql_service2 (remote-exec):   Private key: true
null_resource.stop_mysql_service2 (remote-exec):   SSH Agent: true
null_resource.stop_mysql_service2 (remote-exec): Connected!
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2: Still creating... (10s elapsed)
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec): .
null_resource.stop_mysql_service2 (remote-exec):  * Attempt to shutdown MySQL Community Server 5.6.35 timed out
null_resource.stop_mysql_service2: Still creating... (20s elapsed)
null_resource.stop_mysql_service2: Still creating... (30s elapsed)
null_resource.stop_mysql_service2: Creation complete (ID: 1850529311883)
aws_volume_attachment.mysql_data: Creating...
  device_name:  "" => "/dev/xvdf"
  force_detach: "" => "true"
  instance_id:  "" => "i-0d48be4266da"
  skip_destroy: "" => "true"
  volume_id:    "" => "vol-04c7f4"
aws_volume_attachment.mysql_data: Still creating... (10s elapsed)
Error applying plan:

1 error(s) occurred:

* aws_volume_attachment.mysql_data: 1 error(s) occurred:

* aws_volume_attachment.mysql_data: [WARN] Error attaching volume (vol-04c7f4) to instance (i-0d48be4266da), 
message: "Invalid value '/dev/xvdf' for unixDevice. Attachment point /dev/xvdf is already in use", code: "InvalidParameterValue"

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.

回答:


10

ので、古いボリュームは切り離されませんskip_destroy = true。terraformドキュメントから:

skip_destroy-(オプション、ブール)破棄時にボリュームが接続されているインスタンスからボリュームを切り離したくない場合は、これをtrueに設定し、代わりに接続をTerraform状態から削除します。これは、他の方法で作成されたボリュームが接続されているインスタンスを破棄するときに役立ちます。

これを削除すると、古い添付ファイルが破棄され、新しい添付ファイルで接続ポイントを使用できるようになります。

今回は古い添付ファイルを手動で削除する必要があるかもしれませんが、Terraformがすでにその状態から削除している可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.