首页 > 解决方案 > 使用 Terraforms 远程执行时的不一致

问题描述

我正在尝试创建三个 AWS EC2 实例,每个实例创建一个 EFS 卷并挂载它。然后我想将目录复制到 EC2 实例并将它们从我的本地计算机移动到挂载中。

我在使用 Terraform 时得到了一些奇怪的结果,在我的第一个 EC2 实例上,它似乎正在上传并将目录移动到所需的位置,第二个它只是将文件移动到没有目录,而第三个什么也不做,我不是收到任何错误,所以很难看出我哪里出错了。

下面是我的 EC2 资源代码。

resource "aws_instance" "node" {
  count = var.node_count

  ami                         = data.aws_ami.ecs.id
  associate_public_ip_address = true
  iam_instance_profile        = aws_iam_instance_profile.huski_ec2.name
  instance_type               = "t2.micro"
  key_name                    = format("huski_%d", count.index)
  subnet_id                   = element(var.vpc_public_subnets, 0)

  vpc_security_group_ids = [
  aws_security_group.huski.id]

  lifecycle {
    create_before_destroy = true
    prevent_destroy       = false
  }

  depends_on = [
    aws_key_pair.generated_key
  ]

  user_data = join("\n",
    [
      "#!/bin/bash\necho ECS_CLUSTER=${var.ecs_cluster_name} > /etc/ecs/ecs.config",
      data.template_file.script[count.index].rendered
  ])

  provisioner "file" {
    source      = format("nodes/node_%d", count.index)
    destination = "/var/tmp"

    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = tls_private_key.huski[count.index].private_key_pem
      host        = self.public_dns
    }
  }

  provisioner "remote-exec" {
    inline = [
      "sudo mv ${format("/var/tmp/node_%d/", count.index)} /mnt/efs_node_data/",
    ]

    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = tls_private_key.huski[count.index].private_key_pem
      host        = self.public_dns
    }
  }

  tags = {
    Name = format("%d-terraform", count.index)
  }
}

我是否错误地使用了供应商?

标签: amazon-web-servicesamazon-ec2terraformterraform-provider-aws

解决方案


推荐阅读