在terraform中解密Windows密码

在terraform中解密Windows密码,windows,amazon-ec2,terraform,terraform-provider-aws,Windows,Amazon Ec2,Terraform,Terraform Provider Aws,我正在尝试设置一个Terraform脚本来部署windows服务器。运行terraform apply时,我收到一条错误消息,如下所示 Error: Invalid reference on main.tf line 44, in resource "aws_instance" "server": 44: password = "${rsadecrypt(aws_instance.server[0].password_data, file(KEY_PATH))}" A r

我正在尝试设置一个Terraform脚本来部署windows服务器。运行terraform apply时,我收到一条错误消息,如下所示

Error: Invalid reference

  on main.tf line 44, in resource "aws_instance" "server":
  44:       password = "${rsadecrypt(aws_instance.server[0].password_data, file(KEY_PATH))}"

A reference to a resource type must be followed by at least one attribute
access, specifying the resource name.
如果资源为“aws_实例”,名称为“服务器[0]”,属性为“密码_数据”。我知道我错过了什么,但不知道是什么。任何协助都将不胜感激

下面是完整的资源模块,以防其中包含我遗漏的内容。 谢谢

使用
password=“${rsadecrypt(self.password\u数据,文件(“/root/.ssh/id\u rsa”))}”
没有如下所示的
user=“admin”

resource "aws_instance" "windows_server" {

   get_password_data      =   "true"
   connection {
     host     = "${self.public_ip}"
     type     = "winrm"
     https    = false
     password = "${rsadecrypt(self.password_data, file("/root/.ssh/id_rsa"))}"
     agent    = false
     insecure = "true"
   }
}
使用
password=“${rsadecrypt(self.password\u数据,文件(“/root/.ssh/id\u rsa”))}”
没有如下所示的
user=“admin”

resource "aws_instance" "windows_server" {

   get_password_data      =   "true"
   connection {
     host     = "${self.public_ip}"
     type     = "winrm"
     https    = false
     password = "${rsadecrypt(self.password_data, file("/root/.ssh/id_rsa"))}"
     agent    = false
     insecure = "true"
   }
}

假设
KEY\u PATH
是您从这里删除的实际路径,或者被类似于
pathexpand(“~/.ssh/id\u rsa”)的内容替换为
rsadecrypt(self.password\u data,file(KEY\u PATH))
我在terraform.tfvars文件中有密钥路径
KEY\u PATH=“C:\\Users\\paulj\\OneDrive\\Documents\\\教育课程\\培训\\AWS\\keys”
(我正在本地测试地形图)。我尝试使用self.password选项,但我得到了相同的错误。
KEY\u PATH
不是有效的变量引用。如果您将变量定义为
variable“KEY\u PATH{}
,则需要
var.KEY\u PATH
谢谢@ydaetskcoR,问题似乎是缺少变量名的“var”部分。将其添加到密钥路径中可以解决问题。谢谢,我很惊讶您可以在其自己的provisioner中引用资源。这通常是错误的,这就是为什么供应者可以使用
self
关键字,但我还没有测试自Terraform 0.12以来是否仍然是这样。我想您只需要
rsadecrypt(self.password\u数据,文件(KEY\u路径))
假设
KEY\u PATH
是您从此处删除的实际路径,或者替换为类似
pathexpand(“~/.ssh/id\u rsa”)
我在terraform.tfvars文件中有密钥路径
KEY\u PATH=“C:\\Users\\palj\\OneDrive\\Documents\\\u教育课程\\Training\\AWS\\keys”
(我正在本地测试地形平面图)。我尝试使用self.password选项,但我得到了相同的错误。
KEY\u PATH
不是有效的变量引用。如果您将变量定义为
var.KEY\u PATH
,则需要
var.KEY\u PATH
谢谢@ydaetskcoR,问题似乎是缺少变量名的“var”部分。将其添加到KEY_路径可以解决问题。Thanks我很惊讶您可以在自己的provisioner中引用资源。这通常会出错,这就是为什么provisioner可以使用
self
关键字的原因,但我还没有测试自Terraform 0.12以来是否仍然如此。