Como especifico em um modelo do AWS Cloudformation que minhas instâncias t1.micro são arquitetura de 64 bits

1

Estou tentando escrever meu primeiro modelo de cloudformation. Eu estou baseando-o no exemplo do ELB.

No meu caso, terei apenas instâncias de 64 bits, tamanho t1.micro. No entanto, não consigo ver onde especificar que minha instância requer arquitetura de 64 bits no arquivo de modelo. Quando tento criar minha nova pilha, ela pensa nela um pouco e, em seguida, falha / reverte com o erro ao criar a primeira instância:

"The requested instance type's architecture (i386) does not match the architecture in the manifest".

É correto que o arco do manifesto seja de 64 bits - acho que meu problema é que, como não estou especificando explicitamente uma arquitetura, ela é padronizada como i386. Como posso corrigir isso? Não há nada que salte em mim no documento de referência do modelo.

    
por liamf 19.04.2011 / 17:57

2 respostas

2

Na verdade, eu percebi isso. Eu tinha seguido uma resposta para isso em fórum do AWS Cloudformation mas eu esqueci (desculpe) que este segmento também estava ativo.

O problema é que o exemplo de modelo ELB está incompleto - por isso, quando o copiei, meu exemplo também estava incompleto: você precisa especificar um tipo de instância (t1.micro por exemplo, ou m1.large) explicitamente, ou então o padrão é assumido.

Para citar minha postagem no fórum da AWS

The sample ELB template which I copied doesn't specify the InstanceType property for the instances it makes. It uses the InstanceType to look up the AMI, but it doesn't actually specify it.

If you specify the InstanceType along with a matching AMI, all is well.

Por exemplo, este é um extrato de um modelo especificado corretamente:

"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" }
....
  }
},

'

Eu não tentei, mas espero que o exemplo da AWS não funcione para todas as combinações de AMIs sem esse parâmetro adicionado.

Cloudformation é legal, mas ainda é bem cedo. Eu já vi vários bugs na documentação até agora. Portanto, não assuma se você acertar um obstáculo em que você está fazendo algo errado ... você pode não estar.

    
por 01.05.2011 / 22:36
2

However I cannot see where to specify that my instance requires 64-bit architecture in the template file.

Supondo que você esteja abordando o modelo de exemplo para download por meio de Criar um site da Apache com balanceamento de carga , o tipo de instância e os mapeamentos de arquitetura são conectados por meio dessas duas tabelas:

  "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" }
    }
  },

Esta fiação funciona da seguinte forma:

  • A tabela de mapeamento AWSInstanceType2Arch especifica a arquitetura desejada por tipo de instância (que está correspondendo às suas necessidades já [ie "t1.micro": {"Arch": "64" } ]).

  • A tabela de mapeamento AWSRegionArch2AMI especifica as AMIs específicas da arquitetura por região. ou seja, qual AMI está realmente fornecendo a arquitetura correta mapeada acima.

Por exemplo, se você estiver iniciando uma instância t1.micro na região eu-west-1 com esse modelo, ele primeiro deduzirá a arquitetura 64 de AWSInstanceType2Arch e, em seguida, o identificador de AMI ami-31c2f645 de AWSRegionArch2AMI , por sua vez.

O exemplo deve funcionar corretamente em princípio (embora eu não tenha testado por mim mesmo agora), então AWSRegionArch2AMI é o fragmento que você precisaria personalizar substituindo os identificadores de AMI de exemplo pela arquitetura correta aqueles que você deseja usar para suas instâncias de 64 bits t1.micro; no entanto:

"The requested instance type's architecture (i386) does not match the architecture in the manifest".

A mensagem de erro sugere que a AMI usada para iniciar a instância é de fato uma AMI de 32 bits - será que você acidentalmente substituiu os identificadores de AMI de 64 bits no exemplo por outros de 32 bits?

    
por 01.05.2011 / 14:41