Amazon web services 自定义windows AMI的AWS CloudFormation模板未运行cfn init且未创建相关文件
下面是我的模板片段,其中使用Windows自定义AMI创建服务器。 这里,即使我在userdata块中给出了cfn-init.exe,也不会执行它。因此,在我的服务器中没有创建任何文件。请帮忙 提前谢谢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
"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所示。哪里