Recientemente, comencé a trabajar en un proyecto personal en el que quiero crear una aplicación que sea independiente de la nube, es decir, que se pueda implementar en cualquier proveedor de nube con cambios mínimos o sin cambios en el código. El requisito principal es separar la lógica empresarial de la lógica específica del proveedor de la nube.
En esta publicación, quiero compartir el enfoque que se siguió.
El siguiente código utiliza Python
from abc import ABC, abstractmethod class IObjectStorage(ABC): @abstractmethod def upload_object_to_bucket(self, file_name, file_content): _raise an error that method is not implemented_
class AWSObjectStorageConnector(IObjectStorage): def __init__(self, bucket_name): _Initialize a s3 client using boto3 and initialize a variable using bucket name_ def upload_object_to_bucket(self, file_name, file_content): _Implement the logic to upload the file to AWS S3 bucket_
Este método toma una variable de proveedor de nube que se pasará desde el método de llamada
def get_object_storage(cloud_provider, bucket_name) -> IObjectStorage: if cloud_provider == 'aws': return AWSObjectStorageConnector(bucket_name=bucket_name) else: raise ValueError(f'Unsupported cloud provider: {cloud_provider}')
la variable cloud_provider se leerá desde una variable de entorno pasada como entrada. Esto garantiza que la misma lógica funcione bien con diferentes proveedores de nube.
object_storage_connector = get_object_storage(cloud_provider=provider, bucket_name=bucket_name)
No dudes en comentar cualquier sugerencia o comentario.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3