

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

# 入门 AWS CloudShell
<a name="getting-started"></a>

本入门教程向您展示如何使用 shell 命令行界面启动 AWS CloudShell 和执行关键任务。

首先，您登录 AWS 管理控制台 并选择一个 AWS 区域。然后，您可以在新的浏览器窗口 CloudShell 中启动，并选择要使用的外壳类型。

接下来，在主目录中创建一个新文件夹，然后从本地计算机上传一个文件到该文件夹。在从命令行将该文件作为程序运行之前，您可以使用预安装的编辑器处理文件。最后，您调用 AWS CLI 命令创建 Amazon S3 存储桶，并将您的文件作为对象添加到该存储桶。

## 先决条件
<a name="getting-started-prerequesities"></a>

**IAM 权限**

您可以 AWS CloudShell 通过将以下 AWS 托管策略附加到您的 IAM 身份（例如用户、角色或群组）来获取权限：
+ **AWSCloudShellFullAccess**：为用户提供对 AWS CloudShell 及其功能的完全访问权限。

在本教程中，您还可以与之互动 AWS 服务。更具体地说，您可以通过创建 S3 存储桶并向该存储桶添加对象来与 Amazon S3 进行交互。您的 IAM 身份需要一个至少授予 `s3:CreateBucket` 和 `s3:PutObject` 权限的策略。

有关更多信息，请参阅《*Amazon Simple Storage Service 用户指南*》中的 [Amazon S3 操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-actions)。

**练习文件**

此练习还包括上传和编辑一个文件，然后在命令行界面中将该文件作为程序运行。在本地计算机上打开文本编辑器并添加以下代码段。

```
import sys
x=int(sys.argv[1])
y=int(sys.argv[2])
sum=x+y
print("The sum is",sum)
```

使用文件名 `add_prog.py` 保存该文件。

