Certains fichiers sont téléchargés quotidiennement sur un serveur FTP et j'ai besoin de ces fichiers sous Google Cloud Storage. Je ne veux pas déranger les utilisateurs qui téléchargent les fichiers d'installer des logiciels supplémentaires et de les laisser continuer à utiliser leur client FTP. Est-il possible d'utiliser GCS en tant que serveur FTP? Sinon, comment puis-je créer un travail qui collecte périodiquement les fichiers à partir d'un emplacement FTP et les met dans GCS? En d'autres termes: quelle est la méthode la plus simple et la meilleure pour procéder?
J'ai réussi à configurer un proxy FTP sur GCS à l'aide de gcsfs dans un VM dans Google Compute (mentionné par jkff dans le commentaire de ma question), avec les instructions suivantes: http://ilyapimenov.com/blog/2015/01/19/ftp-proxy-to-gcs.html
Quelques changements sont nécessaires cependant:
Quelques problèmes possibles:
De plus, votre client ftp doit utiliser le mode de transfert défini sur "passif".
Vous pouvez écrire vous-même un serveur FTP qui télécharge sur GCS, par exemple sur la base de pyftpdlib
Définir un gestionnaire personnalisé qui stocke dans GCS lorsqu'un fichier est reçu
import os
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
from pyftpdlib.authorizers import DummyAuthorizer
from google.cloud import storage
class MyHandler:
def on_file_received(self, file):
storage_client = storage.Client()
bucket = storage_client.get_bucket('your_gcs_bucket')
blob = bucket.blob(file[5:]) # strip leading /tmp/
blob.upload_from_filename(file)
os.remove(file)
def on_... # implement other events
def main():
authorizer = DummyAuthorizer()
authorizer.add_user('user', 'password', homedir='/tmp', perm='elradfmw')
handler = MyHandler
handler.authorizer = authorizer
handler.masquerade_address = add.your.public.ip
handler.passive_ports = range(60000, 60999)
server = FTPServer(("127.0.0.1", 21), handler)
server.serve_forever()
if __== "__main__":
main()
J'ai réussi à l'exécuter sur Google Container Engine (cela nécessite quelques efforts pour que le FTP passif fonctionne correctement), mais cela devrait être assez simple à faire avec Compute Engine. Selon la configuration ci-dessus, ouvrez le port 21 et les ports 60000 à 60999 sur le pare-feu.
Pour l'exécuter, python my_ftp_server.py
- si vous souhaitez écouter sur le port 21, vous devez disposer des privilèges root.
Vous pouvez configurer un cron et rsync entre le serveur FTP et Google Cloud Storage à l’aide de gsutil rsync ou de l 'outil open source rclone .
Si vous ne pouvez pas exécuter ces commandes sur le serveur FTP régulièrement, vous pouvez monter le serveur FTP en tant que système de fichiers local ou lecteur ( Linux , Windows ).
Configurez un VM dans le nuage Google, en utilisant une certaine saveur * nix. Configurez ftp dessus et pointez-le sur un dossier abc. Utilisez google Fuse pour monter abc en tant que compartiment GCS. Voilà - va et vient entre gcs/ftp sans écrire de logiciel. (Petits caractères: le fusible roule et meurt si vous transmettez trop de données, alors faites-le rebondir périodiquement, une fois par semaine ou une fois par jour; vous devrez peut-être définir le montage ou le fusible pour autoriser les autorisations de tous les utilisateurs)