Sunteți pe pagina 1din 48

aws-lambda

#aws-
lambda
Tabla de contenido
Acerca de 1

Capítulo 1: Empezando con aws-lambda 2

Observaciones 2

Los desencadenantes pueden incluir: 2

Lambda está mejor diseñado para el procesamiento de datos sin servidor en tiempo real, com 2

Examples 2

Instalación o configuración 2

Java AWS-Lambda S3 activado 8

Capítulo 2: AWS Lambda activado por S3 11

Examples 11

Echo Input Args en Java 11

Capítulo 3: AWS Lambda con S3 12

Introducción 12

Examples 12

Hoja de trucos 12

AWS-SDK para javascript 12

Función de muestra 12

Corriendo S3 12

Usar con Elasticache Redis 12

Capítulo 4: AWS Lambda usando Python 14

Examples 14

¿Por qué AWS Lambda? 14

Hola Mundo - Función Lambda 14

Capítulo 5: aws-lambda activado por S3 26

Sintaxis 26

Parámetros 26

Observaciones 26

Nombres de archivos 26

Clave de registros 26
Más ejemplos y pruebas 26

Examples 27

Operación S3 PUT 27

Capítulo 6: Cómo desarrollar aws-lambda (C #) en una máquina local 28

Introducción 28

Observaciones 28

Instale los componentes requeridos 28

Examples 28

Paso 1. Crea una nueva solución en Visual Studio. 28

Paso 2. Agrega y cambia el código en tu proyecto. 30

Paso 3 - Instale su función Lambda en AWS 32

Paso 4. Invoque su función AWS Lambda desde Visual Studio 33

Capítulo 7: Framework Serverless 35

Introducción 35

Observaciones 35

Examples 35

Sin servidor 35

Crear una simple operación CRUD 35

Capítulo 8: kit de habilidades de alexa 43

Examples 43

Crear el kit de habilidades de Alexa utilizando Blueprint 43

Creditos 45
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: aws-lambda

It is an unofficial and free aws-lambda ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official aws-lambda.

The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.

Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@zzzprojects.com

https://riptutorial.com/es/home 1
Capítulo 1: Empezando con aws-lambda
Observaciones
AWS Lambda es una configuración sin servidor para ejecutar funciones en la nube. Aprovecha las
tecnologías existentes de los servicios web de Amazon para escalar y ejecutar infinitamente solo
cuando sea necesario en su propio entorno aislado. Con Lambda, puede cargar su código,
configurarlo para que se ejecute en función de una variedad de desencadenantes y luego retirar
automáticamente el proceso cuando se complete. Opera en un modelo de pago por uso y es
extremadamente rentable y fácil de escalar.

AWS Lambda admite el código escrito en Node.js (JavaScript), Python, Java (compatible
con Java 8) y C # (.NET Core). Su código puede incluir bibliotecas existentes, incluso las
nativas.

Los desencadenantes pueden incluir:


Puntos finales HTTP

• Aplicaciones móviles
• Otros servicios de AWS (incluida la implementación REST con Amazon API Gateway)

Lambda está mejor diseñado para el


procesamiento de datos sin servidor en
tiempo real, como:
• Procesamiento de archivos de cargas
○ Transcodificación
○ Indexación
○ Validación
○ Redimensionamiento y Filtrado
• Análisis de datos de transmisión
• Telemetria
• Ejecutar como un backend web y móvil basado en métodos.
• Extender y vincular otros productos de AWS.

Examples
Instalación o configuración

https://riptutorial.com/es/home 2
1. Inicie sesión en su consola de AWS y haga clic en Lambda en la pestaña Servicios .

2. En Funciones , podrás crear una función Lambda usando el mismo botón etiquetado.

3. Aparecerá una pantalla donde puede seleccionar un plano. Estos son simplemente puntos
de partida para las funciones Lambda existentes para comenzar rápidamente con Lambda.

https://riptutorial.com/es/home 3
4. En la siguiente pantalla puede configurar cualquier desencadenante que desee utilizar para
"desactivar" esta función Lambda. Puede elegir entre ningún desencadenante (a través de
la configuración manual más tarde, dependiendo de su tarea), API Gateway (para crear un
cliente REST sin servidor), Alexa Skills o una plétora de otros para activar la función que
creará.

https://riptutorial.com/es/home 4
5. Terminará la configuración en la siguiente pantalla al configurar el Nombre , la Descripción
, elegir un Tiempo de ejecución , optar por editar la función en línea, cargar un archivo .zip
o cargar un archivo desde Amazon S3, elegir un Rol (útil para permisos basados en
permisos). interacción entre los servicios de AWS), establezca la memoria y los límites, y
prepare su aplicación para su uso en vivo.

