AMI

什么是AMI

为什么要上传自己创建的AMI

两个原因可能需要使用自己创建的AMI,

1:前期大量工作,运行环境放在虚拟机上,后面需要将虚拟机迁移到AWS 上,如果重新搭建一搭运行环境,时间成本具大,因此可以将现有的虚拟机导出成可被EC2运行的AMI。

2:某些软件,需要运行在特定的linux环境,如redhat6.5,而这些特定的环境,在AMI市场上没有找到对应的AIM,因此需要自己先建一个AMI,导出成可被EC2运行的AMI

如何上传自己的AMI

AWS VM Import/Export 可以帮助我们将虚拟机镜像从虚拟机导入到EC2实例中,还可以将导入的实例导出回本地虚拟机,减轻在部署上的工作。

一:创建S3存储桶,将OVA文件上传到该S3存储桶

$ aws s3 mb s3://arificial.vm
$ aws s3 cp redhat6.5.ova s3://arificial.vm/

二:通过策略配置文件创建vmimport角色

trust-policy.json
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": { "Service": "vmie.amazonaws.com" },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals":{
               "sts:Externalid": "vmimport"
            }
         }
      }
   ]
}
$ aws iam create-role --role-name vmimport --assume-role-policy-document "file://trust-policy.json"

三:为vmimport配置权限

role-policy.json
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "s3:ListBucket",
            "s3:GetBucketLocation"
         ],
         "Resource": [
            "arn:aws-cn:s3:::"
         ]
      },
      {
         "Effect": "Allow",
         "Action": [
            "s3:GetObject"
         ],
         "Resource": [
            "arn:aws-cn:s3:::/*"
         ]
      },
      {
         "Effect": "Allow",
         "Action":[
            "ec2:ModifySnapshotAttribute",
            "ec2:CopySnapshot",
            "ec2:RegisterImage",
            "ec2:Describe*"
         ],
         "Resource": "*"
      }
   ]
}

使用下面的命令将策略挂载到vmimport

$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://role-policy.json"

四:导入OVA

containers.json
[
  {
    "Description": "redhat 6.5 OVA",
    "Format": "ova",
    "UserBucket": {
        "S3Bucket": "arificial.vm",
        "S3Key": "redhat6.5.ova"
    }
}]

上面创建了一个配置文件,用于定义从哪个bucket拿ova文件,接下来,使用命令,导入vm

$ aws ec2 import-image --description "My server VM" --disk-containers "file://containers.json"

导入后,需要一些时间,通过提示可以看到ami ID,我们通过 describe-import-p_w_picpath-tasks 命令,结合那个ID ,可以查看导入任务的状态

$ aws ec2 describe-import-image-tasks --import-task-ids import-ami-{上面说的ID}

包括的状态值如下:

  • active - 正在运行导入任务。

  • deleting - 正在取消导入任务。

  • deleted - 导入任务已取消。

  • validating — 正在验证导入的映像。

  • converting — 正在将导入的映像转换成 AMI。

  • completed - 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。

``

最后更新于