Usei o comando create-volume da AWS Command Line Interface (AWS CLI) para criar um volume do Amazon Elastic Block Store (Amazon EBS) a partir de um instantâneo criptografado. O comando é concluído com êxito e retorna uma ID de volume. Quando tento anexar o volume a uma instância, não consigo encontrar o volume.
Breve descrição
Quando você cria um volume do Amazon EBS a partir de um instantâneo, duas operações são executadas:
- O Amazon EBS inicia a criação do volume. Isso retorna uma ID de volume e define o estado do volume como criando, conforme retornado na saída da API ou da AWS CLI. Isso significa que a API createVolume é válida e foi registrada com sucesso.
- Uma chamada assíncrona é iniciada para validar a chave do AWS Key Management Service (AWS KMS), que é usada para criptografar e descriptografar o volume que você cria.
Se a validação do AWS KMS for bem-sucedida, o estado do volume será definido como disponível e o volume do EBS ficará acessível. Se a ID da chave, o alias ou o ARN especificados do AWS KMS não forem válidos, a ação parecerá concluída. No entanto, a criação do volume eventualmente falha e não retorna nenhum erro.
Observação: a validação do AWS KMS para createVolume é assíncrona. Para obter mais informações, consulte create-volume e Como criptografar recursos do Amazon EBS.
Talvez você perceba o problema ao conectar ou acessar o volume do EBS. Embora a API createVolume retorne uma ID de volume, o volume do EBS não existe e os logs do AWS CloudTrail não mostram nenhum erro.
Exemplo de problema
Este exemplo mostra a API createVolume em uso com um alias inválido para a chave do AWS KMS. A API createVolume é bem-sucedida e retorna uma ID de volume e, em seguida, define o estado do volume como criando. Como o alias da chave do AWS KMS não é válido, a autenticação assíncrona falha. Isso faz com que toda a operação falhe. Quando você verifica os logs do AWS CloudTrail em busca do evento de criação de volume, nenhum erro é encontrado porque a operação createVolume foi bem-sucedida.
$ aws ec2 create-volume --volume-type gp2 --availability-zone eu-west-1c --encrypted --kms-key-id hana --snapshot-id snap-0a27fe340500641d9 {
"AvailabilityZone": "eu-west-1c",
"MultiAttachEnabled": false,
"Tags": [],
"Encrypted": true,
"VolumeType": "gp2",
"VolumeId": "vol-043fe27d0ccf74b36",
"State": "creating",
"KmsKeyId": "hana",
"SnapshotId": "snap-0a27fe340500641d9",
"Iops": 100,
"CreateTime": "2020-10-06T18:03:09.000Z",
"Size": 8
}
Logs do AWS CloudTrail:
responseElements": { "requestId": "8677d3cd-ad1d-4866-95f5-375d92a35813",
"volumeId": "vol-043fe27d0ccf74b36",
"size": "8",
"snapshotId": "snap-0a27fe340500641d9",
"zone": "eu-west-1c",z
"status": "creating",
"createTime": 1602007389000,
"volumeType": "gp2",
"iops": 100,
"encrypted": true,
"masterEncryptionKeyId": "hana",
"tagSet": {},
"multiAttachEnabled": false
},
"requestID": "8677d3cd-ad1d-4866-95f5-375d92a35813",
"eventID": "bd4216df-ba39-425e-b272-936212ae6699",
"eventType": "AwsApiCall",
"recipientAccountId": "864258534754"
}
Ao executar describe-volume-status, você descobre que o volume não existe:
$ aws ec2 describe-volume-status --volume-ids vol-043fe27d0ccf74b36An error occurred (InvalidVolume.NotFound) when calling the DescribeVolumeStatus operation:
The volume 'vol-043fe27d0ccf74b36' does not exist.
Resolução
Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.
Usar a API describe-volume-status
Para verificar se o volume do EBS existe, use a API describe-volume-status.
Inscrever-se nos eventos createVolume do CloudWatch
Inscreva-se nos eventos públicos createVolume do CloudWatch para obter mais informações sobre falhas na criação de volumes. Neste exemplo, a notificação mostra o evento createVolume do CloudWatch. A notificação mostra que o resultado de createVolume falha devido a um keyId inválido.
AWS Notification MessageCreateVolume <no-reply@sns.amazonaws.com>
{
"version":"0","id":"192e695f-2387-1cf0-fb1c-1cb32f047212",
"detail-type":"EBS Volume Notification","source":"aws.ec2",
"account":"12345678","time":"2020-10-06T18:03:10Z",
"region":"eu-west-1",
"resources":["arn:aws:ec2:eu-west-1:864258534754:volume/vol-043fe27d0ccf74b36"],
"detail":
{"result":"failed","cause":"Invalid keyId hana","event":"createVolume",
"request-id":"8677d3cd-ad1d-4866-95f5-375d92a35813"}
}
Observação: se você criar um volume do EBS a partir de um instantâneo criptografado, a criação do instantâneo também poderá falhar por estes motivos:
- O usuário ou o perfil do AWS Identity and Access Management (IAM) que cria o volume não tem permissões suficientes. O usuário ou o perfil do IAM deve ter permissões para acessar a chave do AWS KMS usada para criptografar o instantâneo.
- A chave do AWS KMS usada para criptografar o instantâneo está desativada, foi excluída ou não está na região da AWS.
Informações relacionadas
Como otimizar o desempenho dos meus volumes do Amazon EBS?
Por que não consigo encontrar o nome de usuário que criou um volume do EBS ao pesquisar logs de eventos do CloudTrail?