Adicionar mapeamentos de dispositivos de blocos a uma instância do Amazon EC2
Por padrão, uma instância que você inicia inclui todos os dispositivos de armazenamento especificados no mapeamento de dispositivos de blocos da AMI do qual você executou a instância. É possível especificar alterações ao mapeamento de dispositivos de blocos para uma instância quando ela é iniciada, e essas atualizações se sobrescrevem ou se mesclam com o mapeamento de dispositivos de blocos da AMI.
Limitações
-
Para o volume raiz, você só pode modificar o seguinte: tamanho do volume, tipo de volume e o sinalizador Delete on Termination (Excluir ao encerrar).
-
Quando modificar um volume do EBS, não será possível reduzir o tamanho. Portanto, especifique um snapshot cujo tamanho seja igual ou maior que o tamanho do snapshot especificado no mapeamento de dispositivos de blocos da AMI.
Atualizar o mapeamento de dispositivos de blocos ao executar uma instância
É possível adicionar volumes do EBS e volumes de armazenamento de instâncias a uma instância quando iniciá-la. Observe que atualizar o mapeamento de dispositivos de blocos para uma instância não cria uma alteração permanente no mapeamento de dispositivos de blocos da AMI do qual ela foi executada.
- Console
-
Para atualizar os volumes para uma instância na inicialização
-
Siga o procedimento para inicializar uma instância, mas não inicialize a instância até concluir as etapas a seguir para atualizar os volumes.
-
(Opcional) Para adicionar um volume, escolha Configurar armazenamento, Adicionar novo volume. Selecione o tamanho e o tipo de volume.
-
(Opcional) Para suprimir um volume que foi especificado pelo mapeamento de dispositivos de blocos da AMI, escolha Configurar armazenamento, Remover.
-
(Opcional) Para modificar a configuração de um volume do EBS, no painel Configurar armazenamento, escolha Avançado. Expanda as informações do volume e faça as alterações necessárias.
-
No painel Resumo, analise a configuração da instância e selecione Iniciar instância. Para obter mais informações, consulte Executar uma instância do EC2 usando o assistente de inicialização de instâncias no console.
- AWS CLI
-
Para atualizar os volumes para uma instância na inicialização
Use o comando run-instances com a opção --block-device-mappings
.
--block-device-mappings file://mapping.json
Por exemplo, vamos supor que o mapeamento de dispositivos de blocos de uma AMI especifique o seguinte:
-
/dev/xvda
: volume raiz do EBS
-
/dev/sdh
: volume do EBS criado de snap-1234567890abcdef0
-
/dev/sdj
: volume vazio do EBS com um tamanho de 100
-
/dev/sdb
: volume de armazenamento de instância ephemeral0
Suponha que o seguinte seja o mapeamento de dispositivos de blocos da instância em mapping.json
.
[
{
"DeviceName": "/dev/xvda",
"Ebs": {
"VolumeSize": 100
}
},
{
"DeviceName": "/dev/sdj",
"NoDevice": ""
},
{
"DeviceName": "/dev/sdh",
"Ebs": {
"VolumeSize": 300
}
},
{
"DeviceName": "/dev/sdc",
"VirtualName": "ephemeral1"
}
]
O mapeamento de dispositivos de blocos da instância faz o seguinte:
-
Substitui o tamanho do volume raiz (/dev/xvda
) para 100 GiB.
-
Impede que /dev/sdj
se vincule à instância.
-
Substitui o tamanho de /dev/sdh
para 300 GiB. Observe que você não precisa especificar o ID de snapshot novamente.
-
Adiciona um volume efêmero, /dev/sdc
. Se o tipo de instância não for compatível com múltiplos volumes de armazenamento de instância, esse mapeamento não surtirá efeito. Se o tipo de instância for compatível com volumes NVMe de armazenamento de instância, eles serão enumerados automaticamente e incluídos no mapeamento de dispositivos de blocos da instância e não poderão ser substituídos.
- PowerShell
-
Para atualizar os volumes para uma instância na inicialização
Use o parâmetro -BlockDeviceMapping
com o cmdlet New-EC2Instance com o parâmetro -BlockDeviceMapping
.
-BlockDeviceMapping $bdm
Suponha que o seguinte seja o mapeamento de dispositivos de blocos da instância em $bdm
.
$bdm = @()
$root = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$root.DeviceName = "/dev/xvda"
$ebs1 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebs1.VolumeSize = 100
$root.Ebs = $ebs1
$bdm += $root
$sdj = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdj.DeviceName = "/dev/sdj"
$sdj.NoDevice = ""
$bdm += $sdj
$sdh = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdh.DeviceName = "/dev/sdh"
$ebs2 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebs2.VolumeSize = 300
$sdh.Ebs = $ebs2
$bdm += $sdh
$sdc = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$sdc.DeviceName = "/dev/sdc"
$sdc.VirtualName = "ephemeral1"
$bdm += $sdc
O mapeamento de dispositivos de blocos da instância faz o seguinte:
-
Substitui o tamanho do volume raiz (/dev/xvda
) para 100 GiB.
-
Impede que /dev/sdj
se vincule à instância.
-
Substitui o tamanho de /dev/sdh
para 300 GiB. Observe que você não precisa especificar o ID de snapshot novamente.
-
Adiciona um volume efêmero, /dev/sdc
. Se o tipo de instância não for compatível com múltiplos volumes de armazenamento de instância, esse mapeamento não surtirá efeito. Se o tipo de instância for compatível com volumes NVMe de armazenamento de instância, eles serão enumerados automaticamente e incluídos no mapeamento de dispositivos de blocos da instância e não poderão ser substituídos.
Atualizar o mapeamento de dispositivos de blocos de uma instância em execução
Você não precisa parar a instância para alterar esse atributo.
- AWS CLI
-
Para atualizar o mapeamento de dispositivos de blocos de uma instância em execução
Use o comando modify-instance-attribute.
Adicione a opção --block-device-mappings
:
--block-device-mappings file://mapping.json
Em mapping.json
, especifique as atualizações. Por exemplo, a atualização a seguir altera o volume-raiz do dispositivo para que persista.
[
{
"DeviceName": "/dev/sda1
",
"Ebs": {
"DeleteOnTermination": false
}
}
]
- PowerShell
-
Para atualizar o mapeamento de dispositivos de blocos de uma instância em execução
Use o cmdlet Edit-EC2InstanceAttribute.
Adicione a opção -BlockDeviceMapping
:
-BlockDeviceMapping $bdm
Em bdm
, especifique as atualizações. Por exemplo, a atualização a seguir altera o volume-raiz do dispositivo para que persista.
$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice
$ebd.DeleteOnTermination = false
$bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping
$bdm.DeviceName = "/dev/sda1
"
$bdm.Ebs = $ebd
Visualizar os volumes do EBS em um mapeamento de dispositivos de blocos de instância
É possível facilmente enumerar volumes do EBS para a instância.
- Console
-
Para visualizar os volumes do EBS de uma instância
-
Abra o console do Amazon EC2.
-
No painel de navegação, escolha Instâncias.
-
Selecione a instância e veja os detalhes exibidos na guia Armazenamento. No mínimo, estarão disponíveis as informações a seguir para o dispositivo raiz:
-
Root device type (Tipo de dispositivo raiz) (por exemplo, EBS)
-
Root Device Name (Nome do dispositivo raiz) (por exemplo, /dev/xvda
)
-
Block devices (Dispositivos de blocos) (por exemplo /dev/xvda
, /dev/sdf
e /dev/sdj
)
Se a instância tiver sido executada com volumes adicionais do EBS usando um mapeamento de dispositivo de bloco, eles aparecerão em Block devices (Dispositivos de bloco). Nenhum dos volumes de armazenamento de instâncias aparece nesta guia.
-
Para exibir informações adicionais sobre um volume do EBS, escolha seu ID de volume para ir para a página de volume.
- AWS CLI
-
Para visualizar os volumes do EBS de uma instância
Use o comando describe-instances.
aws ec2 describe-instances \
--instance-ids i-1234567890abcdef0
\
--query Reservations[*].Instances[0].BlockDeviceMappings
- PowerShell
-
Para visualizar os volumes do EBS de uma instância
Use o cmdlet Get-EC2Instance.
(Get-EC2Instance -InstanceId i-0bac57d7472c89bac
).Instances.BlockDeviceMappings
O tipo de instância determina o número e o tipo de volumes de armazenamento de instância que estão disponíveis para a instância. Se o número de volumes de armazenamento de instâncias em um mapeamento de dispositivos de blocos exceder o número de volumes de armazenamento de instâncias disponível para uma instância, os volumes adicionais serão ignorados. Para visualizar os volumes de armazenamento de instância da instância, execute o comando lsblk (instâncias do Linux) ou abra o Gerenciamento de Disco do Windows (instâncias do Windows). Para saber a quantidade de volumes de armazenamento de instância que são compatíveis com cada tipo de instância, consulte Amazon EC2 instance type specifications.
Quando você vir o mapeamento de dispositivos de blocos para sua instância, verá somente os volumes do EBS, não os volumes de armazenamento de instâncias. O método a ser usado para visualizar os volumes de armazenamento de instâncias para a instância depende do tipo de volume.
Volumes de armazenamento de instâncias do NVMe
É possível usar o pacote de linha de comando do NVMe, nvme-cli, para consultar os volumes de armazenamento de instâncias do NVMe no mapeamento de dispositivos de blocos. Faça download e instale o pacote de sua instância e execute o seguinte comando.
[ec2-user ~]$
sudo nvme list
Este é um exemplo de saída de uma instância. O texto na coluna Modelo indica se o volume é um volume do EBS ou um volume do armazenamento de instâncias. Neste exemplo, tanto /dev/nvme1n1
como /dev/nvme2n1
são volumes de armazenamento de instâncias.
Node SN Model Namespace
---------------- -------------------- ---------------------------------------- ---------
/dev/nvme0n1 vol06afc3f8715b7a597 Amazon Elastic Block Store 1
/dev/nvme1n1 AWS2C1436F5159EB6614 Amazon EC2 NVMe Instance Storage 1
/dev/nvme2n1 AWSB1F4FF0C0A6C281EA Amazon EC2 NVMe Instance Storage 1 ...
É possível utilizar o Gerenciamento de disco ou o PowerShell para listar volumes NVMe do EBS e do armazenamento de instâncias. Para obter mais informações, consulte Mapear discos NVMe em uma instância Amazon EC2 Windows para volumes.
Volumes de armazenamento de instâncias HDD ou SSD
É possível usar os metadados da instância para consultar os volumes de armazenamento de instâncias HDD ou SSD no mapeamento de dispositivos de blocos. Os volumes de armazenamento de instâncias NVMe não estão incluídos.
O URI de base de todas as solicitações de metadados da instância é http://169.254.169.254/latest/
. Para obter mais informações, consulte Usar metadados da instância para gerenciar a instância do EC2.
Primeiro, conecte-se à instância em execução. Com base na instância, use esta consulta para obter o mapeamento de dispositivos de blocos.
- IMDSv2
-
[ec2-user ~]$
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/block-device-mapping/
- IMDSv1
-
[ec2-user ~]$
curl http://169.254.169.254/latest/meta-data/block-device-mapping/
A resposta inclui o nome dos dispositivo de blocos para a instância. Por exemplo, a saída de uma instância m1.small
com armazenamento de instância é semelhante a esta:
ami
ephemeral0
root
swap
O dispositivo ami
é o dispositivo raiz como visto pela instância. Os volumes de armazenamento de instâncias têm o nome ephemeral[0-23]
. O dispositivo swap
é para o arquivo da página. Se você também tiver mapeado os volumes do EBS, eles serão exibidos como ebs1
, ebs2
, etc.
Para obter detalhes sobre um dispositivo de blocos individual no mapeamento de dispositivos de blocos, coloque o nome dele na consulta anterior, como mostrado aqui.
- IMDSv2
-
[ec2-user ~]$
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
- IMDSv1
-
[ec2-user ~]$
curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
Primeiro, conecte-se à instância em execução. Com base na instância, use esta consulta para obter o mapeamento de dispositivos de blocos.
PS C:\>
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/
A resposta inclui o nome dos dispositivo de blocos para a instância. Por exemplo, a saída de uma instância m1.small
com armazenamento de instância é semelhante a esta:
ami
ephemeral0
root
swap
O dispositivo ami
é o dispositivo raiz como visto pela instância. Os volumes de armazenamento de instâncias têm o nome ephemeral[0-23]
. O dispositivo swap
é para o arquivo da página. Se você também tiver mapeado os volumes do EBS, eles serão exibidos como ebs1
, ebs2
, etc.
Para obter detalhes sobre um dispositivo de blocos individual no mapeamento de dispositivos de blocos, coloque o nome dele na consulta anterior, como mostrado aqui.
PS C:\>
Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0