Назад | Перейти на главную страницу

Как указать в шаблоне AWS Cloudformation, что мои экземпляры t1.micro имеют 64-разрядную архитектуру

Я пытаюсь написать свой первый шаблон облачной информации. Я основываю это на примере ELB.

В моем случае у меня будут только 64-битные экземпляры размером t1.micro. Однако я не вижу, где указать, что моему экземпляру требуется 64-разрядная архитектура в файле шаблона. Когда я пытаюсь создать свой новый стек, он должным образом думает об этом немного, а затем терпит неудачу / откат с ошибкой создания первого экземпляра:

«Архитектура запрошенного типа экземпляра (i386) не соответствует архитектуре в манифесте».

Верно, что архива манифеста является 64-битной - я думаю, моя проблема в том, что, поскольку я явно не указываю архитектуру, по умолчанию используется i386. Как я могу это исправить? В справочном документе по шаблону мне ничего не приходит в голову.

Однако я не вижу, где указать, что моему экземпляру требуется 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 фактически обеспечивает правильную архитектуру, отображенную выше.

Например, если вы запускаете экземпляр t1.micro в регионе eu-west-1 с этим шаблоном, он сначала выведет архитектуру 64 из AWSInstanceType2Arch а затем идентификатор AMI ami-31c2f645 из AWSRegionArch2AMI в очереди.

Пример должен работать в принципе правильно (хотя сам я его сейчас не тестировал), поэтому AWSRegionArch2AMI это фрагмент, который вам нужно будет настроить, заменив примеры идентификаторов AMI на идентификаторы с правильной архитектурой, которые вы хотите использовать для своих 64-битных экземпляров t1.micro; тем не мение:

«Архитектура запрошенного типа экземпляра (i386) не соответствует архитектуре в манифесте».

Сообщение об ошибке предполагает, что AMI, который используется для запуска экземпляра, на самом деле является 32-битным AMI - может быть, вы случайно заменили 64-битные идентификаторы AMI в примере на 32-битные?

Собственно, я в этом разобрался. Я получил ответ на этот вопрос на форум 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 без добавления этого параметра.

Облачная информация - это хорошо, но это еще не все. До сих пор я обнаружил несколько ошибок в документации. Так что не думайте, что если вы столкнетесь с препятствием, что вы делаете что-то неправильно ... возможно, это не так.