## 内容
<a name="getting-started-contents"></a>
+ [第 1 步：登录 AWS 管理控制台](#start-session)
+ [第 2 步：选择区域 AWS CloudShell，启动并选择外壳](#launch-region-shell)
+ [第 3 步：从中下载文件 AWS CloudShell](#download-file)
+ [第 4 步：将文件上传到 AWS CloudShell](#folder-upload)
+ [第 5 步：从中移除文件 AWS CloudShell](#remove-files)
+ [步骤 6：创建主目录备份](#home-directory-backup)
+ [步骤 7：重新启动 Shell 会话](#restart-shell-session)
+ [步骤 8：删除 Shell 会话主目录](#delete-shell-session)
+ [步骤 9：编辑文件代码并从命令行运行](#edit-run)
+ [步骤 10：使用将文件作为对象添加 AWS CLI 到 Amazon S3 存储桶中](#s3-put)

## 第 1 步：登录 AWS 管理控制台
<a name="start-session"></a>

此步骤包括输入您的 IAM 用户信息以访问 AWS 管理控制台。如果您已经在控制台中，请跳至[步骤 2](#launch-region-shell)。
+ 您可以使用 IAM 用户的登录 URL 或前往主登录页面来访问。 AWS 管理控制台 

------
#### [ IAM user sign-in URL ]
  + 打开浏览器并输入以下登录 URL。将 `account_alias_or_id` 替换为管理员提供的账户别名或账户 ID。

    ```
    https://account_alias_or_id.signin.aws.amazon.com/console/
    ```
  + 输入您的 IAM 登录凭证，然后选择 **登录**。

------
#### [ Main sign-in page ]
  + 打开 [https://aws.amazon.com/console/](https://aws.amazon.com/console/)。
  + 如果您之前没有使用此浏览器登录过，则会显示主登录页面。选择 IAM 用户，输入账户别名或账户 ID，然后选择**下一步**。
  + 如果您之前已经以 IAM 用户身份登录过，浏览器可能会记住 AWS 账户的账户别名或账户 ID。如果是这一情况，输入您的 IAM 登录凭证，然后选择 **登录**。

------
**注意**  
您也可以以[根用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/)身份登录。此身份可以完全访问账户中的所有资源 AWS 服务 和资源。但是，我们强烈建议您不要使用根用户来执行日常任务，即使是管理任务。相反，请遵循仅使用根用户创建您的第一个 IAM 用户的最佳实践。

## 第 2 步：选择区域 AWS CloudShell，启动并选择外壳
<a name="launch-region-shell"></a>

在此步骤中，您将 CloudShell从控制台界面启动，选择可用的 shell AWS 区域，然后切换到您的首选 shellBash，例如 PowerShell、或Z shell。

1. 要选择 AWS 区域 要工作的区域，请前往 **“选择区域**” 菜单，然后选择要使用的[支持 AWS 区域](supported-aws-regions.md)。（可用区域突出显示。）
**重要**  
如果您切换区域，则界面会刷新，所选 AWS 区域 的名称将显示在命令行文本的上方。您添加到持久性存储空间的所有文件都仅在同一 AWS 区域可用。如果您更改区域，则可以访问不同的存储空间和文件。
**重要**  
如果您 CloudShell 在主机左下角启动时 CloudShell 在所选区域中不可用，则默认区域将设置为最接近所选区域的区域。Console Toolbar您可以运行该命令，该命令提供在与默认区域不同的区域中管理资源的权限。有关更多信息，请参阅[在中工作 AWS 区域](working-with-aws-cloudshell.md#region-selection)。  

**Example**  
**示例**  
如果您选择欧洲（西班牙），eu-south-2但在欧洲（西班牙） CloudShell 不可用eu-south-2，则默认区域将设置为欧洲（爱尔兰）eu-west-1，它离欧洲（西班牙）最近eu-south-2。  
您将使用默认地区欧洲（爱尔兰）的服务配额，eu-west-1并且将在所有地区恢复相同的会 CloudShell 话。默认区域可能会更改， CloudShell 浏览器窗口中将通知您。

1. 从中 AWS 管理控制台，您可以 CloudShell 通过选择以下选项之一来启动：

   1. 在导航栏上选择 **CloudShell** 图标。

   1. 在 “**搜索**” 框中，键入 “CloudShell”，然后选择**CloudShell**。

   1. 在 “**最近访问过**” 控件中，选择**CloudShell**。

   1. 选择**CloudShell**控制Console Toolbar台左下角的。
      + 您可以通过拖动来调整 CloudShell会话的高度`=`。
      + 通过单击 “**在新浏览器选项卡中打开”，可以将 CloudShell 会话切换到全屏模式**。

   当系统显示命令提示符时，表示 shell 已经准备就绪，可以进行交互。
**注意**  
如果您遇到阻碍您成功启动或与之交互的问题 AWS CloudShell，请在中查看信息以识别和解决这些问题[故障排除 AWS CloudShell](troubleshooting.md)。

1. 要选择要使用的预安装 Shell，请在命令行提示栏中输入以下程序名称之一：

------
#### [ Bash ]

   `bash`

   如果切换到 Bash，则命令提示符处的符号将更新为 `$`。

**注意**  
Bash是你启动时正在运行的默认 shell AWS CloudShell。

------
#### [ PowerShell ]

   `pwsh`

   如果切换到 PowerShell，则命令提示符处的符号将更新为`PS>`。

------
#### [ Z shell ]

   `zsh`

   如果切换到 Z shell，则命令提示符处的符号将更新为 `%`。

------

   有关您的 shell 环境中预安装的版本的信息，请参阅 [AWS CloudShell 计算环境](vm-specs.md)部分的 sh [ells 表](vm-specs.md#installed-shells)。

## 第 3 步：从中下载文件 AWS CloudShell
<a name="download-file"></a>

**注意**  
此选项不适用于 VPC 环境。

此步骤指导您完成下载文件的过程。

1. 要下载文件，请转到**操作**，然后从菜单中选择**下载文件**。

   将显示**下载文件**对话框。

1. 在**下载文件**对话框中，输入要下载的文件的路径。
**注意**  
指定要下载的文件时，可以使用绝对路径或相对路径。对于相对路径名，默认情况下 `/home/cloudshell-user/` 会自动添加到开头。因此，要下载名为 `mydownload-file` 的文件，以下两个路径都是有效的路径：  
**绝对路径：**`/home/cloudshell-user/subfolder/mydownloadfile.txt`
**相对路径：**`subfolder/mydownloadfile.txt`

1. 选择**下载**。

   如果文件路径正确，则会显示一个对话框。您可以使用此对话框通过默认应用程序打开文件。或者，您可以将文件保存到本地计算机上的某个文件夹。

**注意**  
当您在 CloudShell 上启动时，“下载” 选项不可用Console Toolbar。您可以从 CloudShell 控制台或使用 Chrome 网络浏览器下载文件。

## 第 4 步：将文件上传到 AWS CloudShell
<a name="folder-upload"></a>

**注意**  
此选项不适用于 VPC 环境。

此步骤介绍如何上传文件，然后将其移至主目录中的新目录。<a name="create-folder-upload-file"></a>

1. 要检查当前的工作目录，请在提示符下输入以下命令：

   `pwd`

   当您按 **Enter** 键时，Shell 会返回您当前的工作目录（例如，`/home/cloudshell-user`）。

1. 要将文件上传到该目录，请转至**操作**并从菜单中选择**上传文件**。

   将显示**上传文件**对话框。

1. 选择 **Browse**。

1. 在系统的**文件上传**对话框中，选择您为本教程（`add_prog.py`）创建的文本文件，然后选择**打开**。

1. 在 **上传** 对话框里，选择**添加文件**。

   进度条会跟踪上传情况。如果上传成功，则会显示一条消息，确认 `add_prog.py` 已添加到主目录的根目录中。

1. 要为文件创建目录，请输入 make directories 命令：`mkdir mysub_dir`。

1. 要将上传的文件从主目录的根目录移动到新目录，请使用 `mv` 命令：

   `mv add_prog.py mysub_dir`.

1. 要将工作目录更改为新目录，请输入 `cd mysub_dir`。

   命令提示符会更新以表明您已更改工作目录。

1. 要查看当前目录 `mysub_dir` 的内容，请输入 `ls` 命令。

   列出工作目录的内容。这包括您刚刚上传的文件。

## 第 5 步：从中移除文件 AWS CloudShell
<a name="remove-files"></a>

此步骤介绍如何从中删除文件 AWS CloudShell。<a name="remove-files-proc"></a>

1. 要从中删除文件 AWS CloudShell，请使用标准 shell 命令，例如`rm`（删除）。

   `rm my-file-for-removal`

1. 要移除多个符合指定条件的文件，请运行 `find` 命令。

   以下示例删除了名称中包含后缀“.pdf”的所有文件。

   ```
   find -type f -name '*.pdf' -delete
   ```

**注意**  
假设您停止 AWS CloudShell 在特定环境中使用 AWS 区域。然后，该区域的持续性存储中的数据将在指定时间段后自动删除。更多信息，请参阅[持久性存储](limits.md#persistent-storage-limitations)。

## 步骤 6：创建主目录备份
<a name="home-directory-backup"></a>

此步骤介绍如何创建主目录备份。<a name="home-directory-backup-proc"></a>

1. **创建备份文件**

   在主目录之外创建一个临时文件夹。

   ```
   HOME_BACKUP_DIR=$(mktemp --directory)
   ```

   您可以使用以下方法之一创建备份：

   1. **使用 tar 创建备份文件**

      要使用 tar 创建备份文件，请输入以下命令：

      ```
      tar \
          --create \
          --gzip \
          --verbose \
          --file=${HOME_BACKUP_DIR}/home.tar.gz \
          [--exclude ${HOME}/.cache] \ // Optional
          ${HOME}/
      echo "Home directory backed up to this file: ${HOME_BACKUP_DIR}/home.tar.gz"
      ```

   1. **使用 zip 创建备份文件**

      要使用 zip 创建备份文件，请输入以下命令：

      ```
      zip \
          --recurse-paths \
          ${HOME_BACKUP_DIR}/home.zip \
          ${HOME} \
          [--exclude ${HOME}/.cache/\*] // Optional
      echo "Home directory backed up to this file: ${HOME_BACKUP_DIR}/home.zip"
      ```

1. **将备份文件传输到外面 CloudShell** 

   您可以使用以下选项之一将备份文件传输到外部 CloudShell：

   1. **将备份文件下载到本地计算机上**

      您可以下载在先前步骤中创建的文件。有关如何从中下载文件的更多信息 CloudShell，请参阅[从下载文件 AWS CloudShell](#download-file)。

      在“下载文件”对话框中，输入要下载的文件的路径（例如，`/tmp/tmp.iA99tD9L98/home.tar.gz`）。

   1. **将备份文件传输到 S3**

      要生成存储桶，请输入以下命令：

      ```
      aws s3 mb s3://${BUCKET_NAME}
      ```

      使用 AWS CLI 将文件复制到 S3 存储桶：

      ```
      aws s3 cp ${HOME_BACKUP_DIR}/home.tar.gz s3://${BUCKET_NAME}
      ```
**注意**  
可能会收取数据传输费用。

1. **直接备份到 S3 存储桶**

   要直接备份到 S3 存储桶，请输入以下命令：

   ```
   aws s3 cp \
       ${HOME}/ \
       s3://${BUCKET_NAME} \
       --recursive \
       [--exclude .cache/\*] // Optional
   ```

## 步骤 7：重新启动 Shell 会话
<a name="restart-shell-session"></a>

此步骤介绍如何重新启动 shell 会话。

**注意**  
作为一项安全措施，如果您长时间不使用键盘或指针与 Shell 进行交互，则会话会自动停止。长时间运行的会话也会自动停止。有关更多信息，请参阅 [Shell 会话](limits.md#session-lifecycle-limitations)。

1. 要重新启动 Shell 会话，请依次选择**操作**和**重新启动**。

   系统会通知您，重新启动会 AWS CloudShell 停止当前 AWS 区域的所有活动会话。

1. 要确认，请选择**重新启动**。

   接口显示一条消息，表示 CloudShell 计算环境正在停止。环境停止并重新启动后，您可以开始在新会话中使用命令行。
**注意**  
在某些情况下，环境重新启动可能需要几分钟时间。

## 步骤 8：删除 Shell 会话主目录
<a name="delete-shell-session"></a>

此步骤介绍如何删除 shell 会话。

**注意**  
此选项不适用于 VPC 环境。重启 VPC 环境时，其主目录将被删除。

**警告**  
删除主目录是一项不可逆的操作，即存储在主目录中的所有数据将被永久删除。但是，在以下情况下，您可以考虑使用此选项：  
您错误地修改了文件并且无法访问 AWS CloudShell 计算环境。删除您的主目录会 AWS CloudShell 恢复其默认设置。
您想 AWS CloudShell 立即从中删除所有数据。如果您停止 AWS CloudShell 在某个 AWS 区域中使用，则永久存储将在[保留期结束时自动删除](limits.md#persistent-storage-limitations)，除非您在该地区 AWS CloudShell 重新启动。
如果您需要长期存储文件，请考虑使用 Amazon S3 等服务。

1. 要删除 Shell 会话，请选择**操作**、**删除**。

   系统会通知您，删除 AWS CloudShell 主目录会删除当前存储在您的 AWS CloudShell 环境中的所有数据。
**注意**  
您不能撤消此操作。

1. 要确认删除操作，请在文本输入字段中输入位置名称，然后选择 **删除**。

   AWS CloudShell 将停止当前 AWS 区域中的所有活动会话。您可以创建新环境或设置 CloudShell VPC 环境。

1. 要创建新环境，请选择**打开选项卡**。

1. 要创建 CloudShell VPC 环境，请选择**创建 VPC 环境**。

   **手动退出 Shell 会话**

   使用命令行，您可以退出 Shell 会话并使用 `exit` 命令进行注销。然后，您可以按任意键重新连接并继续使用 AWS CloudShell。

## 步骤 9：编辑文件代码并使用命令行运行
<a name="edit-run"></a>

此步骤演示如何使用预安装的 Vim 编辑器来处理文件。然后，您可以从命令行将该文件作为程序运行。

1. 要编辑您在上一步骤中上传的文件，请输入以下命令：

   `vim add_prog.py`

   Shell 界面将刷新以显示 Vim 编辑器。

1. 要在 Vim 中编辑文件，请按 **I** 键。现在编辑内容，让程序将三个数字而不是两个数字相加。

   ```
   import sys
   x=int(sys.argv[1])
   y=int(sys.argv[2])
   z=int(sys.argv[3])
   sum=x+y+z
   print("The sum is",sum)
   ```
**注意**  
如果您将文本粘贴到编辑器中并启用了[安全粘贴功能](customizing-cshell.md#safe-paste-enable)，则会显示一条警告。复制的多行文本可能包含恶意脚本。使用“安全粘贴”功能，您可以在粘贴之前验证完整的文本。如果您对文本安全感到满意，请选**粘贴**。

1. 编辑程序后，按下 **Esc** 进入 Vim 命令模式。然后，输入 `:wq` 命令保存文件，并退出编辑器。

   
**注意**  
如果您不熟悉 Vim 命令模式，一开始可能会发现很难在命令模式和插入模式之间切换。保存文件和退出应用程序时使用命令模式。插入新文本时使用插入模式。要进入插入模式，请按 **I**；要进入命令模式，请按 **Esc**。有关Vim中提供的其他工具的更多信息 AWS CloudShell，请参阅[开发工具和 Shell 实用程序](vm-specs.md#utilities-installed)。

1. 在主命令行界面上，运行以下程序并指定要输入的三个数字。语法如下所示。

   `python3 add_prog.py 4 5 6`

   命令行显示程序输出：`The sum is 15`。

## 步骤 10：使用将文件作为对象添加 AWS CLI 到 Amazon S3 存储桶中
<a name="s3-put"></a>

在此步骤中，您将创建一个 Amazon S3 存储桶，然后使用**PutObject**方法将您的代码文件作为对象添加到该存储桶中。

**注意**  
本教程介绍如何使用 AWS CLI 在 AWS CloudShell 与其他 AWS 服务进行交互。使用此方法时，无需下载或安装任何其他资源。此外，由于已经在 Shell 中进行了身份验证，因此在进行调用之前无需配置凭证。

1. 要在指定的存储桶中创建存储桶 AWS 区域，请输入以下命令：

   ```
   aws s3api create-bucket --bucket insert-unique-bucket-name-here --region us-east-1
   ```
**注意**  
如果您要在 `us-east-1` 区域之外创建存储桶，请使用 `LocationConstraint` 参数添加 `create-bucket-configuration` 以指定区域。以下是语法示例。  

   ```
   $ aws s3api create-bucket --bucket my-bucket --region eu-west-1 --create-bucket-configuration LocationConstraint=eu-west-1
   ```

   如果调用成功，命令行将显示来自服务的响应，输出与以下类似。

   ```
   {
       "Location": "/insert-unique-bucket-name-here"
   }
   ```
**注意**  
如果您不遵守[命名存储桶的规则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html#bucketnamingrules)，则会显示以下错误：调用 CreateBucket操作时出现错误 (InvalidBucketName)：指定的存储桶无效。

1. 要上传文件并将该文件作为对象添加到您刚创建的存储桶，请调用 **PutObject** 方法。

   ```
   aws s3api put-object --bucket insert-unique-bucket-name-here --key add_prog --body add_prog.py
   ```

   将对象上传到 Amazon S3 存储桶后，命令行将显示来自服务的响应，类似于以下输出：

   ```
   {"ETag": "\"ab123c1:w:wad4a567d8bfd9a1234ebeea56\""}
   ```

   `ETag` 是存储的对象的哈希值。您可以使用此哈希值来 [检查上传到 Amazon S3 的对象的完整性](https://repost.aws/knowledge-center/data-integrity-s3)。

## 相关主题
<a name="related-topics-started"></a>
+ [在 CLI 中管理 AWS 服务 CloudShell](working-with-aws-cli.md)
+ [在本地计算机和计算机之间复制多个文件 CloudShell](multiple-files-upload-download.md)
+ [AWS CloudShell 概念](working-with-aws-cloudshell.md)
+ [定制您的体验 AWS CloudShellAWS CloudShell 在亚马逊 VPC 中使用](customizing-cshell.md)