将映像作为 Amazon EC2 AMI 导入您的设备 - AWS Snowball Edge 开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本指南适用于 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 云中导出映像。

注意

请注意在将图像上传到 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-rolepass-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-stateValues=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-idstatusstart-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]