我们目前正在使用“负载平衡模板”进行部署时,基于AWS Toolkit for Visual Studio创建的模板设置CloudFormation堆栈。我们需要创建一个可以在某种程度上自定义EC2实例的脚本。更具体地说,我们希望: 1.将两个证书安装到证书库中。 2.配置IIS以使用其中一个证书。 3.在IIS上启用TLS 1.2。
我们需要在IIS而不是负载均衡器上安装这些证书,因为我们需要支持客户端证书身份验证。
我们希望在不必创建自定义AMI的情况下实现此目标,因为我们希望能够在新版本到货时轻松更新AMI。我们使用以下内容:ami-f6803f9f(这是模板使用的默认值)。
因此,我们希望将这些自定义设置作为CloudFormation模板的一部分。我试图通过使用模板的“AWS :: CloudFormation :: Init”部分创建一个简单的文件(只是为了确保脚本工作)。但是,当我启动堆栈时,文件永远不会被创建。应该创建文件的模板部分如下所示:
"Metadata" : {
"AWS::CloudFormation::Init" : {
"config" : {
"files" : {
"C:/ClientCA.pfx" : {
"content" : { "Fn::Join" : ["", [
"test1\n",
"test2\n"
]]}
}
}
}
}
}
我的问题是: 1.为什么没有创建文件?是因为模板有问题还是这个AMI不支持这些类型的init-scripts? 2.我们计划使用“AWS :: CloudFormation :: Init”从S3下载证书,并使用我们添加到UserData的PowerShell脚本安装它们。这是一个好方法还是我们应该采取不同的方式?
答案 0 :(得分:1)
我刚刚使用当前的Windows Server 2012 AMI测试了您的代码段,它运行得很好。因此,我最好的猜测是ami-f6803f9f
已经是一个自定义AMI(至少我在官方的任何地方找不到它)并且缺少Deploying Applications with AWS CloudFormation所需的编排(这是Unix / Linux的通用解释,有关面向Windows的简短示例,请参阅Bootstrapping AWS CloudFormation Windows Stacks:
AWS CloudFormation包含一组帮助应用程序( cfn-init , cfn-signal, cfn-get-metadata 和cfn-hup)基于 云初始化。这些帮助应用程序不仅提供功能 类似于cloud-init,但也允许您更新元数据 在您的实例和应用程序启动并运行之后。 [...] [强调我的]
强调的应用程序是那些负责阅读和处理模板中定义的元数据的应用程序,即在您的示例中创建C:/ClientCA.pfx
。这些帮助应用程序现在包含在所有当前Amazon EBS-Backed Windows Server 2012 RTM AMIs中,但通常不在Amazon EBS-Backed Windows Server 2008 R2 AMIs中,除了Amazon EBS-Backed Windows Server 2008 R2 English 64-bit - Base for CloudFormation之类的专用应用程序。
显然,您也可以在自定义AMI上安装这些CloudFormation Helper Scripts并从那里继续,但如果您没有任何具体原因,我强烈建议您从当前Amazon EBS-Backed Windows Server 2012 RTM AMI开始,提供开箱即用的这些和其他一些同样需要的管理生产力组件(例如Windows PowerShell 3.0和新的AWS Tools for Winodws PowerShell)。
答案 1 :(得分:1)
旧问题 - 但我认为文件未创建的原因是cloudformation脚本没有执行cfn-init。
关键部分是确保您已更新用户数据脚本...
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"<script>\n",
"powershell.exe add-windowsfeature web-webserver -includeallsubfeature -logpath $env:temp\\webserver_addrole.log \n",
"powershell.exe add-windowsfeature web-mgmt-tools -includeallsubfeature -logpath $env:temp\\mgmttools_addrole.log \n",
"cfn-init.exe -v -s ", {"Ref" : "AWS::StackId"}, " -r WebServerLaunchConfiguration --region ", {"Ref" : "AWS::Region"}, "\n",
"</script>\n",
"<powershell>\n",
"new-website -name", {"Ref" : "Name"}, " -port 80 -physicalpath c:\\inetpub\\", {"Ref" : "Name"}, " -ApplicationPool \".NET v4.5\" -force \n",
"remove-website -name \"Default Web Site\" \n",
"start-website -name ", {"Ref" : "Name"}, " \n",
"</powershell>"
上面的脚本添加了web服务器功能,管理工具,然后是cfn-init的踢法。它是cfn-init,负责解析元数据。
我的Kloud博客上有more details about bootstrapping IIS on AWS。