Вы используете поставщика local-exec
, который запускает код PowerShell запроса на рабочей станции, на которой работает Terraform:
Поставщик local-exec вызывает локальный исполняемый файл после ресурсасоздано.Это вызывает процесс на компьютере, на котором работает Terraform, а не на ресурсе.
Звучит так, как будто вы хотите выполнить сценарий powershell в результирующем экземпляре, и в этом случае вам нужно будет использовать remote-exec
инициатор, который запустит ваш PowerShell на целевом ресурсе:
Поставщик remote-exec вызывает сценарий на удаленном ресурсе после его создания.Это можно использовать для запуска инструмента управления конфигурацией, начальной загрузки в кластер и т. Д.
Вам также необходимо будет указать соединение подробности, например:
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}"
}
}
Это означает, что этот экземпляр также должен быть готов принимать соединения WinRM.
Хотя есть и другие варианты выполнения этой задачи.Например, используя userdata , , которые Terraform также поддерживает .Это может выглядеть следующим образом:
Пример использования файла пользовательских данных в Terraform
Файл с именем userdata.txt
:
<powershell>
C:\\ProgramData\\Amazon\\EC2-Windows\\Launch\\Scripts\\InitializeInstance.ps1 -Schedule
</powershell>
Запуск экземпляра с использованием файла пользовательских данных:
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)}"
}
Интерполяция файла будет считывать содержимое файла userdata в виде строки для передачи в userdata для запуска экземпляра.Как только экземпляр запускается, он должен запустить скрипт так, как вы ожидаете.