Amazon web services 如何让Terraform等待cloudinit完成?
在我的示例中,我使用cloudinit初始化EC2实例。然而,Terraform表示,在cloud init完成之前,资源已经准备就绪。有没有一种方法可以让它在理想情况下等待cloud init完成,而无需使用Amazon web services 如何让Terraform等待cloudinit完成?,amazon-web-services,terraform,cloud-init,Amazon Web Services,Terraform,Cloud Init,在我的示例中,我使用cloudinit初始化EC2实例。然而,Terraform表示,在cloud init完成之前,资源已经准备就绪。有没有一种方法可以让它在理想情况下等待cloud init完成,而无需使用null资源进行SSHing或检查端口是否已启动。您和双方都使用模板\u cloudinit\u config。它们还有ec2:CreateTags 您可以使用EC2资源标签,如trajano/terraform docker swarm aws/cloudinit complete来指示
null
资源进行SSHing或检查端口是否已启动。您和双方都使用模板\u cloudinit\u config。它们还有ec2:CreateTags
您可以使用EC2资源标签,如trajano/terraform docker swarm aws/cloudinit complete来指示cloudinit已经完成
您可以将最后一个部分添加到每个部分以调用标记脚本:
部分{
filename=“tag_complete.sh”
content=local.tag\u complete\u脚本
content\u type=“text/x-shell脚本”
}
并声明标记完成脚本如下:
locals {
tag_complete_script = <<-EOF
#!/bin/bash
instance_id="${TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-id}"
aws ec2 create-tags --resources "$instance_id" --tags 'Key=trajano/terraform-docker-swarm-aws/cloudinit-complete,Value=true'
EOF
}
本地人{
tag_complete_script=这是一个很好的问题。前几天我在为Packer考虑这个问题。可能两者都存在类似的解决方案。我会想一想,并尝试回答这个问题。这假设您的本地计算机是UNIX,但我喜欢这个想法。好的观点!在本地执行器中以跨平台友好的方式调用Python可能更好请注意,Python是一个先决条件。直接使用boto3而不是AWS CLI编写此轮询器将非常容易。是的,我想根据我的操作使用SSH remote_exec,但我也想避免这种情况,因为它假设TerraFormerInDect中提供了服务的私钥。我正在破解我的brain提供了一种绕过ssh或端口检查的方法。标记似乎是一个不错的选择。在Docker容器或WSL中运行Terraform构建对于Windows用户来说似乎是一个可以接受的要求,但我已经好几年没有在工作中使用Windows了,因此我可能不应该为该用户群说话。如果标记应用于terraform管理的资源,因为它会将其剥离。
resource "null_resource" "wait_for_cloudinit" {
provisioner "local-exec" {
command = <<-EOF
#!/bin/bash
poll_tags="aws ec2 describe-tags --filters 'Name=resource-id,Values=${join(",", aws_instance.managers[*].id)}' 'Name=key,Values=trajano/terraform-docker-swarm-aws/cloudinit-complete' --output text --query 'Tags[*].Value'"
expected='${join(",", formatlist("true", aws_instance.managers[*].id))}'
$tags="$($poll_tags)"
while [[ "$tags" != "$expected" ]] ; do
$tags="$($poll_tags)"
done
EOF
}
}