如何在AWS Cloudformation模板中指定我的t1.micro实例是64位体系结构

我正在尝试写我的第一个cloudformation模板。 我是以ELB为例。

在我的情况下,我将只有64位实例,t1.micro大小。 但是我看不到在哪里指定我的实例在模板文件中需要64位体系结构。 当我尝试创build我的新堆栈时,它适当地考虑了一下,然后失败/回滚创build第一个实例的错误:

“请求的实例types的体系结构(i386)与清单中的体系结构不匹配”。

清单拱是64位是正确的 – 我想我的问题是,因为我没有明确指定一个架构,它是默认的i386。 我怎样才能纠正这一点? 在模板参考文档中没有任何东西跳出来。

但是我看不到在哪里指定我的实例在模板文件中需要64位体系结构。

假设您正在寻找可通过创build负载平衡Apache网站下载的示例模板,则通过以下两个表连接实例types和体系结构映射:

"Mappings" : { "AWSInstanceType2Arch" : { "t1.micro" : { "Arch" : "64" }, "m1.small" : { "Arch" : "32" }, "m1.large" : { "Arch" : "64" }, "m1.xlarge" : { "Arch" : "64" }, "m2.xlarge" : { "Arch" : "64" }, "m2.2xlarge" : { "Arch" : "64" }, "m2.4xlarge" : { "Arch" : "64" }, "c1.medium" : { "Arch" : "32" }, "c1.xlarge" : { "Arch" : "64" }, "cc1.4xlarge" : { "Arch" : "64" } }, "AWSRegionArch2AMI" : { "us-east-1" : { "32" : "ami-6411e20d", "64" : "ami-7a11e213" }, "us-west-1" : { "32" : "ami-c9c7978c", "64" : "ami-cfc7978a" }, "eu-west-1" : { "32" : "ami-37c2f643", "64" : "ami-31c2f645" }, "ap-southeast-1" : { "32" : "ami-66f28c34", "64" : "ami-60f28c32" }, "ap-northeast-1" : { "32" : "ami-9c03a89d", "64" : "ami-a003a8a1" } } }, 

此接线工作如下:

  • AWSInstanceType2Arch映射表指定每个实例types所需的体系结构(与您的需求已经匹配[即“t1.micro”:{“Arch”:“64”} ])。

  • AWSRegionArch2AMI映射表指定每个区域的体系结构特定的AMI。 即哪个AMI实际上提供了上面映射的正确架构。

例如,如果使用此模板在eu-west-1区域中启动t1.micro实例,则会首先从AWSInstanceType2Arch中推导出体系结构64 ,然后依次AWSRegionArch2AMI中推导出AMI标识符ami-31c2f645

这个例子应该原则上是正确的(尽pipe我现在还没有自己testing过),所以AWSRegionArch2AMI是你需要定制的片段,用你想用于t1的正确的体系结构绑定的替代AMI标识符。微型64位实例; 然而:

“请求的实例types的体系结构(i386)与清单中的体系结构不匹配”。

这个错误消息表明用于启动实例的AMI实际上是一个32位的AMI–是不是可能是你不小心用32位代码replace了64位AMI标识符?

其实我知道了 我之前在AWS CloudForms论坛上回答了这个问题,但是我忘记了(对不起)这个线程也处于活动状态。

问题是ELB模板的例子是不完整的 – 所以当我复制它的时候,我的例子也是不完整的:你需要显式地指定一个实例types(例如t1.micro,或者m1.large),否则默认。

引用我的post到AWS论坛

我复制的示例ELB模板没有为它所做的实例指定InstanceType属性。 它使用InstanceType来查找AMI,但实际上并没有指定它。

如果您指定InstanceType和一个匹配的AMI,一切都很好。

例如,这是一个正确指定模板的摘录:

 "Parameters" : { "InstanceType" : { "Description" : "Type of EC2 instance to launch", "Type" : "String", "Default" : "t1.micro" } ... "LaunchConfig": { "Type": "AWS::AutoScaling::LaunchConfiguration", "Properties": { "SecurityGroups": [{"Ref": "SecurityGroup" }], "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref" : "InstanceType" } .... } }, 

`

我还没有尝试过,但是我希望这个AWS例子不适用于没有添加这个参数的所有AMI组合。

Cloudformation很不错,但还不算早。 到目前为止,我在文档中遇到过几个错误。 所以,不要假设,如果你碰到一个障碍,你做错了什么…你可能不会。