您可以在启动时运行任意 PowerShell 脚本,如下所示:
resource "aws_instance" "windows_2016_server" {
//...
user_data = <<-EOF
<powershell>
$file = $env:SystemRoot + "\Temp\${var.some_variable}" + (Get-Date).ToString("MM-dd-yy-hh-mm")
New-Item $file -ItemType file
</powershell>
EOF
//...
}
你需要一个像这样定义的变量来使用它(我提供了一个更复杂的例子,所以有一个更有用的起点)
variable "some_variable" {
type = string
default = "UserDataTestFile"
}
您可以调用 DSC 来设置 IIS,而不是像上面的示例那样创建时间戳文件,就像您通常在服务器上的 PowerShell 中以交互方式一样。
您可以在此处阅读有关 Windows 上
的user_data的更多信息: https ://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html
user_data将直接包含您的 PowerShell。
您可以使用templatefile("${module.path}/user-data.ps1, {some_variable = var.some_variable})代替上面的内联脚本。
将 user-data.ps1 与引用它的 TF 文件放在同一目录中:
<powershell>
$file = $env:SystemRoot + "\Temp\${some_variable}" + (Get-Date).ToString("MM-dd-yy-hh-mm")
New-Item $file -ItemType file
</powershell>
您仍然需要<powershell></powershell>
脚本源代码周围的标签。这是 EC2 上的 Windows 如何期望 PowerShell 用户数据脚本的要求。
然后按如下方式更新您的 TF 文件:
resource "aws_instance" "windows_2016_server" {
//...
user_data = templatefile("${module.path}/user-data.ps1, {
some_variable = var.some_variable
})
//...
}
请注意,在模板文件读取的文件中,有一些变量,比如some_variable和 NOT var.some_variable。
在此处阅读有关模板文件的更多信息:
https://www.terraform.io/docs/configuration/functions/templatefile.html