Amazon web services 自定义windows AMI的AWS CloudFormation模板未运行cfn init且未创建相关文件

Amazon web services 自定义windows AMI的AWS CloudFormation模板未运行cfn init且未创建相关文件,amazon-web-services,amazon-ec2,amazon-ami,Amazon Web Services,Amazon Ec2,Amazon Ami,下面是我的模板片段,其中使用Windows自定义AMI创建服务器。 这里,即使我在userdata块中给出了cfn-init.exe,也不会执行它。因此,在我的服务器中没有创建任何文件。请帮忙 提前谢谢 "CMServer":{ "Type":"AWS::EC2::Instance", "Metadata":{ "AWS::CloudFormation::Init":{ "config":{ "files":{ "c:\\cfn

下面是我的模板片段,其中使用Windows自定义AMI创建服务器。 这里,即使我在userdata块中给出了cfn-init.exe,也不会执行它。因此,在我的服务器中没有创建任何文件。请帮忙

提前谢谢

"CMServer":{ 
"Type":"AWS::EC2::Instance",
"Metadata":{ "AWS::CloudFormation::Init":{ 
               "config":{ "files":{ "c:\\cfn
                                    cfn-hup.conf":{ 
                                     "content":{ "Fn::Join":[ "",[ "main\n","stack=",
                                       { "Ref":"AWS::StackName"},"\n","region=",
                                          { "Ref":"AWS::Region"},"\n",
                                            "interval=1"]]}},
                  "c:\\cfn\\hooks.d
                   cfn-auto-reloader.conf":{ "content":{ 
                               "Fn::Join":[ "",[ "cfn-auto-reloader-hook\n",
                                 "triggers=post.update\n",
                            "path=Resources.CMServer.Metadata.AWS::CloudFormation::Init\n",
                              "action=cfn-init.exe -v -s ",{ "Ref":"AWS::StackName"},"                             
                             -r CMServer",
                             " --region ",
                               { 
                                 "Ref":"AWS::Region"},"\n"]]}},
             "C:\\inetpub\\wwwroot\\AWSCM\\Website\\App_Config
            ConnectionStrings.config":{ 
            "content":{ 
             "Fn::Join":[ "",[ 
             "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
             "<connectionStrings>\n",
             "<add name=\"core\" connectionString=\"user id=user;password=******;Data Source=",
        { "Fn::GetAtt": },
          ";Database=CoreDb\"/>\n",
"<add name=\"master\" connectionString=\"user id=user;password=******;Data Source=",
{ "Fn::GetAtt": },
";Database=MasterDb\"/>\n",
"<add name=\"web\" connectionString=\"user id=user;password=******;Data Source=",
{ "Fn::GetAtt": },
";Database=WebdB\"/>\n",
"</connectionStrings>"
]
]
},
"mode" : "000644",
"owner" : "root",
"group" : "root"
}
},
"services":{ 
"windows":{ 
"cfn-hup":{ 
"enabled":"true",
"ensureRunning":"true",
"files":[ 
"c:\\cfn
cfn-hup.conf", "c:\\cfn\\hooks.d
cfn-auto-reloader.conf"
]
}
}
}
}
}
},
"Properties":{ 
"ImageId":{ 
"Fn::FindInMap":[ 
"AWSRegionArch2AMI",
{ 
"Ref":"AWS::Region"
},
"SitecoreCMAMI"
]
},
"SecurityGroupIds":[ 
{ 
"Ref":"CMServerSecurityGroup"
}
],
"SubnetId":{ 
"Ref":"PrivateSubnet1"
},
"InstanceType":{ 
"Ref":"CMInstanceType"
},
"KeyName":{ 
"Ref":"KeyName"
},
"UserData":{ 
"Fn::Base64":{ 
"Fn::Join":[ 
"",
[ 
"<script>\n",
"cfn-init.exe -v -s ",
{ 
"Ref":"AWS::StackName"
},
" -r CMServer",
" --region ",
{ 
"Ref":"AWS::Region"
},
"\n"
"</script>"
]
]
}
},
"Tags":[ `enter code here`
{ 
"Key":"Name",
"Value":"CMServer"
}
]
}
},

在创建自定义AMI之前,您需要在创建自定义AMI的实例上从“EC2ConfigService设置”启用“用户数据执行”

您可以从以下位置访问EC2ConfigSerice设置: C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSettings.exe然后在“常规”选项卡上,选中“启用用户数据执行…”复选框。然后才创建定制的AMI


EC2ConfigService设置的快捷方式也可以在windows开始视图中找到。

检查您的实例是否可以访问S3服务并访问internet。 为了让机器获得用户数据,它需要能够连接到internet。用户数据(cloudformation脚本的一部分)保存在S3服务中。对S3进行http调用以获取用户数据。根据您启动的脚本,实例将启动到专用子网。我不知道这段代码是否真的是私有的,但不管附加了哪些安全组,一个实例被启动到VPC的子网(而不是默认子网)都不会获得公共IP


如果您需要访问internet,则需要附加NAT或分配EIP,并更新ACL/安全组(如果相关)。

问题已解决。问题在于模板JSON格式。我试着用单引号代替双引号 \n,

。就这样解决了


谢谢您的回复。

我已经尝试过了,但仍然没有成功。已经尝试过的选项,在UserData和cfn-auto-reloader.conf中都指定了-c选项。2在从instanceI获取自定义AMI之前,在EC2ConfigService设置中启动下一个服务时启用了UserData执行。我尝试使用单引号“而不是双引号”,如\n所示。哪里