分类: Aws
AWS镜像AMI制作

先在本地安装Oracle VM VirtualBox,安装好虚拟机(调整优化系统各个参数)此处不再赘述,IP设置为自动获取,最后关机导出,格式为“开放式虚拟化格式 1.0”,如下图,导出完以后上传到S3存储上;

如果镜像超过1G推荐使用S3 Browser上传,直接浏览器上传会出现上传100%以后,提示失败。
ova.png
S3.png
使用 pip 安装 AWS CLI:

pip install awscli --upgrade --user

--upgrade 选项通知 pip 升级已安装的任何必要组件。--user 选项通知 pip 将程序安装到用户目录的子目录中,以避免修改您的操作系统所使用的库。
将/root/.local/bin路径加入环境变量

vim /etc/profile 
export PATH=$PATH:/usr/local/mysql/bin:/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/.local/bin

卸载AWS CLI:

pip uninstall awscli

将Python2.x更新到Python3.x即可完整使用AWS服务,低版本的python部分服务不兼容
更多安装方法参考:https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-install.html

配置AWS CLI:

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

第一次运行的时候需要配置CLI,AWS CLI 会提示您输入四条信息,并将它们存储在名为 default 的配置文件(一个设置集合)中。每当您运行的 AWS CLI 命令未明确指定要使用的配置文件时,就会使用该配置文件。
参考:https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-chap-configure.html

创建服务角色:
1、创建名为 trust-policy.json 的文件:

{
   "Version": "2019-04-01",
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": { "Service": "vmie.amazonaws.com" },
         "Action": "sts:AssumeRole",
         "Condition": {
            "StringEquals":{
               "sts:Externalid": "vmimport"
            }
         }
      }
   ]
}

2、使用 create-role 命令创建名为 vmimport 的角色,并向 VM Import/Export 提供对该角色的访问权。请确保指定 trust-policy.json 文件的完整路径,并且为路径添加 file:// 前缀。

aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json

3、创建名为 role-policy.json 的文件并编写下面的策略,其中,disk-image-file-bucket 为存储磁盘映像的存储桶:

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

其中

"arn:aws-cn:s3:::disk-image-file-bucket",
"arn:aws-cn:s3:::disk-image-file-bucket/*"
arn:aws-cn:s3为AWS中国区域,disk-image-file-bucket 为存储磁盘映像的存储桶:为存储桶的名称

4、使用put-role-policy命令将策略挂载到之前创建的角色,请指定 role-policy.json 文件位置的完整路径

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

导入 OVA
创建containers.json文件:

[
  {
    "Description": "win2008R2",
    "Format": "ova",
    "UserBucket": {
        "S3Bucket": "hongsin",
        "S3Key": "win2008R2.ova"
    }
}]

开始导入

aws ec2 import-image --description "win2008R2" --license-type BYOL --disk-containers file://containers.json
{
    "Status": "active", 
    "Description": "win2008R2", 
    "SnapshotDetails": [
        {
            "UserBucket": {
                "S3Bucket": "hongsin", 
                "S3Key": "win2008R2.ova"
            }, 
            "DiskImageSize": 0.0, 
            "Format": "OVA"
        }
    ], 
    "Progress": "2", 
    "StatusMessage": "pending", 
    "ImportTaskId": "import-ami-0e4a7239420c77ab0"
}

查看导入进度:

aws ec2 describe-import-image-tasks --import-task-ids import-ami-0e4a7239420c77ab0
{
    "ImportImageTasks": [
        {
            "Status": "active", 
            "Description": "win2008R2", 
            "SnapshotDetails": [
                {
                    "Status": "active", 
                    "UserBucket": {
                        "S3Bucket": "hongsin", 
                        "S3Key": "win2008R2.ova"
                    }, 
                    "DiskImageSize": 3383259136.0, 
                    "Format": "VMDK"
                }
            ], 
            "Progress": "28", 
            "StatusMessage": "converting", 
            "ImportTaskId": "import-ami-0e4a7239420c77ab0"
        }
    ]
}

等到状态变成completed即导入完成

 aws ec2 describe-import-image-tasks --import-task-ids import-ami-0e4a7239420c77ab0
{
    "ImportImageTasks": [
        {
            "Status": "completed", 
            "LicenseType": "AWS", 
            "Description": "win2008R2", 
            "ImageId": "ami-0d2e94d768524fc51", 
            "Platform": "Windows", 
            "Architecture": "x86_64", 
            "SnapshotDetails": [
                {
                    "Status": "completed", 
                    "DeviceName": "/dev/sda1", 
                    "Format": "VMDK", 
                    "DiskImageSize": 3383259136.0, 
                    "SnapshotId": "snap-0e164f09dc71359fa", 
                    "UserBucket": {
                        "S3Bucket": "hongsin", 
                        "S3Key": "win2008R2.ova"
                    }
                }
            ], 
            "ImportTaskId": "import-ami-0e4a7239420c77ab0"
        }
    ]
}

现在可以到“我的AMI”里面找到创建的镜像,然后就可以使用自己的镜像创建机器了;
ami.png
使用 describe-import-image-tasks 命令返回导入任务的状态。

包括的状态值如下:
active — 正在运行导入任务。
deleting — 正在取消导入任务。
deleted — 导入任务已取消。
updating — 导入状态正在更新。
validating — 正在验证导入的映像。
validated — 已验证导入的映像。
converting — 正在将导入的映像转换成 AMI。
completed — 导入任务已完成,并且 AMI 已准备就绪,随时可以使用。


相关博文:

发表新评论