Actualización de contenido estático en Telmex StaaS
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.
- Establecimiento de Credenciales
Después de instalar AWS CLI, usa el siguiente comando para ajustar tu usuario:
aws configureCon 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
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
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
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
- 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
- Ubicación del archivo local
Localiza el archivo en tu máquina local, por ejemplo:
/home/user/imagen-carga-de-prueba.png
- 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
- Resultado final
El archivo subido estará disponible en la URL:
https://bucket-testing.prod.clarodigital.net/portal/recursos-estaticos/imagen-carga-de-prueba.png
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}")



