Python - Boto3 - Cómo mantener viva la sesión

CorePress2024-01-24  9

Tengo un proceso que se supone debe ejecutarse para siempre y necesita actualizar los datos en un depósito S3 en AWS. Estoy inicializando la sesión usando boto3:

        session = boto3.session.Session()
        my_s3 = session.resource(
            "s3",
            region_name=my_region_name,
            aws_access_key_id=my_aws_access_key_id,
            aws_secret_access_key=my_aws_secret_access_key,
            aws_session_token=my_aws_session_token,
        )

Dado que se supone que el proceso debe durar días, me pregunto cómo puedo asegurarme de que la sesión se mantenga viva y funcionando. ¿Necesito reiniciar la sesión a veces?

Nota: no estoy seguro de si es útil, pero en realidad tengo varios hilos, cada uno de los cuales usa su propia sesión.

¡Gracias!



------------------------------------

No existe el concepto de "sesión". Session() es simplemente un objeto en memoria que contiene información sobre cómo conectarse a AWS.

En realidad, no implica ninguna llamada a AWS hasta que se realiza una acción (por ejemplo, ListBuckets). Las acciones son RESTful y devuelven resultados inmediatamente. No mantienen abierta una conexión.

Normalmente no se requiere una sesión. Si ha almacenado sus credenciales de AWS en un archivo de configuración utilizando el comando aws configure de la CLI de AWS, simplemente puede usar:

import boto3

s3_resource = boto3.resource('s3')

Sin embargo, la sesión es útil si utiliza credenciales temporales devueltas por un comando AssumeRole(), en lugar de credenciales permanentes. En tal caso, tenga en cuenta que las credenciales devueltas por AWS Security Token Service (STS), como AssumeRole(), tienen limitaciones de tiempo. Esto, sin embargo, no tiene relación con el concepto de sesión de boto3.



------------------------------------

A partir de botocore#2766, puede utilizar el parámetro tcp_keepalive (docs):

import botocore, boto3, environs

env = environs.Env()

S3_CLIENT = boto3.session.Session().client(  # this init style makes the client thread-safe
    "s3",
    config=botocore.client.Config(
        tcp_keepalive=env.bool("AWS_TCP_KEEPALIVE", True),
        max_pool_connections=env.int("AWS_S3_CONNECTIONS", 100),
        retries={
            "max_attempts": env.int("AWS_MAX_ATTEMPTS", 6),
            "mode": env("AWS_RETRY_MODE", "adaptive"),
        },
    ),
)

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare