0

我刚刚开始研究一个托管在带有 IIS 的 AWS EC2 Windows 实例上的项目。我想将此设置移动到更可靠的地方,我想做的第一件事就是远离手动设置和配置的雪花服务器。

于是开始研究 Hashicorp 的 Terraform。我的想法是我可以在 Terraform 中定义整个设置,包括网络等,这样可以确保它配置正确。

我想我会从定义服务器开始。安装了 IIS 的简单 Windows Server 实例。但这是我遇到的第一个问题。我以为我可以从 Terraform 配置 IIS。我想你不能。所以我的下一个想法是将 Terraform 与 Powershell Desired State Configuration 结合起来。

我可以使用 DSC 在盒子上设置 IIS 服务器。但我被困在从 Terraform 调用 DSC。我可以很容易地配置一个香草服务器。我曾尝试寻找一篇关于如何将 DSC 与 Terraform 结合使用的好博文,但我找不到解释如何使用的博文。

谁能指出我阅读这个的好地方?或者,如果我找不到这个的原因是这只是不好的做法,我应该以另一种方式来做,那么请教育我。

谢谢

如何使用资源在 EC2 Windows 上配置 IIS?

4

1 回答 1

0

您可以在启动时运行任意 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

于 2020-05-18T03:23:53.473 回答