如何在 AWS Cloudformation 模板中指定我的 t1.micro 实例为 64 位架构

如何在 AWS Cloudformation 模板中指定我的 t1.micro 实例为 64 位架构

我正在尝试编写我的第一个云信息模板。我以 ELB 示例为基础。

在我的例子中,我将仅使用 64 位实例,t1.micro 大小。但是,我在模板文件中找不到指定我的实例需要 64 位架构的位置。当我尝试创建新堆栈时,它会考虑一段时间,然后失败/回滚,并出现创建第一个实例的错误:

“请求的实例类型的架构(i386)与清单中的架构不匹配”。

清单 arch 是正确的,为 64 位 — 我认为我的问题是由于我没有明确指定体系结构,所以它默认为 i386。我该如何纠正这个问题?模板参考文档中没有什么让我印象深刻的东西。

答案1

但是我在模板文件中找不到可以指定我的实例需要 64 位架构的地方。

假设您正在处理可通过以下方式下载的示例模板创建负载平衡的 Apache 网站,实例类型和架构映射通过这两个表连接:

  "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映射表指定每个实例类型所需的体系结构(已经满足您的需求[即“t1.micro”:{“Arch”:“64”}])。

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

例如,如果您使用此模板在 eu-west-1 区域启动 t1.micro 实例,它将首先推断出架构64AWSInstanceType2Arch然后是 AMI 标识符ami-31c2f645AWSRegionArch2AMI反过来。

该示例原则上应该可以正常工作(尽管我现在还没有亲自测试过),因此AWSRegionArch2AMI是您需要自定义的片段,方法是将示例 AMI 标识符替换为要用于 t1.micro 64 位实例的正确架构绑定标识符;但是:

“请求的实例类型的架构(i386)与清单中的架构不匹配”。

错误消息表明用于启动实例的 AMI 实际上是 32 位 AMI - 可能是您意外地将示例中的 64 位 AMI 标识符替换为 32 位 AMI 标识符?

答案2

事实上,我已经弄清楚了。我已在 AWS Cloudformation 论坛但我忘了(抱歉)这个帖子也处于活跃状态。

问题是 ELB 模板示例不完整 - 所以当我复制它时,我的示例也不完整:您需要明确指定实例类型(例如 t1.micro 或 m1.large),否则会假定默认值。

引用我在 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 很不错,但目前还处于早期阶段。到目前为止,我已经在文档中发现了几个错误。所以,如果你遇到障碍,不要以为你做错了什么……你可能没有。

相关内容