【问题标题】:Customzing EC2 Windows instances without using a Custom AMI在不使用自定义 AMI 的情况下自定义 EC2 Windows 实例
【发布时间】:2012-10-06 09:57:34
【问题描述】:

我们目前正在使用“负载平衡模板”部署时基于 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 脚本安装它们。这是一个好方法还是我们应该采取不同的做法?

【问题讨论】:

    标签: powershell amazon-ec2 amazon-web-services amazon-cloudformation


    【解决方案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

    【讨论】:

      【解决方案2】:

      我刚刚使用当前的 Windows Server 2012 AMI 测试了您的 sn-p,它运行良好。因此我最好的猜测是ami-f6803f9f 已经是一个自定义 AMI(至少我在任何官方的地方都找不到它)并且缺少Deploying Applications with AWS CloudFormation 所需的编排(这是 Unix/Linux 的通用解释,请参阅Bootstrapping AWS CloudFormation Windows Stacks一个面向 Windows 的简短示例):

      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)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 2019-01-03
        • 2013-02-27
        • 1970-01-01
        • 2015-03-07
        相关资源
        最近更新 更多