Header Ads Widget

Ticker

6/recent/ticker-posts

Creación de un script de Hubot para AWS API Gateway

 

Creación de un Hubot para AWS API Gateway

En nuestra publicación sobre los marcos de bots de ChatOps , discutimos Hubot y cómo este proyecto ampliamente bifurcado es un mecanismo fácilmente extensible para crear sus propios bots de ChatOps. En esta publicación, echamos un vistazo a la creación de dicha extensión en forma de Hubot para ayudar a administrar Amazon API Gateway . Analizaremos la configuración de una instancia de Hubot lista para el desarrollo de una extensión, conectaremos Hubot a Flowdock y construiremos una integración de ejemplo con Amazon API Gateway.

Metas

Si no está familiarizado con el término, ChatOps es una filosofía para llevar sus herramientas de productividad a un entorno de chat de equipo, a menudo mediante el uso de un marco de bots útil como Hubot . Hay muchas razones por las que una organización podría crear tal extensión; automatizar las tareas operativas, simplificar la administración, crear interfaces fáciles de usar para nuevas aplicaciones, etc. En el caso de Amazon API Gateway, el objetivo de crear un bot es implementar un mecanismo de administración simple para administrar claves APIy asignar las claves a las API. Si bien estas funciones administrativas obviamente existen tanto en la consola de administración de API Gateway como en la AWS CLI, son algo poco intuitivas y podrían beneficiarse de estar "envueltas" en una capa de administración fácil de usar. En este contexto, vale la pena señalar algunos detalles sobre la funcionalidad de Amazon API Gateway:

  • Se requiere cierta navegación para encontrar información sobre sus API y claves de API a través de la consola, y no es sencillo recopilar esa información en una pantalla;
  • Amazon API Gateway tiene el concepto de ' etapas ', diseñado para representar un modelo promocional interno con etapas como desarrollo, preproducción y producción. Al igual que las API y las claves de API, navegar entre etapas y encontrar información sobre cada una puede resultar engorroso;
  • Dependiendo de la modularidad de su diseño de API, la cantidad de API definidas en API Gateway puede crecer rápidamente. La habilitación de claves de API "en masa" para una serie de API puede ser una tarea intensiva o lenta a menos que cree scripts que llamen a la CLI.

Por lo tanto, la creación de un bot puede cumplir el objetivo de simplificar estas funciones de administración de una manera sencilla sin crear una nueva interfaz de usuario o multitud de scripts que requieran distribución y mantenimiento. Además, Amazon también ofrece un SDK de Node.js , lo que hace que la integración entre Hubot y API Gateway sea muy sencilla.

Empezando

El primer paso para crear una extensión es generar un proyecto de Hubot en el que trabajar, como se describe en la guía de introducción de Hubot . Puede lograr esto instalando y ejecutando el generador Yeoman Hubot (asumiendo que ya lo tiene nodenpminstalado):

npm install -g yo generator-hubot
mkdir gateway_bot
cd gateway_bot
yo hubot

El generador hace una serie de preguntas para configurar el Hubot (que también se pueden enviar como argumentos de línea de comando), como el nombre del Hubot y el adaptador requerido. Los adaptadores son el medio por el cual Hubot se conecta a plataformas de mensajería y colaboración en equipo como Slack y Yammer con el shelladaptador predeterminado también disponible para trabajar con una instancia de Hubot localmente. En nuestro tutorial conectamos Hubot con Flowdock para demostrar una integración con una herramienta de colaboración en equipo. Al igual que con otras herramientas de colaboración en equipo, existen varios requisitos previos para utilizar Flowdock:

  • Debe haber un perfil de usuario disponible en Flowdock que permita a Hubot conectarse con permiso para los flujos que se requiere que Hubot escuche;
  • El nombre del usuario debe coincidir con el nombre del Hubot; de lo contrario, el Hubot no sabrá que se está hablando en una conversación;
  • Debe establecer el nombre de usuario y la contraseña con los que Hubot iniciará sesión utilizando las variables de entorno HUBOT_FLOWDOCK_LOGIN_EMAILHUBOT_FLOWDOCK_LOGIN_PASSWORD.

Con estas dependencias cumplidas, puede ejecutar el hubotscript, pasando el argumento -a flowdocky Hubot escuchará los flujos para los que la cuenta tiene permisos:

$ ./bin/hubot -a flowdock --name gateway
[Tue Aug 16 2016 10:38:32 GMT+0100 (BST)] INFO Ignoring all messages from user ids 0
...

[Tue Aug 16 2016 10:38:34 GMT+0100 (BST)] INFO Flowdock: listening to flows: Test Gateway Bot

En el propio flujo, ahora puede ejecutar el helpcomando, utilizando el nombre gatewaypara dirigirse a Hubot y ver la lista de comandos predeterminados:

Captura de pantalla de ayuda

Captura de pantalla de ayuda

Cada uno de estos comandos hace referencia a un módulo enumerado en el packages.jsonarchivo npm external-scripts.jsonen el archivo en el directorio raíz del proyecto Hubot: junto con el scriptsdirectorio, estos son los mecanismos para controlar qué módulos de Hubot se cargan (el orden de carga y las mejores prácticas de administración de dependencias está documentado en su totalidad aquí . Obviamente, puede adaptar estas dependencias según sea necesario para su implementación (ya que no todas las organizaciones quieren imágenes de pugs en sus conversaciones :)).

Tutorial relacionado: Creación de un bot inteligente con la API de Slack

Construyendo el Bot

Con un Hubot en funcionamiento, el siguiente paso es comenzar a programar. Hubot ofrece un mecanismo de extensión CoffeeScript fácil de usar con pautas claras sobre su uso y una gran cantidad de ejemplos disponibles tanto en Node Package Manager como en el proyecto Hubot Scripts (ahora en desuso) Como se mencionó anteriormente, los scripts se cargan automáticamente desde el scriptssubdirectorio y example.coffeese proporciona un ejemplo ( ) para ayudarlo a guiarlo en sus esfuerzos: si bien existe un mecanismo para convertir cualquier cosa que cree en un paquete, editar una secuencia de comandos directamente en el directorio de secuencias de comandos es casi con certeza la forma más fácil de familiarizarse con las secuencias de comandos de las extensiones de Hubot (el uso del mecanismo de empaquetado le brinda la oportunidad de escribir pruebas unitarias para su secuencia de comandos, por lo que puede ser un punto de partida más atractivo si ya están familiarizados con Hubot).

La clave para implementar con éxito una extensión de Hubot es asegurarse de que su bot pueda reaccionar a las preguntas que se le hagan; esto se logra usando uno de dos métodos :

  • Hubot puede "escuchar" los mensajes que se dicen en una habitación y responder a la habitación;
  • Hubot también puede enviar respondmensajes solicitados directamente por un solo usuario.

Los métodos hearrespondtambién implementan el soporte de expresiones regulares, lo que le permite ser tan explícito como mejor le parezca en términos de las interacciones que escucha Hubot y el código que implementa para reaccionar a una interacción. Con nuestro caso de uso de API Gateway, el objetivo es convertir las llamadas al SDK de Node en comandos fáciles de usar en Hubot; nos dirigimos directamente a Hubot utilizando el respondmecanismo, reduciendo el alcance de la integración a comandos explícitos de usuarios determinados únicamente. Por ejemplo, para enumerar todas las claves de API, un miembro del equipo podría preguntar gateway list api keys: Para lograr esto, el script de Hubot necesita exportar una función que llame al método getApiKeys en el SDK de Node y repita el resultado, enviando un mensaje al usuario con el nombre. , valor y estado de cada clave de API:

AWS = require('aws-sdk')

credentials = new AWS.SharedIniFileCredentials {profile: 'default'}

GTWY = new AWS.APIGateway({
  region: 'eu-west-1',
  credentials: credentials
})

module.exports = (robot) ->
  # List all API Keys
  robot.respond /list api keys/i, (msg) ->
    GTWY.APIGateway.getApiKeys (error, data) ->
      if error
        console.log error
        return msg.reply 'Error listing API keys, check the bot logs'

      else
        names = ('**' + k.name + '**: value = ' + k.id + ', enabled = **' + k.enabled + '**' for k in data.items)
        return msg.reply '\n' + names.join('\n') + '\n'

Cuando se dirige desde Flowdock, los resultados se muestran en el flujo:

Captura de pantalla de listas de API

Captura de pantalla de listas de API

En este caso, Hubot ha respondido solo al usuario que hace la pregunta en un esfuerzo por limitar los datos visibles en el flujo por razones de seguridad .

Más de este autor: 5 consejos para comenzar su viaje de API

Ampliación del recorrido

Pasar de este simple ejemplo a un bot completo se basa principalmente en mapear los comandos que tienen sentido en el flujo con las funciones relevantes de AWS SDK. La extensión Hubot de Amazon API Gateway que se usa en este tutorial proviene de una extensión creada por Ebury que está disponible en GitHub y en Node Package Manager . Los siguientes comandos son compatibles con la primera versión:

# Commands:
#   gateway list api keys - List all API keys for the gateway
#   gateway list api key  - List an API key with assigned APIs and stages
#   gateway create api key  - Create an API key with name of 
#   gateway [enable|disable] api key  - Enable or disable the API key with the name of 
#   gateway delete api key  - Delete the API key with the name of , requires confirmation
#   gateway confirm delete api key  - Delete API keys in list
#   gateway assign  to  for  stage - Assign an API key to an API for a given stage
#   gateway remove  from  for  stage - Remove an API key from an API for a given stage

Pensamientos finales

Crear una extensión de Hubot para Amazon API Gateway fue una tarea relativamente trivial, y la primera versión funcional se completó en menos de un día. Es un ejemplo de cómo un pequeño esfuerzo de desarrollo junto con un marco de ChatOps rico en funciones puede obtener grandes recompensas. El empoderamiento que un bot puede brindar en un entorno operativo es significativo, ya que permite a los usuarios automatizar o completar tareas de manera fácil y eficiente con una capacitación o documentación limitada, convirtiendo esas tareas en parte de sus conversaciones diarias.

Tenga en cuenta que la extensión Hubot ha sido de código abierto y está disponible en GitHub y en el Administrador de paquetes de nodo .

Publicar un comentario

0 Comentarios