

# Tipos de instância permitidos da AMI
<a name="ami-allowed-instance-types"></a>

Como proprietário da AMI, você pode especificar quais são os tipos de instância compatíveis com ela. Isso evita inicializações em tipos de instância incompatíveis. O Amazon EC2 aplica os tipos de instância permitidos no momento da inicialização.

Por exemplo, se a AMI exigir hardware de GPU, será possível restringi-la somente aos tipos de instância GPU. Se a AMI for incompatível com uma família de instâncias específica será possível excluir essa família dos tipos de instância permitidos.

**Topics**
+ [Como funcionam os tipos de instância permitidos](#ami-allowed-instance-types-how-it-works)
+ [Tipos de instância permitidos de uma AMI](#ami-allowed-instance-types-set)
+ [Visualizar os tipos de instância permitidos de uma AMI](#ami-allowed-instance-types-view)
+ [Comportamento de inicialização com os tipos de instância permitidos](#ami-allowed-instance-types-launch-behavior)
+ [Considerações](#ami-allowed-instance-types-considerations)

## Como funcionam os tipos de instância permitidos
<a name="ami-allowed-instance-types-how-it-works"></a>

Você controla os tipos de instância permitidos por meio do atributo `InstanceTypeSpecification` de uma AMI. Esse atributo contém duas listas:
+ `SupportedInstanceTypes`: os tipos de instância compatíveis com a AMI. Apenas esses tipos de instância podem ser executados com a AMI.
+ `UnsupportedInstanceTypes`: os tipos de instância não compatíveis com a AMI. Todos os outros tipos de instância poderão ser iniciados com a AMI.

O Amazon EC2 avalia a especificação usando a seguinte lógica:
+ Se o parâmetro `InstanceTypeSpecification` não estiver definido, o Amazon EC2 permitirá todos os tipos de instância. Esse é o comportamento padrão.
+ Se somente `SupportedInstanceTypes` for definido, somente os tipos de instância especificados serão permitidos. O Amazon EC2 bloqueará todos os outros tipos de instância.
+ Se somente `UnsupportedInstanceTypes` for definido, o Amazon EC2 permitirá todos os tipos de instância, exceto os especificados.
+ Se ambas as duas estiverem definidas, o tipo de instância deverá constar em `SupportedInstanceTypes` e não deverá constar em `UnsupportedInstanceTypes`.

### Suporte a curingas
<a name="ami-allowed-instance-types-wildcards"></a>

Ambas as listas são compatíveis com padrões curingas usando o caractere `*`. Você pode usar curingas para comparar com vários tipos de instância sem listar cada um deles individualmente.

A tabela a seguir mostra exemplos de padrões curingas.


| Padrão | Correspondências | 
| --- | --- | 
| t3.\* | Todos os tamanhos dentro da família de instâncias t3 (por exemplo, t3.micro, t3.small e t3.large) | 
| p4d.\* | Todos os tamanhos dentro da família de instâncias p4d | 
| g5.\* | Todos os tamanhos dentro da família de instâncias g5 | 
| \*xlarge | Qualquer tipo de instância xlarge ou maior em todas as famílias de instâncias | 
| \*.12xlarge | Qualquer tipo de instância 12xlarge em todas as famílias de instâncias | 

## Tipos de instância permitidos de uma AMI
<a name="ami-allowed-instance-types-set"></a>

Você pode definir ou alterar os tipos de instância permitidos de uma AMI usando o console do Amazon EC2 ou a AWS Command Line Interface (AWS CLI). É necessário ser o proprietário da AMI para executar esse procedimento.

------
#### [ Console ]

**Para definir os tipos de instância permitidos de uma AMI**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **AMIs**.

1. Selecione a AMI e escolha **Ações**, **Gerenciar especificação do tipo de instância**.

1. Em **Tipos de instância compatíveis** ou **Tipos de instância não compatíveis**, escolha **Adicionar**.

1. Selecione o tipo de instância do .

1. Escolha **Salvar**.

------
#### [ AWS CLI ]

**Para definir os tipos de instância compatíveis com uma AMI**  
Use o comando [replace-image-instance-type-specification](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-image-instance-type-specification.html). O exemplo a seguir permite todos os tipos de instâncias `t3` e `a2`, exceto `t3.micro`.

```
aws ec2 replace-image-instance-type-specification \
    --image-id {{ami-1234567890abcdef0}} \
    --instance-type-specification '{"SupportedInstanceTypes": ["t3.*", "a2.*"], "UnsupportedInstanceTypes": ["t3.micro"]}'
```

**Para definir somente os tipos de instância não compatíveis com uma AMI**  
Use o comando a seguir para bloquear tipos de instância específicos e permitir todos os demais.

```
aws ec2 replace-image-instance-type-specification \
    --image-id {{ami-1234567890abcdef0}} \
    --instance-type-specification '{"UnsupportedInstanceTypes": ["t3.micro", "t3.nano"]}'
```

**Para remover a especificação do tipo de instância de uma AMI**  
Use o comando a seguir sem especificar `--instance-type-specification` para remover a restrição e permitir todos os tipos de instância.

```
aws ec2 replace-image-instance-type-specification \
    --image-id {{ami-1234567890abcdef0}}
```

------

## Visualizar os tipos de instância permitidos de uma AMI
<a name="ami-allowed-instance-types-view"></a>

Você pode visualizar a especificação de tipo de instância de uma AMI usando o console do Amazon EC2 ou a AWS CLI.

------
#### [ Console ]

**Para visualizar os tipos de instância permitidos de uma AMI**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **AMIs**.

1. Selecione a AMI.

1. Na guia **Detalhes**, visualize os tipos de instância compatíveis e não compatíveis.

------
#### [ AWS CLI ]

**Para visualizar a especificação de tipo de instância de uma AMI**  
Use o comando [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html). Se a AMI tiver uma especificação de tipo de instância, a resposta incluirá o campo `InstanceTypeSpecification`.

```
aws ec2 describe-images \
    --image-ids {{ami-1234567890abcdef0}}
```

O exemplo de saída a seguir é de uma AMI com especificação de tipo de instância.

```
{
    "Images": [
        {
            "ImageId": "ami-1234567890abcdef0",
            ...
            "InstanceTypeSpecification": {
                "SupportedInstanceTypes": [
                    {
                        "InstanceType": "t3.*"
                    },
                    {
                        "InstanceType": "a2.*"
                    }
                ],
                "UnsupportedInstanceTypes": [
                    {
                        "InstanceType": "t3.micro"
                    }
                ]
            }
        }
    ]
}
```

------

## Comportamento de inicialização com os tipos de instância permitidos
<a name="ami-allowed-instance-types-launch-behavior"></a>

Quando você executa uma instância, o Amazon EC2 verifica se o tipo de instância especificado é compatível com a especificação de tipo de instância da AMI. Se o tipo de instância não for permitido, o Amazon EC2 bloqueará a execução e retornará um erro.

**Exemplo: inicialização bloqueada**  
O comando a seguir tenta iniciar uma instância `t3.micro` usando uma AMI que não é compatível com `t3.micro`.

```
aws ec2 run-instances \
    --image-id {{ami-1234567890abcdef0}} \
    --instance-type t3.micro
```

O Amazon EC2 retorna o seguinte erro:

```
An error occurred (InvalidParameterCombination) when calling the RunInstances operation: This AMI does not support the specified instance type. Check DescribeImages for InstanceTypeSpecification, and try again.
```

Para resolver esse erro, escolha um tipo de instância compatível com a AMI. Use o comando `describe-images` para visualizar a especificação de tipo de instância da AMI.

## Considerações
<a name="ami-allowed-instance-types-considerations"></a>

Lembre-se das seguintes informações ao usar os tipos de instância permitidos.
+ Por padrão, uma AMI não tem especificação de tipo de instância. O Amazon EC2 permite todos os tipos de instância até que uma especificação seja explicitamente definida.
+ Somente o proprietário da AMI pode definir ou alterar a especificação de tipo de instância.
+ Quando você copia uma AMI usando `CopyImage`, o Amazon EC2 preserva a especificação de tipo de instância na nova AMI.
+ O Amazon EC2 aplica a especificação do tipo de instância como um bloqueio rígido. Se o tipo de instância não for permitido, a execução falhará com um erro `InvalidParameterCombination`.
+ A especificação não afeta as instâncias existentes. Ela se aplica somente a novas inicializações.
+ Modelos de inicialização e grupos do Auto Scaling que referenciam uma AMI com uma especificação de tipo de instância poderão não ter sucesso se o tipo de instância configurado não for permitido. Recomendamos verificar a compatibilidade antes de definir uma especificação em AMIs compartilhadas.
+ A ação `ReplaceImageInstanceTypeSpecification` substitui a especificação inteira. Para adicionar ou remover tipos de instância individuais, inclua a especificação inteira atualizada na solicitação.