AWS OpsWorks:如何设置每层的默认 EBS 卷大小?
Posted
技术标签:
【中文标题】AWS OpsWorks:如何设置每层的默认 EBS 卷大小?【英文标题】:AWS OpsWorks: how to set the default EBS volume size per layer? 【发布时间】:2014-06-24 09:51:45 【问题描述】:我确定我遗漏了一些明显的东西,但我找不到设置每层默认 EBS 卷大小的方法。默认情况下,我在该层上启动的每个实例都有一个 10GB 的卷。
在“层”配置窗格中,我尝试添加所需大小的 EBS 卷,但它不允许我将其安装在“/”上。
我的应用程序安装在 /srv/www 需要这个额外的大小,但文档说此时不应安装卷:
不要将 Amazon EBS 卷挂载到以下挂载点。如果 实例重新启动,autofs 可能会使用它们来挂载临时 设备而不是您的音量。
/srv/www
【问题讨论】:
【参考方案1】:在撰写本文时,您无法使用 OpsWorks 更改默认根卷大小。但是,当使用 API 的 create-instance command 时,您可以提供 block device mapping(就像在 EC2 上一样)并定义大小。
例如,您可以创建一个包含以下内容的文件,为方便起见,将其命名为“instance.json”:
"InstanceType": "c4.large",
"RootDeviceType": "ebs",
"BlockDeviceMappings": [
"DeviceName": "ROOT_DEVICE",
"Ebs":
"VolumeSize": 20,
"VolumeType": "gp2",
"DeleteOnTermination": true
]
然后您可以执行如下命令来创建具有所需根卷大小的实例,使用该文件并替换正确的堆栈和层 ID:
aws opsworks create-instance --cli-input-json file://./instance.json --stack-id <stack-id-number-here> --layer-ids <one-or-more-layer-id-numbers-here>
如果你更喜欢 oneliner,虽然有点笨重:
aws opsworks create-instance --stack-id <stack-id-number-here> --layer-ids <one-or-more-layer-id-numbers-here> --instance-type <e.g. c4.large> --block-device-mappings '["DeviceName":"ROOT_DEVICE","Ebs":"VolumeType":"gp2","VolumeSize":20]'
请注意,此过程仅在创建实例时有效,之后您无法修改它,除非手动修改。
【讨论】:
我可以使用 CloudFormation 实现这一目标吗? @Casper 这无法通过 CloudFormation 实现。 Here 你可以看到不支持BlockDeviceMappings。但是,您可以使用Custom Resources 调用Lambda function 来创建/修改/更新这些资源。 所以你是说我需要先启动一个实例,然后修改根卷? @Casper,您能否通过 CloudFormation 实现这一目标? @ManishJoshi 不是 atm,我联系了 AWS 支持,这是一个功能请求。【参考方案2】:您不能在 / 处挂载卷,这是根目录。
不幸的是,您无法在 OpsWorks 中设置根设备大小。
但是你可以在其他地方安装一个卷,比如/mnt/www
并在那里进行符号链接。
【讨论】:
是的,我最终做了这样的事情......遗憾的是,它不能更容易地完成。 我会将此作为功能请求。 :) @spangenberg 我正在寻找这个确切的东西。我们将日志存储几天,它们偶尔会超过限制。希望实例从更多空间开始。谢谢。 我了解您的问题。同时,请将 EBS 卷挂载到 /var/log 或存储日志的任何位置。 @spangenberg,我真的希望它很快就会出现,因为它也最终允许连接通用或 PIOPS SSD 根设备!以上是关于AWS OpsWorks:如何设置每层的默认 EBS 卷大小?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS OpsWorks 上调试 Ruby On Rails?
如何使用内置 Java 应用层在 AWS OpsWorks 上部署 Jenkins?