继承了由负载均衡器、数据库服务器以及自动扩展组内的多个 Web 服务器组成的亚马逊托管基础设施;由 CloudFormation 协调部署。
问题是,旋转的网络服务器具有微不足道的根卷(8gb),并且有时在网络服务器的生命周期内,磁盘会被日志和临时文件填满,并且某些服务会停止工作。
我找到了声明机器定义的部分(我认为):
...
"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."
},
但我不知道如何声明根卷大小,也不知道是否有可能;而且我看不到任何地方声明了 ebs 卷。
这是一台 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 在执行此操作后不会启动任何新机器。
我可以看到,在我上传了包含以下更改的新模板后,机器的启动配置也进行了相应更新:
但是新机器不会再自动启动了。:(
答案1
我已经花了好几天的时间来使用 Cloudformation 更改根磁盘大小,这就是它对我的作用方式。
如果使用/dev/xvda1
实例会失败,正确的方法是使用/dev/xvda
。
使用 YAML 格式:
BlockDeviceMappings:
- DeviceName: "/dev/xvda"
Ebs:
VolumeSize: 15
答案2
看一眼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,使其本质上具有更大的尺寸。