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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将映像作为 Amazon EC2 AMI 导入到您的设备

使用Amazon CLI,您可以使用Amazon功能虚拟机导入/导出以将图像导入到Amazon Snowball边缘设备作为 EC2 实例。在导入映像后,您需要将其注册为 Amazon 系统映像 (AMI),然后将它作为 Amazon EC2 实例启动。

第 1 步:准备图片

您可以从Amazon Web Services 云使用虚拟机导入/导出,或者使用您选择的虚拟化平台在本地生成映像。您也可以从Amazon Web Services 云.

注意

将图像上传到 Snowball Edge 设备时,请注意以下限制。

  • Snow Family 设备目前仅支持导入 RAW 图像格式的快照。

  • Snow Family 设备目前仅支持导入大小从 1 GB 到 1 TB 的快照。

当您拥有映像时,必须将其上传到设备上的 Amazon S3,因为您只能将图像作为 Amazon S3 中的快照导入设备或群集上可用。在导入过程中,您可以选择 Snowball Edge 设备上的 S3 存储桶来存储图像。

第 2 步:设置所需权限

要成功导入,您必须为虚拟机导入/导出、Amazon EC2 和用户设置权限。

注意

提供这些权限的服务角色和策略位于 Snow Family 设备上。

VM Import/Export 所需的权限

创建角色

在开始导入过程之前,您必须创建具有允许 Snowball VM Imimport /导出代入该角色的信任策略。向角色授予了其他权限,以允许虚拟机导入/导出访问存储在设备上 S3 存储桶中的映像。

API 的默认角色名称为vmimport. 您可以使用--role-name命令中的字符串。

例 示例命令

aws iam create-role --role-name vmimport --assume-role-policy-document file:///path/to/trust-policy.json --profile xx --endpoint http://10.1.2.3:6078 --region snow

以下是需要附加到角色的信任策略示例,以便虚拟机导入/导出可以访问需要从 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 } }

为该角色创建策略并将策略附加到该角色

现在,您将策略附加到前面的角色,并授予访问所需资源的权限。这允许本地虚拟机导入/导出服务从设备上的 Amazon S3 下载快照。

例 示例命令

aws iam create-policy --policy-name vmimport-resource-policy --policy-document file:///path/to/vmie-resource-policy.json --profile xxx --endpoint http://10.1.2.3:6078 --region snow

以下示例策略具有访问 Amazon S3 所需的最低权限。如果需要,可以更改 S3 存储桶名称。您还可以使用前缀来进一步缩小 VM 导入/导出可以从中导入快照的位置。

{ "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 --endpoint http://10.1.2.3:6078 --region snow

呼叫者所需的权限

除了 Snowball Edge VM 导入/导出要担任的角色之外,您还必须确保用户拥有允许他们将角色传递给 VMIE 的权限。如果使用默认 root 用户执行导入,则 root 用户已拥有所需的所有权限,因此您可以跳过此步骤,然后转至步骤 3。

将以下两个 IAM 权限附加到正在进行导入的用户账户。

  • pass-role

  • get-role

例 示例命令

aws iam create-policy --policy-name caller-policy --policy-document file:///path/to/caller-policy.json --profile xx --endpoint http://10.1.2.3:6078 --region snow

以下是允许用户执行get-rolepass-roleIAM 角色的操作。

{ "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" } } } ] }

例 输出示例

{ "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 --endpoint http://10.1.2.3:6078 --region snow

在您的设备上调用 Amazon EC2 API 所需的权限

要导入快照,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 --endpoint http://10.1.2.3:8008 --region snow

有关更多信息,请参阅 。导入快照.

此命令不支持以下开关。

  • [— 客户端数据value]

  • [— 客户端令牌value]

  • [— 干运行]

  • [— 不干跑]

  • [— 加密]

  • [— 没有加密]

  • [—kms-key-idvalue]

  • [—tag-规格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 设备。如果重新启动设备,导入将失败,当设备可访问时,进度将被删除。要查看快照导入任务状态的状态,请使用以下命令:

aws ec2 describe-snapshots --endpoint http://10.1.2.3:8008 --profile xx

第 4 步:将快照注册为 AMI

当快照成功导入到设备时,您可以使用register-image命令。

注意

只有当 AMI 的所有快照都可用时,才能注册该 AMI。

有关更多信息,请参阅 。注册-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 \ --endpoint http://10.1.2.3:8008

块设备映射 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.

aws ec2 run-instances --image-id s.ami-xxxxxxxxxxx --instance-type sbe-c.large --profile xx --endpoint http://10.1.2.3:8008

输出示例

{ "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" }

描述导入任务

要查看导入进度的当前状态,您可以运行 Amazon EC2describe-import-snapshot-tasks命令。此 API 支持分页和筛选task-state.

例 示例命令

aws ec2 describe-import-snapshot-tasks --filter Name=task-state,Values=active --profile xx --endpoint http://10.1.2.3:8008

例 输出示例

{ "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

此命令不支持以下开关。

  • [— 干运行]

  • [— 不干跑]

取消导入任务

要取消导入任务,请运行cancel-import-task命令。

例 示例命令

aws ec2 cancel-import-task --import-task-id s.import-snap-8234ef2a01cc3b0c6 --profile xx --endpoint http://10.1.2.3:8008

例 输出示例

{ "ImportTaskId": "s.import-snap-8234ef2a01cc3b0c6", "PreviousState": "active", "State": "deleting" }
注意

只有未处于已完成状态的任务才能被取消。

此命令不支持以下开关。

  • [— 干运行]

  • [— 不干跑]

描述快照

导入快照后,您可以使用此命令对其进行描述。要过滤快照,你可以传入--snapshot-ids使用之前的导入任务响应中的快照 ID。此 API 支持分页和筛选volume-idstatus, 和start-time.

例 示例命令

aws ec2 describe-snapshots --snapshot-ids s.snap-848a22d7518ad442b --profile xx --endpoint http://10.1.2.3:8008

例 输出示例

{ "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 } ] }

此命令不支持以下开关。

  • [— 可按用户 ID 恢复value]

  • [— 干运行]

  • [— 不干跑]

从设备删除快照

要删除自己拥有但不再需要的快照,可以使用delete-snapshot命令。

例 示例命令

aws ec2 delete-snapshot --snapshot-id s.snap-848a22d7518ad442b --profile XXX --endpoint http://012.345.6.78:8008 --region snow
注意

Snowball Edge 不支持删除待定状态或者它被指定为 AMI 的根设备。

此命令不支持以下开关。

  • [— 干运行]

  • [— 不干跑]

注销 AMI 注销

要取消注册不再需要的 AMI,您可以运行deregister-image命令。取消注册中的 AMIPending当前不支持状态。

例 示例命令

aws ec2 deregister-image --image-id ami-01 --profile xxx --endpoint http://10.1.2.3:8008

此命令不支持以下开关。

  • [— 干运行]

  • [— 不干跑]