Aks*_*kar 1 powershell amazon-ec2 amazon-web-services terraform
我正在尝试从AMI创建Windows Ec2实例,并在该实例上执行powershell命令:
data "aws_ami" "ec2-worker-initial-encrypted-ami" {
filter {
name = "tag:Name"
values = ["ec2-worker-initial-encrypted-ami"]
}
}
resource "aws_instance" "my-test-instance" {
ami = "${data.aws_ami.ec2-worker-initial-encrypted-ami.id}"
instance_type = "t2.micro"
tags {
Name = "my-test-instance"
}
provisioner "local-exec" {
command = "C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeInstance.ps1 -Schedule",
interpreter = ["PowerShell"]
}
}
Run Code Online (Sandbox Code Playgroud)
而且我面临以下错误:
- aws_instance.my-test-instance:运行命令'C:\ ProgramData \ Amazon \ EC2-Windows \ Launch \ Scripts \ InitializeInstance.ps1 -Schedule'时出错:退出状态1.输出:术语'C:\ ProgramData \ Amazon \ EC2-Windows \ Launch \ Scripts \ InitializeInstance.ps1'无法识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。在线:1字符:72
- C:\ ProgramData \ Amazon \ EC2-Windows \ Launch \ Scripts \ InitializeInstance.ps1 <<<<-计划
- CategoryInfo:ObjectNotFound:(C:\ ProgramData ... izeInstance.ps1:String)[],CommandNotFoundException
- FullyQualifiedErrorId:CommandNotFoundException
您正在使用local-exec供应商,该供应商在运行Terraform的工作站上运行请求Powershell代码:
创建资源后,local-exec提供者将调用本地可执行文件。这将在运行Terraform的计算机上而不是资源上调用一个进程。
听起来您想在结果实例上执行powershell脚本,在这种情况下,您将需要使用remote-exec置备器,该置备器将在目标资源上运行powershell:
远程执行提供者在创建后在远程资源上调用脚本。这可用于运行配置管理工具,引导到集群等。
您还需要包括连接详细信息,例如:
provisioner "remote-exec" {
command = "C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeInstance.ps1 -Schedule",
interpreter = ["PowerShell"]
connection {
type = "winrm"
user = "Administrator"
password = "${var.admin_password}"
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着该实例还必须准备好接受WinRM连接。
但是,还有其他选项可以完成此任务。例如使用userdata,Terraform也支持。这可能类似于以下示例:
userdata.txt:<powershell>
C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeInstance.ps1 -Schedule
</powershell>
Run Code Online (Sandbox Code Playgroud)
resource "aws_instance" "my-test-instance" {
ami = "${data.aws_ami.ec2-worker-initial-encrypted-ami.id}"
instance_type = "t2.micro"
tags {
Name = "my-test-instance"
}
user_data = "${file(userdata.txt)}"
}
Run Code Online (Sandbox Code Playgroud)
该文件插值将读取用户数据文件作为字符串的内容传递到用户数据的情况下推出的。实例启动后,它将按预期运行脚本。
布赖恩声称是正确的,您将收到“无效或未知密钥:解释器”错误。
要正确运行 powershell,您需要根据 Brandon 的回答按如下方式运行它:
provisioner "remote-exec" {
connection {
type = "winrm"
user = "Administrator"
password = "${var.admin_password}"
}
inline = [
"powershell -ExecutionPolicy Unrestricted -File C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeInstance.ps1 -Schedule"
]
}
Run Code Online (Sandbox Code Playgroud)
编辑 要将文件复制到机器上,请使用以下命令:
provisioner "file" {
source = "${path.module}/some_path"
destination = "C:/some_path"
connection {
host = "${azurerm_network_interface.vm_nic.private_ip_address}"
timeout = "3m"
type = "winrm"
https = true
port = 5986
use_ntlm = true
insecure = true
#cacert = "${azurerm_key_vault_certificate.vm_cert.certificate_data}"
user = var.admin_username
password = var.admin_password
}
}
Run Code Online (Sandbox Code Playgroud)
更新:目前 hashicorp 不推荐配置器,完整的说明和解释(很长)可以在以下位置找到:terraform.io/docs/provisioners/index.html
| 归档时间: |
|
| 查看次数: |
10565 次 |
| 最近记录: |