

# Calcular a pontuação de posicionamento spot
<a name="work-with-spot-placement-score"></a>

É possível calcular uma pontuação de posicionamento spot com base na capacidade de destino e nos requisitos de computação. Para obter mais informações, consulte [Como funciona a pontuação de posicionamento de spot](how-sps-works.md).

**Permissões obrigatórias**  
Certifique-se de que você tenha as permissões necessárias. Para obter mais informações, consulte [Permissões necessárias para pontuação de posicionamento spot](sps-iam-permission.md).

**Topics**
+ [Calcular usando atributos de instância](#sps-specify-instance-attributes-console)
+ [Calcular usando tipos de instância](#sps-specify-instance-types-console)
+ [Calcular usando a AWS CLI](#calculate-sps-cli)

**Deseja uma solução automatizada?** Em vez de seguir as etapas manuais deste guia do usuário, você pode criar um painel de rastreamento de pontuação de posicionamento spot que captura e armazena automaticamente as pontuações no Amazon CloudWatch. Para obter mais informações, consulte [Guidance for Building a Spot Placement Score Tracker Dashboard on AWS](https://aws.amazon.com/solutions/guidance/building-a-spot-placement-score-tracker-dashboard-on-aws/).

## Calcular usando atributos de instância
<a name="sps-specify-instance-attributes-console"></a>

**Para calcular uma pontuação de posicionamento de spot especificando atributos de instância**

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 **Solicitações spot**.

1. Escolha a seta para baixo ao lado de **Request Spot Instances** e escolha **Calculate Spot Placement Score**.

1. Escolha **Enter requirements** (Inserir requisitos).

1. Em **Target capacity** (Capacidade-alvo), insira a capacidade desejada em termos do número de **instances** (instâncias) ou **vCPUs**, ou quantidade de **memory (MiB)** (memória).

1. Em **Instance type requirements** (Requisitos de tipo de instância), para especificar seus requisitos de computação e deixar que o Amazon EC2 identifique os tipos de instância ideais com esses requisitos, escolha **Specify instance attributes that match your compute requirements** (Especificar atributos de instância que correspondam aos requisitos de computação).

1. Em **vCPUs**, insira o número mínimo e máximo desejado de vCPUs. Para não especificar nenhum limite, selecione **No minimum** (Sem mínimo), **No maximum** (Sem máximo) ou ambos.

1. Em **Memory (GiB)** (Memória), insira a quantidade mínima e máxima de memória desejada. Para não especificar nenhum limite, selecione **No minimum** (Sem mínimo), **No maximum** (Sem máximo) ou ambos.

1. Em **CPU architecture** (Arquitetura da CPU), selecione a arquitetura de instância requisitada.

1. (Opcional) Em **Additional instance attributes** (Atributos de instância adicionais), é possível, opcionalmente, especificar um ou mais atributos para expressar seus requisitos de computação com mais detalhes. Cada atributo adicional inclui mais uma restrição à solicitação. É possível omitir os atributos adicionais; quando omitidos, os valores padrão são usados. Para obter uma descrição de cada atributo e seus valores padrão, consulte [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html).

1. (Opcional) Para visualizar os tipos de instância com os atributos especificados, expanda **Preview matching instance types** (Previsualizar os tipos de instância correspondentes). Para excluir os tipos de instância de serem usados na avaliação do posicionamento, selecione as instâncias e escolha **Exclude selected instance types** (Excluir tipos de instância selecionados).

1. Escolha **Load placement scores** (Carregar pontuações de posicionamento) e analise os resultados.

1. (Opcional) Para exibir a pontuação de posicionamento de spot para regiões específicas, em **Regions to evaluate** (Regiões a serem avaliadas), selecione as regiões a serem avaliadas e, em seguida, escolha **Calculate placement scores** (Calcular pontuações de posicionamento).

1. (Opcional) Para exibir a pontuação de posicionamento de spot para as zonas de disponibilidade nas regiões que a ferramenta exibe, marque a caixa de seleção **Fornecer pontuações de posicionamento por zona de disponibilidade**. Uma lista de zonas de disponibilidade pontuadas é útil se você quiser iniciar toda a sua capacidade de spot em uma única zona de disponibilidade.

1. (Opcional) Para editar seus requisitos de computação e obter uma nova pontuação de posicionamento, escolha **Edit** (Editar), faça os ajustes necessários e, em seguida, escolha **Calculate placement scores** (Calcular pontuações de posicionamento).

## Calcular usando tipos de instância
<a name="sps-specify-instance-types-console"></a>

**Para calcule uma pontuação de posicionamento de spot especificando tipos de instância**

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 **Solicitações spot**.

1. Escolha a seta para baixo ao lado de **Request Spot Instances** e escolha **Calculate Spot Placement Score**.

1. Escolha **Enter requirements** (Inserir requisitos).

1. Em **Target capacity** (Capacidade-alvo), insira a capacidade desejada em termos do número de **instances** (instâncias) ou **vCPUs**, ou quantidade de **memory (MiB)** (memória).

1. Em **Instance type requirements** (Requisitos de tipo de instância), para especificar os tipos de instância a serem usados, escolha **Manually select instance types** (Selecionar manualmente os tipos de instância).

1. Escolha **Select instance types** (Selecionar tipos de instância), selecione os tipos de instância a serem usados e escolha **Select** (Selecionar). Para localizar rapidamente tipos de instância, é possível usar a barra de filtro para filtrar os tipos de instância por diferentes propriedades.

1. Escolha **Load placement scores** (Carregar pontuações de posicionamento) e analise os resultados.

1. (Opcional) Para exibir a pontuação de posicionamento de spot para regiões específicas, em **Regions to evaluate** (Regiões a serem avaliadas), selecione as regiões a serem avaliadas e, em seguida, escolha **Calculate placement scores** (Calcular pontuações de posicionamento).

1. (Opcional) Para exibir a pontuação de posicionamento de spot para as zonas de disponibilidade nas regiões que a ferramenta exibe, marque a caixa de seleção **Fornecer pontuações de posicionamento por zona de disponibilidade**. Uma lista de zonas de disponibilidade pontuadas é útil se você quiser iniciar toda a sua capacidade de spot em uma única zona de disponibilidade.

1. (Opcional) Para editar a lista de tipos de instância e obter uma nova pontuação de posicionamento, escolha **Edit** (Editar), faça os ajustes necessários e, em seguida, escolha **Calculate placement scores** (Calcular pontuações de posicionamento).

## Calcular usando a AWS CLI
<a name="calculate-sps-cli"></a>

**Para calcular uma pontuação de posicionamento de spot**

1. (Opcional) Para gerar todos os parâmetros possíveis que podem ser especificados para a configuração de pontuação de posicionamento de spot, use o comando [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html) e o parâmetro `--generate-cli-skeleton`.

   ```
   aws ec2 get-spot-placement-scores \
       --region us-east-1 \
       --generate-cli-skeleton
   ```

   O seguinte é um exemplo de saída.

   ```
   {
       "InstanceTypes": [
           ""
       ],
       "TargetCapacity": 0,
       "TargetCapacityUnitType": "vcpu",
       "SingleAvailabilityZone": true,
       "RegionNames": [
           ""
       ],
       "InstanceRequirementsWithMetadata": {
           "ArchitectureTypes": [
               "x86_64_mac"
           ],
           "VirtualizationTypes": [
               "hvm"
           ],
           "InstanceRequirements": {
               "VCpuCount": {
                   "Min": 0,
                   "Max": 0
               },
               "MemoryMiB": {
                   "Min": 0,
                   "Max": 0
               },
               "CpuManufacturers": [
                   "amd"
               ],
               "MemoryGiBPerVCpu": {
                   "Min": 0.0,
                   "Max": 0.0
               },
               "ExcludedInstanceTypes": [
                   ""
               ],
               "InstanceGenerations": [
                   "previous"
               ],
               "SpotMaxPricePercentageOverLowestPrice": 0,
               "OnDemandMaxPricePercentageOverLowestPrice": 0,
               "BareMetal": "excluded",
               "BurstablePerformance": "excluded",
               "RequireHibernateSupport": true,
               "NetworkInterfaceCount": {
                   "Min": 0,
                   "Max": 0
               },
               "LocalStorage": "included",
               "LocalStorageTypes": [
                   "hdd"
               ],
               "TotalLocalStorageGB": {
                   "Min": 0.0,
                   "Max": 0.0
               },
               "BaselineEbsBandwidthMbps": {
                   "Min": 0,
                   "Max": 0
               },
               "AcceleratorTypes": [
                   "fpga"
               ],
               "AcceleratorCount": {
                   "Min": 0,
                   "Max": 0
               },
               "AcceleratorManufacturers": [
                   "amd"
               ],
               "AcceleratorNames": [
                   "vu9p"
               ],
               "AcceleratorTotalMemoryMiB": {
                   "Min": 0,
                   "Max": 0
               }
           }
       },
       "DryRun": true,
       "MaxResults": 0,
       "NextToken": ""
   }
   ```

1. Crie um arquivo de configuração JSON usando a saída da etapa anterior e configure-o da seguinte forma:

   1. Em `TargetCapacity`, insira a capacidade desejada em termos do número de instâncias ou vCPUs, ou quantidade de memória (MiB).

   1. Em `TargetCapacityUnitType`, insira a unidade para a capacidade-alvo. Se você omitir esse parâmetro, ele assumirá o padrão `units`.

      Valores válidos: `units` (o que se traduz em número de instâncias) \$1 `vcpu` \$1 `memory-mib`

   1. Em `SingleAvailabilityZone`, especifique `true` para uma resposta que retorna uma lista de zonas de disponibilidade pontuadas. Uma lista de zonas de disponibilidade pontuadas é útil se você quiser iniciar toda a sua capacidade de spot em uma única zona de disponibilidade. Se você omitir esse parâmetro, ele assumirá o padrão `false`, e a resposta retornará uma lista de regiões pontuadas.

   1. (Opcional) Em `RegionNames`, especifique as regiões que deseja usar como filtro. É necessário especificar o código de região, por exemplo, `us-east-1`.

      Com um filtro de região, a resposta retorna apenas as regiões que você especificou. Se tiver especificado `true` para `SingleAvailabilityZone`, a resposta retornará apenas as zonas de disponibilidade nas regiões que você especificou.

   1. É possível incluir um `InstanceTypes` ou `InstanceRequirements`, mas não ambos na mesma configuração.

      Especifique uma das seguintes opções na configuração de JSON:
      + Para especificar uma lista de tipos de instância, especifique os tipos de instância no parâmetro `InstanceTypes`. Especifique pelo menos três tipos de instância diferentes. Se você especificar apenas um ou dois tipos de instância, a pontuação de posicionamento de spot retornará uma pontuação baixa. Para obter uma lista dos tipos de instância , consulte [Tipos de instância do Amazon EC2](https://aws.amazon.com/ec2/instance-types/).
      + Para especificar os atributos da instância para que o Amazon EC2 identifique os tipos de instância que correspondem a esses atributos, especifique os atributos localizados na estrutura `InstanceRequirements`.

        É necessário fornecer valores para `VCpuCount`, `MemoryMiB` e `CpuManufacturers`. É possível omitir os outros atributos; quando omitidos, os valores padrão são usados. Para obter uma descrição de cada atributo e seus valores padrão, consulte [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html).

      Para obter configurações de exemplo, consulte [Exemplos de configuração](#sps-example-configs).

1. Para obter a pontuação de posicionamento de spot para os requisitos especificados no arquivo JSON, use o comando [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html) e especifique o nome e o caminho do arquivo JSON usando o parâmetro `--cli-input-json`.

   ```
   aws ec2 get-spot-placement-scores \
       --region us-east-1 \
       --cli-input-json file://file_name.json
   ```

   Exemplo de saída se `SingleAvailabilityZone` for definido como `false` ou omitido (se omitido, o padrão `false` será usado); uma lista classificada de regiões será devolvida.

   ```
   "SpotPlacementScores": [
       {
           "Region": "us-east-1",
           "Score": 7
       },
       {
           "Region": "us-west-1",
           "Score": 5
       },  
      ...
   ```

   Exemplo de saída se `SingleAvailabilityZone` for definido como `true`; uma lista pontuada de zonas de disponibilidade será retornada.

   ```
   "SpotPlacementScores": [
       {
           "Region": "us-east-1",
           "AvailabilityZoneId": "use1-az1",
           "Score": 8
       },
       {
           "Region": "us-east-1",
           "AvailabilityZoneId": "usw2-az3",
           "Score": 6
       },
      ...
   ```

### Exemplos de configuração
<a name="sps-example-configs"></a>

Quando usar a AWS CLI, será possível usar os exemplos de configurações as seguir.

**Topics**
+ [Exemplo: especificar tipos de instância e capacidade-alvo](#example-config-instance-type-override)
+ [Exemplo: especificar tipos de instância e capacidade-alvo em termos de memória](#example-config-instance-type-memory-unit-override)
+ [Exemplo: especificar atributos para seleção de tipo de instância baseada em atributos](#example-config-attribute-based-instance-type-selection)
+ [Exemplo: especificar atributos para seleção de tipo de instância baseada em atributos e retornar uma lista pontuada de zonas de disponibilidade](#example-config-sps-singleAZ)

#### Exemplo: especificar tipos de instância e capacidade-alvo
<a name="example-config-instance-type-override"></a>

O exemplo de configuração a seguir especifica três tipos de instância diferentes e uma capacidade-alvo de spot de 500 instâncias spot.

```
{
    "InstanceTypes": [
        "m5.4xlarge",
        "r5.2xlarge",
        "m4.4xlarge"
    ], 
    "TargetCapacity": 500
}
```

#### Exemplo: especificar tipos de instância e capacidade-alvo em termos de memória
<a name="example-config-instance-type-memory-unit-override"></a>

O exemplo de configuração a seguir especifica três tipos de instância diferentes e uma capacidade-alvo de spot de 500.000 MiB de memória, em que o número de Instâncias spot a serem iniciadas deve fornecer um total de 500.000 MiB de memória.

```
{
    "InstanceTypes": [
        "m5.4xlarge",
        "r5.2xlarge",
        "m4.4xlarge"
    ], 
    "TargetCapacity": 500000,
    "TargetCapacityUnitType": "memory-mib"
}
```

#### Exemplo: especificar atributos para seleção de tipo de instância baseada em atributos
<a name="example-config-attribute-based-instance-type-selection"></a>

O exemplo de configuração a seguir é configurado para seleção de tipo de instância baseada em atributos e é seguido de um texto explicativo do exemplo de configuração.

```
{
    "TargetCapacity": 5000,
    "TargetCapacityUnitType": "vcpu",
    "InstanceRequirementsWithMetadata": {
        "ArchitectureTypes": ["arm64"],
        "VirtualizationTypes": ["hvm"],
        "InstanceRequirements": {
            "VCpuCount": {
                "Min": 1,
                "Max": 12
            },
            "MemoryMiB": {
                "Min": 512
            }
        }
    }
}
```

****`InstanceRequirementsWithMetadata`****  
Para usar a seleção do tipo de instância baseada em atributo, é necessário incluir a estrutura `InstanceRequirementsWithMetadata` na configuração e especificar os atributos desejados para as Instâncias spot.

No exemplo anterior, os seguintes atributos de instância necessários são especificados:
+ `ArchitectureTypes` – o tipo de arquitetura dos tipos de instância deve ser `arm64`.
+ `VirtualizationTypes` – o tipo de virtualização dos tipos de instância deve ser `hvm`.
+ `VCpuCount`: os tipos de instância devem ter no mínimo 1 e no máximo 12 vCPUs.
+ `MemoryMiB`: os tipos de instância devem ter no mínimo 512 MiB de memória. Omitindo o parâmetro `Max`, você está indicando que não há limite máximo.

Observe que existem vários outros atributos opcionais que é possível especificar. Para obter a lista de atributos, consulte [get-spot-placement-scores](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-spot-placement-scores.html).

**`TargetCapacityUnitType`**  
O parâmetro `TargetCapacityUnitType` especifica a unidade da capacidade-alvo. No exemplo, a capacidade-alvo é `5000` e o tipo de unidade de capacidade-alvo é `vcpu`, que juntos especificam uma capacidade-alvo desejada de 5000 vCPUs, em que o número de instâncias spot a serem iniciadas deve fornecer um total de 5000 vCPUs.

#### Exemplo: especificar atributos para seleção de tipo de instância baseada em atributos e retornar uma lista pontuada de zonas de disponibilidade
<a name="example-config-sps-singleAZ"></a>

O exemplo de configuração a seguir é configurado para seleção de tipo de instância baseada em atributos. Especificando `"SingleAvailabilityZone": true`, a resposta retornará uma lista de zonas de disponibilidade pontuadas.

```
{
    "TargetCapacity": 1000,
    "TargetCapacityUnitType": "vcpu",
    "SingleAvailabilityZone": true,
    "InstanceRequirementsWithMetadata": {
        "ArchitectureTypes": ["arm64"],
        "VirtualizationTypes": ["hvm"],
        "InstanceRequirements": {
            "VCpuCount": {
                "Min": 1,
                "Max": 12
            },
            "MemoryMiB": {
                "Min": 512
            }
        }
    }
}
```