我见过很多关于创build AMI的教程,但是我从来没有真正理解AMI的全部概念。 是一个到实例的链接,或者它被存储并且永不改变。 此外,映像是否包含本地存储和所有安装在该实例上的软件包等,还是仅仅是特定实例configuration的副本。 谢谢
AMI最简单的forms就是虚拟机的描述 – 虚拟化types,体系结构(32/64位),内核和根设备。 用亚马逊的话说:
AMI是一个包含软件configuration(操作系统,应用程序服务器和应用程序)的模板,您可以在Amazon经过validation的计算环境中运行。
EC2实例是在亚马逊的硬件上运行的虚拟机。 为了实例启动,需要一些最小量的信息。 另外,不同的实例types支持不同的configuration(例如有些不支持32位AMI)。
每个AMI都有一个标识符(例如ami-a1b2c3d4),创build后该AMI的configuration不能改变。 (然而,您可以在启动时覆盖很多设置,或者在某些情况下,即使在启动实例后也可以覆盖)。
就根卷而言,AMI包含对现有卷的引用(例如,它们引用EBS支持的实例的快照,或者在S3支持的实例的情况下引用图像部分)。
AMI还包含一定程度的错误检查 – 通常是指示所有权的用户标识,encryption密钥(encryption图像)和签名(validation图像完整性)。 通过查看创buildS3支持的实例时创build的清单文件,您可以很好地了解AMI是什么 – 它只是一个包含数据和对其他项目(存储,内核等)的引用的文件。
映像引用其作为块设备映射 – 它指定设备(例如/ dev / sda1)和数据源(短暂(和S3部分,如果相关)或ebs快照)。 由于S3部分已签名,并且ebs-snapshots不能被更改(仅被删除),所以从AMI启动一个实例(不会覆盖其设置)应该总是导致一个实例具有相同的软件设置。 (请注意,由于用户数据或不同的块设备映射(例如,微型实例没有临时存储,而其他实例types),从同一个AMI启动的实例仍有可能在运行状态方面有所不同。在这里,附加卷与AMI分开存储,但AMI引用的方式是不能更改卷。这些卷包含创buildAMI时在其上的数据的精确副本。
从AMI启动实例之前,可以覆盖块设备映射(例如,添加一个额外的EBS卷,或者如果实例types支持,则另一个临时卷)。 在EBS卷的情况下,启动实例后,您可以分离根卷并完全附加一个不同的EBS卷。
所以,简单地回答你的问题:是一个到实例的链接,或者存储并且永远不会改变。 它被存储,永远不会改变。
此外,映像是否包含本地存储和所有安装在该实例上的软件包等,还是仅仅是特定实例configuration的副本。 该映像包含本地存储以及在该实例上安装的所有软件包等。 (通常,这只是根卷,但可以设置AMI以启动具有多个填充卷的实例)。
AMI实际上是用于启动新EC2实例的根文件系统的主副本,以及一些元数据(如体系结构)。 它包含完整的操作系统和软件包,当您启动该发行版的全新副本时,您通常会发现它,以及AMI创build者认为适合添加的任何东西。
如果从实例创buildAMI,则基本上将创build该实例的根文件系统的副本,稍后可用来创build新实例。
我的答案在这里也可以帮助: https : //stackoverflow.com/a/7895489/111286