

适用于 JavaScript 的 AWS SDK v2 已终止支持。建议您迁移到 [适用于 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/)。有关更多详情和如何迁移的信息，请参阅本[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

# 设置 SDK for JavaScript
<a name="setting-up"></a>

本部分中的主题介绍了如何安装 SDK for JavaScript 以在 Web 浏览器和 Node.js 中使用。其中还演示了如何加载开发工具包，这样您可以访问开发工具包支持的 Web 服务。

**注意**  
React Native 开发人员应使用 AWS Amplify 在 AWS 上创建新项目。有关详细信息，请参阅 [aws-sdk-react-native](https://github.com/amazon-archives/aws-sdk-react-native) 存档。

**Topics**
+ [先决条件](jssdk-prerequisites.md)
+ [安装 SDK for JavaScript](installing-jssdk.md)
+ [加载 SDK for JavaScript](loading-the-jssdk.md)
+ [从版本 1 升级 SDK for JavaScript](upgrading-from-v1.md)

# 先决条件
<a name="jssdk-prerequisites"></a>

在您使用适用于 JavaScript 的 AWS SDK之前，确定您的代码需要在 Node.js 还是 Web 浏览器中运行。在此之后，请执行以下操作：
+ 对于 Node.js，在服务器上安装 Node.js（如果尚未安装）。
+ 对于 Web 浏览器，确定您需要支持的浏览器版本。

**Topics**
+ [设置 AWS Node.js 环境](setting-up-node.md)
+ [支持的 Web 浏览器](browsers-supported.md)

# 设置 AWS Node.js 环境
<a name="setting-up-node"></a>

要设置可在其中运行应用程序的 AWS Node.js 环境，请使用以下任意方法：
+ 选择预安装 Node.js 的亚马逊机器映像（AMI），并使用该 AMI 创建 Amazon EC2 实例。创建 Amazon EC2 实例时，从 AWS Marketplace 中选择您的 AMI。在 AWS Marketplace 中搜索 Node.js，然后选择包含预安装 Node.js（32 位或 64 位）版本的 AMI 选项。
+ 创建 Amazon EC2 实例并在该实例上安装 Node.js。有关如何在 Amazon Linux 实例上安装 Node.js 的更多信息，请参阅[教程：在 Amazon EC2 实例上设置 Node.js](setting-up-node-on-ec2-instance.md)。
+ 使用 AWS Lambda 创建无服务器环境，将 Node.js 作为 Lambda 函数运行。有关在 Lambda 函数中使用 Node.js 的更多信息，请参阅《AWS Lambda 开发人员指南》**中的[编程模型（Node.js）](https://docs.aws.amazon.com/lambda/latest/dg/programming-model.html)。
+ 将 Node.js 应用程序部署到 AWS Elastic Beanstalk。有关将 Node.js 与 Elastic Beanstalk 配合使用的更多信息，请参阅《AWS Elastic Beanstalk 开发人员指南》**中的[将 Node.js 应用程序部署到 AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.html)。

# 支持的 Web 浏览器
<a name="browsers-supported"></a>

SDK for JavaScript 支持所有现代 Web 浏览器，包括以下最低版本：


****  

| 浏览器 | 版本 | 
| --- | --- | 
| Google Chrome | 28.0\$1 | 
| Mozilla Firefox | 26.0\$1 | 
| Opera | 17.0\$1 | 
| Microsoft Edge | 25.10\$1 | 
| Windows Internet Explorer | 不适用 | 
| Apple Safari | 5\$1 | 
| Android 浏览器 | 4.3\$1 | 

**注意**  
AWS Amplify 等框架可能无法提供与 SDK for JavaScript 相同的浏览器支持。有关详细信息，请查看框架的相应文档。

# 安装 SDK for JavaScript
<a name="installing-jssdk"></a>

您是否安装以及如何安装适用于 JavaScript 的 AWS SDK取决于代码在 Node.js 模块还是浏览器脚本中执行。

开发工具包中的服务并不是全部直接可用的。要确定适用于 JavaScript 的 AWS SDK当前支持哪些服务，请参阅 [https://github.com/aws/aws-sdk-js/blob/master/SERVICES.md](https://github.com/aws/aws-sdk-js/blob/master/SERVICES.md)

------
#### [ Node ]

为 Node.js 安装适用于 JavaScript 的 AWS SDK的首选方法是使用 [Node.js 程序包管理器 npm](https://www.npmjs.com/)。要执行此操作，请在命令行中键入此内容。

```
npm install aws-sdk
```

如果您看到此错误消息：

```
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
```

请在命令行上键入这些命令：

```
npm uninstall --save node-uuid
npm install --save uuid
```

------
#### [ Browser ]

您无需安装开发工具包以在浏览器脚本中使用它。您可在 HTML 页面中，使用脚本直接从 Amazon Web Services 加载托管的 SDK 包。托管的开发工具包支持实施跨源资源共享 (CORS) 的 AWS 服务子集。有关更多信息，请参阅 [加载 SDK for JavaScript](loading-the-jssdk.md)。

您可以创建自定义工作版本的开发工具包，在其中可以选择要使用的特定 Web 服务和版本。然后，您可以下载自定义开发工具包用于本地部署，并可托管它供应用程序使用。有关创建自定义版本的开发工具包的更多信息，请参阅[为浏览器构建 SDK](building-sdk-for-browsers.md)。

您可以从 GitHub 下载当前适用于 JavaScript 的 AWS SDK的简化和非简化可分发版本，地址为：

[https://github.com/aws/aws-sdk-js/tree/master/dist](https://github.com/aws/aws-sdk-js/tree/master/dist)

------

## 使用 Bower 安装
<a name="w2aac13c11b9"></a>

[Bower](https://bower.io) 是适用于 Web 的程序包管理器。安装 Bower 之后，您可以用它来安装开发工具包。要使用 Bower 安装开发工具包，请在终端窗口中键入以下命令：

```
bower install aws-sdk-js
```

# 加载 SDK for JavaScript
<a name="loading-the-jssdk"></a>

加载 SDK for JavaScript 的方式取决于您加载它是为了在 Web 浏览器还是 Node.js 中运行。

开发工具包中的服务并不是全部直接可用的。要确定适用于 JavaScript 的 AWS SDK当前支持哪些服务，请参阅 [https://github.com/aws/aws-sdk-js/blob/master/SERVICES.md](https://github.com/aws/aws-sdk-js/blob/master/SERVICES.md)

------
#### [ Node.js ]

安装 SDK 之后，您可以使用 `require`，将 AWS 包加载到节点应用程序中。

```
var AWS = require('aws-sdk');
```

------
#### [ React Native ]

要在 React Native 项目中使用开发工具包，请首先使用 npm 安装开发工具包：

```
npm install aws-sdk
```

在您的应用程序中，使用以下代码引用开发工具包的 React Native 兼容版本：

```
var AWS = require('aws-sdk/dist/aws-sdk-react-native');
```

------
#### [ Browser ]

开始使用 SDK 的最快捷方法是直接从 Amazon Web Services 加载托管的 SDK 包。为此，请采用以下格式将 `<script>` 元素添加到您的 HTML 页面：

```
<script src="https://sdk.amazonaws.com/js/aws-sdk-SDK_VERSION_NUMBER.min.js"></script>
```

要查找当前的 SDK\$1VERSION\$1NUMBER，请参阅 [适用于 JavaScript 的 AWS SDK API Reference Guide](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/) 中适用于 SDK for JavaScript 的 API 参考。

页面中加载开发工具包之后，可从全局变量 `AWS`（或 `window.AWS`）使用开发工具包。

如果您使用 [browserify](http://browserify.org) 打包代码和模块依赖项，则使用 `require` 加载开发工具包，就像在 Node.js 中的操作一样。

------

# 从版本 1 升级 SDK for JavaScript
<a name="upgrading-from-v1"></a>

以下说明可帮助您将 SDK for JavaScript 从版本 1 升级到版本 2。

## 自动转换输入/输出中的 Base64 和时间戳类型
<a name="upgrading-from-v1-base64-timestamp-conversion"></a>

该开发工具包现在可代表用户自动编码和解码 base64 编码值以及时间戳值。对于请求会发送 base64 或时间戳值的任意操作，或者在返回响应中允许 base64 编码值的任意操作，此更改会有影响。

以前需要转换为 base64 的代码，现在不再需要转换。编码为 base64 的值现在作为来自服务器响应的缓冲区对象返回，也可以作为缓冲区输入传递。例如，以下版本 1 `SQS.sendMessage` 参数：

```
var params = {
   MessageBody: 'Some Message',
   MessageAttributes: {
      attrName: {
         DataType: 'Binary',
         BinaryValue: new Buffer('example text').toString('base64')
      }
   }
};
```

可以按以下方式重新编写。

```
var params = {
   MessageBody: 'Some Message',
   MessageAttributes: {
      attrName: {
         DataType: 'Binary',
         BinaryValue: 'example text'
      }
   }
};
```

以下是读取消息的方式。

```
sqs.receiveMessage(params, function(err, data) {
  // buf is <Buffer 65 78 61 6d 70 6c 65 20 74 65 78 74>
  var buf = data.Messages[0].MessageAttributes.attrName.BinaryValue;
  console.log(buf.toString()); // "example text"
});
```

## 将 response.data.RequestId 移动到 response.requestId
<a name="upgrading-from-v1-response-requestid"></a>

现在，该开发工具包将所有服务的请求 ID 存储到 `response` 对象上一致的位置，而不是 `response.data` 属性内部。这可以改进以不同方式公开请求 ID 的跨服务一致性。这也是一个重大更改，将 `response.data.RequestId` 属性重命名为 `response.requestId`（回调函数内部的 `this.requestId`）。

在您的代码中，更改以下内容：

```
svc.operation(params, function (err, data) {
  console.log('Request ID:', data.RequestId);
});
```

更改为以下来源：

```
svc.operation(params, function () {
  console.log('Request ID:', this.requestId);
});
```

## 公开的包装元素
<a name="upgrading-from-v1-exposed-wrapper-elements"></a>

如果您使用 `AWS.ElastiCache`、`AWS.RDS` 或 `AWS.Redshift`，则对于一些操作，您必须通过响应中的顶级输出属性访问响应。

例如，用于返回以下内容的 `RDS.describeEngineDefaultParameters` 方法。

```
{ Parameters: [ ... ] }
```

现在它返回以下内容。

```
{ EngineDefaults: { Parameters: [ ... ] } }
```

各个服务受影响操作的列表如下表中所示。


****  

| 客户端类 | 操作 | 
| --- | --- | 
| `AWS.ElastiCache` | `authorizeCacheSecurityGroupIngress` `createCacheCluster` `createCacheParameterGroup` `createCacheSecurityGroup` `createCacheSubnetGroup` `createReplicationGroup` `deleteCacheCluster` `deleteReplicationGroup` `describeEngineDefaultParameters` `modifyCacheCluster` `modifyCacheSubnetGroup` `modifyReplicationGroup` `purchaseReservedCacheNodesOffering` `rebootCacheCluster` `revokeCacheSecurityGroupIngress` | 
| `AWS.RDS` | `addSourceIdentifierToSubscription` `authorizeDBSecurityGroupIngress` `copyDBSnapshot` `createDBInstance` `createDBInstanceReadReplica` `createDBParameterGroup` `createDBSecurityGroup` `createDBSnapshot` `createDBSubnetGroup` `createEventSubscription` `createOptionGroup` `deleteDBInstance` `deleteDBSnapshot` `deleteEventSubscription` `describeEngineDefaultParameters` `modifyDBInstance` `modifyDBSubnetGroup` `modifyEventSubscription` `modifyOptionGroup` `promoteReadReplica` `purchaseReservedDBInstancesOffering` `rebootDBInstance` `removeSourceIdentifierFromSubscription` `restoreDBInstanceFromDBSnapshot` `restoreDBInstanceToPointInTime` `revokeDBSecurityGroupIngress` | 
| `AWS.Redshift` | `authorizeClusterSecurityGroupIngress` `authorizeSnapshotAccess` `copyClusterSnapshot` `createCluster` `createClusterParameterGroup` `createClusterSecurityGroup` `createClusterSnapshot` `createClusterSubnetGroup` `createEventSubscription` `createHsmClientCertificate` `createHsmConfiguration` `deleteCluster` `deleteClusterSnapshot` `describeDefaultClusterParameters` `disableSnapshotCopy` `enableSnapshotCopy` `modifyCluster` `modifyClusterSubnetGroup` `modifyEventSubscription` `modifySnapshotCopyRetentionPeriod` `purchaseReservedNodeOffering` `rebootCluster` `restoreFromClusterSnapshot` `revokeClusterSecurityGroupIngress` `revokeSnapshotAccess` `rotateEncryptionKey` | 

## 删除的客户端属性
<a name="upgrading-from-v1-dropped-client-properties"></a>

从服务对象中删除了 `.Client` 和 `.client` 属性。如果您在服务类上使用 `.Client` 属性，或在服务对象实例上使用 `.client` 属性，请从代码中删除这些属性。

以下代码用于 SDK for JavaScript 的版本 1：

```
var sts = new AWS.STS.Client();
// or
var sts = new AWS.STS();

sts.client.operation(...);
```

应更改为以下代码。

```
var sts = new AWS.STS();
sts.operation(...)
```