本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
您可以使用 AWS CLI 和虚拟机导入/导出服务将虚拟机 (VM) 映像作为亚马逊系统映像 (AMI) 导入到 Snowball Edge 设备。导入虚拟机映像后,将该映像注册为 AMI,然后将其作为 EC2与 Amazon 兼容的实例启动。
在创建订购 Snowball Edge 设备的任务时,您可以 AMIs 从亚马逊 EC2 向设备添加订购 Snowball Edge 设备。收到 Snowball Edge 设备后,请使用此步骤。有关更多信息,请参阅 选择计算和存储选项。
您也可以使用 AWS OpsHub 上传虚拟机映像文件。有关更多信息,请参阅本指南中的将图像作为 EC2兼容 Amazon 的 AMI 导入到您的设备中。
主题
第 1 步:准备虚拟机镜像并将其上传到 Snowball Edge 设备
通过使用虚拟机导入/导出从 Amazon EC2 AMI 或实例中导出虚拟机映像,或者 AWS Cloud 使用您选择的虚拟化平台在本地生成虚拟机映像,来准备虚拟机映像。
要使用虚拟机导入/导出将 Amazon EC2 实例导出为虚拟机映像,请参阅在虚拟机中使用虚拟机导入/导出将实例导出为虚拟机Import/Export User Guide. To export an Amazon EC2 AMI as a VM image using VM Import/Export,请参阅《虚拟机导入/ 导出用户指南》中的直接从 Amazon 系统映像 (AMI) 导出虚拟机。
如果从本地环境生成虚拟机映像,请确保在 Snowball Edge 设备上将该映像配置为用作 AMI。您可能需要根据环境配置以下项。
配置和更新操作系统。
设置主机名。
确保配置了网络时间协议(NTP)。
如有必要,包括 SSH 公钥。制作密钥对的本地副本。有关更多信息,请参阅在 Snowball Edge 上使用 SSH 连接到您的计算实例。
安装和配置您将在 Snowball Edge 设备上使用的任何软件。
注意
为 Snowball Edge 设备准备磁盘快照时,请注意以下限制。
-
Snowball Edge 目前仅支持导入 RAW 图像格式的快照。
-
Snowball Edge 目前仅支持导入大小在 1 GB 到 1 TB 之间的快照。
将虚拟机映像上传到 Snowball Edge 设备上的 Amazon S3 存储桶
准备好虚拟机映像后,将其上传到 Snowball Edge 设备或集群上的 S3 存储桶。你可以使用 Snowball Edge 上的 S3 适配器或兼容 Amazon S3 的存储空间来上传快照。
使用 S3 Adapter 上传虚拟机映像
使用
cp
命令将虚拟机映像文件复制到设备上的存储桶。aws s3 cp
image-path
s3://S3-bucket-name
--endpoint http://S3-object-API-endpoint:443
--profileprofile-name
有关更多信息,请参阅本指南中的支持的 AWS CLI 命令。
在 Snowball Edge 上使用兼容 Amazon S3 的存储空间上传虚拟机映像
使用
put-object
命令将快照文件复制到设备上的存储桶。aws s3api put-object --bucket
bucket-name
--keypath-to-snapshot-file
--bodysnapshot-file
--endpoint-urls3api-endpoint-ip
--profileyour-profile
有关更多信息,请参阅在 Snowball Edge 设备上使用 S3 对象。
第 2 步:在 Snowball Edge 上设置所需的权限
要成功导入,您必须在 Snowball Edge 设备、Ama EC2 zon 和用户上设置虚拟机导入/导出权限。
注意
提供这些权限的服务角色和策略位于 Snowball Edge 设备上。
在 Snowball Edge 上导入/导出虚拟机所需的权限
在开始导入过程之前,您必须使用信任策略创建一个 IAM 角色,该策略允许设备Import/Export on the Snowball Edge device to assume the role. Additional permissions are given to the role to allow VM Import/Export上的虚拟机访问存储在设备上 S3 存储桶中的图像。
创建信任策略 json 文件
以下是需要附加到角色的信任策略示例,这样一来 VM Import/Export 才能访问需要从 S3 存储桶导入的快照。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"vmie.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
通过信任策略 json 文件创建角色
角色名称可以是 vmimport。您可以使用命令中的 --role-name 选项对其进行更改:
aws iam create-role --role-name
role-name
--assume-role-policy-document file:///trust-policy-json-path
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
以下是 create-role
命令的示例输出。
{
"Role":{
"AssumeRolePolicyDocument":{
"Version":"2012-10-17",
"Statement":[
{
"Action":"sts:AssumeRole",
"Effect":"Allow",
"Principal":{
"Service":"vmie.amazonaws.com"
}
}
]
},
"MaxSessionDuration":3600,
"RoleId":"AROACEMGEZDGNBVGY3TQOJQGEZAAAABQBB6NSGNAAAABPSVLTREPY3FPAFOLKJ3",
"CreateDate":"2022-04-19T22:17:19.823Z",
"RoleName":"vmimport",
"Path":"/",
"Arn":"arn:aws:iam::123456789012:role/vmimport"
}
}
为角色创建策略
以下示例策略具有访问 Amazon S3 所需的最低权限。将 Amazon S3 存储桶名称更改为包含您映像的名称。对于独立的 Snowball Edge 设备,请snow-id
更改您的作业 ID。对于设备集群,snow-id
请更改为集群 ID。您还可以使用前缀进一步缩小 VM Import/Export 可以从中导入快照的位置范围。创建类似的策略 json 文件。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:GetMetadata"
],
"Resource":[
"arn:aws:s3:snow:account-id
:snow/snow-id
/bucket/import-snapshot-bucket-name
",
"arn:aws:s3:snow:account-id
:snow/snow-id
/bucket/import-snapshot-bucket-name
/*"
]
}
]
}
使用策略文件创建策略:
aws iam create-policy --policy-name
policy-name
--policy-document file:///policy-json-file-path
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
以下是 create-policy 命令的输出示例。
{
"Policy":{
"PolicyName":"vmimport-resource-policy",
"PolicyId":"ANPACEMGEZDGNBVGY3TQOJQGEZAAAABOOEE3IIHAAAABWZJPI2VW4UUTFEDBC2R",
"Arn":"arn:aws:iam::123456789012:policy/vmimport-resource-policy",
"Path":"/",
"DefaultVersionId":"v1",
"AttachmentCount":0,
"IsAttachable":true,
"CreateDate":"2020-07-25T23:27:35.690000+00:00",
"UpdateDate":"2020-07-25T23:27:35.690000+00:00"
}
}
将策略附加到角色
将策略附加到上述角色并授予访问所需资源的权限。此操作允许 VM Import/Export 服务从设备上的 Amazon S3 下载快照。
aws iam attach-role-policy --role-name
role-name
--policy-arn arn:aws:iam::123456789012:policy/policy-name
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
来电者在 Snowball Edge 上所需的权限
除了 Snowball Edge VM Import/Export 要代入的角色外,您还必须确保用户拥有允许他们将角色传递到 VMIE 的权限。如果您使用默认根用户执行导入,根用户已拥有所需的所有权限,因此您可以跳过此步骤,转到第 3 步。
将以下两个 IAM 权限附加到正在进行导入的用户。
-
pass-role
-
get-role
为角色创建策略
以下是允许用户对 IAM 角色执行 get-role
和 pass-role
操作的示例策略。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action": "iam:GetRole",
"Resource":"*"
},
{
"Sid": "iamPassRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:PassedToService": "importexport.amazonaws.com"
}
}
}
]
}
使用策略文件创建策略:
aws iam create-policy --policy-name
policy-name
--policy-document file:///policy-json-file-path
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
以下是 create-policy 命令的输出示例。
{
"Policy":{
"PolicyName":"caller-policy",
"PolicyId":"ANPACEMGEZDGNBVGY3TQOJQGEZAAAABOOOTUOE3AAAAAAPPBEUM7Q7ARPUE53C6R",
"Arn":"arn:aws:iam::123456789012:policy/caller-policy",
"Path":"/",
"DefaultVersionId":"v1",
"AttachmentCount":0,
"IsAttachable":true,
"CreateDate":"2020-07-30T00:58:25.309000+00:00",
"UpdateDate":"2020-07-30T00:58:25.309000+00:00"
}
}
生成策略后,将该策略附加到将调用 Amazon EC2 API 或 CLI 操作导入快照的 IAM 用户。
aws iam attach-user-policy --user-name
your-user-name
--policy-arn arn:aws:iam::123456789012:policy/policy-name
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
在 Snowball Edge EC2 APIs 上致电亚马逊所需的权限
要导入快照,IAM 用户必须具有 ec2:ImportSnapshot
权限。如果不需要限制用户访问权限,则可以使用这些ec2:*
权限授予完全的 Amazon EC2 访问权限。以下是可在您的设备上授予或限制Amaz EC2 on的权限。创建包含所示内容的策略文件:
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"ec2:ImportSnapshot",
"ec2:DescribeImportSnapshotTasks",
"ec2:CancelImportTask",
"ec2:DescribeSnapshots",
"ec2:DeleteSnapshot",
"ec2:RegisterImage",
"ec2:DescribeImages",
"ec2:DeregisterImage"
],
"Resource":"*"
}
]
}
使用策略文件创建策略:
aws iam create-policy --policy-name
policy-name
--policy-document file:///policy-json-file-path
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
以下是 create-policy 命令的输出示例。
{
"Policy":
{
"PolicyName": "ec2-import.json",
"PolicyId": "ANPACEMGEZDGNBVGY3TQOJQGEZAAAABQBGPDQC5AAAAATYN62UNBFYTF5WVCSCZS",
"Arn": "arn:aws:iam::123456789012:policy/ec2-import.json",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 0,
"IsAttachable": true,
"CreateDate": "2022-04-21T16:25:53.504000+00:00",
"UpdateDate": "2022-04-21T16:25:53.504000+00:00"
}
}
生成策略后,将该策略附加到将调用 Amazon EC2 API 或 CLI 操作导入快照的 IAM 用户。
aws iam attach-user-policy --user-name
your-user-name
--policy-arn arn:aws:iam::123456789012:policy/policy-name
--endpoint http://snowball-ip
:6078 --region snow --profileprofile-name
第 3 步:将虚拟机映像作为快照导入 Snowball Edge
下一步是在设备上将虚拟机映像作为快照导入。S3Bucket
参数的值是包含虚拟机映像的存储桶的名称。S3Key
参数的值是该存储桶中虚拟机映像文件的路径。
aws ec2 import-snapshot --disk-container "Format=RAW,UserBucket={S3Bucket=bucket-name
,S3Key=image-file
}" --endpoint http://snowball-ip
:8008 --region snow --profile profile-name
有关更多信息,请参阅《 AWS CLI 命令参考》中的 import-snap
此命令不支持以下开关。
[--client-data
value
][--client-token
value
][--dry-run]
[--no-dry-run]
[--encrypted]
[--no-encrypted]
[--kms-key-id
value
][--tag-specifications
value
]
例 import-snapshot
命令的输出
{
"ImportTaskId":"s.import-snap-1234567890abc",
"SnapshotTaskDetail":{
"DiskImageSize":2.0,
"Encrypted":false,
"Format":"RAW",
"Progress":"3",
"Status":"active",
"StatusMessage":"pending",
"UserBucket":{
"S3Bucket":"bucket",
"S3Key":"vmimport/image01"
}
}
}
注意
Snowball Edge 目前只允许每台设备一次运行一个活跃的导入作业。要启动新的导入任务,要么等待当前任务完成,要么在集群中选择另一个可用节点。如果需要,您也可以选择取消当前的导入。为防止延迟,请勿在导入过程中重启 Snowball Edge 设备。如果您重启设备,则导入将失败,并且进度将在设备可以访问时删除。要查看快照导入任务的状态,请使用以下命令:
aws ec2 describe-import-snapshot-tasks --import-task-ids id
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
步骤 4:在 Snowball Edge 上将快照注册为 AMI
成功将快照导入设备后,您可以使用 register-image
命令对其进行注册。
注意
只有当 AMI 的所有快照都可用时,您才能注册 AMI。
有关更多信息,请参阅《 AWS CLI 命令参考》中的 register-image
例 register-image
命令的
aws ec2 register-image \
--name ami-01
\
--description my-ami-01
\
--block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\":{\"Encrypted\":false,\"DeleteOnTermination\":true,\"SnapshotId\":\"snapshot-id
\",\"VolumeSize\":30}}]" \
--root-device-name /dev/sda1 \
--endpoint http://snowball-ip
:8008 \
--region snow \
--profile profile-name
以下是块设备映射 JSON 的示例。有关更多信息,请参阅《 AWS CLI 命令参考》中的 register-image block-device-mapping 参数
[
{
"DeviceName": "/dev/sda",
"Ebs":
{
"Encrypted": false,
"DeleteOnTermination": true,
"SnapshotId": "snapshot-id
",
"VolumeSize": 30
}
}
]
例 register-image
命令的
{
"ImageId": "s.ami-8de47d2e397937318"
}
步骤 5:从 Snowball Edge 上的 AMI 启动实例
要启动实例,请参阅《 AWS CLI 命令参考》中的 run-
image-id
参数的值是作为 register-image
命令输出的 ImageId
名称的值。
aws ec2 run-instances --image-id image-id
--instance-type instance-type
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
{
"Instances":[
{
"SourceDestCheck":false,
"CpuOptions":{
"CoreCount":1,
"ThreadsPerCore":2
},
"InstanceId":"s.i-12345a73123456d1",
"EnaSupport":false,
"ImageId":"s.ami-1234567890abcdefg",
"State":{
"Code":0,
"Name":"pending"
},
"EbsOptimized":false,
"SecurityGroups":[
{
"GroupName":"default",
"GroupId":"s.sg-1234567890abc"
}
],
"RootDeviceName":"/dev/sda1",
"AmiLaunchIndex":0,
"InstanceType":"sbe-c.large"
}
],
"ReservationId":"s.r-1234567890abc"
}
注意
您也可以 AWS OpsHub 使用启动实例。有关更多信息,请参阅本指南中的启动 EC2与 Amazon 兼容的实例。
Snowball Edge 的其他 AMI 操作
您可以使用其他 AWS CLI 命令来监控快照导入状态、获取已导入快照的详细信息、取消导入快照以及在快照导入后删除或取消注册快照。
在 Snowball Edge 上监控快照导入状态
要查看导入进度的当前状态,您可以运行 Amazon EC2 describe-import-snapshot-tasks
命令。此命令支持在 task-state
上进行分页和筛选。
例 describe-import-snapshot-tasks
命令的
aws ec2 describe-import-snapshot-tasks --import-task-ids id
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
例 describe-import-snapshot-tasks
命令输出的
{
"ImportSnapshotTasks": [
{
"ImportTaskId": "s.import-snap-8f6bfd7fc9ead9aca",
"SnapshotTaskDetail": {
"Description": "Created by AWS-Snowball-VMImport service for s.import-snap-8f6bfd7fc9ead9aca",
"DiskImageSize": 8.0,
"Encrypted": false,
"Format": "RAW",
"Progress": "3",
"SnapshotId": "s.snap-848a22d7518ad442b",
"Status": "active",
"StatusMessage": "pending",
"UserBucket": {
"S3Bucket": "bucket1",
"S3Key": "image1"
}
}
}
]
}
注意
此命令仅显示过去 7 天内成功完成或标记为已删除的任务的输出。筛选仅支持 Name=task-state
,Values=active | deleting | deleted |
completed
此命令不支持以下参数。
[--dry-run]
[--no-dry-run]
取消 Snowball Edge 上的导入任务
要取消导入任务,请运行 cancel-import-task
命令。
例 cancel-import-task
命令的
aws ec2 cancel-import-task --import-task-id import-task-id
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
例 cancel-import-task
命令输出的
{
"ImportTaskId": "s.import-snap-8234ef2a01cc3b0c6",
"PreviousState": "active",
"State": "deleting"
}
注意
只能取消未处于已完成状态的任务。
此命令不支持以下参数。
[--dry-run]
[--no-dry-run]
描述 Snowball Edge 上的快照
导入快照后,您可以使用此命令对其进行描述。要筛选快照,您可以使用先前导入任务响应中的快照 ID 传入 snapshot-ids
。此命令支持在 volume-id
、status
和 start-time
上进行分页和筛选。
例 describe-snapshots
命令的
aws ec2 describe-snapshots --snapshot-ids snapshot-id
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
例 describe-snapshots
命令输出的
{
"Snapshots": [
{
"Description": "Created by AWS-Snowball-VMImport service for s.import-snap-8f6bfd7fc9ead9aca",
"Encrypted": false,
"OwnerId": "123456789012",
"SnapshotId": "s.snap-848a22d7518ad442b",
"StartTime": "2020-07-30T04:31:05.032000+00:00",
"State": "completed",
"VolumeSize": 8
}
]
}
此命令不支持以下参数。
[--restorable-by-user-ids
value
][--dry-run]
[--no-dry-run]
从 Snowball Edge 设备中删除快照
要删除您拥有但不再需要的快照,您可以使用 delete-snapshot
命令。
例 delete-snapshot
命令的
aws ec2 delete-snapshot --snapshot-id snapshot-id
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
注意
Snowball Edge 不支持删除处于待处理状态或被指定为 AMI 根设备的快照。
此命令不支持以下参数。
-
[--dry-run]
-
[--no-dry-run]
在 Snowball Edge 上注销 AMI
要取消不再需要 AMIs 的注册,可以运行deregister-image
命令。目前不支持取消注册处于待处理状态的 AMI。
例 deregister-image
命令的
aws ec2 deregister-image --image-id image-id
--endpoint http://snowball-ip
:8008 --region snow --profile profile-name
此命令不支持以下参数。
[--dry-run]
[--no-dry-run]