Creación y llamada a objetos de servicio - AWS SDK for JavaScript

Anunciamos el próximo fin del soporte para AWS SDK for JavaScript v2. Se recomienda que migre a AWS SDK for JavaScript v3. Para ver las fechas, los detalles adicionales y la información sobre cómo realizar la migración, consulte el anuncio enlazado.

Creación y llamada a objetos de servicio

La API de JavaScript admite la mayoría de los servicios de AWS disponibles. Cada clase de servicio de la API de JavaScript proporciona acceso a todas las llamadas a la API de su servicio. Para obtener más información acerca de clases de servicios, las operaciones y los parámetros en la API de JavaScript, consulte la referencia de la API.

Cuando utiliza el SDK en Node.js, añade el paquete del SDK a su aplicación mediante require, que ofrece soporte para todos los servicios actuales.

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

Cuando utiliza el SDK con JavaScript de navegador, carga el paquete del SDK en los scripts de navegador mediante el paquete de SDK alojado en AWS. Para cargar el paquete del SDK, añada el siguiente elemento <script>.

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

Para encontrar el SDK_VERSION_NUMBER actual, consulte la referencia de API para el SDK para JavaScript en la Guía de referencia de la API de AWS SDK for JavaScript.

El paquete de SDK alojado predeterminado admite un subconjunto de los servicios de AWS disponibles. Para obtener una lista de los servicios predeterminados en el paquete del SDK hospedado para el navegador, consulte los servicios compatibles en la referencia de la API. Puede utilizar el SDK con otros servicios si la comprobación de seguridad CORS está deshabilitada. En este caso, puede crear una versión personalizada del SDK para incluir los servicios adicionales que necesita. Para obtener más información acerca de la creación de una versión personalizada del SDK, consulte Creación del SDK para navegadores.

Necesidad de uso de servicios individuales

Si necesita usar el SDK para JavaScript tal y como se muestra anteriormente, tiene que incluir todo el SDK en el código. O bien, puede elegir exigir solo los servicios individuales que su código utiliza. Considere el siguiente código que se utiliza para crear un objeto de servicio de 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'});

En el ejemplo anterior, la función require especifica todo el SDK. La cantidad de código que debe transportarse a través de la red, así como la sobrecarga de memoria del código serían considerablemente inferiores si solo se incluyese una parte del SDK que necesita para el servicio de Amazon S3. Para solicitar un servicio individual, llame a la función require tal y como se muestra, incluido el constructor de servicio todo en minúsculas.

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

A continuación se muestra cómo se ve el código para crear el objeto de servicio de Amazon S3 anterior cuando incluye solo la parte de Amazon S3 del SDK.

// 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} });

Puede seguir obteniendo acceso al espacio de nombres de AWS global sin tener todos los servicios asociados a él.

require('aws-sdk/global');

Se trata de una técnica útil cuando se aplica la misma configuración en varios servicios individuales para, por ejemplo, proporcionar las mismas credenciales a todos los servicios. La necesidad de servicios individuales debería reducir el tiempo de carga y el consumo de memoria en Node.js. Cuando se realiza con una herramienta de agrupación como Browserify o Webpack, el uso de servicios individuales hace que el SDK se reduzca a una fracción del tamaño completo. Esto es útil en los entornos con memoria o espacio de disco restringidos, como un dispositivo IoT o una función de Lambda.

Creación de objetos de servicio

Para obtener acceso a características de servicio a través de la API de JavaScript, primero debe crear un objeto de servicio a través del cual obtener acceso a un conjunto de características que proporciona el cliente subyacente. Por lo general cada servicio proporciona una clase de cliente; sin embargo, algunos servicios dividen el acceso a sus características entre varias clases de cliente.

Para utilizar una característica, debe crear una instancia de la clase que proporciona acceso a dicha característica. En el siguiente ejemplo se muestra cómo crear un objeto de servicio para DynamoDB a partir de la clase de cliente AWS.DynamoDB.

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

De forma predeterminada un objeto de servicio se configura con la configuración global que también se utiliza para configurar el SDK. Sin embargo, puede configurar un objeto de servicio con datos de configuración de tiempo de ejecución específicos de dicho objeto de servicio. Los datos de configuración específicos del servicio se aplican después de aplicar los valores de la configuración global.

En el ejemplo siguiente, se crea un objeto de servicio de Amazon EC2 con la configuración para una región específica, pero aparte de esto se utiliza la configuración global.

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

Además de admitir la configuración específica del servicio aplicada a un objeto de servicio individual, también puede aplicar la configuración específica del servicio a todos los objetos de servicio recién creados de una determinada clase. Por ejemplo, para configurar todos los objetos de servicio creados a partir de la clase de Amazon EC2 para utilizar la región Oeste de EE. UU. (Oregón) (us-west-2), añada lo siguiente al objeto de configuración global AWS.config.

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

Bloqueo de la versión de API de un objeto de servicio

Puede bloquear un objeto de servicio en una versión de API específica de un servicio especificando la opción apiVersion al crear el objeto. En el siguiente ejemplo, se crea un objeto de servicio de DynamoDB que está bloqueado para una versión de API específica.

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

Para obtener más información acerca del bloqueo de la versión de la API de un objeto de servicio, consulte Bloqueo de versiones de la API.

Especificación de parámetros de objetos de servicio

Al llamar a un método de un objeto de servicio, transfiera los parámetros en JSON según los requiera la API. Por ejemplo, en Amazon S3, para obtener un objeto para un bucket y una clave especificados, transfiera los siguientes parámetros al método getObject. Para obtener más información acerca de cómo transferir parámetros JSON, consulte Uso de JSON.

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

Para obtener más información acerca de los parámetros de Amazon S3, consulte Class: AWS.S3 en la referencia de la API.

Además, puede vincular valores a parámetros individuales al crear un objeto de servicio mediante el parámetro params. El valor del parámetro params de objetos de servicio es un mapa que especifica uno o varios valores de parámetros definidos por el objeto de servicio. En el siguiente ejemplo se muestra el parámetro Bucket de un objeto de servicio de Amazon S3 vinculado a un bucket llamado myBucket.

var s3bucket = new AWS.S3({params: {Bucket: 'myBucket'}, apiVersion: '2006-03-01' });

Al vincular el objeto de servicio a un bucket, el objeto de servicio s3bucket trata el valor del parámetro myBucket como un valor predeterminado que ya no necesita especificarse para operaciones posteriores. Todos los valores de parámetros vinculados se omiten cuando se utiliza el objeto para operaciones donde el valor del parámetro no se puede aplicar. Puede anular este parámetro vinculado cuando hace llamadas en el objeto de servicio, especificando un nuevo valor.

var s3bucket = new AWS.S3({ params: {Bucket: 'myBucket'}, apiVersion: '2006-03-01' }); s3bucket.getObject({Key: 'keyName'}); // ... s3bucket.getObject({Bucket: 'myOtherBucket', Key: 'keyOtherName'});

Los detalles sobre los parámetros disponibles para cada método se encuentran en la referencia de la API.