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?

aws opsworks 默认部署到哪里?

如何使用内置 Java 应用层在 AWS OpsWorks 上部署 Jenkins?

如何将应用程序限制为 AWS Opsworks 中的一种类型的层?

首次设置 AWS EB 时创建的默认安全组是啥?

如何在 AWS Opsworks 上设置 EC2 标签