

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將虛擬機器映像匯入 Snowball Edge 裝置
<a name="ec2-ami-import-cli"></a>

您可以使用 AWS CLI 和 VM Import/Export 服務，將虛擬機器 (VM) 映像匯入 Snowball Edge 裝置，做為 Amazon Machine Image (AMI)。匯入 VM 映像之後，請將映像註冊為 AMI，並將其啟動為與 Amazon EC2-compatible執行個體。

您可以在建立任務以訂購 Snowball Edge 裝置時，從 Amazon EC2 將 AMIs 新增至裝置。收到 Snowball Edge 裝置後，請使用此程序。如需詳細資訊，請參閱[選擇您的運算和儲存選項](create-job-common.md#compute-storage)。

您也可以使用 AWS OpsHub 上傳 VM 映像檔案。如需詳細資訊，請參閱本指南中的[將映像匯入您的裝置做為與 Amazon EC2-compatible AMI](https://docs.aws.amazon.com/snowball/latest/developer-guide/manage-ec2.html#ec2-ami-import)。

**Topics**
+ [步驟 1：準備 VM 映像並將其上傳至 Snowball Edge 裝置](#prepare-image-cli)
+ [步驟 2：在 Snowball Edge 上設定必要的許可](#setup-permission-cli)
+ [步驟 3：匯入 VM 映像做為 Snowball Edge 上的快照](#import-snapshot-cli)
+ [步驟 4：將快照註冊為 Snowball Edge 上的 AMI](#register-snapshot-cli)
+ [步驟 5：從 Snowball Edge 上的 AMI 啟動執行個體](#launch-ami-cli)
+ [Snowball Edge 的其他 AMI 動作](#additional-ami-actions)

## 步驟 1：準備 VM 映像並將其上傳至 Snowball Edge 裝置
<a name="prepare-image-cli"></a>

 AWS 雲端 使用 VM Import/Export 從 中的 Amazon EC2 AMI 或執行個體匯出 VM 映像，或使用您選擇的虛擬化平台在本機產生 VM 映像，以準備 VM 映像。

若要使用 VM Import/Export 將 Amazon EC2 執行個體匯出為 VM 映像，請參閱《[VM Import/Export 使用者指南》中的使用 VM Import/Export 將執行個體匯出為](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html) VM。若要使用 VM Import/Export 將 Amazon EC2 AMI 匯出為 VM 映像，請參閱[《VM Import/Export 使用者指南》中的直接從 Amazon Machine Image (AMI)](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html) 匯出 VM。

如果從本機環境產生 VM 映像，請確保映像已設定為在 Snowball Edge 裝置上用作 AMI。視您的環境而定，您可能需要設定下列項目。
+ 設定和更新作業系統。
+ 設定主機名稱。
+ 確保已設定網路時間通訊協定 (NTP)。
+ 如有必要，請包含 SSH 公有金鑰。製作金鑰對的本機副本。如需詳細資訊，請參閱[使用 SSH 連線到 Snowball Edge 上的運算執行個體](https://docs.aws.amazon.com/snowball/latest/developer-guide/ssh-ec2-edge.html)。
+ 安裝和設定您將在 Snowball Edge 裝置上使用的任何軟體。

**注意**  
為 Snowball Edge 裝置準備磁碟快照時，請注意下列限制。  
Snowball Edge 目前僅支援匯入 RAW 映像格式的快照。
Snowball Edge 目前僅支援匯入大小從 1 GB 到 1 TB 的快照。

### 將 VM 映像上傳至 Snowball Edge 裝置上的 Amazon S3 儲存貯體
<a name="upload-images-to-your-device"></a>

準備 VM 映像後，將其上傳至 Snowball Edge 裝置或叢集上的 S3 儲存貯體。您可以使用 S3 Edge 上的 S3 轉接器或 Amazon S3 相容儲存來上傳快照。

**使用 S3 轉接器上傳虛擬機器映像**
+ 使用 `cp`命令將 VM 映像檔案複製到裝置上的儲存貯體。

  ```
  aws s3 cp image-path s3://S3-bucket-name --endpoint http://S3-object-API-endpoint:443 --profile profile-name
  ```

  如需詳細資訊，請參閱本指南中[支援的 AWS CLI 命令](https://docs.aws.amazon.com/snowball/latest/developer-guide/using-adapter-cli.html)。

**在 Snowball Edge 上使用 Amazon S3 相容儲存上傳 VM 映像**
+ 使用 `put-object`命令將快照檔案複製到裝置上的儲存貯體。

  ```
  aws s3api put-object --bucket bucket-name --key path-to-snapshot-file --body snapshot-file --endpoint-url s3api-endpoint-ip --profile your-profile       
  ```

  如需詳細資訊，請參閱[在 Snowball Edge 裝置上使用 S3 物件](https://docs.aws.amazon.com/snowball/latest/developer-guide/objects-s3-snow.html)。

## 步驟 2：在 Snowball Edge 上設定必要的許可
<a name="setup-permission-cli"></a>

若要讓匯入成功，您必須在 Snowball Edge 裝置、Amazon EC2 和 使用者上設定 VM Import/Export 的許可。

**注意**  
提供這些許可的服務角色和政策位於 Snowball Edge 裝置上。

### Snowball Edge 上的 VM Import/Export 所需的許可
<a name="vmie-permissions"></a>

在開始匯入程序之前，您必須建立具有信任政策的 IAM 角色，允許 Snowball Edge 裝置上的 VM Import/Export 擔任該角色。角色會獲得其他許可，以允許裝置上的 VM Import/Export 存取存放在裝置上的 S3 儲存貯體中的映像。

**建立信任政策 json 檔案**

以下是連接到角色所需的信任政策範例，以便 VM Import/Export 可以存取需要從 S3 儲存貯體匯入的快照。

------
#### [ JSON ]

****  

```
{
   "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  --profile profile-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 檔案。

------
#### [ 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 --profile profile-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 --profile profile-name
```

### Snowball Edge 上的呼叫者所需的許可
<a name="caller-permissions"></a>

除了要擔任的 Snowball Edge VM Import/Export 角色之外，您還必須確保使用者具有允許其將角色傳遞給 VMIE 的許可。如果您使用預設根使用者執行匯入，根使用者已經擁有所有必要的許可，因此您可以略過此步驟，然後前往步驟 3。

將下列兩個 IAM 許可連接到執行匯入的使用者。
+ `pass-role`
+ `get-role`

**建立角色的政策**

以下是允許使用者為 IAM 角色執行 `get-role`和 `pass-role`動作的範例政策。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",
   "Statement":[
        {
            "Effect":"Allow",
            "Action": "iam:GetRole",
            "Resource":"*"
        },
        {
            "Sid": "iamPassRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/snowball*",
            "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 --profile profile-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 --profile profile-name
```

### 在 Snowball Edge 上呼叫 Amazon EC2 APIs 所需的許可
<a name="ec2-permissions"></a>

若要匯入快照，IAM 使用者必須具有 `ec2:ImportSnapshot`許可。如果不需要限制對使用者的存取，您可以使用 `ec2:*`許可來授予完整的 Amazon EC2 存取。以下是可以為裝置上的 Amazon EC2 授予或限制的許可。使用顯示的內容建立政策檔案：

------
#### [ JSON ]

****  

```
{
   "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 --profile profile-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 --profile profile-name
```

## 步驟 3：匯入 VM 映像做為 Snowball Edge 上的快照
<a name="import-snapshot-cli"></a>

下一個步驟是匯入 VM 映像做為裝置上的快照。`S3Bucket` 參數的值是包含 VM 映像的儲存貯體名稱。`S3Key` 參數的值是此儲存貯體中 VM 映像檔案的路徑。

```
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-snapshot](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/import-snapshot.html)。

此命令不支援下列切換。
+ 【--client-data`value`】 
+ 【--client-token`value`】
+ 【--dry-run】
+ 【--no-dry-run】
+ 【--加密】
+ 【--無加密】
+ 【--kms-key-id `value`】
+ 【--tag-specifications`value`】

**Example `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
<a name="register-snapshot-cli"></a>

當快照匯入裝置成功時，您可以使用 `register-image`命令註冊它。

**注意**  
您只能在所有快照可用時註冊 AMI。

如需詳細資訊，請參閱《 AWS CLI 命令參考》中的 [register-image](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/register-image.html)。

**Example `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 參數](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/register-image.html)。

```
[
    {
        "DeviceName": "/dev/sda",
        "Ebs": 
            {
                "Encrypted": false,
                "DeleteOnTermination": true,
                "SnapshotId": "snapshot-id",
                "VolumeSize": 30
            }
    }
]
```

**Example `register-image` 命令的**  

```
{
    "ImageId": "s.ami-8de47d2e397937318"
 }
```

## 步驟 5：從 Snowball Edge 上的 AMI 啟動執行個體
<a name="launch-ami-cli"></a>

若要啟動執行個體，請參閱《 AWS CLI 命令參考》中的 [run-instances](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html)。

`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 來啟動執行個體。如需詳細資訊，請參閱本指南中的[啟動與 Amazon EC2-compatible執行個體](https://docs.aws.amazon.com/snowball/latest/developer-guide/manage-ec2.html#launch-instance)。

## Snowball Edge 的其他 AMI 動作
<a name="additional-ami-actions"></a>

您可以使用其他 AWS CLI 命令來監控快照匯入狀態、取得已匯入快照的詳細資訊、取消匯入快照，以及在匯入快照之後刪除或取消註冊快照。

### 在 Snowball Edge 上監控快照匯入狀態
<a name="decribe-import-task-cli"></a>

若要查看匯入進度的目前狀態，您可以執行 Amazon EC2 `describe-import-snapshot-tasks`命令。此命令支援 上的分頁和篩選`task-state`。

**Example `describe-import-snapshot-tasks` 命令的**  

```
aws ec2 describe-import-snapshot-tasks --import-task-ids id --endpoint http://snowball-ip:8008 --region snow --profile profile-name
```

**Example `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 上的匯入任務
<a name="cancel-import-task-cli"></a>

若要取消匯入任務，請執行 `cancel-import-task`命令。

**Example `cancel-import-task` 命令的**  

```
aws ec2 cancel-import-task --import-task-id import-task-id --endpoint http://snowball-ip:8008 --region snow --profile profile-name
```

**Example `cancel-import-task` 命令輸出的**  

```
{
        "ImportTaskId": "s.import-snap-8234ef2a01cc3b0c6",
        "PreviousState": "active",
        "State": "deleting"
}
```
只有未處於已完成狀態的任務才能取消。

此命令不支援下列參數。
+ 【--dry-run】
+ 【--no-dry-run】

### 描述 Snowball Edge 上的快照
<a name="describe-snapshots-cli"></a>

匯入快照後，您可以使用此命令來描述快照。若要篩選快照，您可以使用先前匯入任務回應`snapshot-ids`中的快照 ID 傳入 。此命令支援對 `volume-id`、 和 進行分頁`status`和篩選`start-time`。

**Example `describe-snapshots` 命令的**  

```
aws ec2 describe-snapshots --snapshot-ids snapshot-id --endpoint http://snowball-ip:8008 --region snow --profile profile-name
```

**Example `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 裝置刪除快照
<a name="delete-snapshot-cli"></a>

若要移除您擁有且不再需要的快照，您可以使用 `delete-snapshot`命令。

**Example `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
<a name="deregister-snapshot-cli"></a>

若要取消註冊不再需要AMIs，您可以執行 `deregister-image`命令。目前不支援取消註冊處於**待定**狀態的 AMI。

**Example `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】