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