Como utilizar datos de configuración en AWS
Tags: aws, python
Published: 2021-12-21 20:28:02

Siempre que creamos o modificamos un proyecto de desarrollo necesitamos almacenar datos, texto, cadenas de conexión a bases de datos ..., para estos casos los lenguajes de desarrollo utilizan diferentes opciones como archivos de configuración.

Para este caso en AWS podemos usar una característica de System Manager llamada **Parameter Store** que nos va a servir para este fin.

Parameter Store nos permite almacenar tanto datos no cifrados cómo cifrados o tener versiones de nuestro datos de configuración.

Empecemos almacenando los datos que vamos a utilizar dentro de Parameter Store.

1. En el campo de búsqueda colocamos Parameter Store.

2. En la siguiente pantalla damos click en Create Parameter:

![Create Parameter]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/parameter%20store%201.png)

3. La siguiente pantalla que vamos a ver, es la de configuración de nuestro parámetro.

![Configurar Parametro]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/parameter%20store%202.png)

 En la capa advanced (es de pago) nos da la opción que nuestro parámetro expire, lo cual nos puede servir para actualizar nuestro parámetro cada cierto tiempo, ya sea por temas de seguridad o que el caso de negocio que estamos trabajando así lo requiera.

En el tipo de parámetro podemos almacenar: String, un listado de strings o un string cifrado.Para este caso vamos a utilizar un string.

Opcional podemos agregar un tag a nuestro parámetro que nos puede servir para identificar los recursos que están asociados a una misma aplicación o proyecto.

Después de diligenciar los campos  damos click en el botón **Create Parameter**.


Ahora vamos a obtener nuestro parámetro usando boto3 desde una función lambda (recuerde agregar el Rol las políticas adecuadas). 

```
import json
import boto3

ssm = boto3.client('ssm')
s3 = boto3.client("s3")


def lambda_handler(event, context):
    
    #Obtenemos el parametro
    nombre_bucket = ssm.get_parameter(Name='nombre_bucket_imagenes', WithDecryption=False)['Parameter']['Value']
    
    #Obtenemos dos objetos del bucket
    objetos_s3 =s3.list_objects(Bucket= nombre_bucket,MaxKeys=2)
````
En las funciones **lambda** existe otra forma de leer datos de configuración y  son las **variables de entorno**. Este forma aplica para cada función en particular y es exclusiva de las funciones lambda. 

Para poder configurar variables de entorno debe ir a: Configuración - Variables de entorno - Editar


![variable de entorno]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/variable%20entorno%201.png)

Después configuramos nuestra variable de entorno:

![variable de entorno 1]
(https://raw.githubusercontent.com/cecamilo00/posts/circleci-project-setup/variable%20entorno%202.png)

Ahora vamos a acceder a nuestra variable de entorno de la siguiente forma:

````
import json
import boto3
#importamos el paquete os
import os

s3 = boto3.client("s3")


def lambda_handler(event, context):
    
    #Obtenemos el parametro
    nombre_bucket = os.environ["nombre_bucket_imagenes"]
    #Obtenemos dos objetos del bucket
    objetos_s3 =s3.list_objects(Bucket= nombre_bucket,MaxKeys=2)
````


Referencias

[Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.htm

Me pueden encontrar en

[Camilo Cabrales](https://www.linkedin.com/in/camilo-cabrales-31a0bb53/)

**Espero sus comentarios y aportes.**