AWS EC2 Image Builder构建AMI时磁盘空间不足问题解决
解决EC2 Image Builder构建AMI时磁盘空间不足的问题
问题分析
你遇到的磁盘空间不足错误,核心原因是:
- 你在镜像配方中定义的50GB卷是附加数据卷(/dev/sde),而非构建实例的根卷,构建过程默认将临时文件、安装内容、TOE运行数据全部写入根卷(默认8GB),导致空间耗尽。
- 自定义组件仅完成了附加卷的挂载,但未修改构建流程的写入路径,因此该卷完全未被利用。
方案1:直接扩大根卷大小(最简便)
Image Builder构建实例的根卷默认继承父AMI的大小(此处为8GB),只需在镜像配方中修改根卷的块设备映射,即可扩大根卷空间:
修改my_image_recipe中的block_device_mappings配置,针对根卷设备(Amazon Linux 2的根卷设备名通常为/dev/xvda,部分环境为/dev/sda)调整大小:
my_image_recipe = imagebuilder.CfnImageRecipe(self, "myImageRecipe", components=[{"componentArn": my_component.attr_arn}], name="My-Image-Recipe", parent_image="ami-076bca9dd71a9a5670", version=my_image_version, working_directory="/tmp", # 替换原附加卷配置,修改根卷为50GB block_device_mappings=[imagebuilder.CfnImageRecipe.InstanceBlockDeviceMappingProperty( device_name="/dev/xvda", # 根卷设备名,可通过lsblk确认实际值 ebs=imagebuilder.CfnImageRecipe.EbsInstanceBlockDeviceSpecificationProperty( delete_on_termination=True, encrypted=False, volume_size=50, volume_type="gp3" ) )] )
方案2:使用附加卷作为构建存储(适合存储分离场景)
若需使用附加卷,需修改构建流程,将所有写入操作指向挂载的卷,包括Image Builder工作目录和TOE临时目录:
步骤1:修改镜像配方的工作目录
将working_directory改为附加卷下的路径:
working_directory="/data/imagebuilder-workdir",
步骤2:更新自定义组件,完成卷挂载与路径映射
修改return_my_component_doc(),确保创建必要目录并绑定TOE路径:
def return_my_component_doc(): my_component_doc = f''' name: MyDeploymentDocument_A description: Downloads, installs and configures on Amazon Linux schemaVersion: 1.0 phases: - name: build steps: - name: PrepareBuildVolume action: ExecuteBash inputs: commands: - sudo mkfs -t xfs /dev/sde - sudo mkdir -p /data /data/imagebuilder-workdir /data/toe - sudo mount /dev/sde /data # 将TOE的临时目录绑定到附加卷,避免写入根卷 - sudo mount --bind /data/toe /var/lib/amazon/toe # 调整权限,确保Image Builder进程可写入 - sudo chown -R ec2-user:ec2-user /data ''' return my_component_doc
步骤3:修改安装脚本的写入路径
确保你的安装命令(如Splunk SOAR)将内容写入附加卷,例如:
# 示例:指定Splunk SOAR安装到/data目录 sudo ./splunk-soar-installer.sh --install-dir /data/splunk-soar
内容的提问来源于stack exchange,提问作者dredbound
相关产品推荐
相关产品推荐

