

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

# 在 Snowball EC2 Edge 上使用与亚马逊兼容的计算实例
<a name="using-ec2"></a>

您可以运行托管在 EC2 Snowball Edge 上且具有`sbe-c`、`sbe-g`和实例类型的与亚马逊兼容`sbe1`的计算实例。`sbe1` 实例类型适用于具有 Snowball Edge Storage Optimized 选项的设备。`sbe-c` 实例类型适用于具有 Snowball Edge Compute Optimized 选项的设备。有关受支持实例类型的列表，请参阅 [Snowball Edge 设备上计算实例的配额](ec2-edge-limits.md)。

支持在 Snowball Edge 设备选项上使用的所有三种计算实例类型对于 Snowball Edge 设备都是唯一的。与基于云的实例一样，这些实例需要 Amazon 系统映像 (AMIs) 才能启动。在创建 Snowball Edge 作业之前，需要选择一个 AMI，它将成为云中实例的基本映像。

要在 Snowball Edge 上使用计算实例，请创建一个任务来订购 Snowball Edge 设备并指定您的。 AMIs您可以使用[AWS Snow 系列管理控制台](https://console.aws.amazon.com/snowfamily/home) AWS CLI、或其中一个来执行此操作 AWS SDKs。通常情况下，您必须先执行一些事务管理先决条件才能创建作业，然后使用您的实例。

设备到达后，您可以开始管理您的 AMIs 和实例。您可以通过与亚马逊 EC2兼容的终端节点在 Snowball Edge 上管理您的计算实例。这种类型的终端节点支持许多 EC2与 Amazon 兼容的 CLI 命令和操作。 AWS SDKs您无法使用 Snowball Edge AWS 管理控制台 上的来管理您的实例 AMIs 和计算实例。

设备使用完毕后，将其返回到 AWS。如果已在导入作业中使用此设备，则使用 Amazon S3 Adapter 或 NFS 接口传输的数据将导入到 Amazon S3 中。否则，当设备返回到设备时，我们会对其进行彻底擦除。 AWS此擦除过程遵循美国国家标准与技术研究院（NIST）800-88 标准。

**重要**  
不支持 AMIs 在 Snowball Edge Edge 设备上使用加密功能。
在 Snowball Edge 上运行的计算实例中的数据不会导入。 AWS

**Topics**
+ [Snowball EC2 Edge 上亚马逊 EC2 和兼容亚马逊的实例之间的区别](#ec2-compatible-sbe)
+ [Snowball Edge 上的计算实例定价](#pricing-for-ec2-edge)
+ [在 Snowball EC2 Edge 上使用与亚马逊兼容的 AMI](using-ami.md)
+ [将虚拟机映像导入 Snowball Edge 设备](ec2-ami-import-cli.md)
+ [在 Snowball Edge 设备上使用 AWS CLI 和 API 操作](using-ec2-cli-specify-region.md)
+ [Snowball Edge 上计算实例的网络配置](network-config-ec2.md)
+ [使用 SSH 连接到 Snowball Edge 上的计算实例](ssh-ec2-edge.md)
+ [将数据从 EC2兼容的计算实例传输到同一 Snowball Edge 上的 S3 存储桶](data-transfer-ec2-s3-edge.md)
+ [自动启动 EC2兼容的实例](using-ec2-edge-client.md)
+ [在 Snowball EC2 Edge 上使用与亚马逊兼容的终端节点](using-ec2-endpoint.md)
+ [在 Snowball EC2 Edge 上使用启动模板自动启动兼容实例](ec2-autostart.md)
+ [在 Snowball Edge 上使用适用于与亚马逊 EC2兼容的实例的 Snow 实例元数据服务](imds.md)
+ [在 Snowball Edge 上将块存储与亚马逊 EC2兼容的实例一起使用](edge-ebs.md)
+ [在 Snowball Edge 上使用安全组控制网络流量](edge-security-groups.md)
+ [EC2Snowball Edge 上支持兼容的实例元数据和用户数据](edge-compute-instance-metadata.md)
+ [停止在 EC2 Snowball Edge 上运行的兼容实例](#managing-ec2-instances)

## Snowball EC2 Edge 上亚马逊 EC2 和兼容亚马逊的实例之间的区别
<a name="ec2-compatible-sbe"></a>

AWS 与 Snowball EC2 Edge 兼容的实例允许客户使用其子集 EC2 APIs 和子集来使用和管理与亚马逊 EC2兼容的实例。 AMIs

## Snowball Edge 上的计算实例定价
<a name="pricing-for-ec2-edge"></a>

使用计算实例会有额外关联的费用。有关更多信息，请参阅[AWS Snowball Edge 定价](https://aws.amazon.com/snowball-edge/pricing)。

# 在 Snowball EC2 Edge 上使用与亚马逊兼容的 AMI
<a name="using-ami"></a>

要在 S AWS nowball Edge 设备上使用亚马逊系统映像 (AMI)，必须先将其添加到设备中。您可以通过以下方式添加 AMI：
+ 预定设备时上传 AMI。
+ 在设备到达您的站点时添加 AMI。

您的 Snowball Edge 附带的亚马逊 EC2 计算实例是基于您添加到 EC2 AMIs 设备中的亚马逊启动的。 EC2兼容亚马逊的同时 AMIs 支持 Linux 和微软 Windows 操作系统。

**Linux**  
支持以下 Linux 操作系统：
+ [适用于 Snowball Edge 的亚马逊 Linux 2](https://aws.amazon.com/marketplace/pp/B08Q76DLTM/             )
**注意**  
此 AMI 的最新版本将在您的 Snowball Edge 准备发货时提供。 AWS要在收到设备时确定设备上的这个 AMI 的版本，请参阅 [确定适用于 Snowball Edge 的亚马逊 Linux 2 AMI 版本](#snow-al-version)。
+ [CentOS 7（x86\$164）- with Updates HVM](https://aws.amazon.com/marketplace/pp/B00O7WM7QW)
+ Ubuntu 16.04 LTS - Xenial（HVM）
**注意**  
不再支持 Ubuntu 16.04 LTS-Xenial (HVM) 镜像 AWS Marketplace，但仍支持通过亚马逊虚拟机在 Snowball Edge 设备上使用并在本地运行。 EC2 Import/Export AMIs
+ [Ubuntu 20.04 LTS - Focal](https://aws.amazon.com/marketplace/pp/prodview-iftkyuwv2sjxi)
+ [Ubuntu 22.04 LTS - Jammy](https://aws.amazon.com/marketplace/pp/prodview-f2if34z3a4e3i)

作为安全方面的最佳实践，在新的亚马逊 Linux 2 发布时，请将亚马逊 Linux 2 保留在 Snowball Edge AMIs up-to-date 上。 AMIs 请参阅[在 Snowball Edge AMIs 上更新你的亚马逊 Linux 2](update-ami.md)。

**Windows**  
支持以下 Windows 操作系统：
+ Windows Server 2012 R2
+ Windows Server 2016
+ Windows Server 2019

你可以 AWS 使用 VM 导入/导出，将 Windows 虚拟机 (VM) 映像导入到你的设备中。 AMIs 或者，您可以在设备部署到您的站点后立即将映像导入您的设备。有关更多信息，请参阅 [将微软 Windows AMI 添加到 Snowball Edge](#windows-ami)。

**注意**  
 AWS 无法 AMIs 将源自的 Windows 添加到您的设备中。  
AMIs 由于不支持 UEFI，因此本地导入必须处于 BIOS 启动模式。

 Snowball Edge 支持自带许可证 (BYOL) 模式。有关更多信息，请参阅 [将微软 Windows AMI 添加到 Snowball Edge](#windows-ami)。

**注意**  
AWS 与 Snowball EC2 Edge 兼容的实例允许客户使用其子集 EC2 APIs 和子集来使用和管理与亚马逊 EC2兼容的实例。 AMIs

**Topics**
+ [在创建订购 Snowball Edge 的任务时添加 AMI](#add-ami-order)
+ [将 AMI 从添加 AWS Marketplace 到 Snowball Edge](#add-marketplace-ami)
+ [在收到设备后将 AMI 添加到 Snowball Edge](#add-ami-locally)
+ [将微软 Windows AMI 添加到 Snowball Edge](#windows-ami)
+ [将虚拟机映像导入 Snowball Edge](#import-vm-image)
+ [为 Snowball Edge 导出最新的亚马逊 Linux 2 AMI](#export-latest-al2-ami)

## 在创建订购 Snowball Edge 的任务时添加 AMI
<a name="add-ami-order"></a>

订购设备时，您可以通过在 “**使用 EC2 实例计算-可选**” 部分中选择设备来添加 AMIs 设备 AWS Snow 系列管理控制台。“**使用 EC2 实例计算-可选**” 列出了所有 AMIs 可以加载到您的设备上的实例。它们 AMIs 分为以下几类：
+ **AMIs 来自 AWS Marketplace** — 这些是根据支持的列表 AMIs 创建的 AMIs。有关 AMIs 从 AWS Marketplace 支持的 AMI 创建 AMI 的信息，请参阅[将 AMI 从添加 AWS Marketplace 到 Snowball Edge](#add-marketplace-ami)。
+ **AMIs 使用 VM Import/Export 上传** — 订购设备时，使用虚拟机上传的设备将在控制台中 Import/Export 列出。 AMIs 有关更多信息，请参阅《虚拟机* Import/Export 用户*指南》中的 “[使用虚拟机导入/导出将虚拟机作为映像导](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html)入”。有关支持的虚拟化环境的信息，请参阅 [VM Import/Export 要求](https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html)。

## 将 AMI 从添加 AWS Marketplace 到 Snowball Edge
<a name="add-marketplace-ami"></a>

您可以 AMIs 从 AWS Marketplace Snowball Edge 设备中添加多个实例，方法是启动该 AWS Marketplace 实例，从该实例创建 AMI，然后在订购 Snowball Edge 设备的同一区域配置 AMI。然后，在创建作业来订购设备时，您可以选择在设备上包括 AMI。从 Marketplace 选择 AMI 时，请确保其具有支持的产品代码和平台。

**Topics**
+ [正在查看 Snowball Edg AWS Marketplace AMIs e 的产品代码和平台详情](#check-marketplace-ami-codes-snb)
+ [确定适用于 Snowball Edge 的亚马逊 Linux 2 AMI 版本](#snow-al-version)
+ [为 Snowball Edge 设备配置 AMI](#configure-ami-snow-device)

### 正在查看 Snowball Edg AWS Marketplace AMIs e 的产品代码和平台详情
<a name="check-marketplace-ami-codes-snb"></a>

在开始向 Snowball Edge 设备添加 AMI 的过程之前，请确保您的设备支持该 AMI 的产品代码和平台详细信息。 AWS Marketplace AWS 区域

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航栏中，选择要在其中启动实例的区域，以及您将从该区域创建订购 Snowball Edge 设备的任务。您可以选择向您提供的任何区域，无需理会您身处的位置。

1. 在导航窗格中，请选择 **AMIs**。

1. 使用筛选和搜索选项来缩小显示列表的范围 AMIs ，以便仅查看 AMIs 符合您条件的内容。例如，由 AMIs 提供 AWS Marketplace，选择 “**公共镜像**”。然后使用搜索选项进一步缩小显示列表的范围 AMIs：
   + （新控制台）选择**搜索**栏，然后从菜单中选择**所有者别名**，然后选择 = 运算符，最后选择值 **amazon**。
   + （旧控制台）选择 **Search**（搜索）栏，然后从菜单中选择 **Owner**（拥有者），然后选择值 **Amazon images**（Amazon 映像）。
**注意**  
AMIs 从 “**来源**” AWS Marketplace 列中包含 **aws-marketplace**。

1. 在 **AMI ID** 列中，选择 AMI 的 AMI ID。

1. 在 AMI 的**映像摘要**中，确保您的区域支持**产品代码**。有关更多信息，请参阅下表。  
**支持的 AWS Marketplace AMI 产品代码**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/snowball/latest/developer-guide/using-ami.html)

1. 然后，还要确保**平台详细信息**包含以下列表中的一个条目。
   + Amazon Linux、Ubuntu 或 Debian
   + 红帽 Linux bring-your-own-license
   + 适用于 Oracle 的 Amazon RDS bring-your-own-license
   + 窗户 bring-your-own-license

### 确定适用于 Snowball Edge 的亚马逊 Linux 2 AMI 版本
<a name="snow-al-version"></a>

使用以下过程确定适用于 Snowball Edge 上的 Snowball Edge 的 Amazon Linux 2 AMI 的版本。请先安装最新版本的， AWS CLI 然后再继续。有关更多信息，请参阅《 AWS Command Line Interface 用户指南[》 AWS CLI中的安装或更新到最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)的。
+ 使用`describe-images` AWS CLI 命令查看 AMI 的描述。描述中包含了版本。提供上一步中的公钥证书。有关更多信息，请参阅《命令参考》中的 [describe-images](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-images.html)。 AWS CLI 

  ```
  aws ec2 describe-images --endpoint http://snow-device-ip:8008 --region snow                    
  ```  
**Example `describe-images` 命令的输出**  

  ```
  {
      "Images": [
          {
              "CreationDate": "2024-02-12T23:24:45.705Z",
              "ImageId": "s.ami-02ba84cb87224e16e",
              "Public": false,
              "ProductCodes": [
                  {
                      "ProductCodeId": "avyfzznywektkgl5qv5f57ska",
                      "ProductCodeType": "marketplace"
                  }
              ],
              "State": "AVAILABLE",
              "BlockDeviceMappings": [
                  {
                      "DeviceName": "/dev/xvda",
                      "Ebs": {
                          "DeleteOnTermination": true,
                          "Iops": 0,
                          "SnapshotId": "s.snap-0efb49f2f726fde63",
                          "VolumeSize": 8,
                          "VolumeType": "sbp1"
                      }
                  }
              ],
              "Description": "Snow Family Amazon Linux 2 AMI 2.0.20240131.0 x86_64 HVM gp2",
              "EnaSupport": false,
              "Name": "amzn2-ami-snow-family-hvm-2.0.20240131.0-x86_64-gp2-b7e7f8d2-1b9e-4774-a374-120e0cd85d5a",
              "RootDeviceName": "/dev/xvda"
          }
      ]
  }
  ```

  在此示例中，适用于 Snowball Edge 的 Amazon Linux 2 AMI 的版本为。`2.0.20240131.0`可以在名称为 `Description` 的值中找到版本。

### 为 Snowball Edge 设备配置 AMI
<a name="configure-ami-snow-device"></a>

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在中启动受支持 AMI 的新实例 AWS Marketplace。
**注意**  
在启动实例时，请确保您为该实例分配的存储大小适合您的使用案例。在 Amazon EC2 控制台中，您可以在 “**添加存储**” 步骤中执行此操作。

1. 安装和配置要在 Snowball Edge 上运行的应用程序，并确保其按预期工作。
**重要**  
仅支持 AMIs 单卷。
您的 AMI 中的 EBS 卷应不超过 10 TB。我们建议您在 AMI 中预置数据所需的 EBS 卷大小。这将有助于缩短导出 AMI 并将其加载到设备所需的时间。设备部署后，您可以调整实例的大小或向其添加更多卷。
您的 AMI 中的 EBS 快照不得加密。

1. 在创建此实例时，制作您用于 SSH 密钥对的 PEM 或 PPK 文件副本。将该文件保存到您计划用于与 Snowball Edge 设备进行通信的服务器。记下该文件的路径，因为当你使用 SSH 连接到设备上的 EC2兼容实例时，你将需要该路径。
**重要**  
如果您未遵循此过程，当您收到 Snowball Edge 设备时，将无法使用 SSH 连接到您的实例。

1. 将该实例保存为 AMI。有关更多信息，请参阅[亚马逊 EC2 用户指南中的亚马逊 Linux 实例 EC2 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html)*用户指南。*

1. 对于要使用 SSH 连接到的每个实例重复第 1-4 步。请务必制作每个 SSH 密钥对的副本，并跟踪与之关联的。 AMIs

1. 现在，当您订购设备时 AMIs ，可以将其添加到您的设备中。

## 在收到设备后将 AMI 添加到 Snowball Edge
<a name="add-ami-locally"></a>

当设备到达您的网站时，您可以 AMIs 向其添加新设备。有关说明，请参阅[将虚拟机映像导入 Snowball Edge 设备](ec2-ami-import-cli.md)。请记住，尽管支持 VMs 所有功能，但仅 AMIs 对支持的全部功能进行了测试。

**注意**  
当你使用虚拟机 Import/Export 向设备添加 AMIs 虚拟机或在设备部署后导入虚拟机时，你可以添加 VMs 使用任何操作系统的虚拟机。但是，只有支持的操作系统在 Snowball Edge 上进行了测试和验证。您有责任遵守您导入设备上的虚拟映像中的任何操作系统或软件的条款和条件。  
要使 AWS 服务在 Snowball Edge 上正常运行，必须允许服务端口。有关更多信息，请参阅 [Snowball Edge 上 AWS 服务的端口要求](port-requirements.md)。

## 将微软 Windows AMI 添加到 Snowball Edge
<a name="windows-ami"></a>

对于使用支持的 Windows 操作系统的虚拟机 (VMs)，您可以通过 AWS 使用虚拟机导入/导出将 Windows 虚拟机映像导入，或者在部署到您的站点后直接将其导入设备来添加 AMI。

**自带许可（BYOL）**  
Snowball Edge 支持使用你自己的许可证将微软 Windows 导 AMIs 入你的设备上。自带许可 (BYOL) 是将您拥有的 AMI 及其本地许可证带到 AWS的过程。 AWS 为 BYOL 选项提供了共享和专用部署选项。

 您可以将 Windows VM 映像添加到您的设备中 AWS ，方法是将其导入 using VM 中， Import/Export 或者在部署到您的站点后直接将其导入到您的设备中。你无法添加起源于 AMIs 的 Windows AWS。因此，如果您想在 Snowball Edge 设备上使用 AMI，则必须创建和导入自己的 Windows 虚拟机映像并自带许可证。有关 Windows 许可和 BYOL 的更多信息，请参阅 [Amazon Web Services 和 Microsoft：常见问题](https://aws.amazon.com/windows/faq/)。

### 创建要导入 Snowball Edge 的 Windows 虚拟机映像
<a name="create-windows-image"></a>

要创建 Windows 虚拟机映像，你需要一个支持 Windows 和 macOS 操作系统的虚拟化环境，例如。 VirtualBox在为 Snow 设备创建虚拟机时，我们建议您至少分配两个 RAM 不低于 4 GB 的核心。虚拟机启动并运行后，您必须安装操作系统（Windows Server 2012、2016 或 2019）。要安装 Snowball Edge 设备所需的驱动程序，请按照本节中的说明进行操作。

要让 Windows AMI 在 Snow 设备上运行，你必须添加 virtiO、FLR、NetVCM、Vioinput、Viorng、Viosci、Viosci、Viosci、Viossial 和驱动程序。 VioStor 你可以从 virtio-win-pkg-scripts存储库中[下载用于在 Windows 映像上安装这些驱动程序的 Microsoft 软件安装程序（virtio-win-guest-tools-installer）](https://github.com/virtio-win/virtio-win-pkg-scripts)。 GitHub

**注意**  
如果您计划将虚拟机映像直接导入已部署的 Snow 设备，则虚拟机映像文件必须为 RAW 格式。

**创建 Windows 映像**

1. 在您的 Microsoft Windows 计算机上，选择**开始**，然后输入 **devmgmt.msc**，打开**设备管理器**。

1. 在主菜单中，选择**操作**，然后选择**添加过时硬件**。
**注意**  
对于 Windows 11，首先在下面的面板中选择任意设备，然后在 “**操作**” 菜单中显示 “**添加旧版硬件**” 选项。

1. 在向导中，选择**下一步**。

1. 选择**安装我手动从列表选择的硬件（高级）**，然后选择**下一步**。

1. 选择**显示所有设备**，然后选择**下一步**。

1. 选择**从磁盘安装**，打开**制造商文件复制来源**列表，然后浏览 ISO 文件。

1. 在 ISO 文件中，浏览到 `Driver\W2K8R2\amd64` 目录，然后找到 `.INF` 文件。

1. 选择**添加文件**，选择**打开**，然后选择**确定**。

1. 看到驱动程序名称后，选择**下一步**，然后连续两次选择**下一步**。然后选择**完成**。

   此操作将使用新驱动程序安装设备。实际硬件不存在，因此您将看到一个黄色的感叹号，表示设备存在问题。您必须修复此问题。

**修复硬件问题**

1. 打开带有感叹号的设备的上下文（右键单击）菜单。

1. 选择**卸载**，清除**删除此设备的驱动程序软件**，然后选择**确定**。

   驱动程序已安装，您现在可以在设备上启动 AMI。

## 将虚拟机映像导入 Snowball Edge
<a name="import-vm-image"></a>

虚拟机映像准备就绪后，您可以使用其中一个选项将映像导入您的设备。
+ **在云中使用 VM Import/Ex** port — 当您将虚拟机映像导入 AWS 并注册为 AMI 时，可以在下订单时将其添加到您的设备中。 AWS Snow 系列管理控制台有关更多信息，请参阅《虚拟机* Import/Export 用户*指南》中的 “[使用虚拟机导入/导出将虚拟机作为映像导](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html)入”。
+ **在本地部署在您站点的设备上** — 您可以使用 AWS OpsHub 或 AWS Command Line Interface (AWS CLI) 将虚拟机映像直接导入到设备中。

  有关使用的信息 AWS OpsHub，请参阅在[本地使用 EC2与 Amazon 兼容的计算实例](https://docs.aws.amazon.com/snowball/latest/developer-guide/manage-ec2.html)。

  有关使用的信息 AWS CLI，请参阅[将虚拟机映像导入 Snowball Edge 设备](ec2-ami-import-cli.md)。

## 为 Snowball Edge 导出最新的亚马逊 Linux 2 AMI
<a name="export-latest-al2-ami"></a>

要将您的 Amazon Linux 2 更新 AMIs 到最新版本，请先从中导出最新的 Amazon Linux 2 虚拟机映像 AWS Marketplace，然后将该虚拟机映像导入 Snow 设备。

1. 使用`ssm get-parameters` AWS CLI 命令在中查找 Amazon Linux 2 AMI 的最新映像 ID AWS Marketplace。

   ```
     aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query 'Parameters[0].[Value]' --region your-region                
   ```

   该命令会返回 AMI 的最新映像 ID。例如 `ami-0ccb473bada910e74`。

1. 导出最新的 Amazon Linux 2 映像。请参阅亚马逊 EC2 用户指南中的[直接从亚马逊系统映像 (AMI) 导出虚拟机](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html)。使用 Amazon Linux 2 AMI 的最新映像 ID 作为 `ec2 export-image` 命令的 `image-id` 参数的值。

1. 使用 AWS CLI 或将 VM 映像导入 Snow 设备 AWS OpsHub。
   + 有关使用的信息 AWS CLI，请参见[将虚拟机映像导入 Snowball Edge 设备](ec2-ami-import-cli.md)。
   + 有关使用的信息 AWS OpsHub，请参见[将图像作为与亚马逊 EC2兼容的 AMI 导入 AWS OpsHub](ec2-ami-import.md)。

# 将虚拟机映像导入 Snowball Edge 设备
<a name="ec2-ami-import-cli"></a>

您可以使用 AWS CLI 和虚拟机 Import/Export 服务将虚拟机 (VM) 映像作为亚马逊系统映像 (AMI) 导入到 Snowball Edge 设备。导入虚拟机映像后，将该映像注册为 AMI，然后将其作为 EC2与 Amazon 兼容的实例启动。

在创建订购 Snowball Edge 设备的任务时，您可以 AMIs 从亚马逊 EC2 向设备添加订购 Snowball Edge 设备。收到 Snowball Edge 设备后，请使用此步骤。有关更多信息，请参阅 [选择计算和存储选项](create-job-common.md#compute-storage)。

您也可以使用 AWS OpsHub 上传虚拟机映像文件。有关更多信息，请参阅本指南中的[将图像作为 EC2兼容 Amazon 的 AMI 导入到您的设备](https://docs.aws.amazon.com/snowball/latest/developer-guide/manage-ec2.html#ec2-ami-import)中。

**Topics**
+ [第 1 步：准备虚拟机镜像并将其上传到 Snowball Edge 设备](#prepare-image-cli)
+ [第 2 步：在 Snowball Edge 上设置所需的权限](#setup-permission-cli)
+ [第 3 步：将虚拟机映像作为快照导入 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 步：准备虚拟机镜像并将其上传到 Snowball Edge 设备
<a name="prepare-image-cli"></a>

通过从 Amazon EC2 AMI 或正在使用的虚拟机中的实例中导出虚拟机映像， Import/Export 或者 AWS 云 使用您选择的虚拟化平台在本地生成虚拟机映像，来准备虚拟机映像。

要使用虚拟机导入/导出将 Amazon EC2 实例导出为虚拟机映像，请参阅虚拟机用户[指南中的使用虚拟机导入/导出将实例导出为虚拟机](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html)。 Import/Export 要使用虚拟机导入/导出将 Amazon EC2 AMI 导出为虚拟机映像，请参阅[虚拟机 Import/Export 用户指南中的直接从亚马逊系统映像 (AMI) 导出虚拟机](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html)。

如果从本地环境生成虚拟机映像，请确保在 Snowball Edge 设备上将该映像配置为用作 AMI。您可能需要根据环境配置以下项。
+ 配置和更新操作系统。
+ 设置主机名。
+ 确保配置了网络时间协议（NTP）。
+ 如有必要，包括 SSH 公钥。制作密钥对的本地副本。有关更多信息，请参阅[在 Snowball Edge 上使用 SSH 连接到您的计算实例](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 之间的快照。

### 将虚拟机映像上传到 Snowball Edge 设备上的 Amazon S3 存储桶
<a name="upload-images-to-your-device"></a>

准备好虚拟机映像后，将其上传到 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 --profile profile-name
  ```

  有关更多信息，请参阅本指南中的[支持的 AWS CLI 命令](https://docs.aws.amazon.com/snowball/latest/developer-guide/using-adapter-cli.html)。

**在 Snowball Edge 上使用兼容 Amazon S3 的存储空间上传虚拟机映像**
+ 使用 `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 设备 EC2、Amazon 和用户 Import/Export 上为虚拟机设置权限。

**注意**  
提供这些权限的服务角色和策略位于 Snowball Edge 设备上。

### 在 Snowball Ed Import/Export ge 上使用虚拟机所需的权限
<a name="vmie-permissions"></a>

在开始导入过程之前，必须使用允许 Snowball Edge 设备 Import/Export 上的虚拟机担任该角色的信任策略创建 IAM 角色。向该角色授予了其他权限，允许设备 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。您还可以使用前缀进一步缩小虚拟机 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"
   }
}
```

****将策略附加到角色****

将策略附加到上述角色并授予访问所需资源的权限。这允许本地虚拟机 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 虚拟机 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 EC2 APIs 上致电亚马逊所需的权限
<a name="ec2-permissions"></a>

要导入快照，IAM 用户必须具有 `ec2:ImportSnapshot` 权限。如果不需要限制用户访问权限，则可以使用这些`ec2:*`权限授予完全的 Amazon EC2 访问权限。以下是可在您的设备上授予或限制Amaz EC2 on的权限。创建包含所示内容的策略文件：

------
#### [ 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 步：将虚拟机映像作为快照导入 Snowball Edge
<a name="import-snapshot-cli"></a>

下一步是在设备上将虚拟机映像作为快照导入。`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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/import-snapshot.html) shot。

此命令不支持以下开关。
+ [--client-data `value`] 
+ [--client-token `value`]
+ [--dry-run]
+ [--no-dry-run]
+ [--encrypted]
+ [--no-encrypted]
+ [--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 的所有快照都可用时，您才能注册 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-](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/run-instances.html) instances。

`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 兼容的实例](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>

导入快照后，您可以使用此命令对其进行描述。要筛选快照，您可以使用先前导入任务响应中的快照 ID 传入 `snapshot-ids`。此命令支持在 `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]

# 在 Snowball Edge 设备上使用 AWS CLI 和 API 操作
<a name="using-ec2-cli-specify-region"></a>

使用 AWS Command Line Interface (AWS CLI) 或 API 操作在 Snowball Edge 上发出 IAM、Amazon S3 和 Amazon EC2 命令时，必须将指定`region`为 “。” `snow` 您可以使用命令本身`AWS configure`或在命令本身内执行此操作，如以下示例所示。

```
aws configure --profile ProfileName
AWS Access Key ID [None]: defgh
AWS Secret Access Key [None]: 1234567
Default region name [None]: snow
Default output format [None]: json
```

或

```
aws s3 ls --endpoint http://192.0.2.0:8080 --region snow --profile ProfileName
```

# Snowball Edge 上计算实例的网络配置
<a name="network-config-ec2"></a>

在 Snowball Edge 上启动计算实例后，必须通过创建网络接口为其提供 IP 地址。Snowball Edges 支持两种网络接口，一种是虚拟网络接口，另一种是直接网络接口。

**虚拟网络接口 (VNI)**-虚拟网络接口是连接到 Snowball Edge 上 EC2兼容实例的标准网络接口。无论您是否还使用直接网络接口，都必须为每个 EC2兼容实例创建一个 VNI。通过 VNI 的流量受您设置的安全组保护。您只能 VNIs与用于控制 Snowball Edge 的物理网络端口关联。

**注意**  
VNI 将使用与管理 Snowball Edge 相同的物理接口（RJ45SFP\$1 或 QSFP）。不使用用于设备管理的物理接口而在其他物理接口上创建 VNI 可能会导致意外结果。

**直接网络接口（DNI）**：直接网络接口（DNI）是一项高级网络特征，可实现组播流、传递路由和负载均衡等应用场景。通过在不进行任何中间转换或过滤的情况下为实例提供第 2 层网络访问权限，您可以在 Snowball Edge 的网络配置上获得更大的灵活性并提高网络性能。 DNIs 支持 VLAN 标记和自定义 MAC 地址。安全组 DNIs 不保护开启的流量。

在 Snowball Edge 设备上， DNIs 可以与、SFP 或 RJ45 QSFP 端口关联。每个物理端口最多支持 63 个 DNIs。 DNIs 不必与用于管理 Snowball Edge 的同一个物理网络端口相关联。

**注意**  
Snowball Edge 存储经过优化（具有 EC2 计算功能）的设备不支持。 DNIs

**Topics**
+ [Snowball Edge DNIs 或 VNIs 其上的先决条件](#snowcone-configuration-prerequisites)
+ [在 Snowball Edge 上设置虚拟网络接口 (VNI)](#setup-vni)
+ [在 Snowball Edge 上设置直接网络接口 (DNI)](#snowcone-setup-dni)

## Snowball Edge DNIs 或 VNIs 其上的先决条件
<a name="snowcone-configuration-prerequisites"></a>

在配置 VNI 或 DNI 之前，请确保您已符合以下先决条件。

****

1. 确保您的设备已通电，并且您的一个物理网络接口（例如 RJ45 端口）已通过 IP 地址连接。

1. 获取与你在 Snowball Edge 上使用的物理网络接口关联的 IP 地址。

1. 配置 Snowball Edge 客户端。有关更多信息，请参阅 [为 Snowball Edge 客户端配置配置文件](using-client-commands.md#client-configuration)。

1. 配置 AWS CLI。有关更多信息，请参阅《 AWS Command Line Interface 用户指南》[AWS CLI中的《入门](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)》。

1. 解锁设备。
   + 用于 AWS OpsHub 解锁设备。有关更多信息，请参阅使用 [nowball](https://docs.aws.amazon.com/snowball/latest/developer-guide/connect-unlock-device.html) Edge。 AWS OpsHub
   + 使用 Snowball Edge 客户端解锁设备。有关更多信息，请参阅 [解锁 Snowball Edge](unlockdevice.md)。

1. 在设备上启动 EC2兼容的实例。您将要将 VNI 与该实例相关联。

1. 使用 Snowball Edge 客户端运行 `describe-device` 命令。该命令的输出将提供物理网络接口的列表 IDs。有关更多信息，请参阅 [查看 Snowball Edge 的状态](using-client-commands.md#client-status)。

1. 标识您要使用的物理网络接口的 ID 并记下它。

## 在 Snowball Edge 上设置虚拟网络接口 (VNI)
<a name="setup-vni"></a>

 在确定物理网络接口的 ID 后，您可以使用该物理接口设置虚拟网络接口（VNI）。请使用以下过程设置 VNI。在创建 VNI 之前，请务必执行先决条件任务。

**创建 VNI 并关联 IP 地址**

1. 使用 Snowball Edge 客户端运行 `create-virtual-network-interface` 命令。以下示例显示使用两种不同的 IP 地址分配方法（`DHCP` 或 `STATIC`）运行此命令。`DHCP` 方法使用动态主机配置协议（DHCP）。

   ```
   snowballEdge create-virtual-network-interface \
   --physical-network-interface-id s.ni-abcd1234 \
   --ip-address-assignment DHCP \
   --profile profile-name
           //OR//
           
   snowballEdge create-virtual-network-interface \
   --physical-network-interface-id s.ni-abcd1234 \
   --ip-address-assignment STATIC \
   --static-ip-address-configuration IpAddress=192.0.2.0,Netmask=255.255.255.0 \
   --profile profile-name
   ```

   该命令返回一个 JSON 结构，其中包含 IP 地址。记下该 IP 地址，以便在稍后的流程中与该`ec2 associate-address` AWS CLI 命令一起使用。

   每当你需要这个 IP 地址时，都可以使用 Snowball Edge Client 命令 Snow `describe-virtual-network-interfaces` ball Edge 客户端命令或 AWS CLI 命令`aws ec2 describe-addresses`来获取它。

1. 使用 AWS CLI 将 IP 地址与 EC2兼容实例相关联，用您的值替换红色文本：

   ```
   aws ec2 associate-address --public-ip 192.0.2.0 --instance-id s.i-01234567890123456 --endpoint http://Snowball Edge physical IP address:8008
   ```

## 在 Snowball Edge 上设置直接网络接口 (DNI)
<a name="snowcone-setup-dni"></a>

**注意**  
 直接网络接口功能将于 2021 年 1 月 12 日当天或之后推出，并且在所有可用 Snowball Edges AWS 区域 的地方都可用。

### 在 Snowball Edge 上获得 DNI 的先决条件
<a name="use-snowwire-prerequisites"></a>

在设置直接网络接口（DNI）前，您必须执行先决条件部分中的任务。

1. 在设置 DNI 之前，请执行先决条件任务。有关说明，请参阅[Snowball Edge DNIs 或 VNIs 其上的先决条件](#snowcone-configuration-prerequisites)。

1. 此外，您必须在设备上启动实例，创建 VNI 并将其与该实例关联。有关说明，请参阅[在 Snowball Edge 上设置虚拟网络接口 (VNI)](#setup-vni)。
**注意**  
如果您通过 in-the-field软件更新为现有设备添加了直接联网，则必须重新启动设备两次才能完全启用该功能。

**创建 DNI 并关联 IP 地址**

1. 通过运行以下命令创建直接网络接口并将其连接到 EC2与 Amazon 兼容的实例。在下一步中，您需要设备的 MAC 地址。

   ```
   create-direct-network-interface [--endpoint endpoint] [--instance-id instanceId] [--mac macAddress]
                                   [--physical-network-interface-id physicalNetworkInterfaceId] 
                                   [--unlock-code unlockCode] [--vlan vlanId]
   ```

   选项

   ** --endpoint <endpoint>** 要将此请求发送到的端点。您设备的端点将是一个使用 `https` 方案且后跟一个 IP 地址的 URL。例如，如果您设备的 IP 地址为 123.0.1.2，则您的设备的端点将是 https://123.0.1.2。

   ** --instance-id <instanceId>**要连接接口的 EC2兼容实例 ID（可选）。

   ** --mac <macAddress>** 设置网络接口的 MAC 地址（可选）。

   **--physical-network-interface-id <physicalNetworkInterfaceId>** 用于创建新虚拟网络接口的物理网络接口 ID。您可以使用 `describe-device` 命令确定 Snowball Edge 上可用的物理网络接口。

    **--vlan <vlanId>** 为接口设置分配的 VLAN（可选）。指定后，从接口发送的所有流量都将使用指定的 VLAN ID 进行标记。对指定的 VLAN ID 对传入流量进行筛选，并在传递到实例之前删除所有 VLAN 标记。

1. 创建 DNI 并将其与兼容实例关联后，您必须在 EC2兼容 Ama EC2 zon 的实例中进行两项配置更改。
   + 首先是进行更改，确保发送给与 EC2兼容实例关联的 VNI 的数据包通过 eth0 发送。
   + 第二项更改应将您的直接网络接口配置为在启动时使用 DCHP 或静态 IP。

   以下是适用于亚马逊 Linux 2 和 CentOS Linux 的 shell 脚本的示例，这些脚本可进行这些配置更改。

------
#### [ Amazon Linux 2 ]

   ```
   # Mac address of the direct network interface. 
   # You got this when you created the direct network interface.
   DNI_MAC=[MAC ADDRESS FROM CREATED DNI]
   
   # Configure routing so that packets meant for the VNI always are sent through eth0.
   PRIVATE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
   PRIVATE_GATEWAY=$(ip route show to match 0/0 dev eth0 | awk '{print $3}')
   ROUTE_TABLE=10001
   echo "from $PRIVATE_IP table $ROUTE_TABLE" > /etc/sysconfig/network-scripts/rule-eth0
   echo "default via $PRIVATE_GATEWAY dev eth0 table $ROUTE_TABLE" > /etc/sysconfig/network-scripts/route-eth0
   echo "169.254.169.254 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0
   
   # Query the persistent DNI name, assigned by udev via ec2net helper.
   #   changable in /etc/udev/rules.d/70-persistent-net.rules
   DNI=$(ip --oneline link | grep -i $DNI_MAC | awk -F ': ' '{ print $2 }')
   
   # Configure DNI to use DHCP on boot.
   cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$DNI
   DEVICE="$DNI"
   NAME="$DNI"
   HWADDR=$DNI_MAC
   ONBOOT=yes
   NOZEROCONF=yes
   BOOTPROTO=dhcp
   TYPE=Ethernet
   MAINROUTETABLE=no
   EOF
   
   # Make all changes live.
   systemctl restart network
   ```

------
#### [ CentOS Linux ]

   ```
   # Mac address of the direct network interface. You got this when you created the direct network interface.
   DNI_MAC=[MAC ADDRESS FROM CREATED DNI]
   # The name to use for the direct network interface. You can pick any name that isn't already in use.
   DNI=eth1
   
   # Configure routing so that packets meant for the VNIC always are sent through eth0 
   PRIVATE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
   PRIVATE_GATEWAY=$(ip route show to match 0/0 dev eth0 | awk '{print $3}')
   ROUTE_TABLE=10001
   echo from $PRIVATE_IP table $ROUTE_TABLE > /etc/sysconfig/network-scripts/rule-eth0
   echo default via $PRIVATE_GATEWAY dev eth0 table $ROUTE_TABLE > /etc/sysconfig/network-scripts/route-eth0
   
   # Configure your direct network interface to use DHCP on boot.
   cat << EOF > /etc/sysconfig/network-scripts/ifcfg-$DNI
   DEVICE="$DNI"
   NAME="$DNI"
   HWADDR="$DNI_MAC"
   ONBOOT=yes
   NOZEROCONF=yes
   BOOTPROTO=dhcp
   TYPE=Ethernet
   EOF
   
   # Rename DNI device if needed.
   CURRENT_DEVICE_NAME=$(LANG=C ip -o link | awk -F ': ' -vIGNORECASE=1 '!/link\/ieee802\.11/ && /'"$DNI_MAC"'/ { print $2 }')
   ip link set $CURRENT_DEVICE_NAME name $DNI
   
   # Make all changes live.
   systemctl restart network
   ```

------

# 使用 SSH 连接到 Snowball Edge 上的计算实例
<a name="ssh-ec2-edge"></a>

要使用安全外壳 (SSH) 连接到 Snowball Edge 上的计算实例，您可以使用以下选项来提供或创建 SSH 密钥。
+ 在创建作业来订购设备时，您可以提供亚马逊机器映像（AMI）的 SSH 密钥。有关更多信息，请参阅[创建订购 Snowball Edge 的任务](https://docs.aws.amazon.com/snowball/latest/developer-guide/create-job-common.html)。
+ 在创建要导入到 Snowball Edge 的虚拟机映像时，您可以为 AMI 提供 SSH 密钥。有关更多信息，请参阅 [将虚拟机映像导入 Snowball Edge 设备](ec2-ami-import-cli.md)。
+ 您可以在 Snowball Edge 上创建密钥对，然后选择使用本地生成的公钥启动实例。有关更多信息，请参阅亚马逊 EC2 用户指南 EC2中的[使用亚马逊创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html#having-ec2-create-your-key-pair)。

**通过 SSH 连接到实例**

1. 请确保您的设备已通电、连接到网络并已解锁。有关更多信息，请参阅 [将 Snowball Edge 连接到您的本地网络](getting-started.md#getting-started-connect)。

1. 确保您已为您的计算实例配置您的网络设置。有关更多信息，请参阅 [Snowball Edge 上计算实例的网络配置](network-config-ec2.md)。

1. 请检查您记下的内容，以找到您用于此特定实例的 PEM 或 PPK 密钥对。在计算机上的某处制作这些文件的副本。记下 PEM 文件的路径。

1. 通过 SSH 连接到您的实例，如以下示例命令所示。IP 地址是在[Snowball Edge 上计算实例的网络配置](network-config-ec2.md)中设置的虚拟网络接口（VNIC）的 IP 地址。

   ```
     ssh -i path/to/PEM/key/file instance-user-name@192.0.2.0
   ```

   有关更多信息，请参阅 *Amazon EC2 用户指南中的[使用 SSH 连接您的 Linux 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)。*

# 将数据从 EC2兼容的计算实例传输到同一 Snowball Edge 上的 S3 存储桶
<a name="data-transfer-ec2-s3-edge"></a>

您可以在同一个 Snowball Edge 设备上的计算实例与 Amazon S3 存储桶之间传输数据。您可以通过使用支持的 AWS CLI 命令和相应的端点来执行此操作。例如，假定您希望在同一台设备上将我的 `sbe1.xlarge` 实例的某个目录中的数据移到 Amazon S3 存储桶 。假设你在 Snowball Edge 终端节点上使用与 Amazon S3 兼容的存储。`https://S3-object-API-endpoint:443`您使用以下过程。

**在相同 Snowball Edge 上的计算实例与存储桶之间传输数据**

1. 使用 SSH 连接到计算实例。

1. 下载并安装 AWS CLI。如果您的实例还没有此 AWS CLI，请下载并安装它。有关更多信息，请参阅[安装 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。

1.  AWS CLI 在您的计算实例上配置，使其与 Snowball Edge 上的 Amazon S3 终端节点配合使用。有关更多信息，请参阅 [在 Snowball Edge 上获取和使用本地 Amazon S3 证书](using-adapter.md#adapter-credentials)。

1. 在 Snowball Edge 命令中使用支持的 Amazon S3 兼容存储来传输数据。例如：

   ```
   aws s3 cp ~/june2018/results s3://amzn-s3-demo-bucket/june2018/results --recursive --endpoint https://S3-object-API-endpoint:443
   ```

# 自动启动 EC2兼容的实例
<a name="using-ec2-edge-client"></a>

Snowball Edge 客户端是一个独立的命令行界面（CLI）应用程序，可以在您自己的环境中运行。您可以使用该应用程序在 Snowball Edge 设备或设备集群上执行某些管理任务。有关如何使用 Snowball Edge 客户端（包括如何启动和停止服务）的更多信息，请参阅[配置和使用 Snowball Edge 客户端](using-client-commands.md)。

在下文中，您可找到有关特定于计算实例的 Snowball Edge 客户端命令的信息，包括使用示例。

有关可在 AWS Snowball Edge 设备上使用的 EC2与 Amazon 兼容的命令列表，请参阅[在 Snowball EC2 E AWS CLI dge 上支持与亚马逊兼容的命令](using-ec2-endpoint.md#cli-support-ec2-edge)。

## 在 Snow EC2 ball Edge 上创建兼容的启动配置
<a name="ec2-edge-create-autostart-config"></a>

要在 AWS Snowball Edge 设备解锁后自动启动 EC2与 Amazon 兼容的计算实例，您可以创建启动配置。为此，请使用 `snowballEdge create-autostart-configuration` 命令，如下所示。

**用法**

```
snowballEdge create-autostart-configuration --physical-connector-type [SFP_PLUS or RJ45 or QSFP] --ip-address-assignment [DHCP or STATIC] [--static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]] --launch-template-id [--launch-template-version]
```

## 在 Snow EC2 ball Edge 上更新兼容的启动配置
<a name="ec2-edge-update-autostart-config"></a>

要在您的 Snowball Edge 上更新现有的启动配置，请使用 `snowballEdge update-autostart-configuration` 命令。您可以在下面找到其用法。要启用或禁用启动配置，请指定 `--enabled` 参数。

**用法**

```
snowballEdge update-autostart-configuration --autostart-configuration-arn [--physical-connector-type [SFP_PLUS or RJ45 or QSFP]] [--ip-address-assignment [DHCP or STATIC]] [--static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]][--launch-template-id] [--launch-template-version] [--enabled]
```

## 在 Snow EC2 ball Edge 上删除兼容的启动配置
<a name="ec2-edge-delete-autostart-config"></a>

要删除不再使用的启动配置，请使用 `snowballEdge delete-autostart-configuration` 命令，如下所示。

**用法**

```
snowballEdge delete-autostart-configuration --autostart-configuration-arn
```

## 在 EC2 Snowball Edge 上列出兼容的启动配置
<a name="ec2-edge-describe-autostart-configs"></a>

要列出已在您的 Snowball Edge 上创建的启动配置，请使用 `describe-autostart-configurations` 命令，如下所示。

**用法**

```
snowballEdge describe-autostart-configurations            
```

## 在 Snowball Edge 上创建虚拟网络接口
<a name="ec2-edge-create-vnic"></a>

要在 Snowball Edge 上运行计算实例或启动 NFS 接口，首先创建一个虚拟网络接口（VNI）。每个 Snowball Edge 都有三个网络接口 (NICs)，即设备的物理网络接口控制器。这些是设备 RJ45背面的、SFP 和 QSFP 端口。

每个 VNI 基于物理接口，您可以有任意数量的 VNI 与每个 NIC 关联。要创建虚拟网络接口，请使用 `snowballEdge create-virtual-network-interface` 命令。

**注意**  
只有当将 `STATIC` 选项用于 `--ip-address-assignment` 参数时，`--static-ip-address-configuration` 参数才有效。

**用法**

您可以以两种方法使用此命令：在配置了 Snowball Edge 客户端的情况下或在未配置 Snowball Edge 客户端的情况下。以下用法示例显示了在配置了 Snowball Edge 客户端的情况下的方法。

```
snowballEdge create-virtual-network-interface --ip-address-assignment [DHCP or STATIC] --physical-network-interface-id [physical network interface id] --static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]
```

以下用法示例显示了在未配置 Snowball Edge 客户端的情况下的方法。

```
snowballEdge create-virtual-network-interface --endpoint https://[ip address] --manifest-file /path/to/manifest --unlock-code [unlock code] --ip-address-assignment [DHCP or STATIC] --physical-network-interface-id [physical network interface id] --static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]
```

**Example 示例：创建 VNICs （使用 DHCP）**  

```
snowballEdge create-virtual-network-interface --ip-address-assignment dhcp --physical-network-interface-id s.ni-8EXAMPLEaEXAMPLEd
{
  "VirtualNetworkInterface" : {
    "VirtualNetworkInterfaceArn" : "arn:aws:snowball-device:::interface/s.ni-8EXAMPLE8EXAMPLEf",
    "PhysicalNetworkInterfaceId" : "s.ni-8EXAMPLEaEXAMPLEd",
    "IpAddressAssignment" : "DHCP",
    "IpAddress" : "192.0.2.0",
    "Netmask" : "255.255.255.0",
    "DefaultGateway" : "192.0.2.1",
    "MacAddress" : "EX:AM:PL:E1:23:45",
    "MtuSize" : "1500"
  }
}
```

## 描述您的虚拟网络接口
<a name="ec2-edge-describe-vnic"></a>

要描述您之前在 VNICs 设备上创建的，请使用`snowballEdge describe-virtual-network-interfaces`命令。您可以在下面找到其用法。

**用法**

您可以以两种方法使用此命令：在配置了 Snowball Edge 客户端的情况下或在未配置 Snowball Edge 客户端的情况下。以下用法示例显示了在配置了 Snowball Edge 客户端的情况下的方法。

```
snowballEdge describe-virtual-network-interfaces
```

以下用法示例显示了在未配置 Snowball Edge 客户端的情况下的方法。

```
snowballEdge describe-virtual-network-interfaces --endpoint https://[ip address] --manifest-file /path/to/manifest --unlock-code [unlock code]
```

**Example 示例：描述 VNICs**  

```
snowballEdge describe-virtual-network-interfaces
[
  {
    "VirtualNetworkInterfaceArn" : "arn:aws:snowball-device:::interface/s.ni-8EXAMPLE8EXAMPLE8",
    "PhysicalNetworkInterfaceId" : "s.ni-8EXAMPLEaEXAMPLEd",
    "IpAddressAssignment" : "DHCP",
    "IpAddress" : "192.0.2.0",
    "Netmask" : "255.255.255.0",
    "DefaultGateway" : "192.0.2.1",
    "MacAddress" : "EX:AM:PL:E1:23:45",
    "MtuSize" : "1500"
  },{
    "VirtualNetworkInterfaceArn" : "arn:aws:snowball-device:::interface/s.ni-1EXAMPLE1EXAMPLE1",
    "PhysicalNetworkInterfaceId" : "s.ni-8EXAMPLEaEXAMPLEd",
    "IpAddressAssignment" : "DHCP",
    "IpAddress" : "192.0.2.2",
    "Netmask" : "255.255.255.0",
    "DefaultGateway" : "192.0.2.1",
    "MacAddress" : "12:34:5E:XA:MP:LE",
    "MtuSize" : "1500"
  }  
]
```

## 更新 Snowball Edge 上的虚拟网络接口
<a name="ec2-edge-update-vnic"></a>

在创建虚拟网络接口（VNI）后，您可以使用 `snowballEdge update-virtual-network-interface` 命令更新其配置。在为特定 VNI 提供 Amazon 资源名称（ARN）后，您仅需为要更新的任何元素提供值。

**用法**

您可以以两种方法使用此命令：在配置了 Snowball Edge 客户端的情况下或在未配置 Snowball Edge 客户端的情况下。以下用法示例显示了在配置了 Snowball Edge 客户端的情况下的方法。

```
snowballEdge update-virtual-network-interface --virtual-network-interface-arn [virtual network-interface-arn] --ip-address-assignment [DHCP or STATIC] --physical-network-interface-id [physical network interface id] --static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]
```

 以下用法示例显示了在未配置 Snowball Edge 客户端的情况下的方法。

```
snowballEdge update-virtual-network-interface --endpoint https://[ip address] --manifest-file /path/to/manifest --unlock-code [unlock code] --virtual-network-interface-arn [virtual network-interface-arn] --ip-address-assignment [DHCP or STATIC] --physical-network-interface-id [physical network interface id] --static-ip-address-configuration IpAddress=[IP address],NetMask=[Netmask]
```

**Example 示例：更新 VNIC（使用 DHCP）**  

```
snowballEdge update-virtual-network-interface --virtual-network-interface-arn arn:aws:snowball-device:::interface/s.ni-8EXAMPLEbEXAMPLEd --ip-address-assignment dhcp
```

## 删除 Snowball Edge 上的虚拟网络接口
<a name="ec2-edge-delete-vnic"></a>

要删除虚拟网络接口（VNI），您可以使用 ` snowballEdge delete-virtual-network-interface` 命令。

**用法**

您可以以两种方法使用此命令：在配置了 Snowball Edge 客户端的情况下或在未配置 Snowball Edge 客户端的情况下。以下用法示例显示了在配置了 Snowball Edge 客户端的情况下的方法。

```
snowballEdge delete-virtual-network-interface --virtual-network-interface-arn [virtual network-interface-arn]
```

以下用法示例显示了在未配置 Snowball Edge 客户端的情况下的方法。

```
snowballEdge delete-virtual-network-interface --endpoint https://[ip address] --manifest-file /path/to/manifest --unlock-code [unlock code] --virtual-network-interface-arn [virtual network-interface-arn]
```

**Example 示例：删除 VNIC**  

```
snowballEdge delete-virtual-network-interface --virtual-network-interface-arn arn:aws:snowball-device:::interface/s.ni-8EXAMPLEbEXAMPLEd
```

# 在 Snowball EC2 Edge 上使用与亚马逊兼容的终端节点
<a name="using-ec2-endpoint"></a>

接下来，您可以找到与 Amazon EC2 兼容的终端节点的概述。使用此终端节点，您可以使用与亚马逊 EC2兼容的 API 操作以编程方式管理您的亚马逊系统映像 (AMIs) 和计算实例。

## 将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点
<a name="using-ec2-adapter-cli-endpoint"></a>

当您使用 AWS CLI 向 AWS Snowball Edge 设备发出命令时，可以指定终端节点是与 Amazon EC2 兼容的终端节点。您可以选择使用 HTTPS 端点，或不安全的 HTTP 端点，如下所示。

**HTTPS 安全端点**

```
aws ec2 describe-instances --endpoint https://192.0.2.0:8243 --ca-bundle path/to/certificate
```

**HTTP 不安全端点**

```
aws ec2 describe-instances --endpoint http://192.0.2.0:8008
```

如果您使用 HTTPS 端点 `8243`，传输中的数据将加密。使用 Snowball Edge 在解锁时所生成的证书来确保此加密。在您具有证书后，可以将其保存到本地 `ca-bundle.pem` 文件。然后，可以将 AWS CLI 配置文件配置为包含您的证书的路径，如下所述。

**将您的证书与 EC2兼容 Amazon 的终端节点相关联**

1. 为 Snowball Edge 接通电源并将其连接到网络，然后启动它。

1. 在设备解锁完成后，记下其在本地网络上的 IP 地址。

1. 从您的网络上的终端，确保您可以对 Snowball Edge 执行 ping 操作。

1. 在您的终端中运行 `snowballEdge get-certificate` 命令。有关此命令的更多信息，请参阅 [在 Snowball Edge 上管理公钥证书](snowball-edge-certificates-cli.md)。

1. 将 `snowballEdge get-certificate` 命令的输出保存到文件，例如 `ca-bundle.pem`。

1. 从您的终端运行以下命令。

   ```
   aws configure set profile.snowballEdge.ca_bundle /path/to/ca-bundle.pem
   ```

在您完成此过程之后，可以使用这些本地凭证、您的证书和您指定的端点运行 CLI 命令。

## 在 Snowball EC2 E AWS CLI dge 上支持与亚马逊兼容的命令
<a name="cli-support-ec2-edge"></a>

您可以通过与亚马逊 EC2兼容的终端节点在 Snowball Edge 设备上管理计算实例。这种类型的终端节点支持许多 Amazon EC2 CLI 命令和操作 AWS SDKs。有关安装和设置的信息 AWS CLI，包括指定 AWS 区域 要对哪个进行 AWS CLI 呼叫，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com/cli/latest/userguide/)。

### Snowball EC2 E AWS CLI dge 上支持的兼容命令列表
<a name="list-cli-commands-ec2-edge"></a>

接下来，您可以找到 Snowball Edge 设备支持的亚马逊 AWS CLI EC2 命令和选项子集的描述。如果某个命令或选项未在下方列出，则表明它不受支持。您可以声明一些不受支持的选项以及一个命令。但是，这些都会被忽略。
+ [associate-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-address.html)：将虚拟 IP 地址与实例关联，以用于设备上的三个物理网络接口之一：
  + --instance-id：单个 `sbe` 实例的 ID。
  + --public-ip：要用来访问您的实例的虚拟 IP 地址。
+ [attach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-volume.html)：将 Amazon EBS 卷挂载到您设备上的一个已停止或正在运行的实例上，然后将其公开给具有指定设备名称的实例。
  + --device `value`：设备名称。
  + --instance-id — 与亚马逊 EC2兼容的目标实例的 ID。
  + ---volume-id `value`：EBS 卷的 ID。
+ [authorize-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-egress.html)— 向安全组添加一条或多条出口规则，以便与 Snowball Edge 设备配合使用。具体而言，此操作允许实例将流量发送到一个或多个目标 IPv4 CIDR 地址范围。有关更多信息，请参阅 [在 Snowball Edge 上使用安全组控制网络流量](edge-security-groups.md)。
  + --group-id `value`：安全组的 ID。
  + [--ip-permissions `value`]：一个或多个 IP 权限集。
+ [authorize-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)— 向安全组添加一条或多条入口规则。当调用 `authorize-security-group-ingress` 时，您必须为 `group-name` 或 `group-id` 指定一个值。
  + [--group-name `value`]：安全组的名称。
  + [--group-id `value`]：安全组的 ID
  + [--ip-permissions `value`]：一个或多个 IP 权限集。
  + [--protocol `value`] IP 协议。可能的值为 `tcp`、`udp` 和 `icmp`。`--port` 参数是必填项，除非“所有协议”值指定为（-1）。
  + [--port `value`]：对于 TCP 或 UDP，允许的端口范围。此值可以是单个整数或范围（最小值–最大值）。

    对于 ICMP，为单个整数或范围（`type`-`code`），其中，`type` 表示 ICMP 类型编号，`code` 表示 ICMP 代码编号。值为 -1 表示所有 ICMP 类型的所有 ICMP 代码。仅 `type` 的值为 -1 表示指定 ICMP 类型的所有 ICMP 代码。
  + [--cidr `value`]：CIDR IP 范围。
+ [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html)— 创建启动模板。*启动模板*包含用于启动实例的参数。当您使用 `RunInstances` 启动实例时，您可以指定启动模板，而不是在请求中提供启动参数。您最多可以为每个 设备创建 100 个模板。
  + --launch-template-name `string` — 启动模板的名称。
  + -launch-template-data `structure`--启动模板的信息。支持以下属性：
    + `ImageId`
    + `InstanceType`
    + `SecurityGroupIds`
    + `TagSpecifications`
    + `UserData`

    JSON 语法：

    ```
    {
        "ImageId":"string",
        "InstanceType":"sbe-c.large",
        "SecurityGroupIds":["string", ...],
        "TagSpecifications":[{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"Test"},
        {"Key":"Stack","Value":"Gamma"}]}],
        "UserData":"this is my user data"
    }
    ```
  + [--version-description `string`]：第一版启动模板的说明。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [create-launch-template-version](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template-version.html)— 为启动模板创建新版本。您可以指定启动模板的一个现有版本作为新版本的基础。启动模板版本是按创建顺序编号的。您无法指定、更改或替换启动模板版本的编号。您可以为每个启动模板创建多达 100 个版本。

  在请求中指定启动模板 ID 或启动模板名称。
  + --launch-template-id `string` — 启动模板的 ID。
  + --launch-template-name `string` — 启动模板的名称。
  + -launch-template-data `structure`--启动模板的信息。支持以下属性：
    + `ImageId`
    + `InstanceType`
    + `SecurityGroupIds`
    + `TagSpecifications`
    + `UserData`

    JSON 语法：

    ```
    {
        "ImageId":"string",
        "InstanceType":"sbe-c.large",
        "SecurityGroupIds":["string", ...],
        "TagSpecifications":[{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"Test"},
         {"Key":"Stack","Value":"Gamma"}]}],
        "UserData":"this is my user data"
    }
    ```
  + [--source-version `string`]：作为新版本基础的启动模板的版本号。新版本继承和源版本相同的启动参数，但在 `launch-template-data` 中指定的参数除外。
  + [--version-description `string`]：第一版启动模板的说明。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html)：添加或覆盖指定资源的一个或多个标签。每个资源最多可以有 50 个标签。每个标签由一个键和一个可选值组成。资源的标签键必须是唯一的。支持以下资源：
  + AMI
  + 实例
  + 启动模板
  + 安全组
  + 密钥对
+ [create-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-security-group.html)— 在你的 Snowball Edge 上创建一个安全组。您最多可以创建 50 个安全组。创建安全组时，您可以指定选择的友好名称：
  + --group-name `value`：安全组的名称。
  + --description `value`：安全组的描述。此仅为信息性。此值最长可达 255 个字符。
+ [create-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-volume.html)：创建一个 Amazon EBS 卷，您可以将此卷连接到设备上的实例。
  + [--size`value`] — 中的卷的大小 GiBs，可以从 1 GiB 到 1 TB ( GiBs1000) 不等。
  + [--snapshot-id `value`]：从中创建卷的快照。
  + [--volume-type `value`]：卷类型。如果未指定值，则默认值为 `sbg1`。可能的值包括：
    + 对于磁性介质卷为 `sbg1`
    + 对于 SSD 卷为 `sbp1`
  + [--tag-specification `value`]：在创建期间应用到卷的标签列表。
+ [delete-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-launch-template.html)— 删除启动模板。如果删除启动模板，则会删除该模板的所有版本。

  在请求中指定启动模板 ID 或启动模板名称。
  + --launch-template-id `string` — 启动模板的 ID。
  + --launch-template-name `string` — 启动模板的名称。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [delete-launch-template-version](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-launch-template-version.html)— 删除启动模板的一个或多个版本。您无法删除启动模板的默认版本；您必须先分配一个不同的版本以作为默认版本。如果默认版本是唯一启动模板的版本，请使用 `delete-launch-template` 命令删除整个启动模板版本。

  在请求中指定启动模板 ID 或启动模板名称。
  + --launch-template-id `string` — 启动模板的 ID。
  + --launch-template-name `string` — 启动模板的名称。
  + --versions (list) `"string" "string"` ：要删除的一个或多个启动模板版本的版本号。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [delete-security-group](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html)— 删除安全组。

  如果您尝试删除与实例关联的安全组或由另一个安全组引用的安全组，则操作将失败，并显示 `DependencyViolation`。
  + --group-name `value`：安全组的名称。
  + --description `value`：安全组的描述。此仅为信息性。此值最长可达 255 个字符。
+ [delete-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-tags.html)：从指定资源（AMI、计算实例、启动模板或安全组）中删除一组指定的标签。
+ [delete-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-volume.html)：删除指定的 Amazon EBS 卷。该卷必须处于 `available` 状态（未附加到实例）。
  + --volume-id `value`：卷的 ID。
+ [describe-addresses](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-addresses.html)：描述与您设备上相同数量的 实例关联的一个或多个虚拟 IP 地址。
  + --public-ips：与您的实例关联的一个或多个虚拟 IP 地址。
+ [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) — 描述可供您使用的一张或多张图片 (AMIs)。在创建作业期间，可供您使用的映像会添加到 Snowball Edge 设备上。
  + --image-id：AMI 的 Snowball AMI ID。
+ [describe-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-attribute.html)— 描述指定实例的指定属性。一次只能指定一个属性。支持以下属性：
  + `instanceInitiatedShutdownBehavior` 
  + `instanceType`
  + `userData`
+ [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html)：描述一个或多个实例。该响应会返回分配给该实例的任何安全组。
  + --instance-id — 设备上已停止的一个或多个`sbe`实例。 IDs 
  + --page-size：调用中获取的每个页面的大小。此值不会影响命令的输出中返回的项目数。设置较小的页面大小会导致对设备进行更多调用，每次调用检索的项目数较少。这样做有助于防止调用超时。
  + --max-items：命令的输出中要返回的项目总数。如果可用的总项目数超过指定的值，则命令的输出中会提供 `NextToken`。要恢复分页，请在后续命令的 `starting-token` 参数中提供 `NextToken` 值。
  + --starting-token：指定从何处开始分页的令牌。此令牌是先前截断的响应中的 `NextToken` 值。
+ [describe-instance-status](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-status.html)— 描述指定实例或所有实例的状态。默认情况下，仅描述正在运行的实例，除非您特别指定返回所有实例的状态。实例状态包括以下组件：
  + **状态检查** — Snow 设备对正在运行的与 Amazon EC2 兼容的实例执行状态检查，以识别硬件和软件问题。
  + **实例状态**：您可以在实例启动直至实例终止期间管理您的实例。

  使用此命令时，支持以下筛选条件。
  + `[--filters]` (list)

    筛选条件。
    + `instance-state-code`：实例状态的代码，采用 16 位无符号整数表示。高字节用于内部服务报告目的，应予以忽略。低字节根据所表示的状态设置。有效值为 0（待处理）、16（正在运行）、32（正在关闭）、48（已终止）、64（正在停止）和 80（已停止）。
    + `instance-state-name`：实例的状态（`pending` \$1 `running` \$1 `shutting-down` \$1 `terminated` \$1 `stopping` \$1 `stopped` ）。
    + `instance-status.reachability`：筛选名称为 `reachability`（`passed` \$1 `failed` \$1 `initializing` \$1 `insufficient-data` ）的实例状态。
    + `instance-status.status`：实例的状态（`ok` \$1 `impaired` \$1 `initializing` \$1 `insufficient-data` \$1 `not-applicable` ）。
    + `system-status.reachability`：筛选名称为可到达性（`passed` \$1 `failed` \$1 `initializing` \$1 `insufficient-data` ）的系统状态。
    + `system-status.status`：实例的状态（`ok` \$1 `impaired` \$1 `initializing` \$1 `insufficient-data` \$1 `not-applicable` ）。
  + JSON 语法：

    ```
    [
      {
        "Name": "string",
        "Values": ["string", ...]
      }
      ...
    ]
    ```
  + `[--instance-ids]` (list)

    实例 IDs。

    默认：描述您的所有实例。
  + `[--dry-run|--no-dry-run]`（布尔值）

    检查您是否拥有操作所需的权限，但不实际发出请求，并提供错误响应。如果您拥有所需的权限，则错误响应为 `DryRunOperation`。

    否则为 `UnauthorizedOperation`。
  + `[--include-all-instances | --no-include-all-instances]`（布尔值）

    如果为 `true`，则包括所有实例的运行状况。如果为 `false`，则仅包括正在运行实例的运行状况。

    默认值：`false`
  + `[--page-size]` (integer)：调用中获取的每个页面的大小。此值不会影响命令的输出中返回的项目数。设置较小的页面大小会导致对设备进行更多调用，每次调用检索的项目数较少。这样做有助于防止调用超时。
  + `[--max-items]` (integer)：命令的输出中要返回的项目总数。如果可用的总项目数超过指定的值，则命令的输出中会提供 `NextToken`。要恢复分页，请在后续命令的 `starting-token` 参数中提供 `NextToken` 值。
  + `[--starting-token]` (string)：用于指定从何处开始分页的令牌。此令牌是先前截断的响应中的 `NextToken` 值。
+ [describe-launch-templates](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-launch-templates.html)— 描述一个或多个启动模板。`describe-launch-templates` 命令是一个分页操作。您可以进行多个调用以检索结果的整个数据集。

  在请求中指定启动模板 IDs 或启动模板的名称。
  + --launch-template-ids （列表）`"string" "string"`-启动模板列表。 IDs 
  + --launch-template-names （列表）`"string" "string"`-启动模板的名称列表。
  + --page-size：调用中获取的每个页面的大小。此值不会影响命令的输出中返回的项目数。设置较小的页面大小会导致对设备进行更多调用，每次调用检索的项目数较少。这样做有助于防止调用超时。
  + --max-items：命令的输出中要返回的项目总数。如果可用的总项目数超过指定的值，则命令的输出中会提供 `NextToken`。要恢复分页，请在后续命令的 `starting-token` 参数中提供 `NextToken` 值。
  + --starting-token：指定从何处开始分页的令牌。此令牌是先前截断的响应中的 `NextToken` 值。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [describe-launch-template-versions](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-launch-template-versions.html)— 描述指定启动模板的一个或多个版本。您可以描述所有版本、单个版本或一系列版本。`describe-launch-template-versions` 命令是一个分页操作。您可以进行多个调用以检索结果的整个数据集。

  在请求中指定启动模板 IDs 或启动模板的名称。
  + --launch-template-id `string` — 启动模板的 ID。
  + --launch-template-name `string` — 启动模板的名称。
  + [--versions (list) `"string" "string"`] ：要删除的一个或多个启动模板版本的版本号。
  + [--min-version `string`]：用于描述启动模板版本的最小版本号。
  + [--max-version `string`]：用于描述启动模板版本的最大版本号。
  + --page-size：调用中获取的每个页面的大小。此值不会影响命令的输出中返回的项目数。设置较小的页面大小会导致对设备进行更多调用，每次调用检索的项目数较少。这样做有助于防止调用超时。
  + --max-items：命令的输出中要返回的项目总数。如果可用的总项目数超过指定的值，则命令的输出中会提供 `NextToken`。要恢复分页，请在后续命令的 `starting-token` 参数中提供 `NextToken` 值。
  + --starting-token：指定从何处开始分页的令牌。此令牌是先前截断的响应中的 `NextToken` 值。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [describe-security-groups](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html)— 描述您的一个或多个安全组。

  `describe-security-groups` 命令是一个分页操作。您可以发出多个 API 调用以检索结果的整个数据集。
  + [--group-name `value`]：安全组的名称。
  + [--group-id `value`]：安全组的 ID。
  + [--page-size`value`]-服务调用中要获取的每页的大小。 AWS 此大小不会影响命令的输出中返回的项目数。设置较小的页面大小会导致对 AWS 服务进行更多调用，每次调用检索的项目数较少。这种方法可以帮助防止 AWS 服务呼叫超时。有关用法示例，请参阅《AWS Command Line Interface 用户指南》**中的[分页](https://docs.aws.amazon.com/cli/latest/userguide/pagination.html)。
  + [--max-items `value`]：命令的输出中要返回的项目总数。如果可用的总项目数超过指定的值，则命令的输出中会提供 `NextToken`。要恢复分页，请在后续命令的 `starting-token` 参数中提供 `NextToken` 值。请勿在 AWS CLI之外直接使用 `NextToken` 响应元素。有关用法示例，请参阅《AWS Command Line Interface 用户指南》**中的[分页](https://docs.aws.amazon.com/cli/latest/userguide/pagination.html)。
  + [--starting-token `value`]：指定从何处开始分页的令牌。此令牌是先前截断的响应中的 `NextToken` 值。有关用法示例，请参阅《AWS Command Line Interface 用户指南》**中的[分页](https://docs.aws.amazon.com/cli/latest/userguide/pagination.html)。
+ [describe-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-tags.html)：描述用于指定资源（`image`、`instance` 或安全组）的一个或多个标签。使用此命令时，支持以下筛选条件：
  + launch-template
  + resource-id
  + resource-type：`image` 或 `instance`
  + 键
  + value
+ [describe-volumes](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-volumes.html)：描述指定的 Amazon EBS 卷。
  + [--max-items `value`]：命令的输出中要返回的项目总数。如果可用的总项目数超过指定的值，则命令的输出中会提供 `NextToken`。要恢复分页，请在后续命令的 `starting-token` 参数中提供 `NextToken` 值。
  + [--starting-token `value`]：指定从何处开始分页的令牌。此令牌是先前截断的响应中的 `NextToken` 值。
  + [--volume-id`value`]-一个或多个卷。 IDs
+ [detach-volume](https://docs.aws.amazon.com/cli/latest/reference/ec2/detach-volume.html)：从已停止或正在运行的实例中分离 Amazon EBS 卷。
  + [--device `value`]：设备名称。
  + [--instance-id]-目标亚马逊实例的 ID。 EC2
  + --volume-id `value`：卷的 ID。
+ [disassociate-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/disassociate-address.html)：取消虚拟 IP 地址与所关联实例的关联。
  + --public-ip：您要与实例取消关联的虚拟 IP 地址。
+ [get-launch-template-data](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-launch-template-data.html)— 检索指定实例的配置数据。您可以使用此数据来创建启动模板。
  + --instance-id：单个 `sbe` 实例的 ID。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [modify-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-launch-template.html)— 修改启动模板。您可以指定要设置为默认版本的启动模板版本。在未指定启动模板版本的情况下启动实例时，将会应用启动模板的默认版本。

  在请求中指定启动模板 ID 或启动模板名称。
  + --launch-template-id `string` — 启动模板的 ID。
  + --launch-template-name `string` — 启动模板的名称。
  + --default-version `string`：设置为默认版本的启动模板版本号。
  + --endpoint `snowballEndpoint` — 一个允许您使用与亚马逊 EC2兼容的 API 操作以编程方式管理计算实例的值。有关更多信息，请参阅 [将 EC2兼容的端点指定为 Snowball AWS CLI Edge 上的端点](#using-ec2-adapter-cli-endpoint)。
+ [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)— 修改指定实例的属性。支持以下属性：
  + `instanceInitiatedShutdownBehavior`
  + `userData`
+ [revoke-security-group-egress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-egress.html)— 从安全组中移除一条或多条出口规则：
  + [--group-id `value`]：安全组的 ID
  + [--ip-permissions `value`]：一个或多个 IP 权限集。
+ [revoke-security-group-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/revoke-security-group-ingress.html)— 撤销安全组的一个或多个入口规则。当调用 `revoke-security-group-ingress` 时，您必须为 `group-name` 或 `group-id` 指定一个值。
  + [--group-name `value`]：安全组的名称。
  + [--group-id `value`]：安全组的 ID。
  + [--ip-permissions `value`]：一个或多个 IP 权限集。
  + [--protocol `value`] IP 协议。可能的值为 `tcp`、`udp` 和 `icmp`。`--port` 参数是必填项，除非“所有协议”值指定为（-1）。
  + [--port `value`]：对于 TCP 或 UDP，允许的端口范围。单个整数或范围（最小值–最大值）。

    对于 ICMP，为单个整数或范围（`type`-`code`），其中，`type` 表示 ICMP 类型编号，`code` 表示 ICMP 代码编号。值为 -1 表示所有 ICMP 类型的所有 ICMP 代码。仅 `type` 的值为 -1 表示指定 ICMP 类型的所有 ICMP 代码。
  + [--cidr `value`]：CIDR IP 范围。
+ [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)：通过将 Snowball AMI ID 用于 AMI，启动一个计算实例。
**注意**  
在 Snowball Edge 上启动计算实例最多需要 1.5 小时，具体取决于实例的大小和类型。
  + [--block-device-mappings `(list)]` — 块储存设备映射条目。支持 `DeleteOnTermination`、`VolumeSize` 和 `VolumeType` 参数。启动卷必须为类型 `sbg1`。

    此命令的 JSON 语法如下所示。

    ```
    {
       "DeviceName": "/dev/sdh",
       "Ebs": 
       {
          "DeleteOnTermination": true|false,
          "VolumeSize": 100,
          "VolumeType": "sbp1"|"sbg1"
       }
    }
    ```
  + --count：要启动的实例数量。如果提供单个数字，则它被视为要启动的最小实例数量（默认为 1）。如果以 `min:max` 形式提供范围，则第一个数字解释为要启动的最小实例数量，第二个数字解释为要启动的最大实例数量。
  + --image-id：AMI 的 Snowball AMI ID，可以通过调用 `describe-images` 获得。启动实例时需要 AMI。
  + --InstanceInitiatedShutdownBehavior — 默认情况下，当您从实例启动关闭操作时（使用诸如关闭或关机之类的命令），实例会停止。您可以更改此行为，以便使其终止。支持 `stop` 和 `terminate` 参数。默认值为 `stop`。有关更多信息，请参阅[《*Amazon Linux 实例 EC2 用户指南》中的更改实例启动的*关闭行为](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#Using_ChangingInstanceInitiatedShutdownBehavior)。
  + --instance-type：`sbe` 实例类型。
  + --launch-template `structure`：设置为默认版本的启动模板的版本号。您在 `run-instances` 命令中指定的任何参数都会覆盖启动模板中的相同参数。您可以指定启动模板的名称或 ID，但不能同时指定二者。

    ```
    {
       "LaunchTemplateId": "string",
       "LaunchTemplateName": "string",
       "Version": "string"
    }
    ```
  + --security-group-ids — 一个或多个安全组 IDs。您可以使用创建安全组[CreateSecurityGroup](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html)。如果未提供任何值，则会将默认安全组的 ID 分配给创建的实例。
  + --tag-specifications：要在启动期间应用于资源的标签。只能在启动时标记实例。指定的标签将应用于在启动期间创建的所有实例。要在创建之后标记资源，请使用 `create-tags`。
  + --user-data：提供给实例的用户数据。如果您使用的是 AWS CLI，则会为您执行 base64 编码，您可以从文件中加载文本。否则，您必须提供 base64 编码文本。
  + --key-name (string)：密钥对的名称。您可以使用 `CreateKeyPair` 或 `ImportKeyPair` 创建密钥对。
**警告**  
如果您未指定密钥对，则无法连接到实例，除非您选择配置为允许用户以其他方式登录的 AMI。
+ [start-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/start-instances.html)：启动您先前停止的 `sbe` 实例。附加到实例的所有资源从启动到停止期间一直持续存在，但在实例终止时会被擦除。
  + --instance-id — 设备上已停止的一个或多个`sbe`实例。 IDs 
+ [stop-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html)：停止一个正在运行的 `sbe` 实例。附加到实例的所有资源从启动到停止期间一直持续存在，但在实例终止时会被擦除。
  + --instance-id — 设备上要停止的一个或多个`sbe`实例。 IDs 
+ [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html)：关闭一个或多个实例。此操作是幂等的；如果您多次终止某个实例，每个调用都成功。附加到实例的所有资源从启动到停止期间一直持续存在，但在实例终止时数据会被擦除。
**注意**  
默认情况下，当您使用 `shutdown` 或 `poweroff` 等命令启动从实例关闭时，实例将停止。但是，您可以使用 `InstanceInitiatedShutdownBehavior` 属性来更改此行为，以便这些命令可以终止您的实例。有关更多信息，请参阅[《*Amazon Linux 实例 EC2 用户指南》中的更改实例启动的*关闭行为](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#Using_ChangingInstanceInitiatedShutdownBehavior)。
  + --instance-id — 设备上要终止的一个或多个`sbe`实例。 IDs 为这些实例存储的所有关联数据都将丢失。
+ [create-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-key-pair.html)— 创建具有指定名称的 2048 位 RSA 密钥对。Amazon EC2 存储公钥并显示私钥供您保存到文件中。私有密钥作为未加密的 PEM 编码的 PKCS\$11 私有密钥返回。如果已存在具有指定名称的密钥，Amazon 将 EC2 返回错误。
  + --key-name (string)：密钥对的唯一名称。

    约束：最多 255 个 ASCII 字符。
  + [--tag-specifications] (list)：要应用于新密钥对的标签。

  ```
  {
      "ResourceType": "image"|"instance"|"key-pair"|"launch-template"|"security-group",
      "Tags": [
        {
          "Key": "string",
          "Value": "string"
        }
        ...
      ]
    }
    ...
  ```
+ [import-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-key-pair.html) – 
  + --key-name (string)：密钥对的唯一名称。

    约束：最多 255 个 ASCII 字符。
  + --public-key-material （blob）-公钥。对于 API 调用，文本必须为 base64 编码。对于命令行工具，会为您执行 base64 编码。
  + [--tag-specifications] (list)：要应用于新密钥对的标签。

  ```
  {
      "ResourceType": "image"|"instance"|"key-pair"|"launch-template"|"security-group",
      "Tags": [
        {
          "Key": "string",
          "Value": "string"
        }
        ...
      ]
    }
  ```
+ [describe-key-pairs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-key-pairs.html) – 

  [--filters] (list)：筛选条件。
  + key-pair-id — 密钥对的 ID。
  + key-name：密钥对的名称。
  + tag-key：资源所分配标签的键。使用此筛选条件查找分配有标签且标签带有特定键的所有资源，无论标签值如何。
  + [--tag-specifications] (list)：要应用于新密钥对的标签。
  + tag: key — 分配给资源的标签的 key/value 组合。使用筛选器名称中的标签键和标签值作为筛选器值。例如，要查找具有键 `Owner` 和值 `Team A` 的标签的所有资源，请为筛选器名称指定 `tag:Owner`，为筛选器值指定 `Team A`。

  ```
  {
      "Name": "string",
      "Values": ["string", ...]
    }
    ...
  ```
+ [--key-names] (list)：密钥对名称。

  默认：描述您的所有密钥对。
+ [--key-pair-ids]（列表）-密钥对。 IDs 
+ [delete-key-pair](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-key-pair.html) – 
  + [--key-name] (string)：密钥对的名称。
  + [--key-pair-id]（字符串）-密钥对的 ID。

## 在 Snowball EC2 Edge 上支持与亚马逊兼容的 API 操作
<a name="using-ec2-adapter-supported-api"></a>

接下来，您可以在 EC2 Snowball Edge 中找到可与 Snowball Edge 一起使用的与亚马逊兼容的 API 操作，并在* EC2 亚马逊* API 参考中找到指向其描述的链接。与亚马逊 EC2兼容的 API 调用需要签名版本 4 (Sigv4) 签名。如果您使用 AWS CLI 或 AWS SDK 进行这些 API 调用，则系统会为您处理 Sigv4 签名。否则，您需要实施自己的 SigV4 签名解决方案。有关更多信息，请参阅 [在 Snowball Edge 上获取和使用本地 Amazon S3 证书](using-adapter.md#adapter-credentials)。
+ [AssociateAddress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateAddress.html)— 将弹性 IP 地址与实例或网络接口相关联。
+  [AttachVolume](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AttachVolume.html)— 支持以下请求参数：
  + `Device`
  + `InstanceId`
  + `VolumeId`
+ [AuthorizeSecurityGroupEgress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AuthorizeSecurityGroupEgress.html)— 向安全组添加一条或多条出口规则，以便与 Snowball Edge 设备配合使用。具体而言，此操作允许实例将流量发送到一个或多个目标 IPv4 CIDR 地址范围。
+ [AuthorizeSecurityGroupIngress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AuthorizeSecurityGroupIngress.html)— 向安全组添加一条或多条入口规则。调用时 AuthorizeSecurityGroupIngress，必须为`GroupName`或指定一个值`GroupId`。
+  [CreateVolume](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVolume.html)— 支持以下请求参数：
  + `SnapshotId`
  + `Size`
  + `VolumeType`
  + `TagSpecification.N`
+ [CreateLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)— 支持以下请求参数：
  + `ImageId`
  + `InstanceType`
  + `SecurityGroupIds`
  + `TagSpecifications`
  + `UserData`
+ [CreateLaunchTemplateVersion](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplateVersion.html)
+ [CreateTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)— 支持以下请求参数：
  + `AMI`
  + `Instance`
  + `Launch template`
  + `Security group`
+ [CreateSecurityGroup](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html)— 在你的 Snowball Edge 上创建一个安全组。您最多可以创建 50 个安全组。创建安全组时，您可以指定选择的友好名称。
+ [DeleteLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplate.html)
+ [DeleteLaunchTemplateVersions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteLaunchTemplateVersions.html)
+ [DeleteSecurityGroup](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteSecurityGroup.html)— 删除安全组。如果您尝试删除与实例关联的安全组或由另一个安全组引用的安全组，则操作将失败，并显示 `DependencyViolation`。
+ [DeleteTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteTags.html)— 从指定的一组资源中删除指定的一组标签。
+  [DeleteVolume](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteVolume.html)— 支持以下请求参数：
  + `VolumeId`
+ [DescribeAddresses](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAddresses.html)
+ [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
+ [DescribeInstanceAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceAttribute.html)— 支持以下属性：
  + `instanceType`
  + `userData`
+ <a name="API_describe-instance-status"></a>[DescribeInstanceStatus](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceStatus.html)
+ [DescribeLaunchTemplates](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html)
+ [DescribeLaunchTemplateVersions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplateVersions.html)
+ [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html)
+ [DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)— 描述您的一个或多个安全组。 `DescribeSecurityGroups`是一个分页操作。您可以发出多个 API 调用以检索结果的整个数据集。
+ [DescribeTags](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTags.html)— 使用此命令，支持以下过滤器：
  + `resource-id`
  + `resource-type`：仅 AMI 或计算实例
  + `key`
  + `value`
+  [DescribeVolume](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVolumes.html)— 支持以下请求参数：
  + `MaxResults`
  + `NextToken`
  + `VolumeId.N`
+  [DetachVolume](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DetachVolumes.html)— 支持以下请求参数：
  + `Device`
  + `InstanceId`
  + `VolumeId`
+ [DisassociateAddress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateAddress.html)
+ [GetLaunchTemplateData](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetLaunchTemplateData.html)
+ [ModifyLaunchTemplate](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyLaunchTemplate.html)
+ [ModifyInstanceAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html)— 仅支持该`userData`属性。
+ [RevokeSecurityGroupEgress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RevokeSecurityGroupEgress.html)— 从安全组中移除一条或多条出口规则。
+ [RevokeSecurityGroupIngress](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RevokeSecurityGroupIngress.html)— 撤销安全组的一个或多个入口规则。调用时 RevokeSecurityGroupIngress，必须为`group-name`或指定一个值`group-id`。
+ [RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) –
**注意**  
在 Snowball Edge 上启动计算实例最多需要 1.5 小时，具体取决于实例的大小和类型。
+ [StartInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartInstances.html)
+ [StopInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StopInstances.html)— 与已停止的实例关联的资源仍然存在。您可以终止该实例以释放这些资源。但是，这会删除所有关联的数据。
+ [TerminateInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TerminateInstances.html)

# 在 Snowball EC2 Edge 上使用启动模板自动启动兼容实例
<a name="ec2-autostart"></a>

您可以使用启动模板和 EC2 Snowball Edge 客户端启动 AWS Snowball Edge 配置命令在设备上自动启动与亚马逊兼容的实例。

*启动模板*包含在 Snowball Edge 上创建与亚马逊 EC2兼容的实例所需的配置信息。您可以使用启动模板来存储启动参数，这样您就不必每次在 Snowball Edge 上启动 EC2兼容的实例时都指定这些参数。

在 Snowball Edge 上使用自动启动配置时，您需要配置与 EC2亚马逊兼容的实例开始的参数。配置 Snowball Edge 后，当您重新启动并解锁时，它会使用您的自动启动配置来启动具有您指定的参数的实例。如果停止使用自动启动配置启动的实例，则在解锁设备时实例将开始运行。

**注意**  
在您首次配置自动启动配置后，请重新启动设备以启动它。所有后续实例启动（计划内或计划外重新启动后）将在 设备解锁后自动启动。

启动模板可以在您启动与亚马逊 EC2兼容的实例时为该实例指定亚马逊系统映像 (AMI) ID、实例类型、用户数据、安全组和标签。有关受支持实例类型的列表，请参阅 [Snowball Edge 设备上计算实例的配额](ec2-edge-limits.md)。

要在 EC2 Snowball Edge 上自动启动兼容的实例，请执行以下步骤：

1. 订购 AWS Snowball Edge 设备时，请创建一个任务来订购带有计算实例的 Snowball Edge 设备。有关更多信息，请参阅[创建订购 Snowball Edge 的任务](https://docs.aws.amazon.com/snowball/latest/developer-guide/create-job-common.html)。

1. 在收到您的 Snowball Edge 后，请对其进行解锁。

1. 使用 EC2兼容的 API 命令`aws ec2 create-launch-template`创建启动模板。

1. 使用 Snowball Edge 客户端命令将 EC2兼容的实例启动模板绑定`snowballEdge create-autostart-configuration`到您的网络配置。有关更多信息，请参阅 [在 Snow EC2 ball Edge 上创建兼容的启动配置](using-ec2-edge-client.md#ec2-edge-create-autostart-config)。

1. 重新启动，然后解锁您的 设备。您的 EC2兼容实例将使用启动模板和 Snowball Edge 客户端命令中指定的属性自动启动。`create-autostart-configuration`

要查看正在运行的实例的状态，请使用 EC2兼容的 API 命令`describe-autostart-configurations`。

**注意**  
没有用于 AWS Snowball Edge 支持启动模板的控制台或任务管理 API。您可以使用 EC2兼容和 Snowball Edge 客户端 CLI 命令在您的设备上自动 EC2启动兼容实例。 AWS Snowball Edge 

# 在 Snowball Edge 上使用适用于与亚马逊 EC2兼容的实例的 Snow 实例元数据服务
<a name="imds"></a>

IMDS for Snow 为 Snow 上 EC2兼容亚马逊的实例提供实例元数据服务 (IMDS)。实例元数据是有关实例的信息类别。它包括*主机名称*、*事件*和*安全组*等类别。使用 IMDS for Snow，您可以使用实例元数据来访问您在启动与 Amazon EC2 兼容的实例时指定的用户数据。例如，您可以使用 适用于 Snow 的 IMDS 指定参数以配置实例，或将这些参数包含在简单的脚本内。您可以构建通用组件， AMIs 并使用用户数据修改启动时提供的配置文件。

要了解实例元数据和用户数据以及 EC2兼容 Snow 的实例，请参阅本指南中的[支持的实例元数据和用户数据](https://docs.aws.amazon.com/snowball/latest/developer-guide/edge-compute-instance-metadata.html)。

**重要**  
虽然您只能从实例本身中访问实例元数据和用户数据，但并未使用身份验证或加密方法对数据进行保护。任何可以直接访问实例的人以及可能在实例上运行的任何软件都可以查看其元数据。因此，您不应将敏感数据（例如密码或长期保存的加密密钥）存储为用户数据。

**注意**  
本节中的示例使用实例元数据服务 IPv4 的地址：169.254.169.254。我们不支持使用本地链接 IPv6 地址检索实例元数据。

**Topics**
+ [Snowball Edge 上的 IMDS 版本](imds-versions.md)
+ [使用 Snowball Edge IMDSv1 和 IMDSv2 在 Snowball Edge 上检索实例元数据的示例](imds-code-examples.md)

# Snowball Edge 上的 IMDS 版本
<a name="imds-versions"></a>

您可以使用 IMDS 版本 2 或 IMDS 版本 1 从正在运行的实例中访问实例元数据：
+ 实例元数据服务版本 2 (IMDSv2)，一种面向会话的方法
+ 实例元数据服务版本 1 (IMDSv1)，一种请求响应方法

根据您的 Snow 软件版本，您可以使用 IMDSv1 IMDSv2、或两者兼而有之。这还取决于 EC2兼容实例中运行的 AMI 类型。有些则 AMIs需要，例如运行 Ubuntu 20.04 的版本。 IMDSv2实例元数据服务根据`PUT`或`GET`标头的存在来区分 IMDSv1 和 IMDSv2 请求。 IMDSv2同时使用这两个标头。 IMDSv1 仅使用标`GET`题。

AWS 鼓励使用 IMDSv2 而不是 IMDSv1 因为 IMDSv2 包括更高的安全性。有关更多信息，请参阅通过增强[实例元数据服务，进一步增强针对开放防火墙、反向代理和 SSRF 漏洞的防御](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)。 EC2 

## IMDSv2 在 Snowball Edge 上
<a name="imdsv2"></a>

当您使用 IMDSv2 请求实例元数据时，请求必须遵循以下规则：

1. 使用 `PUT` 请求启动到实例元数据服务的会话。`PUT` 请求返回一个会话令牌，该令牌必须包括在向实例元数据服务发出的后续 `GET` 请求中。定义会话持续时间的会话令牌。会话持续时间最少可以为 1 秒，最多为 6 小时。在这段时间内，您可以将相同的会话令牌用于后续请求。在这段时间到期后，您必须为将来的请求创建新的会话令牌。使用访问元数据需要使用令牌 IMDSv2。

1. 将该令牌包含在对实例元数据服务的所有 `GET` 请求中。

   1. 令牌是实例特定的密钥。该令牌在其他 EC2兼容实例上无效，如果您尝试在生成令牌的实例之外使用该令牌，则该令牌将被拒绝。

   1. `PUT` 请求必须包含一个标头，它以秒为单位指定令牌的生存时间（TTL），最多为 6 小时（21600 秒）。令牌表示一个逻辑会话。TTL 指定令牌的有效时间长度，因而指定会话的持续时间。

   1. 在令牌过期后，要继续访问实例元数据，您必须使用另一个 `PUT` 请求创建新会话。

   1. 您可以选择在每个请求中重复使用令牌或创建新的令牌。对于少量请求，在每次需要访问实例元数据服务时生成并立即使用令牌可能更方便。但为了提高效率，您可以为令牌指定更长的持续时间并重复使用令牌，而不必在每次需要请求实例元数据时都编写 `PUT` 请求。对并发令牌数量没有实际限制，每个令牌表示自己的会话。

允许在 IMDSv2 实例元数据请求中使用 HTTP `GET` 和`HEAD`方法。 `PUT`如果请求包含`X-Forwarded-For`标头，则会被拒绝。

默认情况下，`PUT` 请求的响应在 IP 协议级别的响应跃点数限制（生存时间）为 1。适用于 Snow 的 IMDS 无法修改 `PUT` 响应的跃点数限制。

以下示例使用 Linux shell 脚本和 IMDSv2 来检索顶级实例元数据项。此示例：

1. 使用 `PUT` 请求创建持续 6 小时（21600 秒）的会话令牌。

1. 将会话令牌标头存储在名为 `TOKEN` 的变量中。

1. 使用令牌请求顶级元数据项。

使用两个命令生成 EC2兼容令牌。您可以单独运行这些命令，也可以作为一个命令运行。

首先，使用以下命令生成令牌。

**注意**  
`X-aws-ec2-metadata-token-ttl-seconds` 是必填的标头。如果未包含此标头，您将收到 **400 - 缺少参数或参数无效**错误代码。

```
    [ec2-user ~]$ TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
```

然后，通过令牌使用以下命令生成顶级元数据项。

```
    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
```

**注意**  
如果创建令牌时发生错误，则会在变量中存储一条错误消息，而不会生成有效令牌，且命令将不起作用。

您可以存储令牌并组合命令。以下示例将上述两个命令组合在一起，并将会话令牌标头存储在名为 `TOKEN` 的变量中。

**Example 组合命令**  

```
    [ec2-user ~]$ TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
```

在创建令牌后，您可以重复使用令牌，直到令牌过期。以下示例命令会获取用于启动实例的 AMI 的 ID，并将其存储在上一示例生成的 `$TOKEN` 中。

**Example 重复使用令牌**  

```
    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id                        
```

## IMDSv1 在 Snowball Edge 上
<a name="imdsv1"></a>

IMDSv1 使用请求-响应模型。要请求实例元数据，您需要向实例元数据服务发送 `GET` 请求。

```
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/                   
```

您的实例元数据可从正在运行的实例中获取，因此您无需使用 Amazon EC2 控制台或 AWS CLI 即可访问它。这在您编写脚本以实现从实例运行时非常有用。例如，您可从实例元数据访问您的实例的本地 IP 地址来以管理与外部应用程序的连接。实例元数据可划分成不同类别。有关每个实例元数据类别的描述，请参阅本指南中的[支持的实例元数据和用户数据](https://docs.aws.amazon.com/snowball/latest/developer-guide/edge-compute-instance-metadata.html)。

要从正在运行的实例中查看所有类别的实例元数据，请使用以下 IPv4 URI：

```
    http://169.254.169.254/latest/meta-data/
```

IP 地址是链路本地地址，仅从该实例访问时有效。有关更多信息，请参阅 Wikipedia 上的[链路本地地址](https://en.wikipedia.org/wiki/Link-local_address)。

所有实例元数据以文本形式返回（HTTP 内容类型 `text/plain`）。

特定元数据资源的请求返回相应的值；如果资源不可用，则返回 **404 - 未找到** HTTP 错误代码。

对通用元数据资源的请求（URI 以 `/` 字符结尾）会返回一个可用资源列表，如果此类资源不存在，则会返回 **404 - 未找到** HTTP 错误代码。列表中的各个项目位于被换行符（ASCII 字符代码 10）终止的不同的行上。

对于使用发出的请求 IMDSv1，可以返回以下 HTTP 错误代码：
+ **400 ‐ 缺少参数或参数无效**：`PUT` 请求无效。
+ **401 ‐ 未授权**：`GET` 请求使用的令牌无效。建议的措施是生成新的令牌。
+ **403 ‐ 禁止访问**：不允许该请求，或禁用了实例元数据服务。

# 使用 Snowball Edge IMDSv1 和 IMDSv2 在 Snowball Edge 上检索实例元数据的示例
<a name="imds-code-examples"></a>

以下示例提供了可以在 Linux 实例上使用的命令。

**Example 获取实例元数据的可用版本**  
此示例可以获取实例元数据的可用版本。当有新的实例元数据类别发布时，每个版本都引用一个实例元数据构建。如果您有依赖于以前版本中所存在的结构和信息的脚本，则您可使用早期版本。  
IMDSv2  

```
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current  Dload  Upload   Total   Spent    Left  Speed
    100        56         100      56      0       0       3733     0    --:--:-- --:--:-- --:--:--  3733
    *   Trying 169.254.169.254...
    * TCP_NODELAY set
    * Connected to 169.254.169.254 (169.254.169.254) port 80 (#0)
    > GET / HTTP/1.1
    > Host: 169.254.169.254
    > User-Agent: curl/7.61.1
    > Accept: */*
    > X-aws-ec2-metadata-token: MDAXcxNFLbAwJIYx8KzgNckcHTdxT4Tt69TzpKExlXKTULHIQnjEtXvD
    >
    * HTTP 1.0, assume close after body
    < HTTP/1.0 200 OK
    < Date: Mon, 12 Sep 2022 21:58:03 GMT
    < Content-Length: 274
    < Content-Type: text/plain
    < Server: EC2ws
    <
    1.0
    2007-01-19
    2007-03-01
    2007-08-29
    2007-10-10
    2007-12-15
    2008-02-01
    2008-09-01
    2009-04-04
    2011-01-01
    2011-05-01
    2012-01-12
    2014-02-25
    2014-11-05
    2015-10-20
    2016-04-19
    2016-06-30
    2016-09-02
    2018-03-28
    2018-08-17
    2018-09-24
    2019-10-01
    2020-10-27
    2021-01-03
    2021-03-23
    * Closing connection 0
```
IMDSv1  

```
    [ec2-user ~]$ curl http://169.254.169.254/
    1.0
    2007-01-19
    2007-03-01
    2007-08-29
    2007-10-10
    2007-12-15
    2008-02-01
    2008-09-01
    2009-04-04
    2011-01-01
    2011-05-01
    2012-01-12
    2014-02-25
    2014-11-05
    2015-10-20
    2016-04-19
    2016-06-30
    2016-09-02
    2018-03-28
    2018-08-17
    2018-09-24
    2019-10-01
    2020-10-27
    2021-01-03
    2021-03-23
    latest
```

**Example 获取顶级元数据项**  
此示例获得顶级元数据项目。有关顶级元数据项的信息，请参阅本指南中的[支持的实例元数据和用户数据](https://docs.aws.amazon.com/snowball/latest/developer-guide/edge-compute-instance-metadata.html)。  
IMDSv2  

```
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ 
    ami-id
    hostname
    instance-id
    instance-type
    local-hostname
    local-ipv4
    mac
    network/
    reservation-id
    security-groups
```
IMDSv1  

```
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ 
    ami-id
    hostname
    instance-id
    instance-type
    local-hostname
    local-ipv4
    mac
    network/
    reservation-id
    security-groups
```

**Example 获取顶级元数据的值**  
以下示例获取在前面的示例中获取的某些顶级元数据项的值。这些 IMDSv2 请求使用在前面的示例命令中创建的存储令牌，前提是该令牌尚未过期。  
`ami‐id` IMDSv2  

```
    curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890                    
```
`ami-id` IMDSv1  

```
    curl http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890                    
```
`reservation-id` IMDSv2  

```
    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
```
`reservation-id` IMDSv1  

```
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id \
    r-0efghijk987654321
```
`local-hostname` IMDSv2  

```
    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-hostname ip-00-000-00-00                    
```
`local-hostname` IMDSv1  

```
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname ip-00-000-00-00
```

# 在 Snowball Edge 上将块存储与亚马逊 EC2兼容的实例一起使用
<a name="edge-ebs"></a>

借助 Snowball Edge 上的数据块存储，您可以根据您应用的需求添加或删除块存储。连接到 Amazon EC2 兼容实例的卷作为存储卷公开，这些存储卷独立于实例的生命周期。您可以使用熟悉的 Amazon EBS API 来管理数据块存储。

使用 EC2兼容的终端节点支持某些 Amazon EBS 命令。支持的命令包括 `attach-volume`、`create-volume`、`delete-volume`、`detach-volume` 和 `describe-volumes`。有关这些命令的更多信息，请参阅[Snowball EC2 E AWS CLI dge 上支持的兼容命令列表](using-ec2-endpoint.md#list-cli-commands-ec2-edge)。

**重要**  
分离卷之前，请确保在操作系统中卸载设备上的所有文件系统，否则可能会导致数据丢失。

接下来，您可以了解 Amazon EBS 卷限额以及您 设备上的 Amazon SBE 卷与云中 Amazon EBS 卷之间的差别：
+ Amazon EBS 卷仅适用于在托管卷的设备上运行的 EC2兼容实例。
+ 卷类型限制为容量优化 HDD（`sbg1`）或性能优化 SSD（`sbp1`）的任何一种。默认卷类型为 `sbg1`。
+ Snowball Edge 在 Amazon S3 对象和 Amazon S3 EBS 之间共享 HDD 内存。如果您在上使用基于 HDD 的数据块存储 AWS Snowball Edge，则会减少 Amazon S3 对象的可用内存量。同样，Amazon S3 对象也会减少 HDD 卷上 Amazon EBS 块存储的可用内存量。
+  EC2与 Amazon 兼容的根卷始终使用 IDE 驱动程序。其他 Amazon EBS 卷将优先使用 Virtio 驱动程序（如果有）。如果 Virtio 驱动程序不可用，SBE 将默认使用 IDE 驱动程序。Virtio 驱动程序可实现更好的性能，因此建议采用。
+ 当创建 Amazon EBS 卷时，不支持 `encrypted` 参数。但是，设备上的所有数据默认情况下都已加密。
+ 卷大小可以在 1GB 到 10TB 之间。
+ 一个 EC2兼容的实例最多可以连接 10 个 Amazon EBS 卷。
+ 对于 AWS Snowball Edge 设备上可以具有的 Amazon EBS 卷的数量并没有正式的限制。但是，总 Amazon EBS 卷容量受您 设备上的可用空间限制。

# 在 Snowball Edge 上使用安全组控制网络流量
<a name="edge-security-groups"></a>

*安全组* 起着虚拟防火墙的作用，可控制一个或多个实例的流量。在您启动实例时，将一个或多个安全组与该实例相关联。您可以为每个安全组添加规则，规定流入或流出其关联实例的流量。有关更多信息，请参阅[亚马逊 EC2 用户指南中的适用于 Linux 实例的亚马逊 EC2 安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)。

Snowball Edge 设备上的安全组类似于 AWS 云中的安全组。Snowball Edge 设备不支持虚拟私有云 (VPCs)。

下面，您可以找到 Snowball Edge 安全组和 VP EC2 C 安全组之间的其他区别：
+ 每个 Snowball Edge 设备都有 50 个安全组的限制。
+ 默认安全组允许所有入站和出站流量。
+ 本地实例之间的流量可以使用私有实例 IP 地址或公有 IP 地址。例如，假设您要使用 SSH 从实例 A 连接到实例 B。在这种情况下，如果安全组规则允许流量，则您的目标 IP 地址可以是实例 B 的公有 IP 或私有 IP 地址。
+ 仅支持为 AWS CLI 操作和 API 调用列出的参数。这些通常是 VPC 实例所支持的 EC2 实例的子集。

有关支持的 AWS CLI 操作的更多信息，请参阅[Snowball EC2 E AWS CLI dge 上支持的兼容命令列表](using-ec2-endpoint.md#list-cli-commands-ec2-edge)。有关支持的 API 操作的更多信息，请参阅[在 Snowball EC2 Edge 上支持与亚马逊兼容的 API 操作](using-ec2-endpoint.md#using-ec2-adapter-supported-api)。

# EC2Snowball Edge 上支持兼容的实例元数据和用户数据
<a name="edge-compute-instance-metadata"></a>

*实例元数据* 是有关您的实例的数据，可以用来配置或管理正在运行的实例。Snowball Edge 为您的计算实例支持一部分实例元数据类别。有关更多信息，请参阅 Amazon [用户指南中的实例元数据和](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) EC2 用户数据。

支持以下类别。使用任何其他类别将返回 `404` 错误消息。


**Snowball Edge 设备上支持的实例元数据类别**  

| 数据 | 描述 | 
| --- | --- | 
|  ami-id  | 用于启动实例的 AMI ID。 | 
| hostname | 实例的私 IPv4 有 DNS 主机名。 | 
|  instance-id  | 此实例的 ID。 | 
|  instance-type  | 实例的类型。 | 
|  local-hostname  | 实例的私 IPv4 有 DNS 主机名。 | 
|  local-ipv4  | 实例的私有 IPv4 地址。 | 
|  mac  | 实例的媒体访问控制（MAC）地址。 | 
|  network/interfaces/macs/mac/local-hostname  | 实例的本地主机名称。 | 
|  network/interfaces/macs/mac/local-ipv4s  | 与接口关联的私有 IPv4 地址。 | 
|  network/interfaces/macs/mac/mac  | 该实例的 MAC 地址。 | 
|  network/interfaces/macs/mac/public-ipv4s  | 与接口关联的弹性 IP 地址。 | 
|  public-ipv4  | 公共 IPv4 地址。 | 
|  public-keys/0/openssh-key  | 公有密钥。仅在实例启动时提供了公有密钥的情况下可用。 | 
|  reservation-id  | 预留的 ID。 | 
| userData | Shell 脚本，用于在启动时向实例发送指令。 | 


**Snowball Edge 设备上支持的实例动态数据类别**  

| 数据 | 描述 | 
| --- | --- | 
| instance-identity/document | 包含实例属性的 JSON。只有 instanceId、imageId、privateIp 和 instanceType 有值，其他返回的属性为 Null。有关更多信息，请参阅 Amazon EC2 用户指南中的[实例身份证件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)。 | 

## Snowball Edge 上的计算机实例用户数据
<a name="userdatasupport"></a>

使用 Shell 脚本来访问 Snowball Edge 设备上的计算实例用户数据。使用 Shell 脚本，可以在启动时向实例发送指令。您可以使用`modify-instance-attribute` AWS CLI 命令或 `ModifyInstanceAttribute` API 操作更改用户数据。

**更改用户数据**

1. 使用`stop-instances` AWS CLI 命令停止计算实例。

1. 使用`modify-instance-attribute` AWS CLI 命令修改`userData`属性。

1. 使用`start-instances` AWS CLI 命令重启计算实例。

计算实例仅支持使用 Shell 脚本。在 Snowball Edge 设备上运行的计算实例不支持 `cloud-init` 软件包指令。有关使用 AWS CLI 命令的更多信息，请参阅《*[AWS CLI 命令参考](https://docs.aws.amazon.com/cli/latest/reference/)》。*

## 停止在 EC2 Snowball Edge 上运行的兼容实例
<a name="managing-ec2-instances"></a>

为避免意外删除您在设备上创建的 EC2与 Amazon 兼容的实例，请不要从操作系统中关闭您的实例。例如，请勿使用 `shutdown` 或 `reboot` 命令。从操作系统内关闭实例具有和调用 [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) 命令相同的效果。

相反，请使用 [stop-instances 命令暂停](https://docs.aws.amazon.com/cli/latest/reference/ec2/stop-instances.html)要 EC2保留的与亚马逊兼容的实例。