[英]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.