

适用于 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/)。

# 创建和调用服务对象
<a name="creating-and-calling-service-objects"></a>

JavaScript API 支持大多数可用的 AWS 服务。JavaScript API 中的各个服务类提供了对其服务中各个 API 调用的访问。有关 JavaScript API 中服务类、操作和参数的更多信息，请参阅 [API 参考](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/index.html)。

在 Node.js 中使用开发工具包时，您使用 `require` 将开发工具包添加到应用程序，这为所有当前服务提供支持。

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

在将 SDK 与浏览器 JavaScript 结合使用时，您使用 AWS 托管的 SDK 包，将 SDK 包加载到浏览器脚本。要加载开发工具包，请添加以下 `<script>` 元素：

```
<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 参考。

默认的托管 SDK 包提供对可用 AWS 服务中部分服务的支持。有关浏览器的托管开发工具包中默认服务的列表，请参阅 API 参考中的[支持的服务](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/#Supported_Services)。如果已经禁用了 CORS 安全检查，则可以将开发工具包用于其他服务。在这种情况下，您可以生成自定义版本的开发工具包以包含所需的其他服务。有关生成自定义版本的开发工具包的更多信息，请参阅[为浏览器构建 SDK](building-sdk-for-browsers.md)。

## 要求单个服务
<a name="requiring-individual-services"></a>

要求 SDK for JavaScript 如前所示将整个 SDK 包括到您的代码中。或者，您可以选择仅要求代码所使用的单个服务。请考虑用于创建 Amazon S3 服务对象的下列代码。

```
// Import the AWS SDK
var AWS = require('aws-sdk');

// Set credentials and Region
// This can also be done directly on the service client
AWS.config.update({region: 'us-west-1', credentials: {YOUR_CREDENTIALS}});

var s3 = new AWS.S3({apiVersion: '2006-03-01'});
```

在上例中，`require` 函数指定整个开发工具包。如果只包含 Amazon S3 服务所需的 SDK 部分，则通过网络传输的代码量以及代码的内存开销都会显著减少。如果需要单独的服务，请调用 `require` 函数如下所示，包括全小写的服务构造函数。

```
require('aws-sdk/clients/SERVICE');
```

此处所示是当只包含 SDK 的 Amazon S3 部分时，创建前述 Amazon S3 服务对象的代码。

```
// Import the Amazon S3 service client
var S3 = require('aws-sdk/clients/s3');
 
// Set credentials and Region
var s3 = new S3({
    apiVersion: '2006-03-01',
    region: 'us-west-1', 
    credentials: {YOUR_CREDENTIALS}
  });
```

您仍可以访问全局 AWS 命名空间而无需将每个服务附加到其上。

```
require('aws-sdk/global');
```

在跨多个单独的服务应用相同配置时，例如为所有服务提供相同的凭证，这是一种非常有用的技术。要求单个服务应减少 Node.js 中的加载时间和内存消耗。在通过 Browserify 或 webpack 等捆绑工具完成后，要求单个服务会生成只有完整大小一部分的开发工具包。对于内存或磁盘空间有限的环境，例如 IoT 设备或在 Lambda 函数中，这会很有帮助。

## 创建服务对象
<a name="creating-service-objects"></a>

要通过 JavaScript API 访问服务功能，您需要先创建*服务对象*，通过该服务对象来访问由底层客户端类提供的一组功能。通常而言，为每个服务提供有一个客户端类；但是，一些服务会在多个客户端类中划分对其功能的访问。

要使用某个功能，您必须创建提供对该功能访问的类的实例。以下示例演示了从 `AWS.DynamoDB` 客户端类为 DynamoDB 创建服务对象。

```
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});
```

默认情况下，服务对象配置了同样用于配置开发工具包的全局设置。但是，您可以使用运行时配置数据来配置服务对象，使其特定于该服务对象。服务特定的配置数据在应用了全局配置设置之后应用。

以下示例中的 Amazon EC2 服务对象是使用针对特定区域的配置创建的，但却使用全局配置。

```
var ec2 = new AWS.EC2({region: 'us-west-2', apiVersion: '2014-10-01'});
```

除了支持应用到单个服务对象的服务特定配置之外，您还可以应用服务特定配置到指定类的所有新创建服务对象。例如，要配置从 Amazon EC2 类创建的所有服务对象使用美国西部（俄勒冈州）（`us-west-2`）区域，请将以下内容添加到 `AWS.config` 全局配置对象中。

```
AWS.config.ec2 = {region: 'us-west-2', apiVersion: '2016-04-01'};
```

## 锁定服务对象的 API 版本
<a name="locking-api-version-of-service-objects"></a>

通过在创建对象时指定 `apiVersion` 选项，您可以将某个服务对象锁定为服务的特定 API 版本。以下示例将创建锁定到特定 API 版本的 DynamoDB 服务对象。

```
var dynamodb = new AWS.DynamoDB({apiVersion: '2011-12-05'});
```

有关锁定服务对象的 API 版本的更多信息，请参阅[锁定 API 版本](locking-api-versions.md)。

## 指定服务对象参数
<a name="specifying-service-object-parameters"></a>

调用服务对象的方法时，根据 API 的需要在 JSON 中传递参数。例如，在 Amazon S3 中，要获取指定桶和键的对象，请将以下参数传递到 `getObject` 方法。有关传递 JSON 参数的更多信息，请参阅[使用 JSON](working-with-json.md)。

```
s3.getObject({Bucket: 'bucketName', Key: 'keyName'});
```

有关 Amazon S3 参数的更多信息，请参阅 API 参考中的 [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html)。

此外，使用 `params` 参数创建服务对象时，您可以将值绑定到单独的参数。服务对象的 `params` 参数的值是一个映射，指定由服务对象定义的一个或多个参数值。以下示例显示 Amazon S3 服务对象的 `Bucket` 参数，该服务对象绑定到名为 `amzn-s3-demo-bucket` 的桶。

```
var s3bucket = new AWS.S3({params: {Bucket: 'amzn-s3-demo-bucket'}, apiVersion: '2006-03-01' });
```

通过将服务对象绑定到存储桶，`s3bucket` 服务对象将 `amzn-s3-demo-bucket` 参数值视为在后续操作中不再需要指定的默认值。在为操作使用对象时，如果参数值不适用，则将忽略任意绑定参数值。在对服务对象进行调用时，您可以通过指定新值来覆盖此绑定参数。

```
var s3bucket = new AWS.S3({ params: {Bucket: 'amzn-s3-demo-bucket'}, apiVersion: '2006-03-01' });
s3bucket.getObject({Key: 'keyName'});
// ...
s3bucket.getObject({Bucket: 'amzn-s3-demo-bucket3', Key: 'keyOtherName'});
```

在 API 参考中可以找到各个方法的可用参数的详细信息。