【问题标题】:Resource temporarily unavailable - TCP 5985资源暂时不可用 - TCP 5985
【发布时间】:2018-08-01 09:46:30
【问题描述】:

我从 Udemy 课程中克隆了一个 git repo,更改了访问密钥和密钥,ami,但我仍然收到如下错误消息:dial tcp 35.158.225.227:5985: connect: resource暂时不可用。

ec2 实例状态正在运行,但 powershell 无法执行。你知道什么不能正常工作吗?

windows-instance.tf

resource "aws_key_pair" "mykey" {
  key_name = "mykey"
  public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}"
}

resource "aws_instance" "win-example" {
  ami = "${lookup(var.WIN_AMIS, var.AWS_REGION)}"
  instance_type = "t2.micro"
  key_name = "${aws_key_pair.mykey.key_name}"
  user_data = <<EOF
<powershell>
net user ${var.INSTANCE_USERNAME} '${var.INSTANCE_PASSWORD}' /add /y
net localgroup administrators ${var.INSTANCE_USERNAME} /add
winrm quickconfig -q
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="300"}'
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
netsh advfirewall firewall add rule name="WinRM 5985" protocol=TCP dir=in localport=5985 action=allow
netsh advfirewall firewall add rule name="WinRM 5986" protocol=TCP dir=in localport=5986 action=allow
net stop winrm
sc.exe config winrm start=auto
net start winrm
</powershell>
EOF

  provisioner "file" {
    source = "test.txt"
    destination = "C:/test.txt"
  }
  connection {
    type = "winrm"
    timeout = "10m"
    user = "${var.INSTANCE_USERNAME}"
    password = "${var.INSTANCE_PASSWORD}"
  }
}

vars.tf

variable "AWS_ACCESS_KEY" {}
variable "AWS_SECRET_KEY" {}
variable "AWS_REGION" {
  default = "eu-central-1"
}
variable "WIN_AMIS" {
  type = "map"
  default = {
    eu-central-1 = "ami-6af7f381"
    eu-west-1 = "ami-96e1f27c"
  }
}

variable "PATH_TO_PRIVATE_KEY" {
  default = "mykey"
}
variable "PATH_TO_PUBLIC_KEY" {
  default = "mykey.pub"
}
variable "INSTANCE_USERNAME" {
  default = "Terraform"
}
variable "INSTANCE_PASSWORD" { }

provider.tf

provider "aws" {
    access_key = "${var.AWS_ACCESS_KEY}"
    secret_key = "${var.AWS_SECRET_KEY}"
    region = "${var.AWS_REGION}"
}

文件夹中还有一个 terraform.tfvars、pub 和一个 pem 文件。我做错了什么?

最好的问候

【问题讨论】:

  • 您的实例似乎没有定义安全组,因此它可能选择了 VPC 的默认安全组。相反,您应该向实例添加一个安全组,以允许 TCP/5985 和 TCP/5986 上的入站流量。

标签: amazon-web-services powershell terraform


【解决方案1】:

问题是您没有以 Windows 管理员身份登录。 您正在尝试以不存在的用户身份登录,然后将该用户添加到系统中。那是做不到的。您必须以管理员身份登录。

要做到这一点

key_name = "${aws_key_pair.mykey.key_name}"

key_name = "${aws_key_pair.mykey.key_name}"
get_password_data = true

换行

get_password_data = true

告诉 Terraform 在创建后立即获取 Windows 管理员密码。创建密码后,您需要对其进行访问、解密,然后使用它登录到实例。所以,下一个改变..

connection {
  type = "winrm"
  timeout = "10m"
  user = "${var.INSTANCE_USERNAME}"
  password = "${var.INSTANCE_PASSWORD}"
}

connection {
  type = "winrm"
  timeout = "10m"
  password = "${rsadecrypt(self.password_data, file("${var.PATH_TO_PRIVATE_KEY}"))}"

}

这将使用解密的管理员密码以管理员身份登录。

下一次删除,

net user ${var.INSTANCE_USERNAME} '${var.INSTANCE_PASSWORD}' /add /y
net localgroup administrators ${var.INSTANCE_USERNAME} /add

这不是必需的,因为您将以可以访问密码的管理员身份登录。

也改变

winrm quickconfig -q

winrm quickconfig -force

最后,从 vars.tf 中删除

variable "INSTANCE_USERNAME" {
  default = "Terraform"
}
variable "INSTANCE_PASSWORD" { }

因为您将以管理员身份登录。

然后一切都应该正常工作。

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-02-21
  • 2018-08-04
  • 2021-05-07
  • 2018-02-24
  • 2016-01-25
  • 2012-04-25
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多