【问题标题】:How to use boto3 to create an AMI from an Amazon EBS Snapshot如何使用 boto3 从 Amazon EBS 快照创建 AMI
【发布时间】:2020-02-02 06:06:12
【问题描述】:

使用 boto3 lib 在 AWS 中创建映像 (AMI) 时,提供以下参数:

ec2.create_image(Name=name, BlockDeviceMappings=[{'DeviceName':device_name,'Ebs':{'SnapshotId':snapshot_id, 'DeleteOnTermination': delete_on_term,
            'VolumeSize':10, 'VolumeType':'gp2'}}])

我收到此错误:Missing required parameter in input: "InstanceId" 但是当我从用户界面创建图像时,不需要实例 ID。

在下图中,您可以看到我可以从“快照”页面创建图像,而无需指定实例 ID。

有人知道解决方法吗?谢谢。

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 boto3 amazon-ami


    【解决方案1】:

    使用这个函数 register_image 从快照创建图像

    response = client.register_image(
        ImageLocation='string',
        Architecture='i386'|'x86_64'|'arm64',
        BlockDeviceMappings=[
            {
                'DeviceName': 'string',
                'VirtualName': 'string',
                'Ebs': {
                    'DeleteOnTermination': True|False,
                    'Iops': 123,
                    'SnapshotId': 'string',
                    'VolumeSize': 123,
                    'VolumeType': 'standard'|'io1'|'gp2'|'sc1'|'st1',
                    'Encrypted': True|False,
                    'KmsKeyId': 'string'
                },
                'NoDevice': 'string'
            },
        ],
        Description='string',
        DryRun=True|False,
        EnaSupport=True|False,
        KernelId='string',
        Name='string',
        BillingProducts=[
            'string',
        ],
        RamdiskId='string',
        RootDeviceName='string',
        SriovNetSupport='string',
        VirtualizationType='string'
    )
    

    【讨论】:

      【解决方案2】:

      从这里的官方文档: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.create_image

      “InstanceId”是必需的 - 它必须包含您尝试从中创建图像的实例 ID。

      【讨论】:

      • 谢谢。我也注意到了这一点,但我想知道既然我们能够在 UI 中执行该功能,那么在 boto3 中是否有解决方法来实现这一点?
      【解决方案3】:

      从控制台创建映像时,选择选择实例并选择创建映像选项。所以控制台使用选择的实例ID来创建图像。

      当您需要使用boto3创建图像时,您需要告诉API您正在为哪个实例创建图像,因此您需要传入参数。试试这个

      ec2.create_image(instance_id=yourInstanceId, Name=name, BlockDeviceMappings=[{'DeviceName':device_name,'Ebs':{'SnapshotId':snapshot_id, 'DeleteOnTermination': delete_on_term,
                  'VolumeSize':10, 'VolumeType':'gp2'}}])
      

      【讨论】:

      • 谢谢。我在帖子中发布了屏幕截图,以表明我没有指定实例 ID,并且该屏幕不在实例页面中。
      • @M 您正在从附加到您的实例的卷创建快照。快照不同于 AMI。快照是磁盘卷的副本,而 AMI 是整个机器映像。我之前说过,控制台可以让您完成创建映像或快照的目的,选择卷、要开始的实例。
      猜你喜欢
      • 2020-07-10
      • 2012-11-29
      • 2017-07-28
      • 2013-06-28
      • 2020-01-23
      • 2020-11-16
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多