Vor Kurzem habe ich begonnen, an einem persönlichen Projekt zu arbeiten, bei dem ich eine Anwendung erstellen möchte, die Cloud-agnostisch ist – d. h. sie kann bei jedem Cloud-Anbieter mit minimalen/keinen Codeänderungen bereitgestellt werden. Die Hauptanforderung besteht darin, die Geschäftslogik von der spezifischen Logik des Cloud-Anbieters zu trennen.
In diesem Beitrag möchte ich den verfolgten Ansatz mitteilen.
Der folgende Code verwendet 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_
Diese Methode benötigt eine Cloud-Provider-Variable, die von der aufrufenden Methode übergeben wird
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 wird aus einer als Eingabe übergebenen Umgebungsvariablen gelesen. Dadurch wird sichergestellt, dass die gleiche Logik bei verschiedenen Cloud-Anbietern einwandfrei funktioniert.
object_storage_connector = get_object_storage(cloud_provider=provider, bucket_name=bucket_name)
Bitte zögern Sie nicht, mit Vorschlägen oder Feedback zu kommentieren.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3