amazon-web-services - Terraform EC2 用户数据未运行
问题描述
我有以下实例:
resource "aws_instance" "FWInstance" {
disable_api_termination = false
iam_instance_profile = "${aws_iam_instance_profile.FirewallBootstrapInstanceProfile2Tier.name}"
instance_initiated_shutdown_behavior = "stop"
ebs_optimized = true
ami = "${var.PANFWRegionMap[var.aws_region]}"
instance_type = "m4.xlarge"
ebs_block_device {
device_name = "/dev/xvda"
volume_type = "gp2"
delete_on_termination = true
volume_size = 60
}
key_name = "${var.ServerKeyName}"
monitoring = false
network_interface {
device_index = 0
network_interface_id = "${aws_network_interface.FWManagementNetworkInterface.id}"
}
user_data = "${base64encode(join("", list("vmseries-bootstrap-aws-s3bucket=", var.MasterS3Bucket)))}"
}
通过 terraform 运行它时,它会创建实例,但会在 VM 登录时停止,并且从不运行 user_data 代码。
我尝试像这样使用 remote_exec:
provisioner "remote-exec" {
inline = ["# Connected!"]
}
它等待 5 分钟。并且由于那时没有创建实例而出错。
有没有办法通过 terraform 在这个 ec2 实例中运行用户数据?当我在没有 terraform 的 AWS 中创建类似的实例时,它工作正常。
解决方案
不要将 base64 编码的数据传递给user_data
,因为 Terraform 将为您进行 base64 编码。请参阅https://www.terraform.io/docs/providers/aws/r/instance.html#user_data
如果必须传入 base64 编码数据,请user_data_base64
改用。
将您的代码更改为:
user_data = "${join("", list("vmseries-bootstrap-aws-s3bucket=", var.MasterS3Bucket))}"