从图像创建 ec2 实例 - 使用 boto 查找内核 id 属性

Posted

技术标签:

【中文标题】从图像创建 ec2 实例 - 使用 boto 查找内核 id 属性【英文标题】:creating an ec2 instance from an image - finding kernel id attributes using boto 【发布时间】:2013-03-08 21:33:19 【问题描述】:

我从正在运行的机器获得了 EC2 快照。当我创建一个图像然后从中创建一个实例时,它无法通过可达性测试,我无法连接到它。我检查了音量,连接到另一台机器没有错误。

我现在怀疑我必须选择正确的内核 ID,而默认值可能不兼容。

查看我拥有的其他 EC2 实例,它们正在运行内核 id aki-427d952b,但该内核在下拉列表中不可用(即使在同一可用区中)。

如何找到次优的内核 ID?是否有一些内核 ID 列表以及它们支持的版本/架构?

编辑:例如可以python boto 或其他库用于列出所有内核 ID 和属性,以允许从 aki-427d952b 中选择不同的内核 ID(下拉列表中缺少)。

【问题讨论】:

我看到很多关于 SO 的相关问题看起来非常相似,并且没有因为离题而关闭。如果这里不合适,可以迁移到 serverfault 吗?我还编辑了这个问题,并询问是否为此目的使用 boto。希望这可以重新打开或迁移到最合适的 stackexchange 站点。 【参考方案1】:

Boto 当然可以用于列出图像,并且您可以获取有关其配置的数据。这是否是寻找替代品的最佳方式是另一个问题,但是,如果你想这样做,这里是 python/boto 代码

# use your AWS id and Secret here
conn = EC2Connection(awsid, awssecret)

# returns array of all images your account can use
all_images = conn.get_all_images() 

for img in all_images:
    attrs = img.__dict__
    # attrs will be a dictionary of key-value pairs associated 
    # with the image.  Look through them to find what you want.

    if img.kernel_id == 'aki-427d952b':
        print "found aki-427d952b:  imgid=" + img.id

【讨论】:

谢谢。是的,我也可以使用ec2.get_all_kernels(kernel_ids=['aki-427d952b','aki-...',...]),但不幸的是,它仍然不能帮助我确定选择替换aki-427d952b 的最佳内核ID... 你的“最佳”标准是什么? 好点。我想说最好的 == 最兼容的(相同的架构,相同的版本,如果使用而不是 aki-427d952b,则最不可能破坏事物) 您可以通过上面示例中的属性查看图像的各种属性。您可能能够找到足够的信息来做出选择,但不幸的是,“最不可能破坏事物”是您必须猜测的。 可悲的是,即使像 linux 内核版本这样的东西似乎也很难从 dict 中分辨出来 :( 我想知道这些信息是否存在于其他地方。也许 boto 在这种情况下没有所有答案?

以上是关于从图像创建 ec2 实例 - 使用 boto 查找内核 id 属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 boto3 在集群中启动 EC2 实例

如何使用 Boto 启动 EC2 实例,指定 EBS 的大小?

AWS:如何使用 Boto3 从实例创建公共 AMI?

AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限

如何使用 boto3 指定 core-os ec2 实例的根卷大小?

python boto3将IAM角色附加/替换为ec2