You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Lambda导出的AWS .vmdk文件导入快照时遇内核版本不支持错误

解决Lambda脚本导出VMDK导入时的内核版本错误问题

排查脚本创建AMI的参数差异

  • 检查Lambda中使用boto3创建AMI的代码,确认是否设置了no_reboot=True。如果是,改为no_reboot=False,让实例重启后再创建AMI,确保内核版本信息完整写入根卷:
    ec2_client.create_image(
        InstanceId='your-instance-id',
        Name='script-created-ami',
        Description='AMI created via Lambda script',
        NoReboot=False  # 确保此处为False,默认值也是False,需检查是否被修改
    )
    

对比AMI属性差异

  • 分别查询脚本创建的AMI和控制台创建的AMI的详细属性,查看内核ID(KernelId)是否一致:
    # 查询脚本创建的AMI
    aws ec2 describe-images --image-ids ami-xxxxxx
    # 查询控制台创建的AMI
    aws ec2 describe-images --image-ids ami-yyyyyy
    
  • 如果脚本创建的AMI缺失KernelId,可以在创建AMI时手动指定控制台AMI对应的KernelId参数:
    ec2_client.create_image(
        InstanceId='your-instance-id',
        Name='script-created-ami',
        Description='AMI created via Lambda script',
        KernelId='aki-xxxxxx'  # 替换为控制台AMI的KernelId
    )
    

调整导出AMI的参数

  • 确认Lambda中导出AMI到S3的代码,是否指定了正确的格式参数:
    ec2_client.export_image(
        ImageId='your-ami-id',
        DiskImageFormat='VMDK',
        ContainerFormat='ova',
        S3ExportLocation={
            'S3Bucket': 'your-bucket',
            'S3Prefix': 'export-path/'
        }
    )
    
    确保DiskImageFormat为VMDK,ContainerFormat为ova,与控制台导出的参数一致。

调整导入命令参数

  • 使用import-image时明确指定平台类型,或者尝试用import-snapshot绕开镜像级别的内核检查:

    方法1:修改import-image命令

    aws ec2 import-image \
      --description "Import script-exported VMDK" \
      --disk-containers "[{\"UserBucket\":{\"S3Bucket\":\"your-bucket\",\"S3Key\":\"exported-file.vmdk\"}}]" \
      --platform Linux
    

    方法2:先导入快照再创建AMI

    # 导入快照
    aws ec2 import-snapshot \
      --description "Import snapshot from script VMDK" \
      --disk-container "{\"UserBucket\":{\"S3Bucket\":\"your-bucket\",\"S3Key\":\"exported-file.vmdk\"}}"
    # 等待快照导入完成后,从快照创建AMI
    aws ec2 register-image \
      --name "AMI from imported snapshot" \
      --description "AMI created from script-exported VMDK snapshot" \
      --root-device-name "/dev/sda1" \
      --block-device-mappings "[{\"DeviceName\": \"/dev/sda1\", \"Ebs\": {\"SnapshotId\": \"snap-xxxxxx\"}}]"
    

验证内核版本一致性

  • 登录原实例,确认内核版本确实是5.15.0-1055-aws,并对比控制台与脚本导出的VMDK文件的内核元数据(可通过挂载VMDK查看/etc/os-release或/boot目录下的内核文件信息),确认是否存在差异。

内容的提问来源于stack exchange,提问作者Mahesh Dama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:02:49