Унаследовал размещенную на Amazon инфраструктуру, состоящую из балансировщика нагрузки, сервера БД и нескольких веб-серверов внутри группы автомасштабирования; с развертыванием, координируемым CloudFormation.
Проблема в том, что развернутые веб-серверы имеют крошечный корневой том (8 ГБ), и иногда в течение срока службы веб-сервера диск заполняется журналами и временными файлами, и некоторые службы перестают работать.
Я нашел часть, где объявлено определение машины (думаю):
...
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"AWSRegionArch2AMI",
{
"Ref": "AWS::Region"
},
{
"Fn::FindInMap": [
"AWSInstanceType2Arch",
{
"Ref": "InstanceType"
},
"Arch"
]
}
]
},
"InstanceType": {
"Ref": "InstanceType"
},
"SecurityGroups": [
{
"Ref": "WebServerSecurityGroup"
}
],
"KeyName": {
"Ref": "KeyName"
},
"UserData": {
"Fn::Base64": {
"Fn::Join": [
...
Тип экземпляра окончательно определяется где-то еще:
"InstanceType": {
"Description": "WebServer EC2 instance type",
"Type": "String",
"Default": "c4.xlarge",
"AllowedValues": [
"t1.micro",
"t2.nano",
# ... more allowed values
"cg1.4xlarge"
],
"ConstraintDescription": "must be a valid EC2 instance type."
},
Но я понятия не имею, как объявить размер корневого тома, и возможно ли это вообще; и я нигде не вижу объявляемого объема отливов.
Это Linux-машина, а корневое устройство - / dev / xvda1
[ec2-user@ip- /]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 1.6G 6.2G 21% /
devtmpfs 3.7G 60K 3.7G 1% /dev
tmpfs 3.7G 0 3.7G 0% /dev/shm
Пробовал решение предложено @Jason (хотя заменяет sda1
с участием xvda1
), но CloudFormation не будет запускать новые машины после этого.
Я вижу, что конфигурация запуска для машины обновляется соответствующим образом после того, как я загружаю новый шаблон с этими изменениями:
Но новые машины больше не будут раскручиваться автоматически. :(
Я несколько дней застревал, чтобы изменить размер корневого диска с помощью Cloudformation, вот как это работает для меня ..
Если вы используете /dev/xvda1
экземпляр выйдет из строя, правильный способ - использовать /dev/xvda
.
Использование формата YAML:
BlockDeviceMappings:
- DeviceName: "/dev/xvda"
Ebs:
VolumeSize: 15
Взгляни на http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html, в частности, раздел «Сопоставление блочных устройств». Вы проследите это до определения устройства EBS, которое выглядит так:
{
"DeleteOnTermination" : Boolean,
"Encrypted" : Boolean,
"Iops" : Number,
"SnapshotId" : String,
"VolumeSize" : String,
"VolumeType" : String
}
https://forums.aws.amazon.com/thread.jspa?threadID=127767 также описывает это:
"MyEC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
............
.....
..
"BlockDeviceMappings" : [
{
"DeviceName" : "/dev/sda1",
"Ebs" : {
"VolumeSize" : "20"
}
}
],
"UserData" : {"Fn::Base64" : {"Fn::Join" : ["", [
"#!/bin/bash\n",
"/sbin/resize2fs /dev/sda1\n"
]]}},
}
}
В качестве альтернативы вы можете перестроить AMI, чтобы изначально иметь этот больший размер.