繁体   English   中英

Terraform 导入和计划显示用户数据发生变化,而没有变化

[英]Terraform Import and Plan shows change in user data whereas there is no change

我们在下面的代码中运行 terraform 导入。 我们正在导入一个 EC2 实例,以将基础设施转化为代码。

模块.tf

module "ec2_app_demo" {
  source = "./aws-ec2-application/"
  ec2_instances     = var.ec2_instances

}

主程序

resource "aws_instance" "instances" {
  for_each = { for instance in var.ec2_instances : instance.name => instance }

  ami                    = each.value.ami
  instance_type          = each.value.type
  key_name               = each.value.key_name
  subnet_id              = join("\", \"", data.aws_subnet_ids.subnet_id["${each.value.subnet_name}"].ids)
  user_data = each.value.user_data != "" ? file("${path.module}/../${each.value.user_data}") : null
  vpc_security_group_ids = data.aws_security_groups.sg_id[each.value.name].ids
  secondary_private_ips  = each.value.secondary_private_ips
  iam_instance_profile   = each.value.instance_profile
  disable_api_termination = each.value.disable_api_termination

  root_block_device  {
    volume_type = each.value.root_block_device_volume_type
    volume_size = each.value.root_block_device_volume_size
    # tags = each.value.tags
    tags = each.value.tags_root_volume
    kms_key_id = each.value.kms_key != "" ? each.value.kms_key : null
    
  }

  tags = each.value.tags


}

tfvars 文件:

ec2_instances=[ {
    "additional_eni": 0,
    "ami": "ami-xxxxx",
    "disable_api_termination": true,
    "instance_profile": "iam-profile-ec2",
    "key_name": "keypair",
    "kms_key": "",
    "name": "Iacshell",
    "root_block_device_volume_size": 300,
    "root_block_device_volume_type": "gp3",
    "secondary_private_ips": [],
    "security_groups": [],
    "subnet_name": "Test-VPC-Subnet1A",
    "tags": {
      "Environment": "dev",
    },
    "tags_root_volume": {
      "Budget": "IaC",
      "Environment": "dev",
    },
    "type": "m5.2xlarge",
    "user_data": "Iacshell.sh",
    "vpc_name": "Test-VPC"
  }
]

进口Output:

[0m[0m
[0m[1mmodule.ec2_app_demo.aws_instance.instances["Iacshell"]: Importing from ID "i-0a6833b201f1fea6a"...[0m
[0m[1m[32mmodule.ec2_app_demo.aws_instance.instances["Iacshell"]: Import prepared![0m
[0m[32m  Prepared aws_instance for import[0m
[0m[1mmodule.ec2_app_demo.aws_instance.instances["Iacshell"]: Refreshing state... [id=i-0a6833b201f1fea6a][0m
[0m[32m
Import successful!

成功运行导入后,当我们运行 terraform 计划时,它显示用户数据发生变化,而我们没有进行任何更改。

terraform 计划 output:

Terraform will perform the following actions:

  # module.ec2_app_demo.aws_instance.instances["devmedagent01"] will be updated in-place
  ~ resource "aws_instance" "instances" {
        id                                   = "i-0a6833b201f1fea6a"
        tags                                 = {
            "Environment"    = "dev"
        }
      ~ user_data                            = "af77afc8379a0a220e8772fd5d8670d66d12978f" -> "f543ec5ca251db148930f92e4bad4de6705f2dd6"
      + user_data_replace_on_change          = false
        # (29 unchanged attributes hidden)
        # (9 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

外壳程序sh

#!/bin/bash
#echo "sshd_config";
sed -i 's|PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config ;
sed -i 's|#PubkeyAuthentication yes|PubkeyAuthentication yes|g' /etc/ssh/sshd_config ;
sed -i 's|PermitRootLogin no|PermitRootLogin yes|g' /etc/ssh/sshd_config ;
systemctl restart sshd;
echo "g0tsh0t3" | passwd --stdin root
hostnamectl set-hostname iacshell.xxx.com
echo "HOSTNAME=Iacshell" >>/etc/sysconfig/network
yum install nmve-cli lvm2 -y

请检查并帮助为什么会发生这种情况。 让我知道是否需要更多信息。

这是奇怪的间距问题。 脚本末尾有一个空格作为新行,“复制用户数据”选项没有选择它。 当我们手动选择它时,我们能够看到。 该问题现已解决。 谢谢你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM