Amazon AWS

Tutorial: Cómo actualizar la función lambda de tu skill de Alexa utilizando AWS CLI

Francisco Rivas
Diseñando para la Voz
4 min readOct 3, 2018

--

Es bastante común al momento de desarrollar nuestra skill para Alexa hacer pruebas locales y a su vez hacer muchos cambios para reparar cualquier error que detectemos. Cuando trabajamos en una función Lambda asociada a nuestra skill de Alexa que utiliza otros módulos bien sean de NodeJS o Python el editor inline tiene ciertas limitaciones por lo que el equipo de Lambda de AWS ofrece una alternativa, utilizando AWS CLI para actualizar la función Lambda. En este artículo describo los pasos que debemos seguir para lograr esto.

Este proceso consiste de 4 pasos:

  1. Configurar un usuario que tenga permisos para modificar Lambda
  2. Instalar AWS CLI
  3. Configurar AWS CLI con la información del usuario
  4. Ejecutar el script de actualización de la función

Paso #1: Configurar un usuario en IAM

Visita este enlace para acceder a tu Consola de Amazon

Una vez en la web, puedes hacer click sobre el enlace de IAM. En caso de no ver directamente la función puedes escribir “iam” en el cuadro de texto y filtrar automáticamente.

Consola de Amazon

Luego, por defecto Dashboard es la opción por defecto. En este caso nos interesa Users(1) y luego hacer click en el botón Add User(2).

Agregar Usuario

Inserta un nombre de usuario(3), preferiblemente uno que te permita distinguir su utilización para Lambda. Asegurate de que la casilla Programatic Access(4) esta marcada. Esto es muy importante.

De nuevo, cerciórate de que la casilla Programmatic Access está marcada ;)

Ahora sí, click en Next: Permissions(5)

Escribe un nombre de usuario. Recuerda marcar la casilla de Programmatic Access

Ahora es momento de permisos. Click en Attach existing policies directly(6) por defecto viene marcada la primera opción (esa no la queremos por ahora). Van a aparecer un montón de políticas, sin embargo, nos interesa solo la resultante de aplicar el filtro “LambdaFullAccess”(7) . Marca la casilla que indica “AWSLambdaFullAccess”(8) Luego click en Next:Review(9)

Asignar Políticas de Acceso al Usuario. AWSLambdaFullAccess

En esta parte del proceso, simplemente revisamos que todo esta correcto. Sí, revisamos que todo esta correcto. Listo?. Click, en Create User(10)

Verifica que la información y políticas del usuario son correctas

Finalmente, una vez que el usuario ha sido creado, podrás ver la información de Access Key ID y Secret Access Key. Es recomendable descargar el archivo .csv con la información. Click en Close.

Usuario creado satisfactoriamente

Paso #2: Instalar AWS CLI

Para este paso es necesario tener PIP (pip) instalado. Para verificar si está instalado:

$ pip -V
pip 18.0 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

Si no está instalado, puedes visitar este enlace en el que encontraras los pasos para ello.

Bien, una vez instalado PIP, procedemos a instalar AWS CLI

$ pip install awscli --user

Nota: el flag --user se utiliza para poder escribir en los directorios necesarios.

Esto hará que PIP recolecte todas las dependencias de AWS CLI y las instale. La lista de dependencias se puede encontrar en el archivo metadata.json dentro de awcli-V.VV.VV.dist-info, son:

botocore==1.12.16
colorama>=0.2.5,<=0.3.9
docutils>=0.10
rsa>=3.1.2,<=3.5.0
PyYAML>=3.10,<=3.13
s3transfer>=0.1.12,<0.2.0
argparse>=1.1

Terminado el proceso de instalación, confirmamos:

$ aws 
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]....

Paso #3: Configurar AWS CLI

Ahora es necesario configurar AWS CLI para que lo podamos utilizar para actualizar nuestra función Lambda.

Para ello utilizamos Terminal.app.

$ aws configure
AWS Access Key ID [None]: <Access Key ID>
AWS Secret Access Key [None]: <Secret Access Key>
Default region name [None]: <[1]>
Default output format [None]: <[2]>

[1]: Cuando accedes a la Consola de Amazon en la URL aparece la region que debes colocar. Por ejemplo: …console.aws.amazon.com/iam/home?region=**eu-west-1**#/home

[2]: Es recomendable utilizar “json”.

Paso #4: Ejecutar el script de actualización

He creado un pequeño (bastante rudimentario) script que con solo un par de parámetros actualiza la función lambda de nuestra skill de Alexa.

El script esta disponible aqui

La forma de ejecutarlo es:

$./lambdaUpdater.sh -z ZIP_FILENAME -f LAMBDA_FUNCTION_NAME

Por ejemplo:

$./lambdaUpdater.sh -z lambdaFuntion -f CambioHoy

El script hace varias cosas:

  • Elimina el archivo lambdaFunction.zip existente
  • Crea un archivo lambdaFuntion.zip nuevo, excluyendo todos los archivos y directorios cuyos nombres comiencen por “test” y también el archivo creado por VSCode cuando se crea un nuevo Workspace.
  • Utilizando el comando “lambda” de AWS CLI actualiza la función.

El resultado es algo como esto:

Result:

{
"FunctionName": "CambioHoy",
"FunctionArn": "arn:aws:lambda:eu-west-1:....",
"Runtime": "python3.6",
"Role": "arn:aws:iam::.....",
"Handler": "index.handler",
"CodeSize": 9136434,
"Description": "",
"Timeout": 3,
"MemorySize": 128,
"LastModified": "2018-10-02T22:43:18.208+0000",
"CodeSha256": ".....",
"Version": "$LATEST",
"VpcConfig": {
"SubnetIds": [],
"SecurityGroupIds": [],
"VpcId": ""
},
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "....."
}

Esto es todo, ahora nuestra skill de Alexa, esta actualizada y lista para probarla de nuevo. 🚀

Todos los comentarios, mejoras a las soluciones propuestas y feedback en general son siempre bienvenid@s.

Gracias por leer,

Escribió para Diseñando para la Voz, Francisco.

En Twitter: @franciscorivash

En GitHub: @frivas

--

--

Francisco Rivas
Diseñando para la Voz

Alexa Developer | Coffee Enthusiast | Percussionist | Curious (life, tech) | Keen on learning