Я могу запустить спотовый экземпляр EC2 с помощью инструмента командной строки AWS.
aws ec2 request-spot-instances \
--spot-price 0.01 \
--instance-count 1 \
--launch-specification \
"{ \
\"ImageId\":\"ami-009d6802948d06e52\", \
\"InstanceType\":\"t2.small\", \
\"KeyName\":\"dec15a\", \
\"UserData\":\"`base64 -w 0 userdata.sh`\" \
}"
Но как мне изменить размер тома? Я знаю, что в спецификацию запуска необходимо добавить следующий код. Но я не уверен, куда это добавить.
"BlockDeviceMappings": [
{
"Ebs": {
"VolumeSize": 107374182400,
"VolumeType": "standard"
}
}
],
Обновить:
Почему та же команда не работает с таким «файлом»?
# cat specification.json
{
"ImageId":"ami-009d6802948d06e52",
"InstanceType":"t2.small",
"KeyName":"dec15a",
"UserData":"`base64 -w 0 userdata.sh`",
"BlockDeviceMappings": [ {
"DeviceName":"/dev/xvda",
"Ebs": {
"VolumeSize": 100,
"VolumeType": "standard"
}
} ]
}
# aws ec2 request-spot-instances --spot-price "1.050" --instance-count 1 --type "one-time" --launch-specification file://specification.json
An error occurred (InvalidParameterValue) when calling the RequestSpotInstances operation: Invalid BASE64 encoding of user data
Который BlockDeviceMappings
должен быть частью --launch-specification
Структура JSON:
aws ec2 request-spot-instances --spot-price 0.01 --instance-count 1 \
--launch-specification "{ \
\"ImageId\":\"ami-009d6802948d06e52\", \
\"InstanceType\":\"t2.small\", \
\"KeyName\":\"dec15a\", \
\"UserData\":\"`base64 -w 0 userdata.sh`\", \
\"BlockDeviceMappings\": [ { \
\"DeviceName\":\"/dev/xvda\", \ << DeviceName must be set
\"Ebs\": { \
\"VolumeSize\": 100, \ << VolumeSize is in GB
\"VolumeType\": \"gp2\" \ << gp2 = SSD -> much faster
} \
} ] \
}"
Если вы хотите изменить размер корневой объем установить DeviceName
к /dev/xvda
, если вам нужен дополнительный диск, установите его на /dev/xvdf
.
Также обратите внимание, что VolumeSize
в GB
- предложенный вами 107374182400 будет довольно большим объемом! Использовать "VolumeSize": 100
чтобы сделать его 100 гб.
И, наконец, я предлагаю вам использовать "VolumeType": "gp2"
скорее, чем "standard"
. Пока standard
немного дешевле, это намного медленнее, так как это магнитный диск, gp2
это SSD и работает намного быстрее.
Надеюсь, это поможет :)
Ответ на вопрос обновления: Если вы сохраняете JSON в файл, вы должны включить вывод base64 -w 0 userdata.sh
. Он не будет выполняться во время выполнения. Итак, вам понадобится что-то вроде:
# cat specification.json
{
"ImageId":"ami-009d6802948d06e52",
"InstanceType":"t2.small",
"KeyName":"dec15a",
"UserData":"Iy9iaW4vYmFzaAoKCg...", <<< Here paste the output of base64 -w0 userdata.sh as one long line
"BlockDeviceMappings": [ {
...
} ]
}