Amazon web services 使用Terraform Spot fleet请求创建的AWS Spot实例不返回公共ip地址

Amazon web services 使用Terraform Spot fleet请求创建的AWS Spot实例不返回公共ip地址,amazon-web-services,terraform,Amazon Web Services,Terraform,我正在使用Terraform为AWS Spot车队提供资源 Spot fleet已成功配置,但当我尝试使用ssh连接到实例以便在其上运行Node.js应用程序(预安装在AMI上)时,问题就出现了。我无法检索已设置的实例的公用ip地址 我的请求如下所示: main.tf provider "aws" { access_key = "${var.aws_access_key}" secret_key = "${var.aws_secret_key}" region = "${va

我正在使用Terraform为AWS Spot车队提供资源

Spot fleet已成功配置,但当我尝试使用ssh连接到实例以便在其上运行Node.js应用程序(预安装在AMI上)时,问题就出现了。我无法检索已设置的实例的公用ip地址

我的请求如下所示:

main.tf

provider "aws" {
  access_key = "${var.aws_access_key}"
  secret_key = "${var.aws_secret_key}"
  region     = "${var.aws_region}"
}

resource "aws_spot_fleet_request" "spot_fleet" {
  iam_fleet_role                      = "${var.iam_fleet_role}"
  spot_price                          = "${var.spot_price}"
  allocation_strategy                 = "${var.allocation_strategy}"
  target_capacity                     = "${var.target_capacity}"
  terminate_instances_with_expiration = "${var.terminate_instances_with_expiration}"
  valid_until                         = "${var.valid_until}"
  wait_for_fulfillment                = "${var.wait_for_fulfillment}"

  launch_specification {
    instance_type          = "${var.instance_type}"
    key_name               = "${var.key_name}"
    ami                    = "${var.ami}"
    vpc_security_group_ids = ["${var.security_group_id}"]

    root_block_device {
      volume_size = "${var.volume_size}"
      volume_type = "${var.volume_type}"
    }
  }

  provisioner "remote-exec" {
    inline = [
      "cd my-app",
      "npm install",
      "npm start",
    ]

    connection {
      host        = "${self.public_ip}"
      type        = "ssh"
      user        = "ubuntu"
      private_key = "${file("my-secret.pem")}"
      timeout     = "2m"
      agent       = false
    }
  }
}
这是我得到的错误:

Error applying plan:

 1 error(s) occurred:

  * aws_spot_fleet_request.spot_fleet: 1 error(s) occurred:

  * Resource 'aws_spot_fleet_request.spot_fleet' does not have attribute 'public_ip' for variable 'aws_spot_fleet_request.spot_fleet.0.public_ip'
配置的spot实例本身具有公共IP地址,我可以在AWS控制台中看到它


我还能够使用终端SSH到实例中

忘记添加以下内容:1。配置的spot实例本身具有公共IP地址,我可以在AWS控制台中看到它。2.我还可以使用终端SSH到实例中。
aws\u spot\u fleet\u请求
除了输入的属性之外,根本不会导出它创建的实例的任何属性,因此这对您不起作用。在您的情况下,您可能可以使用直点实例(使用
aws\u spot\u instance\u request
资源),因为您可能不需要spot车队提供的实例类型的灵活性。非常感谢您的回复,@ydaetskcoR!该用例涉及处理大型文件,并且是计算密集型的。现在我想应该可以使用
aws\u spot\u instance\u request
而不是
aws\u spot\u fleet\u request
。非常感谢您抽出时间回复!如果有人碰巧出现在这个页面上搜索这个特定问题,Terraform的团队也会被问到一个问题。谢谢忘记添加以下内容:1。配置的spot实例本身具有公共IP地址,我可以在AWS控制台中看到它。2.我还可以使用终端SSH到实例中。
aws\u spot\u fleet\u请求
除了输入的属性之外,根本不会导出它创建的实例的任何属性,因此这对您不起作用。在您的情况下,您可能可以使用直点实例(使用
aws\u spot\u instance\u request
资源),因为您可能不需要spot车队提供的实例类型的灵活性。非常感谢您的回复,@ydaetskcoR!该用例涉及处理大型文件,并且是计算密集型的。现在我想应该可以使用
aws\u spot\u instance\u request
而不是
aws\u spot\u fleet\u request
。非常感谢您抽出时间回复!如果有人碰巧出现在这个页面上搜索这个特定问题,Terraform的团队也会被问到一个问题。谢谢