https://riptutorial.com/es/home 5
https://riptutorial.com/es/home 6
6. Por último, revisarás tu función y la crearás. Dado que Lambda utiliza el modelo de pago por
uso, no se incurre en cargadores hasta que empiece a usar su función recién creada.

https://riptutorial.com/es/home 7
Java AWS-Lambda S3 activado

Se puede adjuntar una función AWS-Lambda a un determinado evento de cubeta. Cada vez que
se crea o elimina un archivo / carpeta, un evento puede desencadenar la ejecución de la función
lambda.

Una simple función Lambda para imprimir el nombre de un archivo cargado

Este es un proyecto lambda de una clase para imprimir el nombre de un archivo cargado. Para
maven necesitamos agregar esas dependencias:

<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>

https://riptutorial.com/es/home 8
<type>jar</type>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>1.3.0</version>
<type>jar</type>
</dependency>
</dependencies>

Ahora vamos a nuestra clase HelloWorld:

package com;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import com.amazonaws.services.s3.event.S3EventNotification;

public class HelloWorld implements RequestHandler< S3Event, String> {


@Override
public String handleRequest(S3Event event, Context ctx) {
S3EventNotification.S3EventNotificationRecord record=event.getRecords().get(0);
System.out.println("Bucket Name is "+record.getS3().getBucket().getName());
System.out.println("File Path is "+record.getS3().getObject().getKey());
return null;
}
}

El siguiente paso es construir el proyecto usando mvn.

Después de construir el proyecto, necesitamos subirlo a AWS-Lambda. Vaya a Lambda, elija


"crear una función lambda". Omita la parte en la que elija el plano, ya que Java generalmente no
está allí.

Además, omita "Configurar activadores" porque lo configuraremos desde una ubicación diferente.
En la página siguiente, ingrese un nombre para su primera función lambda, luego una pequeña
descripción y elija Java como tiempo de ejecución.

Para el "Tipo de entrada de código", elija "Cargar desde un archivo .ZIP" y luego seleccione su
archivo .zip en la siguiente ubicación para cargarlo.

La parte difícil en esta página es el campo Handler. En el campo del controlador, debe especificar
la ubicación de la clase en la que implementa el RequestHandler. Esta clase es el punto de
entrada para la lambda y su función Lambda no funcionará si no se especifica correctamente.
Para nuestro manejador de casos es "com.HelloWorld"

Acoplando un disparador S3 a Lambda:

Aquí adjuntaremos un disparador a la carga del archivo S3.

• Vaya a S3, elija el cubo, luego "Propiedades".


• En la sección "Propiedades", vaya a "Eventos".
• Añadir detalles del evento. En el campo "Eventos", elige cómo quieres activar tu Lambda.

https://riptutorial.com/es/home 9
Elegiremos "ObjectCreated (All)" Tenga en cuenta que la función lambda y el depósito
deben estar en la misma región de Amazon
• Para "Enviar a", verifique la función Lambda y elija su función lambda de la lista.

Monitoreo de salida Lambda

