本指南适用于 Snowball Edge。如果您正在查找 Snowball 的相关文档,请参阅 AWS Snowball 用户指南。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将映像作为 Amazon EC2 AMI 导入您的设备
使用 AWS CLI,您可以使用 AWS 功能 VM Import/Export 将映像作为 EC2 实例导入 AWS Snowball Edge 设备。导入映像后,将其注册为 Amazon 系统映像 (AMI),并将其启动为 Amazon EC2 实例。
主题
步骤 1: 准备映像
您可以使用 VM Import/Export 从 AWS 云中导出映像,也可以使用您选择的虚拟化平台在本地生成映像。您也可以从 AWS 云中导出映像。
-
要使用 VM Import/Export 从 AWS 导入映像,请参阅使用 VM Import/Export 将 VM 作为映像导入。
-
要使用 VM Import/Export 将映像从 AMI 导出到 AWS,请参阅直接从 Amazon 系统映像 (AMI) 导出 VM。
请注意在将图像上传到 Snowball Edge 设备时的以下限制。
-
Snow 系列设备 当前仅支持导入 RAW 图像格式的快照。
-
Snow 系列设备 当前仅支持导入大小从 1 GB 到 1 TB 的快照。
获得映像后,您必须将其上传到设备上的 Amazon S3,因为只能将映像作为快照从 Amazon S3 导入,而快照可在设备或集群上使用。在导入过程中,您可以在 Snowball Edge 设备上选择要在其中存储映像的 S3 存储桶。
步骤 2: 设置所需权限
要成功导入,您必须为 VM Import/Export、Amazon EC2 和 用户设置权限。
所需的权限VM Import/Export
创建角色
开始导入过程之前,您必须创建具有信任策略的 IAM 角色,该策略允许 Snowball VM Import/Export 担任该角色。向角色授予其他权限,以允许 VM Import/Export 访问设备上 S3 存储桶中存储的图像。
API 的默认角色名称为 vmimport
。 您可以在命令中使用 --role-name
字符串更改它。
例 示例命令
aws iam create-role --role-name vmimport --assume-role-policy-document file:///path/to/trust-policy.json --profile xx
以下是需要附加到角色以便 VM Import/Export 能够访问需要从 S3 存储桶导入的快照的示例信任策略。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"vmie.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
以下是 create-role
命令中的示例输出。
{ "Role": { "Path": "/", "RoleName": "vmimport", "RoleId": "XXXXXXXXXXXXXXXXXXXXXXXXXX", "Arn": "arn:aws:iam::123456789012:role/vmimport", "CreateDate": "2020-07-30T01:01:57.415000+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "MaxSessionDuration": 3600 } }
为角色创建策略并将策略附加到角色
现在,您可以将策略附加到上述角色并授予访问所需资源的权限。这允许 VM Import/Export 从 Amazon S3 下载快照。
例 示例命令
aws iam create-policy --policy-name vmimport-resource-policy --policy-document file:///path/to/vmie-resource-policy.json --profile xxx
以下示例策略具有访问 Amazon S3 所需的最低权限。如果需要,您可以更改 S3 存储桶名称。您还可以使用前缀进一步缩小 VM Import/Export 可以导入快照的位置。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:GetMetadata" ], "Resource":[ "arn:aws:s3:::import-snapshot-bucket-name", "arn:aws:s3:::import-snapshot-bucket-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" } }
将您在上一步中创建的策略附加到您在步骤 2 中创建的角色。
例 示例命令
aws iam attach-role-policy --role-name vmimport --policy-arn arn:aws:iam::123456789012:policy/vmimport-resource-policy --profile xxx
调用方所需的权限
除了要代入的 Snowball Edge VM Import/Export 角色之外,您还必须确保用户具有允许其将角色传递给 VMIE 的权限。如果您使用默认管理员用户执行导入,则此用户已具有 VM Import/Export 所需的所有权限,因此,您可以跳过此步骤,然后转到步骤 3。
将以下两个 IAM 权限附加到正在执行导入的用户账户。
-
pass-role
-
get-role
例 示例命令
aws iam create-policy --policy-name caller-policy --policy-document file:///path/to/caller-policy.json --profile xx
以下是允许用户对 IAM 角色执行 get-role
和 pass-role
操作的示例策略。
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iam:GetRole", "iam:PassRole" ], "Resource":"*" } ] }
例 输出示例
{ "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 yourUser --policy-arn arn:aws:iam::123456789012:policy/caller-policy --profile xx
在您的设备上调用 Amazon EC2 APIs 所需的权限
要导入快照,IAM 用户必须具有 ec2:ImportSnapshot
权限。如果不需要限制对用户的访问,您可以使用 ec2:*
权限授予完全 Amazon EC2 访问权限。以下是可在设备上为 Amazon EC2 授予或限制的权限。
{ "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":"*" } ] }
步骤 3: 在设备上将快照导入到Amazon S3
下一步是将您的快照导入设备上的 Amazon S3。
例 示例命令
aws ec2 import-snapshot --disk-container "Format=RAW,UserBucket={S3Bucket=bucket,S3Key=vmimport/image01}" --profile xx
有关更多信息,请参阅 import-snapshot。
此命令不支持以下切换。
-
[--client-data
value
] -
[--client-token
value
] -
[--dry-run]
-
[--no-dry-run]
-
[--加密]
-
[--无加密]
-
[--kms-key-id
value
] -
[--tag-specifications
value
]
例 输出示例
{ "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 设备。如果您重启设备,导入将失败,在设备可访问时,将删除进度。
步骤 4: 将快照注册为 AMI
在成功将快照导入设备后,您可以使用 register-image
命令注册它。
您只能在 AMI 的所有快照都可用时注册它。
有关更多信息,请参阅 register-image。
例 示例命令
aws ec2 register-image \ --name ami-01 \ --description my-ami-01 \ --block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\":{\"SnapshotId\": \"s.snap-0371c902634195955\", \"VolumeType\":\"sbg1\"}}, {\"DeviceName\": \"/dev/sda2\",\"Ebs\":{\"VolumeType\":\"sbp1\", \"VolumeSize\":1000}}]" \ --root-device-name /dev/sda1 \ --profile xxx
块储存设备映射 JSON(未转义)
[ { "DeviceName":"/dev/sda1", "Ebs":{ "SnapshotId":"s.snap-0371c902634195955", "VolumeType":"sbg1" } }, { "DeviceName":"/dev/sda2", "Ebs":{ "VolumeType":"sbp1", "VolumeSize":1000 } } ]
例 输出示例
{ "ImageId": "s.ami-8de47d2e397937318" }
步骤 5: 启动 AMI
要启动实例,请参阅 run-instances。
描述导入任务
要查看导入进度的当前状态,您可以运行 Amazon EC2 describe-import-snapshot-tasks
命令。此 API 支持对 task-state
进行分页和筛选。
例 示例命令
aws ec2 describe-import-snapshot-tasks --filter Name=task-state,Values=active --profile xx
例 输出示例
{ "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" } } } ] }
此 API 仅显示已成功完成的任务或在过去 7 天内标记为已删除的任务的输出。过滤仅支持 Name=task-state
、Values=active | deleting | deleted |
completed
此命令不支持以下切换。
-
[--dry-run]
-
[--no-dry-run]
取消导入任务
要取消导入任务,请运行 cancel-import-task
命令。
例 示例命令
aws ec2 cancel-import-task --import-task-id s.import-snap-8234ef2a01cc3b0c6 --profile xx
例 输出示例
{ "ImportTaskId": "s.import-snap-8234ef2a01cc3b0c6", "PreviousState": "active", "State": "deleting" }
只能取消未处于已完成状态的任务。
此命令不支持以下切换。
-
[--dry-run]
-
[--no-dry-run]
描述快照
导入快照后,您可以使用此命令对其进行描述。要筛选快照,您可以使用来自上一个导入任务响应的快照 ID 传入 --snapshot-ids
。此 API 支持对 volume-id
、status
和 start-time
进行分页和筛选。
例 示例命令
aws ec2 describe-snapshots --snapshot-ids s.snap-848a22d7518ad442b --profile xx
例 输出示例
{ "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]
从您的设备中删除快照
要删除您拥有并且不再需要的快照,您可以使用 delete-snapshot
命令。
例 示例命令
aws ec2 delete-snapshot --snapshot-id s.snap-848a22d7518ad442b --profile XXX--endpoint http://192.168.1.61:8008 --region snow
Snowball Edge 不支持删除处于 PENDING (待处理) 状态或指定为 AMI 根设备的快照。
此命令不支持以下切换。
-
[--dry-run]
-
[--no-dry-run]
取消注册 AMI
要取消注册不再需要的 AMIs,您可以运行 deregister-image
命令。当前不支持取消注册处于 Pending (待处理) 状态的 AMI。
例 示例命令
aws ec2 deregister-image --image-id ami-01 --profile xxx
此命令不支持以下切换。
-
[--dry-run]
-
[--no-dry-run]