3

我们目前正在使用“负载平衡模板”部署时基于 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 不支持这些类型的初始化脚本?2. 我们计划使用“AWS::CloudFormation::Init”从 S3 下载证书,并使用我们添加到 UserData 的 PowerShell 脚本安装它们。这是一个好方法还是我们应该采取不同的做法?

4

2 回答 2

1

我刚刚使用当前的 Windows Server 2012 AMI 测试了您的代码段,它运行良好。因此,我最好的猜测是它ami-f6803f9f已经是一个自定义 AMI(至少我在任何官方的地方都找不到它)并且缺乏使用 AWS CloudFormation 部署应用程序所需的编排(这是 Unix/Linux 的一般解释,请参阅引导 AWS CloudFormation Windows面向 Windows 的简短示例的堆栈):

AWS CloudFormation 包括一组基于 cloud-init 的帮助应用程序(cfn-init、cfn-signal、cfn-get-metadata和 cfn-hup)。这些帮助应用程序不仅提供类似于 cloud-init 的功能,还允许您在实例和应用程序启动并运行后更新元数据。[...] [强调我的]

强调的应用程序是那些负责读取模板中定义的元数据并对其进行操作的应用程序,即C:/ClientCA.pfx在您的示例中创建。这些帮助应用程序现在包含在所有当前由Amazon EBS 支持的 Windows Server 2012 RTM AMI中,但通常不包含在由Amazon EBS 支持的 Windows Server 2008 R2 AMI中,除了专用的应用程序,如Amazon EBS 支持的 Windows Server 2008 R2英语 64 位 - CloudFormation 基础

显然,您也可以在自定义 AMI 上安装这些CloudFormation 帮助程序脚本并从那里继续,但如果您没有任何具体理由这样做,我强烈建议您从当前的Amazon EBS 支持的 Windows Server 2012 RTM AMI开始,它提供了这些和一些其他同样需要的开箱即用的管理生产力组件(例如Windows PowerShell 3.0和用于 Winodws PowerShell 的新AWS 工具)。

于 2012-12-24T15:38:56.110 回答
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 博客上有更多关于在 AWS 上引导 IIS的详细信息。

于 2013-08-12T05:20:38.190 回答