Ahora, subiremos un archivo al contenedor que tiene el desencadenador lambda. Para ver los
resultados y registros de lambda, vaya a "CloudWatch", luego elija "Registros", luego elija su
función Lambda. Es posible que veas muchas entradas en "Log Streams", elige la última y ábrela.
Debería poder ver la salida de la ejecución lambda allí.

Lea Empezando con aws-lambda en línea: https://riptutorial.com/es/aws-


lambda/topic/2357/empezando-con-aws-lambda

https://riptutorial.com/es/home 10
Capítulo 2: AWS Lambda activado por S3
Examples
Echo Input Args en Java

Puede obtener fácilmente esta información mediante la extracción de la entrada en la función del
controlador. Por ejemplo, en Java:

public String handleRequest(String input, Context context) {


context.getLogger().log("Input: " + input);

String output = "Input:" + System.getProperty("line.separator") + input;

return output;
}

Lea AWS Lambda activado por S3 en línea: https://riptutorial.com/es/aws-lambda/topic/6216/aws-


lambda-activado-por-s3

https://riptutorial.com/es/home 11
Capítulo 3: AWS Lambda con S3
Introducción
Los desarrolladores de Lambda manejarán los problemas que requieren el uso de otros recursos
de AWS. Este tema se centra en S3 (Servicio de almacenamiento simple), que normalmente se
utilizará para almacenar archivos estáticos y otras configuraciones. Esta documentación
considerará el uso de AWS-SDK en lambda, el acceso a los archivos en S3 desde Lambda y la
activación de las funciones Lambda cuando se activa un evento S3

Examples
Hoja de trucos

AWS-SDK para javascript


