Actualización de contenido estático en Telmex StaaS

Info

Este manual explica el proceso para añadir o modificar contenido de un sitio que está utilizando la herramienta de almacenamiento de recursos Amazon S3, detallando los pasos requeridos para configurar la AWS CLI y llevar a cabo las actualizaciones necesarias.

1. Prerrequisitos

  • AWS CLI instalada (Consulta la documentación oficial. )

  • Credenciales de acceso a AWS con permisos adecuados.

2. Configuración de AWS CLI

La carga de contenido en sitios estáticos con almacenamiento en Amazon S3, utilizan AWS CLI. Presentamos los pasos para preparar la misma.

  1. Establecimiento de Credenciales
    Después de instalar AWS CLI, usa el siguiente comando para ajustar tu usuario:
aws configure

Con aws configure se establecerán los parámetros del propio usuario. Los campos AWS Access Key ID y AWS Secret Access Key deberán ser llenados con las credenciales previamente proporcionadas para su acceso. Se recomienda utilizar el nombre de la región cómo mxqr y el formato de salida por defecto cómo text

imagen01 imagen01

Una vez configurado su usuario de aws s3, puedes ejecutar el siguiente comando para listar el contenido del bucket:

 aws s3 ls s3://<nombre-bucket>/ --endpoint-url https://s3-mxqr.almnube.telmex.com --no-verify-ssl

Desglosando el comando anterior:

  • aws s3 – > Comando para conexión a s3 de por aws cli

  • ls —> Comando list

  • s3://< nombre-bucket >/ —> Indicador s3, asegúrate de configurar el nombre correspondiente del bucket.

  • –endpoint-url https://s3-mxqr.almnube.telmex.com —> Endpoint de consulta para s3-telmex

imagen02 imagen02

3. Actualización de contenido sobre sitio estático

La carga de contenido se realizará mediante la interfaz de comandos de AWS, la cuál se instaló y configuró previamente.

Supongamos que se quiere visualizar contenido en la ruta https://<dominio-productivo>/ruta/contenido/imagen-carga-de-prueba.png , donde imagen-carga-de-prueba.png es el archivo que desea revisar como parte de los cambios recientes.

El bucket especificado es s3://<nombre-bucket>/, por lo que el contenido, a partir del primer /, se reflejará directamente en el sitio productivo.

Para visualizar el cambio, usaremos el contexto /ruta/contenido/imagen-carga-de-prueba.png y lo agregaremos al comando de carga de la siguiente manera:

 s3://<nombre-bucket>/ruta/contenido/imagen-carga-de-prueba.png

Este será el archivo que se desea modificar

Ubica la ruta de tu archivo localmente y usa el siguiente comando para subir el archivo /ruta/contenido/imagen-carga-de-prueba.png

 aws s3 cp /home/user/Downloads/imagen-carga-de-prueba.png s3://<nombrebucket>/ruta/contenido/imagen-carga-de-prueba.png --endpoint-url https://s3-mxqr.almnube.telmex.com --no-verify-ssl

Visto en la terminal de la siguiente manera

imagen03 imagen03

Desglosando el comando anterior:

  • aws s3 – > Comando para conexión a s3 de por aws cli

  • cp —> Comando copy

  • /home/user/Downloads/imagen-carga-de-prueba.png —> Archivo local

  • s3://<nombre-bucket>/ruta/contenido/imagen-carga-de-prueba.png —> Endpoint del dominio productivo donde se desea visualizar el contenido

  • –endpoint-url https://s3-mxqr.almnube.telmex.com —> Endpoint de consulta para s3-telmex

Obteniendo como resultado final la imagen cargada sobre la ruta https://<dominio-productivo>/ruta/contenido/imagen-carga-de-prueba.png


Ejemplo de carga de contenido en Telmex StaaS

  1. Visualizar Contenido en el Sitio

En este modelo se pretende visualizar un archivo para el sitio https://bucket-testing.prod.amxdigital.net en la ruta /portal/recursos-estaticos/imagen-carga-de-prueba.png, el archivo debe subirse en el bucket designado, para este caso será s3://bucket-test/ en la ubicación /portal/recursos-estaticos/imagen-carga-de-prueba.png

  1. Ubicación del archivo local

Localiza el archivo en tu máquina local, por ejemplo:

/home/user/imagen-carga-de-prueba.png

  1. Subir el contenido

El siguiente comando ejemplifica cómo subir un archivo al bucket de S3 utilizando las instrucciones descritas anteriormente.

 aws s3 cp /home/user/Downloads/imagen-carga-de-prueba.png s3://bucket-test/portal/recursos-estaticos/imagen-carga-de-prueba.png --endpoint-url https://s3-mxqr.almnube.telmex.com --no-verify-ssl

imagen04 imagen04

  1. Resultado final

El archivo subido estará disponible en la URL:

https://bucket-testing.prod.clarodigital.net/portal/recursos-estaticos/imagen-carga-de-prueba.png

imagen05 imagen05


Diagrama de flujo del proceso

Ejemplo programático con python

import boto3
from botocore.config import Config
from botocore.exceptions import NoCredentialsError, PartialCredentialsError

# Configuración
S3_ENDPOINT = "https://s3-mxqr.almnube.telmex.com"
ACCESS_KEY = "your-access-key"
SECRET_KEY = "your-secret-key"
BUCKET_NAME = "your-bucket-name"

# Crear cliente S3
def create_s3_client():
    try:
        client = boto3.client(
            "s3",
            endpoint_url=S3_ENDPOINT,
            aws_access_key_id=ACCESS_KEY,
            aws_secret_access_key=SECRET_KEY,
            config=Config(signature_version="s3v4"),
        )
        return client
    except (NoCredentialsError, PartialCredentialsError) as e:
        print(f"Error en las credenciales: {e}")
        return None

# Subir un archivo
def upload_file(file_path, object_name):
    s3_client = create_s3_client()
    if s3_client:
        try:
            s3_client.upload_file(file_path, BUCKET_NAME, object_name)
            print(f"Archivo {file_path} subido como {object_name}")
        except Exception as e:
            print(f"Error al subir el archivo: {e}")

# Descargar un archivo
def download_file(object_name, download_path):
    s3_client = create_s3_client()
    if s3_client:
        try:
            s3_client.download_file(BUCKET_NAME, object_name, download_path)
            print(f"Archivo {object_name} descargado a {download_path}")
        except Exception as e:
            print(f"Error al descargar el archivo: {e}")

# Generar una liga firmada (Manejo de ligas para actualización pública de objetos).
def generate_presigned_url(object_name, expiration=3600):
    s3_client = create_s3_client()
    if s3_client:
        try:
            url = s3_client.generate_presigned_url(
                "get_object",
                Params={"Bucket": BUCKET_NAME, "Key": object_name},
                ExpiresIn=expiration,
            )
            return url
        except Exception as e:
            print(f"Error al generar la liga firmada: {e}")
            return None

# Ejemplo de uso
if __name__ == "__main__":
    # Subir un archivo
    upload_file("local_file.txt", "uploaded_file.txt")

    # Descargar un archivo
    download_file("uploaded_file.txt", "downloaded_file.txt")

    # Generar una liga firmada
    url = generate_presigned_url("uploaded_file.txt")
    if url:
        print(f"Liga firmada: {url}")