【发布时间】:2020-02-19 20:49:41
【问题描述】:
我有一个存储在 S3 存储桶中的 tf 状态文件,其中包含有关 EC2 实例的部分:
"attributes": {
"ami": "ami-0ed60c7b71b6610a6",
"arn": "arn:aws:ec2:eu-west-1:44444444444444:instance/i-07cff2b254b1cde3c",
"associate_public_ip_address": "false",
"availability_zone": "eu-west-1a",
"cpu_core_count": "1",
"cpu_threads_per_core": "2",
"credit_specification.#": "1",
"credit_specification.0.cpu_credits": "standard",
"disable_api_termination": "true",
"ebs_block_device.#": "2",
"ebs_block_device.2279853085.delete_on_termination": "true",
"ebs_block_device.2279853085.device_name": "",
"ebs_block_device.2279853085.encrypted": "false",
"ebs_block_device.2279853085.iops": "100",
"ebs_block_device.2279853085.kms_key_id": "",
"ebs_block_device.2279853085.snapshot_id": "snap-016c60740e5e35f25",
"ebs_block_device.2279853085.volume_id": "vol-03efc2ed4652597a9",
"ebs_block_device.2279853085.volume_size": "30",
"ebs_block_device.2279853085.volume_type": "gp2",
"ebs_block_device.897462451.delete_on_termination": "true",
"ebs_block_device.897462451.device_name": "/dev/xvde",
"ebs_block_device.897462451.encrypted": "false",
"ebs_block_device.897462451.iops": "100",
"ebs_block_device.897462451.kms_key_id": "",
"ebs_block_device.897462451.snapshot_id": "snap-0d3e70949c825b0e9",
"ebs_block_device.897462451.volume_id": "vol-0120f6b2038ec6066",
"ebs_block_device.897462451.volume_size": "30",
"ebs_block_device.897462451.volume_type": "gp2",
"ebs_optimized": "false",
"ephemeral_block_device.#": "0",
"get_password_data": "false",
"iam_instance_profile": "kp-prd-ec2",
"id": "i-07cff2b254b1cde3c",
"instance_state": "running",
"instance_type": "t3.micro",
"ipv6_address_count": "0",
"ipv6_addresses.#": "0",
"key_name": "gdp_-data-admin",
"monitoring": "false",
"network_interface.#": "0",
"password_data": "",
"placement_group": "",
"primary_network_interface_id": "eni-09e9454cb4954ecde",
"private_dns": "ip-10-194-27-15.eu-west-1.compute.internal",
"private_ip": "10.194.27.15",
"public_dns": "",
"public_ip": "",
"root_block_device.#": "1",
"root_block_device.0.delete_on_termination": "true",
"root_block_device.0.encrypted": "false",
"root_block_device.0.iops": "240",
"root_block_device.0.kms_key_id": "",
"root_block_device.0.volume_id": "vol-0d53a53b8825c9889",
"root_block_device.0.volume_size": "80",
"root_block_device.0.volume_type": "gp2",
"security_groups.#": "0",
"source_dest_check": "true",
"subnet_id": "subnet-53af101a",
"tenancy": "default",
"user_data": "9306f6c8f4c0679a11f00c8e5dbaf14ef5944e65",
"vpc_security_group_ids.#": "3",
"vpc_security_group_ids.1370631249": "sg-fb68699f",
"vpc_security_group_ids.359020622": "sg-22b0be44",
"vpc_security_group_ids.41262993": "sg-3d52f758"
当我运行我的 terraform 时,我知道它想要强制进行一些更改,因此,它必须销毁并再次创建 EC2 实例:
disable_api_termination: "true" => "true"
ebs_block_device.#: "2" => "2"
ebs_block_device.2279853085.delete_on_termination: "true" => "false" (forces new resource)
ebs_block_device.2279853085.device_name: "/dev/xvdd" => "" (forces new resource)
ebs_block_device.3965576335.delete_on_termination: "" => "true" (forces new resource)
ebs_block_device.3965576335.device_name: "" => "/dev/xvdd" (forces new resource)
ebs_block_device.3965576335.encrypted: "" => <computed> (forces new resource)
ebs_block_device.3965576335.iops: "" => ""
ebs_block_device.3965576335.kms_key_id: "" => <computed> (forces new resource)
ebs_block_device.3965576335.snapshot_id: "" => <computed> (forces new resource)
ebs_block_device.3965576335.volume_id: "" => <computed>
ebs_block_device.3965576335.volume_size: "" => "10" (forces new resource)
ebs_block_device.3965576335.volume_type: "" => "gp2" (forces new resource)
ebs_block_device.3986656952.delete_on_termination: "" => "true" (forces new resource)
ebs_block_device.3986656952.device_name: "" => "/dev/xvde" (forces new resource)
ebs_block_device.3986656952.encrypted: "" => <computed> (forces new resource)
ebs_block_device.3986656952.iops: "" => ""
ebs_block_device.3986656952.kms_key_id: "" => <computed> (forces new resource)
ebs_block_device.3986656952.snapshot_id: "" => <computed> (forces new resource)
ebs_block_device.3986656952.volume_id: "" => <computed>
ebs_block_device.3986656952.volume_size: "" => "10" (forces new resource)
ebs_block_device.3986656952.volume_type: "" => "gp2" (forces new resource)
ebs_block_device.897462451.delete_on_termination: "true" => "false" (forces new resource)
ebs_block_device.897462451.device_name: "/dev/xvde" => "" (forces new resource)
ebs_optimized: "true" => "false" (forces new resource)
我绝对不想重新创建实例,因为它被另一个团队使用,所以我想将 tf 状态与我在控制台中的状态相匹配。请问有什么帮助吗? 如何在不丢失任何数据的情况下执行此操作?
【问题讨论】:
-
定义资源的 Terraform 代码是什么样的?看起来 Terraform 说您尚未根据状态定义附加到它的 EBS 卷,因此 Terraform 想要删除这些 EBS 卷。但是因为当 EBS 卷直接附加到实例而不是通过单独的
aws_ebs_volume和aws_ebs_volume_attachment资源时这是不可行的,所以它必须删除整个实例并重建。
标签: amazon-web-services terraform