Lambda contiene aws-sdk ( https://aws.amazon.com/sdk-for-node-js/) en su versión global, por lo
que no es necesario cargar este módulo de nodo en el zip.

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

Función de muestra

module.exports.myFunction = (event, context, callback) => {


const response = {
statusCode: 200,
body: 'Hello Lambda!',
};
return callback(null, response);
};

Corriendo S3
const s3 = nuevo AWS.S3 ();

Usar con Elasticache Redis

//make sure redis node-module is added in zip


const redis = require('redis');
//the redis information should be stored in the environment, not hard coded
const redis_options = {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
};

https://riptutorial.com/es/home 12
module.exports.myFunction = (event, context, callback) => {
try {
let client = redis.createClient(redis_options);
context.callbackWaitsForEmptyEventLoop = false;

client.on('connect', () => {
console.log('Connected:', client.connected);
});

client.on('end', () => {
console.log('Connection closed.');
});

client.on('ready', function () {
console.log('Connection ready.');
client.keys('*', (err, keys) => {
//always quit the redis client when no longer needed
//else the connection will be used up
client.quit();

const response = {
statusCode: 200,
body: keys,
};

return callback(null, response);


});
} catch (err) {
if (client) { client.quit();}
console.log('Error!: ' + err.message);
callback(err);
}
};

Lea AWS Lambda con S3 en línea: https://riptutorial.com/es/aws-lambda/topic/9286/aws-lambda-


con-s3

https://riptutorial.com/es/home 13
Capítulo 4: AWS Lambda usando Python
Examples
¿Por qué AWS Lambda?

Soportes de AWS Lambda

• Escalabilidad transparente y disponibilidad.


• Desarrollador de operaciones amigables y sin necesidad de administrar servidores.
• Integración nativa a servicios AWS
• No hay necesidad de pagar por el tiempo de inactividad
• Integración REST
• Monitoreo de la interfaz REST usando la puerta de enlace de la API de AWS

Hola Mundo - Función Lambda

Esta es una de las funciones lambda más simples. Es equivalente al programa Hello World.
Para crear su primer programa siga los pasos mencionados a continuación.

1. Inicie sesión en la consola de AWS


2. Haga clic en Lambda bajo cálculo
3. Haga clic en crear una función Lambda

https://riptutorial.com/es/home 14
4. Omitir seleccionar la sección de planos
5. En el gatillo de configuración, haga clic en el rectángulo punteado.

https://riptutorial.com/es/home 15
https://riptutorial.com/es/home 16
6. Seleccione API Gateway
7. Rellene los datos requeridos como en la imagen.

https://riptutorial.com/es/home 17
https://riptutorial.com/es/home 18
Nombre de API es el nombre de tu API que vas a construir. El Patrón de recursos es la
ruta URL que puede invocar a su función Lambda. Seleccione el método http requerido. En
nuestro ejemplo elegimos GET. En AWS, la puesta en escena se puede realizar de
diferentes formas, como prod, dev ... Le ayudará a diferenciar las funciones de prod y dev.
Para fines de demostración, permite elegir la seguridad como abierta (no se recomienda en
producción). Haga clic en Siguiente
Nombre de API es el nombre de tu API que vas a construir. El Patrón de recursos es la
ruta URL que puede invocar a su función Lambda. Seleccione el método http requerido. En
nuestro ejemplo elegimos GET. En AWS, la puesta en escena se puede realizar de
diferentes formas, como prod, dev ... Le ayudará a diferenciar las funciones de prod y dev.
Para fines de demostración, permite elegir la seguridad como abierta (no se recomienda en
producción). Haga clic en Siguiente
8. Configure la función de la siguiente manera

https://riptutorial.com/es/home 19
https://riptutorial.com/es/home 20
Proporcione el nombre de la función, la descripción de su función y el entorno de ejecución.
Estamos eligiendo Python como entorno de ejecución.
9. Modificar el código.

Aquí estamos imprimiendo el evento aws lambda en cloudtrail, que es gratuito. También
está devolviendo una cadena.
10. Proporcionar controlador de función Lambda y función

https://riptutorial.com/es/home 21
https://riptutorial.com/es/home 22
Asegúrese de que el nombre del controlador debe comenzar con lambda_function. También
cree un nuevo rol para ejecutar la función lambda. Seleccione la cantidad de memoria
principal requerida para ejecutar su función. Seleccione el tiempo de espera predeterminado
y haga clic en siguiente
11. Haga clic en crear función
12. Ahora su función está lista para ejecutarse. Haga clic en el enlace proporcionado por el aws

https://riptutorial.com/es/home 23
https://riptutorial.com/es/home 24
Cuando haga clic en el enlace, su función lambda se ejecutará en segundo plano y obtendrá
una salida en el navegador.

Lea AWS Lambda usando Python en línea: https://riptutorial.com/es/aws-lambda/topic/6698/aws-


lambda-usando-python

https://riptutorial.com/es/home 25
Capítulo 5: aws-lambda activado por S3
Sintaxis
• Deserializado objeto basado en JSON
• La tecla "Registros" tiene uno o más eventos reales
• Cada objeto de evento secundario contiene toda la información que necesita para
determinar qué ha cambiado

Parámetros

Parámetro Detalles

Records -> [] -> s3 -> bucket -> name El nombre del cubo S3.

Records -> [] -> s3 -> object -> key La ruta y el nombre del archivo.

Observaciones

Nombres de archivos
A diferencia de la mayoría de las rutas de archivo, el nombre de la clave S3 (esquema JSON:
$.Records[0].s3.object.key ) no incluye una barra diagonal $.Records[0].s3.object.key . Por lo
tanto, si tiene un archivo en la ruta s3://mybucket/path/file.txt , la clave será path/file.txt

Al menos en Python, el valor del campo clave es la URL UTF-8 codificada. Esto se nota cuando el
nombre de archivo contiene espacios o caracteres que no son ASCII. El campo debe ser una URL
decodificada, luego UTF-8 decodificada - Ver Obtener nombre de archivo no ASCII del evento de
notificación S3 en Lambda

Clave de registros
Es posible tener múltiples acciones iguales (o diferentes) dentro de la tecla "Records" del evento;
sin embargo, en la práctica, generalmente verá un evento por invocación de su función Lambda.

Más ejemplos y pruebas


En realidad, hay eventos de muestra en la consola Lambda, si selecciona Acciones -> Configurar
evento de prueba. Sin embargo, puede ver la operación PUT en los ejemplos anteriores.

Puede modificar y enviar eventos de prueba desde la consola de AWS Lambda para ver cómo
responde su función.

https://riptutorial.com/es/home 26
Examples
Operación S3 PUT

{
"Records": [
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": "arn:aws:s3:::mybucket",
"name": "sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}

Lea aws-lambda activado por S3 en línea: https://riptutorial.com/es/aws-lambda/topic/6618/aws-


lambda-activado-por-s3

https://riptutorial.com/es/home 27
Capítulo 6: Cómo desarrollar aws-lambda (C
#) en una máquina local
Introducción
Como parte del movimiento Serverless , AWS anunció recientemente la compatibilidad con C #
para las funciones de AWS Lambda. En este artículo, le mostraré cómo desarrollar, instalar y
llamar a una simple función Lambda C # AWS utilizando Visual Studio 2015.

Antes de comenzar este ejemplo, primero vaya a la sección de Comentarios de este documento y
asegúrese de tener todos los componentes necesarios instalados.

Observaciones

Instale los componentes requeridos


En el momento de redactar este documento (enero de 2017), los siguientes componentes
deberán instalarse en su máquina en este orden. La máquina que utilicé tenía instalado Windows
10 Home.

1. Visual Studio 2015 actualización 3


2. AWS Toolkit para Visual Studio 2015 - versión 1.11.2.0
3. Microsoft .NET Core Tools (Vista previa 2) - versión 14.1.21111.0

Cada uno de estos componentes se ha desarrollado y publicado activamente, por lo tanto, revise
los enlaces y las versiones y actualice este documento cuando sea necesario.

Cada uno de estos puede tardar un tiempo en instalarse , así que tenga paciencia, haga uno por
vez para minimizar los errores.

Por último, es triste reiniciar Windows antes de iniciar el desarrollo, pero siempre es una buena
idea después de realizar importantes instalaciones de herramientas de desarrollo en un cuadro de
Windows.

Examples
Paso 1. Crea una nueva solución en Visual Studio.

1. Abra Visual Studio y seleccione Archivo -> Nuevo proyecto


2. Seleccione AWS Lambda Project with Tests (.NET Core)

https://riptutorial.com/es/home 28
3. A continuación se mostrará la pantalla Seleccionar plano . Seleccione Función vacía y
haga clic en el botón Finalizar:

4. Vaya a Herramientas -> NuGet Package Manager -> Package Manager Console.
5. En la ventana de la consola, escriba Install-Package Amazon.Lambda.Core
6. Haga clic con el botón derecho en su proyecto en el explorador de soluciones y seleccione

https://riptutorial.com/es/home 29
Restaurar paquetes. Este es el paso final de preparación antes de comenzar a escribir el
código.

Paso 2. Agrega y cambia el código en tu proyecto.

1. Abra Function.cs y reemplace el código de clase con lo siguiente:

public class Function


{

/// <summary>
/// A simple function that takes a birth date and returns Age in years
/// </summary>
/// <param name="input"></param>
/// <returns>Age is years</returns>
///
[LambdaSerializer(typeof(SimpleSerializer))]
public string FunctionHandler(Dictionary<string, int> input)
{
var defaultMessage = "Age could not be determined.";

var birthDate = new DateTime(input["year"], input["month"], input["day"]);


var ageInYears = DateTime.Today.Year - birthDate.Year;
if (birthDate.DayOfYear > DateTime.Today.DayOfYear)
ageInYears--;

defaultMessage = $"Age in years: {ageInYears}";

return defaultMessage;
}
}

Deberá agregar las siguientes declaraciones de uso cerca de la parte superior:

using System.Collections.Generic;
using Amazon.Lambda.Core;

https://riptutorial.com/es/home 30
2. Agregue un archivo al proyecto llamado SimpleSerializer.cs
3. Coloque el siguiente código en ese archivo:

using System;

using System.IO;
using Amazon.Lambda.Core;
using Newtonsoft.Json;

namespace AWSLambdaFunctionAgeInYears
{
public class SimpleSerializer : ILambdaSerializer
{
public T Deserialize<T>(Stream requestStream)
{
string text;
using (var reader = new StreamReader(requestStream))
text = reader.ReadToEnd();

try
{
return JsonConvert.DeserializeObject<T>(text);
}
catch (Exception ex)
{
if (typeof(T) == typeof(System.String))
return (T)Convert.ChangeType(text, typeof(T));

throw ex;
}

public void Serialize<T>(T response, Stream responseStream)


{
StreamWriter streamWriter = new StreamWriter(responseStream);
try
{
string text = JsonConvert.SerializeObject(response);
streamWriter.Write(text);
streamWriter.Flush();
}
catch (Exception ex)
{
if (typeof(T) == typeof(System.String))
{
streamWriter.Write(response);
streamWriter.Flush();
return;
}

throw ex;
}

}
}
}

4. En el Proyecto de prueba, cambie la línea 23 de FunctionTest.cs a lo siguiente:

https://riptutorial.com/es/home 31
var upperCase = function.FunctionHandler(null);

5. Construye tu solución - no deberías tener errores de compilación.

Paso 3 - Instale su función Lambda en AWS

1. Haga clic derecho en su proyecto y seleccione Publicar en AWS Lambda ...

2. Aparecerá la pantalla Cargar en AWS Lambda. Asegúrese de seleccionar la región correcta.


Mantener todos los valores predeterminados. Luego solo ingrese el Nombre de la Función:
AWSLambdaFunctionAgeInYears y luego haga clic en siguiente.

3. En la página siguiente, seleccione AWSLambdaRole para el campo Nombre de rol. Haga


clic en Cargar y la función debería cargarse sin error.

https://riptutorial.com/es/home 32
Paso 4. Invoque su función AWS Lambda desde Visual Studio

1. Después del paso 3 anterior, Visual Studio abrirá la ventana View Function con la función
cargada.
2. En la parte inferior izquierda de esta pantalla, ingrese el siguiente json en el cuadro de
entrada de muestra :

{
"month": "10",
"day": "28",
"year": "1979"
}

https://riptutorial.com/es/home 33
3. Último paso: haz clic en el botón verde Invocar . La función se ejecutará en AWS y la
respuesta se mostrará en la ventana de respuesta de la parte inferior derecha.

Lea Cómo desarrollar aws-lambda (C #) en una máquina local en línea:


https://riptutorial.com/es/aws-lambda/topic/8937/como-desarrollar-aws-lambda--c-sharp--en-una-
maquina-local

https://riptutorial.com/es/home 34
Capítulo 7: Framework Serverless
Introducción
El marco de aplicación de código abierto para crear fácilmente arquitecturas sin servidor en AWS
Lambda y más. Esta sección incluye, cómo configurar el marco sin servidor para el desarrollo de
aplicaciones con ejemplos relevantes.

Observaciones
"Sin servidor" es un marco: https://serverless.com/

Examples
Sin servidor

Instalar sin servidor globalmente

npm install serverless -g

Cree una función AWS Lamdba en Node.js

serverless create --template aws-nodejs

Ejemplo de un handler.js

'use strict';

// Your first function handler


module.exports.hello = (event, context, cb) => cb(null,
{ message: 'Go Serverless v1.0! Your function executed successfully!', event }
);

// You can add more handlers here, and reference them in serverless.yml

Implementar en la cuenta de AWS en vivo

serverless deploy

Crear una simple operación CRUD

Crear una simple operación CRUD usando Serverless Framework

Instalar el framework Serverless globalmente

https://riptutorial.com/es/home 35
npm install serverless -g

Crea un servicio Lambda simple

serverless create --template aws-nodejs --path myService

Vaya al directorio myService que debería contener

1. serverless.yml
2. handler.js
3. evento.json

Toda la configuración del servicio Serverless es administrada por serverless.yml


Cambia su contenido para definir el servicio CRUD.

Ejemplo de archivo serverless.yml

service: serverless-crud

provider:
name: aws
runtime: nodejs4.3
region: us-east-1
stage: dev
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:us-east-1:*:*"

functions:
create:
handler: handler.create
events:
- http:
path: todos
method: post
cors: true
readAll:
handler: handler.readAll
events:
- http:
path: todos
method: get
cors: true
readOne:
handler: handler.readOne
events:

https://riptutorial.com/es/home 36
- http:
path: todos/{id}
method: get
cors: true
update:
handler: handler.update
events:
- http:
path: todos/{id}
method: put
cors: true
delete:
handler: handler.delete
events:
- http:
path: todos/{id}
method: delete
cors: true

resources:
Resources:
TodosDynamoDbTable:
Type: 'AWS::DynamoDB::Table'
DeletionPolicy: Retain
Properties:
AttributeDefinitions:
-
AttributeName: id
AttributeType: S
KeySchema:
-
AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: 'todos'

Este archivo define

1. Lenguaje de programación de funciones lambda


2. Política de ejecución de la función Lambda.
3. Creación de la tabla Dynamodb y su política.
4. Punto final HTTP (punto final de la puerta de enlace API)

Luego, debe definir la función lambda (por ejemplo, node.js) en el archivo handler.js para definirla.

'use strict';

const todosCreate = require('./todos-create.js');


const todosReadAll = require('./todos-read-all.js');
const todosReadOne = require('./todos-read-one.js');
const todosUpdate = require('./todos-update.js');
const todosDelete = require('./todos-delete.js');

module.exports.create = (event, context, callback) => {


todosCreate(event, (error, result) => {

https://riptutorial.com/es/home 37
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};

context.succeed(response);
});
};

module.exports.readAll = (event, context, callback) => {


todosReadAll(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};

context.succeed(response);
});
};

module.exports.readOne = (event, context, callback) => {


todosReadOne(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};

context.succeed(response);
});
};

module.exports.update = (event, context, callback) => {


todosUpdate(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: JSON.stringify(result),
};

context.succeed(response);
});
};

module.exports.delete = (event, context, callback) => {


todosDelete(event, (error, result) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin" : "*"
},

https://riptutorial.com/es/home 38
body: JSON.stringify(result),
};

context.succeed(response);
});
};

Luego tienes que crear nuevos archivos para definir tus funciones CRUD
Crear estos archivos

1. todos-create.js
2. todos-read-all.js
3. todos-read-one.js
4. todos-update.js
5. todos-delete.js

Luego define estas funciones en cada archivo.

para todos-create.js

'use strict';

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


const dynamoDb = new AWS.DynamoDB.DocumentClient();
const uuid = require('uuid');

module.exports = (event, callback) => {


const data = JSON.parse(event.body);

data.id = uuid.v1();
data.updatedAt = new Date().getTime();

const params = {
TableName: 'todos',
Item: data
};

return dynamoDb.put(params, (error, data) => {


if (error) {
callback(error);
}
callback(error, params.Item);
});
};

Para todos-read-all.js

'use strict';

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


const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports = (event, callback) => {


const params = {

https://riptutorial.com/es/home 39
TableName: 'todos',
};

return dynamoDb.scan(params, (error, data) => {


if (error) {
callback(error);
}
callback(error, data.Items);
});
};

For todos-read-one.js <br>

'use strict';

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


const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports = (event, callback) => {


const params = {
TableName: 'todos',
Key: {
id: event.pathParameters.id
}
};

return dynamoDb.get(params, (error, data) => {


if (error) {
callback(error);
}
callback(error, data.Item);
});
};

