Ver y crear Tags en recursos de AWS usando Postman
La mayoría de los recursos de Amazon Web Services soportan Tags, que son pares clave-valor que se interpretan como simples strings y permiten filtrar los recursos a la hora de crear dashboards, listar los recursos (en la consola, el CLI o por API) o crear reportes. Incluso se pueden crear filtros en Billing basados en tags, por ejemplo para filtrar recursos por centro de costos se podría usar un tag con clave cost-center y distintos valores para distintos clientes. También, la mayoría de los recursos que soportan Tags permiten asignar permisos desde IAM utilizando estos tags.
Algunos usos típicos de tags son environment: dev/test/pre/prod, owner: dev/qa/ops/support, service: backend/cache/postprocessing/etc o cost-center: client1/client2/etc. Una discusión de mejores prácticas excede al alcance de este artículo, pero les recomiendo estos recursos:
- https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html
- https://aws.amazon.com/answers/account-management/aws-tagging-strategies/
- https://cloudacademy.com/blog/aws-tags-important/
Pre-requisitos para crear tags usando Postman:
- Tener una cuenta de AWS
- Tener Postman
- Tener un usuario de IAM con Access Keys y con permisos para crear tags. Pueden seguir esta guía para crear usuario con Access Keys. Los permisos son un poco más complejos porque se asignan para cada servicio. Pueden crear una policy con permisos para tags para cada servicio (para este artículo alcanza con EC2 y CloudWatch), o pueden usar directamente esta policy con permisos para crear, borrar y describir tags en EC2 y CloudWatch.
- Descargar esta colección de Postman.
La colección de Postman contiene (hasta el momento) 4 requests: una para agregar un tag a un recurso de EC2, una para ver los tags de un recurso (para validar que se hayan agregado correctamente), una para agregar un tag a una alarma de CloudWatch y una para ver los tags de una alarma de CloudWatch.
Lo primero que vamos a hacer es agregar nuestra Access Key a las requests. Para eso, vamos a cualquiera de las requests, seleccionamos la pestaña Authorization y en los campos AccessKey y SecretKey pegamos los valores correspondientes a nuestro usuario. De paso, es un buen momento para checkear el campo AWS Region más abajo. Yo siempre uso us-east-1 para probar cosas, pero si quieren usar esta colección para otra región es necesario especificarla en ese campo. En este link pueden encontrar información extra sobre cómo autenticar requests REST con AWS Signature.
Luego, si en la request Describe EC2 tags ingresamos el Resource ID de una instancia de EC2 vamos a obtener sus tags existentes (es posible que en su caso todavía no tengan ninguno).
Si completamos la autorización en Tag an EC2 Instance, introducimos el Resource ID de la instancia y un nuevo tag (con key y value), al enviar la request vamos a obtener una respuesta "true", que indica que el tag fue creado.
Y volviendo a lanzar la request Describe EC2 tags vemos que se agregó el tag con éxito.
Para CloudWatch funciona de la misma manera (utilizando las requests correspondientes), con algunas salvedades:
- Al día de la fecha, diciembre de 2019, sólo se pueden crear tags en alarmas de CloudWatch, ningún otro recurso de CloudWatch soporta tags.
- No tiene las mismas features que EC2. Por ejemplo, no se pueden filtrar los recursos por tags, sólo se pueden ver los tags para un recurso dado (por eso la acción es ListTagsForResource y no DescribeTags)
- En vez de usar Resource ID (que es propio de los recursos de EC2) para identificar los recursos, utiliza ResourceARN (identificador genérico de AWS)
Eso es todo, por ahora. Así como yo pude crear estas requests para crear y mostrar tags en recursos, se pueden hacer muchas cosas desde la API de AWS. Por si les interesa explorar otras operaciones, les dejo el listado de operaciones de la API de EC2 y el listado de operaciones de la API de CloudWatch. Las requests se autentican de la misma forma, pero el usuario de IAM que utilicen va a necesitar otros permisos.
Estas API se pueden consumir con un cliente como Postman o desde un fragmento de código. Si van a hacerlo desde código recomiendo por comodidad usar el SDK de AWS correspondiente al lenguaje que usen, pero estas mismas requests funcionan desde cualquier lenguaje.