Вопрос или проблема
У меня возникли проблемы с запуском экземпляра AWS с подключенным к нему томом.
На данный момент у меня есть следующая ошибка:
MissingParameter (client): The request must contain the parameter ebs
- Тем не менее, параметр присутствует, поэтому я в замешательстве. Общая нагрузка для моего запроса следующая:
- {“ImageId”:”ami-1″,”InstanceType”:”t2.micro”,”KeyName”:”ec2:1″,”SecurityGroupIds”:[“sg-1″],”MinCount”:1,”MaxCount”:1,”TagSpecifications”:[{“ResourceType”:”instance”,”Tags”:[{“Key”:”Name”,”Value”:”ben:1″}]}]
,”BlockDeviceMappings”:[{“DeviceName”:”/dev/sdb”,”Ebs”:{“VolumeId”:”vol-1″,”Ref”:”vol-1″}}]’UserData’=>’abc’}
Данный BlockDeviceMappings:[{“DeviceName”:”/dev/sdb”,”Ebs”:{“VolumeId”:”vol-1″,”Ref”:”vol-1″}}]
Я хочу запустить экземпляр с этим томом, который содержит bash-скрипты, git-репозитории и так далее, чтобы выполнить включение загрузочного скрипта через UserData …
На данный момент я потерян, и поэтому я с нетерпением жду ваших добрых советов, комментариев, замечаний и просветления.
Заранее спасибо 😉
Ответ или решение
Вопрос, который вы описали, связан с необходимостью указания параметра ebs
для корректной работы функции запуска экземпляра AWS с прикрепленным томом. Давайте рассмотрим вашу ситуацию более подробно, чтобы понять, в чем может заключаться проблема и как ее можно решить.
Теория
Когда вы создаете экземпляр EC2 с помощью AWS API или консоли, необходимо правильно указывать параметры конфигурации, особенно те, которые касаются прикрепления блоков устройств. BlockDeviceMappings
— это параметр, который позволяет указать, как и какие тома EBS должны быть прикреплены к создаваемому экземпляру EC2. Каждый элемент в этом списке представляет собой объект с определенными ключами (например, DeviceName
и Ebs
), где Ebs
указывает, что блокируется новый или уже существующий том Elastic Block Storage (EBS).
Параметр Ebs
внутри объекта BlockDeviceMappings
ожидается как объект, содержащий такие ключи, как VolumeSize
, DeleteOnTermination
, VolumeType
, Encrypted
, либо ссылку на существующий том через VolumeId
, без использования нелегитимного параметра Ref
.
Пример
В вашем описании ошибки приведен JSON объект:
{"ImageId":"ami-1","InstanceType":"t2.micro","KeyName":"ec2:1","SecurityGroupIds":["sg-1"],"MinCount":1,"MaxCount":1,"TagSpecifications":[{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"ben:1"}]}],"BlockDeviceMappings":[{"DeviceName":"/dev/sdb","Ebs":{"VolumeId":"vol-1","Ref":"vol-1"}}],'UserData'=>'abc'}
Обратите внимание, что внутри параметра BlockDeviceMappings
вы указали Ebs
как объект с двумя параметрами VolumeId
и Ref
. Это может быть причиной того, что AWS API реагирует сообщением о недостающем параметре. В нормативных определениях AWS API для BlockDeviceMappings
не существует параметра Ref
. В данном сценарии является множественным указание одного из параметров, которые не поддерживаются в контексте при запуске экземпляра.
Применение
Вы должны убедиться, что каждый элемент в массиве BlockDeviceMappings
указывается корректно по документации AWS:
- Удалите параметр
Ref
, так как он не требуется и может вызвать ошибку. - Убедитесь, что для каждого объекта
Ebs
внутриBlockDeviceMappings
корректно указанVolumeId
, если вы хотите прикрепить существующий том, либо такие параметры какVolumeSize
иVolumeType
, если необходимо создать и прикрепить новый том.
Вот пример правильного JSON объекта:
{
"ImageId":"ami-1",
"InstanceType":"t2.micro",
"KeyName":"ec2:1",
"SecurityGroupIds":["sg-1"],
"MinCount":1,
"MaxCount":1,
"TagSpecifications":[
{
"ResourceType":"instance",
"Tags":[
{"Key":"Name","Value":"ben:1"}
]
}
],
"BlockDeviceMappings":[
{
"DeviceName":"/dev/sdb",
"Ebs":{
"VolumeId":"vol-1",
"DeleteOnTermination":true
}
}
],
"UserData":"abc"
}
Теперь ваш запрос отправит корректные параметры для создания экземпляра, прикрепляя нужный EBS том, и ошибка MissingParameter
должна исчезнуть. Перечитывайте всегда документацию и обеспечьте корректность структур и полей для предоставления востребованных параметров в пресборке запросов к AWS API или иному сервису.
Если после внесения поправок проблема сохраняется, настоятельно рекомендуется проверить существование и доступность указанного VolumeId
и его состояния, чтобы убедиться в том, что инстанс может корректно подключиться к нему. Это можно сделать, используя AWS Management Console или команды AWS CLI.