Ich muss einen SFTP-Server einrichten, der im Wesentlichen eine sehr große Kapazität hat. Ich muss einem unserer Partner SFTP-Anmeldedaten an einen Server weitergeben, auf dem er Millionen von Dateien hochladen wird, insgesamt einige hundert Terabyte. Ich werde dann selektiv sein und einige dieser Dateien ziemlich selten lesen. Dies ist die einzige tatsächliche Anforderung. Jede Wahl der Technologie steht zur Auswahl.
Am einfachsten ist es, wenn eine Art EC2-Instanz den SFTP-Server so ausführt, dass alles, was hochgeladen wird, entweder direkt an S3 gesendet wird oder ein Prozess beim Hochladen neue Dateien erkennt und in diese kopiert S3 und löscht sie von der Festplatte.
Ist das der beste Weg? Gibt es eine andere Möglichkeit, einen Server zu bekommen, der im Wesentlichen "unendlich und magisch wachsenden Speicherplatz" hat?
Danke für Ihre Hilfe! Daniel
quelle
Antworten:
Ich habe dieselbe Frage zu Stack Overflow beantwortet .
s3fs ist in der Tat eine vernünftige Lösung, und in meinem Fall habe ich es trotz der theoretischen / potenziellen Probleme mit proftpd mit hervorragenden Ergebnissen gekoppelt.
Zu dem Zeitpunkt, als ich die Antwort schrieb, hatte ich dies nur für einen meiner Beratungskunden eingerichtet ... aber seitdem habe ich auch angefangen, meine eigene Kool-Hilfe zu trinken und verwende sie in der Produktion bei meiner täglichen Arbeit. Unternehmen, bei denen wir den ganzen Tag über Daten mit Upload- und Download-Dateien auf meinem SFTP-Server austauschen, auf dem alles direkt in S3 gespeichert ist. Als Bonus kann mein Berichtsexportsystem, das Excel-Tabellen direkt in S3 schreibt, Berichte "auf den FTP-Server" exportieren, indem sie einfach direkt in den Bucket des FTP-Servers gestellt werden. Die entsprechenden Metadaten zeigen UID, GID und Modus jeder Datei. (s3fs verwendet die Header x-amz-meta-uid, -gid und -mode, um Dateisystemberechtigungen zu emulieren.) Wenn sich der Client beim Server anmeldet, sind die Berichtsdateien nur ... da.
Ich denke, die ideale Lösung wäre wahrscheinlich ein SFTP-zu-S3-Gateway-Dienst, aber ich bin immer noch nicht dazu gekommen, einen zu entwerfen, da diese Lösung wirklich gut funktioniert ... mit einigen Einschränkungen natürlich:
Nicht alle Standardwerte für s3fs sind normal. Sie möchten wahrscheinlich folgende Optionen angeben:
Es ist wahrscheinlich am besten, eine andere Region als US-Standard zu verwenden, da dies die einzige Region ist, die keine Lese-nach-Schreib-Konsistenz für neue Objekte bietet. (Wenn Sie US-Standard verwenden müssen, können Sie den fast undokumentierten Hostnamen
your-bucket.s3-external-1.amazonaws.com
aus der Region us-east-1 verwenden, um zu verhindern, dass Ihre Anforderungen geografisch weitergeleitet werden, was die Konsistenz verbessern kann.)Ich habe die Objektversionierung für den Bucket aktiviert, von der s3fs nichts weiß. Dies hat den Vorteil, dass ich, selbst wenn eine Datei "getrampelt" werden sollte, jederzeit zur Bucket-Versionierung gehen kann, um die "überschriebene" Datei wiederherzustellen. Die Objektversionierung in S3 wurde brillant so konzipiert, dass S3-Clients, die die Versionierung nicht kennen, in keiner Weise deaktiviert oder verwirrt sind. Wenn Sie keine versionierungsbewussten REST-Aufrufe ausführen, sind die Antworten, die S3 zurückgibt, mit Clients kompatibel kein Konzept der Versionierung.
Beachten Sie auch, dass die Übertragung von Daten in S3 kostenlos ist . Sie zahlen nur den Preis pro Anfrage. Die Übertragung von Daten aus S3 in EC2 innerhalb einer Region ist ebenfalls kostenlos. Nur wenn Sie von S3 ins Internet, in die Cloudfront oder in eine andere AWS-Region übertragen, zahlen Sie Übertragungsgebühren. Wenn Sie den günstigeren Speicher mit reduzierter Redundanz verwenden möchten, unterstützt s3fs dies mit
-o use_rrs
.Abgesehen davon ist es amüsant, dass Sie immer ein warmes, unscharfes Gefühl bekommen, wenn Sie 256 Terabyte freien Speicherplatz sehen (und 0 verwendet werden, da eine echte Größenberechnung unpraktisch ist, da S3 ein Objektspeicher und kein Dateisystem ist ).
Natürlich können Sie den Eimer überall montieren. Ich habe es einfach in / srv / s3fs.
quelle
setupftpuser
, das dasftpasswd
Dienstprogramm von ProFTPd aufruft , um Benutzer zu erstellen, Basisverzeichnisse zu erstellen und Berechtigungen festzulegen. Außerdem wird die Kennwortdatei gesichert, bevor Änderungen vorgenommen werden. Wenn ein vorhandener Benutzer angerufen wird, werden Sie darüber informiert, dass der Benutzer bereits bereitgestellt ist, und gefragt, ob Sie das Kennwort ändern möchten. Eine GUI, die im Wesentlichen den gleichen Prozess verwaltet, und es sollte in Ordnung sein, wenn sie gut geschrieben ist.Überprüfen Sie das SFTP-Gateway auf dem AWS Marketplace .
Bei s3fs traten Zuverlässigkeitsprobleme auf, daher haben wir speziell für diesen Zweck eine benutzerdefinierte Lösung entwickelt. Wir verwenden es seit mehreren Jahren ohne Probleme in der Produktion und haben es kürzlich auf dem AWS Marketplace veröffentlicht.
quelle
Es gibt zwei Möglichkeiten. Sie können einen nativen verwalteten SFTP-Dienst verwenden, der kürzlich von Amazon hinzugefügt wurde (was einfacher einzurichten ist). Sie können den Bucket auch in ein Dateisystem auf einem Linux-Server einbinden und über SFTP wie alle anderen Dateien auf dem Server auf die Dateien zugreifen (wodurch Sie eine bessere Kontrolle erhalten).
Verwalteter SFTP-Dienst
Wechseln Sie in Ihrer Amazon AWS Console zu AWS Transfer for SFTP und erstellen Sie einen neuen Server.
Fügen Sie auf der SFTP-Serverseite einen neuen SFTP-Benutzer (oder neue Benutzer) hinzu.
Die Berechtigungen von Benutzern werden durch eine zugeordnete AWS-Rolle im IAM-Dienst geregelt (für einen schnellen Start können Sie die AmazonS3FullAccess- Richtlinie verwenden).
Die Rolle muss eine Vertrauensbeziehung zu haben
transfer.amazonaws.com
.Weitere Informationen finden Sie in meinem Handbuch Einrichten eines SFTP-Zugriffs auf Amazon S3 .
Mounting Bucket auf Linux Server
Wie @Michael bereits geantwortet hat , mounten Sie den Bucket einfach mit dem
s3fs
Dateisystem (oder ähnlichem) auf einem Linux-Server (Amazon EC2) und verwenden Sie den integrierten SFTP-Server des Servers, um auf den Bucket zuzugreifen.Hier sind grundlegende Anweisungen:
s3fs
access-key-id:secret-access-key
zum hinzu/etc/passwd-s3fs
Fügen Sie einen Eintrag zur Schaufelmontage hinzu
fstab
:Weitere Informationen finden Sie in meinem Handbuch Einrichten eines SFTP-Zugriffs auf Amazon S3 .
Verwenden Sie den S3-Client
Oder verwenden Sie einen kostenlosen "FTP / SFTP-Client" , der auch ein "S3-Client" ist , und Sie haben auf der Serverseite nichts eingerichtet. Zum Beispiel mein WinSCP oder Cyberduck .
quelle
AWS bietet jetzt einen SFTP über S3-Dienst namens AWS Transfer For SFTP . Es bietet die Vorteile von S3 (äußerst langlebiger, verfügbarer, verteilter Speicher) in Kombination mit dem bekannten und etablierten SFTP-Protokoll.
Standardmäßig authentifizieren sich Benutzer mit privaten / öffentlichen Schlüsselpaaren. Mithilfe von IAM-Richtlinien können Sie Berechtigungen für SFTP-Benutzer für S3-Buckets einrichten. Sie können Authentifizierungsschemata hinzufügen, indem Sie Ihre eigenen Funktionen in AWS API Gateway und AWS Lambda implementieren.
Wir haben AWS Transfer für SFTP in ein Heroku-Add-On namens SFTP To Go eingebunden, um sowohl flexible Authentifizierungsschemata als auch niedrigere Gesamtbetriebskosten bereitzustellen (da ein Service-Endpunkt in AWS feste Kosten verursacht, aber von vielen Benutzern ohne Sicherheit oder Sicherheit gemeinsam genutzt werden kann Leistungskompromiss.
quelle