Para todos-update.js

'use strict';

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


const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports = (event, callback) => {


const data = JSON.parse(event.body);

data.id = event.pathParameters.id;
data.updatedAt = new Date().getTime();

const params = {
TableName : 'todos',
Item: data
};

return dynamoDb.put(params, (error, data) => {


if (error) {
callback(error);
}
callback(error, params.Item);
});
};

https://riptutorial.com/es/home 40
Para todos-delete.js

'use strict';

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


const dynamoDb = new AWS.DynamoDB.DocumentClient();

module.exports = (event, callback) => {


const params = {
TableName : 'todos',
Key: {
id: event.pathParameters.id
}
};

return dynamoDb.delete(params, (error, data) => {


if (error) {
callback(error);
}
callback(error, params.Key);
});
};

Para ejecutar estas aplicaciones necesitas instalar npm dependencias.

1. npm init Inicialización npm


2. npm install aws-sdk --save instalación aws-sdk
3. npm install uuid --save

Despliegue
Ahora puedes desplegar estos proyectos.
cd myService verifica que está en el directorio del proyecto y luego puede implementar su código

serverless deploy

Use el punto final


Si implementó con éxito, verá los nombres de pont gateway end pont en su consola.

Probar crear punto final

curl -X POST https://XXXX.execute-api.region.amazonaws.com/dev/todos --data '{ "body" : "Learn


