Недавно я начал работать над личным проектом, в котором я хочу создать приложение, независимое от облака, то есть его можно развернуть у любого облачного провайдера с минимальными изменениями кода или без него. Основное требование — разделить бизнес-логику с логикой, специфичной для поставщика облачных услуг.
В этом посте я хочу поделиться подходом, которого придерживались.
В коде ниже используется 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_
Этот метод принимает переменную поставщика облака, которая будет передана из вызывающего метода
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}')
Переменная cloud_provider будет считываться из переменной среды, переданной в качестве входных данных. Это гарантирует, что одна и та же логика будет работать нормально с разными поставщиками облачных услуг.
object_storage_connector = get_object_storage(cloud_provider=provider, bucket_name=bucket_name)
Пожалуйста, не стесняйтесь оставлять комментарии с любыми предложениями и отзывами.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3