无法通过Terraform提供AWS_SPOT_INSTANCE



我试图通过Terraform旋转一个点实例。当我尝试使用Provisioner Block("远程证明"或"文件")时,它会失败,并且在调试级别输出中看到SSH错误。当我从点实例请求切换到标准AWS实例资源声明时,该配置正常。

代码无法正常工作:

    resource "aws_spot_instance_request" "worker01" {
      ami           = "ami-0cb95574"
      spot_price    = "0.02"
      instance_type = "m3.medium"
      vpc_security_group_ids = [ "${aws_security_group.ssh_access.id}", "${aws_security_group.tcp_internal_access.id}","${aws_security_group.splunk_access.id}","${aws_security_group.internet_access.id}" ]
      subnet_id     = "..."
      associate_public_ip_address = true
      connection {
        type = "ssh"
        user = "ec2-user"
        private_key = "${file("${var.private_key_path}")}"
      }
       provisioner "remote-exec" {
         inline = [
           "touch foo",
         ]
       }
    }

错误:

    aws_spot_instance_request.worker01 (remote-exec): Connecting to remote host via SSH...
    aws_spot_instance_request.worker01 (remote-exec):   Host:
    aws_spot_instance_request.worker01 (remote-exec):   User: ec2-user
    2017/09/01 16:17:52 [DEBUG] plugin: terraform: remote-exec-provisioner (internal) 2017/09/01 16:17:52 handshaking with SSH
    aws_spot_instance_request.worker01 (remote-exec):   Password: false
    aws_spot_instance_request.worker01 (remote-exec):   Private key: true
    aws_spot_instance_request.worker01 (remote-exec):   SSH Agent: true
    2017/09/01 16:17:52 [DEBUG] plugin: terraform: remote-exec-provisioner (internal) 2017/09/01 16:17:52 handshake error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
    2017/09/01 16:17:52 [DEBUG] plugin: terraform: remote-exec-provisioner (internal) 2017/09/01 16:17:52 Retryable error: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain

工作代码:

    resource "aws_instance" "worker01" {
      ami           = "ami-0cb95574"
      instance_type = "m3.medium"
      vpc_security_group_ids = [ "${aws_security_group.ssh_access.id}", "${aws_security_group.tcp_internal_access.id}","${aws_security_group.splunk_access.id}","${aws_security_group.internet_access.id}" ]
      subnet_id     = "..."
      associate_public_ip_address = true
      connection {
        type = "ssh"
        user = "ec2-user"
        private_key = "${file("${var.private_key_path}")}"
      }
       provisioner "remote-exec" {
         inline = [
           "touch foo",
         ]
       }
    }

我尝试过一些非工作代码的不同迭代(包括愚蠢的尝试将公共IP备用公共IP进行点现场实例,并尝试对现场实例进行自我参考 - 这给出了没有这样的实例属性错误)。不幸的是,我找不到通过Google有类似问题的人。从我阅读的内容来看,我应该能够以这种方式提供一个点实例。

感谢您提供的任何帮助。

您需要将wait_for_fulfillment = true添加到您的点实例请求中,否则资源将在创建实例之前返回。

最新更新