Serverless" }'

Prueba de Read Punto final (Leer todo)

curl https://XXXX.execute-api.region.amazonaws.com/dev/todos

Prueba para leer el punto final (leer uno)

curl https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id>

Prueba de punto final de actualización

https://riptutorial.com/es/home 41
curl -X PUT https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id> --data '{ "body" :
"Understand Serverless" }'

Prueba para eliminar el punto final

`curl -X DELETE https://XXXX.execute-api.region.amazonaws.com/dev/todos/<id`>

Lea Framework Serverless en línea: https://riptutorial.com/es/aws-lambda/topic/6719/framework-


serverless

https://riptutorial.com/es/home 42
Capítulo 8: kit de habilidades de alexa
Examples
Crear el kit de habilidades de Alexa utilizando Blueprint

Inicie sesión en la Consola de administración de AWS y navegue hasta AWS Lambda.

Haga clic en Crear nueva función y verá esta ventana.

Seleccione el entorno Runtime pero blueprint (código de muestra) solo para node.js y python

Hay dos ejemplos de configuraciones para el kit de habilidades alexa. Puedes filtrar esas cosas.

Por selección uno de estos blue print. Puede ver la ventana Configurar desencadenadores que
puede seguir rellenando el campo requerido.

En la ventana Configurar función , puede agregar un nombre a su función lambda y debe


