

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# 通过互联网共享运行的应用程序
<a name="app-preview-share"></a>

在预览运行的应用程序后，您可以通过 Internet 为其他人提供该应用程序。

如果 Amazon EC2 实例已连接到您的环境，请执行以下步骤。否则，请查阅您的服务器的文档。

**Topics**
+ [步骤 1：获取实例的 ID 和 IP 地址](#app-preview-share-get-metadata)
+ [步骤 2：为实例设置安全组](#app-preview-share-security-group)
+ [步骤 3：为实例设置子网](#app-preview-share-subnet)
+ [步骤 4：共享运行的应用程序 URL](#app-preview-share-url)

## 步骤 1：获取实例的 ID 和 IP 地址
<a name="app-preview-share-get-metadata"></a>

在该步骤中，请记下连接到环境的 Amazon EC2 实例的实例 ID 和公有 IP 地址。您需要在后面的步骤中使用实例 ID 以允许传入应用程序请求。然后，与其他人分享该公有 IP 地址，以便他们可以访问运行的应用程序。

1. 获取 Amazon EC2 实例的 ID。要获取该 ID，请执行下列操作之一：
   + 在 AWS Cloud9 IDE 环境的终端会话中，运行以下命令以获取 Amazon EC2 实例的 ID。

     ```
     curl http://169.254.169.254/latest/meta-data/instance-id
     ```

     实例 ID 采用以下格式：`i-12a3b456c789d0123`。记下该实例 ID。
   + 在环境的 IDE 中，在菜单栏上选择您的用户图标，然后选择 **Manage EC2 Instance（管理 EC2 实例）**。  
![选择从 AWS Cloud9 IDE 中管理实例](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/console-manage-instance.png)

     在显示的 Amazon EC2 控制台中，记下在 **Instance ID（实例 ID）**列中显示的实例 ID。实例 ID 采用以下格式：`i-12a3b456c789d0123`。

1. 获取 Amazon EC2 实例的公有 IP 地址。要获取该 ID，请执行下列操作之一：
   + 在环境的 IDE 中，在菜单栏上选择 **Share（共享）**。在 **Share this environment（共享此环境）**对话框中，记下 **Application（应用程序）**框中的公有 IP 地址。公有 IP 地址采用以下格式：`192.0.2.0`。
   + 在环境 IDE 的终端会话中，运行以下命令以获取 Amazon EC2 实例的公有 IP 地址。

     ```
     curl http://169.254.169.254/latest/meta-data/public-ipv4
     ```

     公有 IP 地址采用以下格式：`192.0.2.0`。记下该公有 IP 地址。
   + 在环境的 IDE 中，在菜单栏上选择您的用户图标，然后选择 **Manage EC2 Instance（管理 EC2 实例）**。在显示的 Amazon EC2 控制台中，在**描述**选项卡上，记下公有 IP 字段的**IPv4 公有 IP** 地址。公有 IP 地址采用以下格式：`192.0.2.0`。
**注意**  
您的应用程序的公有 IP 地址可能会在应用程序的实例重启时发生变化。要防止您的 IP 地址发生变化，请分配弹性 IP 地址。然后，将该地址分配给正在运行的实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[分配弹性 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-instance-addressing-eips-allocating)和[将弹性 IP 地址与正在运行的实例关联起来](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-instance-addressing-eips-associating)。分配弹性 IP 地址可能会 AWS 账户 导致您产生费用。有关更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)。

## 步骤 2：为实例设置安全组
<a name="app-preview-share-security-group"></a>

在此步骤中，在 Amazon EC2 控制台上，为连接到环境的实例设置 Amazon EC2 安全组。将其设置为允许通过端口 8080、8081 或 8082 传入 HTTP 请求。

**注意**  
您无需通过端口 `8080`、`8081` 或 `8082` 使用 HTTP 运行。如果您不这样做，将无法从 IDE 中预览运行的应用程序。有关更多信息，请参阅 [预览运行的应用程序](app-preview.md#app-preview-preview-app)。如果在不同的协议或端口上运行，请在该步骤中替换为该协议或端口。  
要提供额外的安全层，请为实例可使用的 VPC 中的子网设置网络访问控制列表 (ACL)。有关安全组和网络的更多信息 ACLs，请参阅以下内容：  
 [步骤 3：为实例设置子网](#app-preview-share-subnet) 
 *Amazon VPC 用户指南*中的[安全](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Security.html)
 *Amazon VPC 用户指南*中的[您的 VPC 安全组](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)
 *亚马逊 VPC 用户指南 ACLs*中的@@ [网络](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)

1. 在环境的 IDE 中，在菜单栏上选择您的用户图标，然后选择 **Manage EC2 Instance（管理 EC2 实例）**。然后，跳到本过程的步骤 3。

1. 如果选择 **Manage EC2 Instance**（管理 EC2 实例）或者该过程中的其他步骤返回错误，请使用您的 AWS 账户中管理员的凭证登录到 Amazon EC2 控制台。然后按照以下说明进行操作。如果您无法执行此操作，请咨询您的 AWS 账户 管理员。

   1. 如果您尚未登录， AWS 管理控制台 请登录 “[https://console.aws.amazon.com/](https://console.aws.amazon.com/)”。

   1. 打开 Amazon EC2 控制台。为此，请在导航栏中选择 **Services**（服务）。然后选择 **EC2**。

   1. 在导航栏中，选择您的环境所在 AWS 区域 的位置。

   1. 如果显示 **EC2 控制面板**，请选择 **Running Instances（正在运行的实例）**。否则，在服务导航窗格中展开 **Instances**（实例）（如果尚未展开），然后选择 **Instances**（实例）。

   1. 在实例列表中，选择 **Instance ID**（实例 ID）与您之前记下的实例 ID 相匹配的实例。

1. 在实例的 **Description**（描述）选项卡中，选择 **Security groups**（安全组）旁边的安全组链接。

1. 在显示安全组的情况下，查看 **Inbound（入站）**选项卡。如果有一个规则，其中 **Type**（类型）设置为 **Custom Tcp Rule**（自定义 TCP 规则），**Port Range**（端口范围）设置为 **8080**、**8081** 或 **8082**，请选择 **Cancel**（取消），然后向前跳到[步骤 3：为实例设置子网](#app-preview-share-subnet)。否则，请选择 **Edit（编辑）**。

1. 在 **Edit inbound rules（编辑入站规则）**对话框中，选择 **Add Rule（添加规则）**。

1. 对于 **Type（类型）**，选择 **Custom TCP Rule（自定义 TCP 规则）**。

1. 对于 **Port Range**（端口范围），输入 `8080`、`8081` 或 `8082`。

1. 对于 **Source（源）**，请选择 **Anywhere（任何位置）**。
**注意**  
通过对 **Source**（源）选择 **Anywhere**（任何位置），则允许来自任何 IP 地址的传入请求。要将其限定为特定 IP 地址，请选择 **Custom**（自定义），然后输入 IP 地址范围。或者，请选择 **My IP**（我的 IP）将请求限制为仅来自您的 IP 地址。

1. 选择**保存**。

## 步骤 3：为实例设置子网
<a name="app-preview-share-subnet"></a>

使用 Amazon EC2 和 Amazon VPC 控制台为连接到环境的 Amazon EC2 实例设置子网。然后，允许通过端口 8080、8081 或 8082 传入 HTTP 请求。

**注意**  
您无需通过端口 `8080`、`8081` 或 `8082` 使用 HTTP 运行。不过，如果您不这样做，将无法从 IDE 中预览运行的应用程序。有关更多信息，请参阅 [预览运行的应用程序](app-preview.md#app-preview-preview-app)。如果在不同的协议或端口上运行，请在该步骤中替换为该协议或端口。  
该步骤介绍如何为实例可使用的 Amazon VPC 中的子网设置网络 ACL。这不是必须执行的，但建议执行。设置网络 ACL 可增加额外的安全层。有关网络的更多信息 ACLs，请参阅以下内容：  
 *Amazon VPC 用户指南*中的[安全](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Security.html)
 *亚马逊 VPC 用户指南 ACLs*中的@@ [网络](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)

1. 在 Amazon EC2 控制台的服务导航窗格中，展开 **Instances**（实例）（如果尚未展开），然后选择 **Instances**（实例）。

1. 在实例列表中，选择 **Instance ID**（实例 ID）与您之前记下的实例 ID 相匹配的实例。

1. 在实例的 **Description（描述）** 选项卡中，记下 **Subnet ID（子网 ID）**值。子网 ID 采用以下格式：`subnet-1fab8aEX`。

1. 打开 Amazon VPC 控制台。为此，请在 AWS 导航栏中选择 “**服务**”，然后选择 **VPC**。

   对于此步骤，建议使用您的 AWS 账户中管理员的凭证登录到 Amazon VPC 控制台。如果您无法执行此操作，请咨询您的 AWS 账户 管理员。

1. 如果显示 **VPC Dashboard（VPC 控制面板）**，请选择 **Subnet（子网）**。否则，在服务导航窗格中，选择 **Subnets（子网）**。

1. 在子网列表中，选择 **Subnet ID**（子网 ID）值与您之前记下的子网 ID 相匹配的子网。

1. 在 **Summary**（摘要）选项卡上，选择 **Network ACL**（网络 ACL）旁边的网络 ACL 链接。

1. 在网络列表中 ACLs，选择网络 ACL。（只有一个网络 ACL。）

1. 查看网络 ACL 的 **Inbound Rules（入站规则）**选项卡。如果已有一个规则，其中 **Type（类型）**设置为 **HTTP\* (8080)**、**HTTP\* (8081)** 或 **HTTP\* (8082)**，请向前跳到 [步骤 4：共享运行的应用程序 URL](#app-preview-share-url)。否则，请选择 **Edit（编辑）**。

1. 选择 **Add another rule（添加其他规则）**。

1. 对于 **Rule \#**（规则号），请输入该规则的编号（例如 `200`）。

1. 对于 **Type（类型）**，选择 **Custom TCP Rule（自定义 TCP 规则）**。

1. 对于 **Port Range（端口范围）**，请键入 `8080`、`8081` 或 `8082`。

1. 对于 **Source（源）**，请键入允许发送传入请求的 IP 地址范围。例如，要允许来自任何 IP 地址的传入请求，请输入 `0.0.0.0/0`。

1. 在将 **Allow/Deny（允许/拒绝）**设置为 **ALLOW（允许）** 的情况下，选择 **Save（保存）**。

## 步骤 4：共享运行的应用程序 URL
<a name="app-preview-share-url"></a>

应用程序运行后，您可以通过提供应用程序的 URL 与其他人共享您的应用程序。为此，您需要之前提到的公有 IP 地址。要编写应用程序的完整 URL，请确保使用正确的协议启动应用程序的公有 IP 地址。接下来，如果您的应用程序端口不是它所用协议的默认端口，请添加端口号信息。以下是一个示例应用程序 URL：`http://192.0.2.0:8080/index.html` 通过端口 8080 使用 HTTP。

如果出现的 Web 浏览器标签页显示错误或空白，请执行[无法显示在 IDE 以外运行的应用程序](troubleshooting.md#troubleshooting-app-sharing)中的故障排除步骤。

**注意**  
您的应用程序的公有 IP 地址可能会在应用程序的实例重启时发生变化。要禁止更改该 IP 地址，请分配弹性 IP 地址，然后将该地址分配给正在运行的实例。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[分配弹性 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-instance-addressing-eips-allocating)和[将弹性 IP 地址与正在运行的实例关联起来](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#using-instance-addressing-eips-associating)。分配弹性 IP 地址可能会 AWS 账户 导致您产生费用。有关更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)。  
您无需使用 HTTP 通过端口 `8080`、`8081` 或 `8082` 运行应用程序。不过，如果您不这样做，将无法从 IDE 中预览运行的应用程序。有关更多信息，请参阅 [预览运行的应用程序](app-preview.md#app-preview-preview-app)。  
例如，假设来自 VPN 的请求会阻止通过请求的协议或端口的流量。然后，那些访问您的应用程序 URL 的请求可能会失败。必须从允许通过请求的协议和端口传输流量的不同网络发出请求。有关更多信息，请与您的网络管理员联系。  
建议不要与其他人共享 IDE 的应用程序预览标签页中的 URL。(此网址采用以下格式:`https://12a34567b8cd9012345ef67abcd890e1.vfs.cloud9.us-east-2.amazonaws.com/`. 在这种格式中，`12a34567b8cd9012345ef67abcd890e1`是 AWS Cloud9 分配给环境的 ID。 `us-east-2`是环境 AWS 区域 的 ID。） 仅当环境的 IDE 处于打开状态并且应用程序正在同一个 Web 浏览器中运行时，此 URL 才有用。