

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

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

# Node.js 的教程 AWS Cloud9
<a name="sample-nodejs"></a>

本教程使你能够在 AWS Cloud9 开发环境中运行一些 Node.js 脚本。

按照本教程并创建此示例可能会导致您的 AWS 账户被扣款。其中包括亚马逊 EC2 和Amazon S3等服务可能产生的费用。有关更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)和 A [mazon S3 定价](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [先决条件](#sample-nodejs-prereqs)
+ [步骤 1：安装所需工具](#sample-nodejs-install)
+ [步骤 2：添加代码](#sample-nodejs-code)
+ [步骤 3：运行代码](#sample-nodejs-run)
+ [第 4 步：在 Node.js JavaScript 中安装和配置 AWS 开发工具包](#sample-nodejs-sdk)
+ [第 5 步：添加 AWS SDK 代码](#sample-nodejs-sdk-code)
+ [第 6 步：运行 S AWS DK 代码](#sample-nodejs-sdk-run)
+ [步骤 7：清除](#sample-nodejs-clean-up)

## 先决条件
<a name="sample-nodejs-prereqs"></a>

在使用此示例之前，请确保您的设置满足以下要求：
+ **您必须拥有现有的 AWS Cloud9 EC2 开发环境。**此示例假设您的 EC2 环境已连接到运行 Amazon Linux 的亚马逊 EC2 实例，或者 Ubuntu 服务器。如果您有不同类型的环境或操作系统，可能需要按照本示例的说明来设置相关的工具。有关更多信息，请参阅 [在中创建环境 AWS Cloud9](create-environment.md)。
+ **您已经打开了现有环境的 AWS Cloud9 IDE。**打开环境时，会在 Web 浏览器中 AWS Cloud9 打开该环境的 IDE。有关更多信息，请参阅 [在中打开环境 AWS Cloud9](open-environment.md)。

## 步骤 1：安装所需工具
<a name="sample-nodejs-install"></a>

在该步骤中，您安装运行本示例所需的 Node.js。

1. 在 AWS Cloud9 IDE 的终端会话中，通过运行**`node --version`**命令来确认是否已安装 Node.js。（要开始新的终端会话，请在菜单栏上依次选择 **Window（窗口）**> **New Terminal（新建终端）**。） 如果成功，输出将包含 Node.js 版本号。如果 Node.js 已安装，请向前跳至[步骤 2：添加代码](#sample-nodejs-code)。

1. 运行 **`yum update`**（适用于 Amazon Linux）或 **`apt update`**（适用于 Ubuntu Server）命令，以帮助确保已安装最新的安全更新和错误修复。

   对于 Amazon Linux：

   ```
   sudo yum -y update
   ```

   对于 Ubuntu Server：

   ```
   sudo apt update
   ```

1. 要安装 Node.js，首先运行此命令下载节点版本管理器 (nvm)。 （nvm 是一个简单的 Bash shell 脚本，可用于安装和管理 Node.js 版本。 有关更多信息，请参阅 GitHub 网站上的[节点版本管理器](https://github.com/creationix/nvm/blob/master/README.md)。）

   ```
   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
   ```

1. 要开始使用 nvm，请关闭终端会话并重新启动，或者查找包含命令以加载 nvm 的 `~/.bashrc` 文件。

   ```
   . ~/.bashrc
   ```

1. 运行此命令在 Amazon Linux 2、Amazon Linux 1 和 Ubuntu 18.04 上安装 Node.js 16。Amazon Linux 1 和 Ubuntu 18.04 实例最高仅支持 Node.js 版本 16。

   ```
   nvm install 16
   ```

   运行此命令在 Amazon Linux 2023 和 Ubuntu 22.04 上安装最新版本的 Node.js：

   ```
   nvm install --lts && nvm alias default lts/*
   ```
**注意**  
最新的 AL2 023 AWS Cloud9 镜像安装了 Node.js 20，最新的亚马逊 Linux 2 AWS Cloud9 镜像安装了 Node.js 18。如果你想在 Amazon Linux 2 上 AWS Cloud9 手动安装 Node.js 18，请在 AWS Cloud9 IDE 终端中运行以下命令：  

   ```
   C9_NODE_INSTALL_DIR=~/.nvm/versions/node/v18.17.1
   C9_NODE_URL=https://d3kgj69l4ph6w4.cloudfront.net/static/node-amazon/node-v18.17.1-linux-x64.tar.gz
   mkdir -p $C9_NODE_INSTALL_DIR
   curl -fSsl $C9_NODE_URL  | tar xz --strip-components=1 -C "$C9_NODE_INSTALL_DIR"
   nvm alias default v18.17.1
   nvm use default
   echo -e 'nvm use default' >> ~/.bash_profile
   ```

## 步骤 2：添加代码
<a name="sample-nodejs-code"></a>

在 AWS Cloud9 IDE 中，使用此内容创建一个文件，然后使用该名称保存该文件`hello.js`。（要创建文件，请在菜单栏上依次选择 **File（文件）**、**New File（新建文件）**。要保存文件，请依次选择 **File（文件）**、**Save（保存）**。）

```
console.log('Hello, World!');

console.log('The sum of 2 and 3 is 5.');

var sum = parseInt(process.argv[2], 10) + parseInt(process.argv[3], 10);

console.log('The sum of ' + process.argv[2] + ' and ' +
  process.argv[3] + ' is ' + sum + '.');
```

## 步骤 3：运行代码
<a name="sample-nodejs-run"></a>

1. 在 AWS Cloud9 IDE 的菜单栏上，选择 “运行”、“**运行****配置**”、“**新建运行配置**”。

1. 在 **[New] - Idle ([新建] - 空闲)** 选项卡上，选择 **Runner: Auto (运行程序: 自动)**，然后选择 **Node.js**。

1. 在 **Command（命令）**中，键入 `hello.js 5 9`。在代码中，`5` 表示 `process.argv[2]`，`9` 表示 `process.argv[3]`。（`process.argv[0]` 表示运行时的名称 (`node`)，`process.argv[1]` 表示文件的名称 (`hello.js`)。）

1. 选择 **Run (运行)** 按钮，然后比较输出。

   ```
   Hello, World!
   The sum of 2 and 3 is 5.
   The sum of 5 and 9 is 14.
   ```

![\[在 AWS Cloud9 IDE 中运行代码后的 Node.js 输出\]](http://docs.aws.amazon.com/zh_cn/cloud9/latest/user-guide/images/ide-nodejs-simple.png)


## 第 4 步：在 Node.js JavaScript 中安装和配置 AWS 开发工具包
<a name="sample-nodejs-sdk"></a>

在中运行 Node.js 脚本时 AWS Cloud9，可以在版本 3 (V3) 的 AWS SDK 和 JavaScript 版本 2 (V2) 的旧 JavaScript 版 AWS SDK 之间进行选择。与 V2 一样，V3 使您可以轻松地使用 Amazon Web Services，但它已经写入 TypeScript并添加了几项经常要求的功能，例如模块化软件包。

------
#### [ AWS SDK for JavaScript (V3) ]

您可以增强此示例，使用 Node.js JavaScript 中的 AWS 软件开发工具包创建 Amazon S3 存储桶，列出您的可用存储桶，然后删除您刚刚创建的存储桶。

在此步骤中，您将在 Node.js 中安装和配置 AWS 软件开发工具包的 Amazon S3 服务客户端模块，该模块提供了一种通过 JavaScript 代码与 Amazon S3 AWS 服务进行交互的便捷方式。 JavaScript 

如果要使用其他 AWS 服务，则需要单独安装它们。有关安装 AWS 模块的更多信息，请参阅[*AWS 开发人员指南 (V3)*。](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/working-with-services)有关如何开始使用 Node.js 和 AWS 适用于 JavaScript (V3) 的 SDK 的信息，请参阅《* JavaScript开发者开发AWS 工具包指南》(V3)* 中的 [Node.js 入](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/getting-started-nodejs.html#getting-started-nodejs-setup-structure)门。

 JavaScript 在 Node.js 中安装 AWS 适用的 SDK 后，您必须在自己的环境中设置凭据管理。Node.js JavaScript 中的 S AWS DK 需要这些凭据才能与 AWS 服务进行交互。

**在 Node.js JavaScript 中安装 AWS 适用的 SDK**

可以使用 npm 运行 **`install`** 命令。

```
npm install @aws-sdk/client-s3
```

有关更多信息，请参阅[《适用于 JavaScript 的 AWS SDK 开发人员指南》 JavaScript中的安装软件](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-up.html#installing-jssdk)*开发*工具包。

**在环境中设置凭证管理**

每次使用 Node.js JavaScript 中的 AWS SDK 调用 AWS 服务时，都必须在调用时提供一组凭据。这些凭证决定了 Node.js JavaScript 中的 S AWS DK 是否具有进行该调用的相应权限。如果这些凭证不包含相应的权限，调用将失败。

在此步骤中，您将凭证存储在环境内。为此，请按照 [AWS 服务 从中的环境中呼叫 AWS Cloud9](credentials.md) 中的说明操作，然后返回到本主题。

有关其他信息，请参阅 *适用于 JavaScript 的 AWS SDK 开发人员指南*中的[在 Node.js 中设置凭证](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/setting-credentials-node.html)。

------
#### [ AWS SDK for JavaScript (V2) ]

您可以增强此示例，使用 Node.js JavaScript 中的 AWS 软件开发工具包创建 Amazon S3 存储桶，列出您的可用存储桶，然后删除您刚刚创建的存储桶。

在此步骤中，您将在 Node.js JavaScript 中安装和配置 AWS 软件开发工具包，它提供了一种通过 JavaScript代码与 Amazon S3 等 AWS 服务进行交互的便捷方式。 JavaScript 在 Node.js 中安装 AWS 适用的 SDK 后，您必须在自己的环境中设置凭据管理。Node.js JavaScript 中的 S AWS DK 需要这些凭据才能与 AWS 服务进行交互。

**在 Node.js JavaScript 中安装 AWS 适用的 SDK**

可以使用 npm 运行 **`install`** 命令。

```
npm install aws-sdk
```

有关更多信息，请参阅[《适用于 JavaScript 的 AWS SDK 开发人员指南》 JavaScript中的安装软件](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/installing-jssdk.html)*开发*工具包。

**在环境中设置凭证管理**

每次使用 Node.js JavaScript 中的 AWS SDK 调用 AWS 服务时，都必须在调用时提供一组凭据。这些凭证决定了 Node.js JavaScript 中的 S AWS DK 是否具有进行该调用的相应权限。如果这些凭证不包含相应的权限，调用将失败。

在此步骤中，您将凭证存储在环境内。为此，请按照 [AWS 服务 从中的环境中呼叫 AWS Cloud9](credentials.md) 中的说明操作，然后返回到本主题。

有关其他信息，请参阅 *适用于 JavaScript 的 AWS SDK 开发人员指南*中的[在 Node.js 中设置凭证](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/setting-credentials-node.html)。

------

## 第 5 步：添加 AWS SDK 代码
<a name="sample-nodejs-sdk-code"></a>

------
#### [ AWS SDK for JavaScript (V3) ]

在此步骤中，您会添加一些代码，此次用于与 Amazon S3 交互来创建存储桶，列出可用的存储桶，然后删除刚刚创建的存储桶。您将稍后运行此代码。

在 AWS Cloud9 IDE 中，使用此内容创建一个文件，然后使用该名称保存该文件`s3.js`。

```
import {
  CreateBucketCommand,
  DeleteBucketCommand,
  ListBucketsCommand,
  S3Client,
} from "@aws-sdk/client-s3";

const wait = async (milliseconds) => {
  return new Promise((resolve) => setTimeout(resolve, milliseconds));
};

export const main = async () => {
  const client = new S3Client({});
  const now = Date.now();
  const BUCKET_NAME = `easy-bucket-${now.toString()}`;

  const createBucketCommand = new CreateBucketCommand({ Bucket: BUCKET_NAME });
  const listBucketsCommand = new ListBucketsCommand({});
  const deleteBucketCommand = new DeleteBucketCommand({ Bucket: BUCKET_NAME });

  try {
    console.log(`Creating bucket ${BUCKET_NAME}.`);
    await client.send(createBucketCommand);
    console.log(`${BUCKET_NAME} created`);

    await wait(2000);

    console.log(`Here are your buckets:`);
    const { Buckets } = await client.send(listBucketsCommand);
    Buckets.forEach((bucket) => {
      console.log(` • ${bucket.Name}`);
    });

    await wait(2000);

    console.log(`Deleting bucket ${BUCKET_NAME}.`);
    await client.send(deleteBucketCommand);
    console.log(`${BUCKET_NAME} deleted`);
  } catch (err) {
    console.error(err);
  }
};

main();
```

------
#### [ AWS SDK for JavaScript (V2) ]

在此步骤中，您会添加一些代码，此次用于与 Amazon S3 交互来创建存储桶，列出可用的存储桶，然后删除刚刚创建的存储桶。您将稍后运行此代码。

在 AWS Cloud9 IDE 中，使用此内容创建一个文件，然后使用该名称保存该文件`s3.js`。

```
if (process.argv.length < 4) {
  console.log(
    "Usage: node s3.js <the bucket name> <the AWS Region to use>\n" +
      "Example: node s3.js my-test-bucket us-east-2"
  );
  process.exit(1);
}

var AWS = require("aws-sdk"); // To set the AWS credentials and region.
var async = require("async"); // To call AWS operations asynchronously.

AWS.config.update({
  region: region,
});

var s3 = new AWS.S3({ apiVersion: "2006-03-01" });
var bucket_name = process.argv[2];
var region = process.argv[3];

var create_bucket_params = {
  Bucket: bucket_name,
  CreateBucketConfiguration: {
    LocationConstraint: region,
  },
};

var delete_bucket_params = { Bucket: bucket_name };

// List all of your available buckets in this AWS Region.
function listMyBuckets(callback) {
  s3.listBuckets(function (err, data) {
    if (err) {
    } else {
      console.log("My buckets now are:\n");

      for (var i = 0; i < data.Buckets.length; i++) {
        console.log(data.Buckets[i].Name);
      }
    }

    callback(err);
  });
}

// Create a bucket in this AWS Region.
function createMyBucket(callback) {
  console.log("\nCreating a bucket named " + bucket_name + "...\n");

  s3.createBucket(create_bucket_params, function (err, data) {
    if (err) {
      console.log(err.code + ": " + err.message);
    }

    callback(err);
  });
}

// Delete the bucket you just created.
function deleteMyBucket(callback) {
  console.log("\nDeleting the bucket named " + bucket_name + "...\n");

  s3.deleteBucket(delete_bucket_params, function (err, data) {
    if (err) {
      console.log(err.code + ": " + err.message);
    }

    callback(err);
  });
}

// Call the AWS operations in the following order.
async.series([
  listMyBuckets,
  createMyBucket,
  listMyBuckets,
  deleteMyBucket,
  listMyBuckets,
]);
```

------

## 第 6 步：运行 S AWS DK 代码
<a name="sample-nodejs-sdk-run"></a>

1. 使用 npm 运行 **`install`** 命令，以允许代码异步调用 Amazon S3 操作。

   ```
   npm install async
   ```

1. 在 AWS Cloud9 IDE 的菜单栏上，选择 “运行”、“**运行****配置**”、“**新建运行配置**”。

1. 在 **[New] - Idle ([新建] - 空闲)** 选项卡上，选择 **Runner: Auto (运行程序: 自动)**，然后选择 **Node.js**。

1. 如果您使用的是 JavaScript (V3) 的 AWS SDK，则使用**命令**类型`s3.js`。如果您使用的是适用于 Javascript 的 AWS SDK (v2)`s3.js my-test-bucket us-east-2`，则对于**命令**类型，其中`my-test-bucket`是您要创建然后删除的存储桶的名称，`us-east-2`也是您要在其中创建存储桶的 AWS 区域的 ID。欲了解更多信息 IDs，请参阅中的[亚马逊简单存储服务 (Amazon S3) S](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) ervice。*Amazon Web Services 一般参考*
**注意**  
Amazon S3 存储桶名称必须是唯一的，而 AWS不仅仅是您的 AWS 账户。

1. 选择 **Run (运行)** 按钮，然后比较输出。

   ```
   My buckets now are:
   
   Creating a new bucket named 'my-test-bucket'...
   
   My buckets now are:
   
   my-test-bucket
   
   Deleting the bucket named 'my-test-bucket'...
   
   My buckets now are:
   ```

## 步骤 7：清除
<a name="sample-nodejs-clean-up"></a>

为了防止在您使用完此示例后继续向您的 AWS 账户收费，您应该删除该环境。有关说明，请参阅 [删除中的环境 AWS Cloud9](delete-environment.md)。