agregar un rol para la ejecución de la función.

https://riptutorial.com/es/home 43
Ahora puedes crear la función.

Después de la creación puedes probar tu función. Haga clic en el botón de acción

Aquí, seleccione Configurar evento de prueba

En esta ventana seleccione la plantilla de evento alexa. El nombre de la plantilla depende de tu


proyecto seleccionado

Después de seleccionar esta plantilla puede probar su ejemplo de código.

Lea kit de habilidades de alexa en línea: https://riptutorial.com/es/aws-lambda/topic/7698/kit-de-


habilidades-de-alexa

https://riptutorial.com/es/home 44
Creditos
S.
Capítulos Contributors
No

Empezando con
1 Ahmed Abouhegaza, alatar, Community
aws-lambda

AWS Lambda
2 Doug Schwartz
activado por S3

AWS Lambda con


3 Adonis Lee Villamor
S3

AWS Lambda
4 Nithin K Anil
usando Python

aws-lambda activado
5 Alastair McCormack, Marshall Anschutz
por S3

Cómo desarrollar
6 aws-lambda (C #) en Taterhead
una máquina local

Framework Alastair McCormack, Ashan, Eric Nord, Luc Boissaye, Niroshan


7
Serverless Ranapathi

kit de habilidades de
8 Niroshan Ranapathi
alexa

https://riptutorial.com/es/home 45

S-ar putea să vă placă și