In der Welt der modernen Technologie ist eine sichere und effiziente Dateiübertragung für viele Unternehmen eine entscheidende Notwendigkeit. AWS Transfer Family, eine verwaltete sichere Dateiübertragungslösung von Amazon Web Services, ermöglicht Dateiübertragungen mithilfe von Standardprotokollen wie SFTP, FTPS, FTP und AS2. In Kombination mit Golang, einer Programmiersprache, die für ihre Effizienz und Benutzerfreundlichkeit bekannt ist, entsteht eine leistungsstarke Kombination zur effektiven Verwaltung und Automatisierung von Dateiübertragungen.
In diesem Artikel erfahren Sie, wie Sie AWS Transfer Family mit Golang integrieren, um Ihre Dateiübertragungsprozesse zu optimieren. Von der Konfiguration der AWS Transfer Family bis zur Implementierung eines SFTP-Clients mit Golang werde ich Sie Schritt für Schritt anleiten, damit Sie diese Technologien optimal nutzen können.
AWS Transfer Family ist ein sicherer, vollständig verwalteter Dienst, der die Übertragung von Dateien in und aus AWS-Speicherdiensten wie Amazon S3 und Amazon EFS mithilfe von Protokollen wie SFTP, AS2, FTPS und FTP ermöglicht.
Der vorgeschlagene Architekturentwurf für die Integration der AWS Transfer Family mit Golang besteht aus den folgenden Komponenten, wie im Diagramm unten dargestellt:
Die in diesem Artikel vorgeschlagene API dient als einfaches Beispiel zur Demonstration ihrer grundlegenden Funktionalität. In einem realen Szenario kann die API komplexer sein und zusätzliche Funktionen enthalten. Seine Hauptfunktion besteht darin, Dateien auf den SFTP-Server der AWS Transfer Family hochzuladen und in einem S3-Bucket zu speichern, sei es für Sicherungszwecke oder für die Integration mit anderen Systemen. Die Anwendungsfälle variieren und hängen von den Anforderungen der einzelnen Organisationen ab. Hier sind einige weitere Anwendungsbeispiele: AWS Transfer Family-Kunden.
Darüber hinaus kann die in diesem Artikel vorgeschlagene API mithilfe von Diensten wie AWS Elastic Beanstalk oder AWS Fargate in der AWS-Cloud bereitgestellt werden, um je nach den spezifischen Anforderungen jeder Organisation eine größere Skalierbarkeit und Verfügbarkeit zu erreichen.
Lasst uns anfangen!
Generieren Sie ein öffentliches und privates Schlüsselpaar für die Verbindung zum AWS Transfer Family SFTP-Server. Dies kann lokal auf unserem Rechner mit dem folgenden Befehl erfolgen.
$ ssh-keygen -t rsa -b 4096 -f
ssh-keygen -t rsa -b 4096 -f <PATH>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <PATH>/aws_example_ssh_key Your public key has been saved in <PATH>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+
Melden Sie sich bei der AWS-Managementkonsole an, wählen Sie den AWS Transfer Family-Dienst aus und erstellen Sie einen Server.
Wählen Sie SFTP (SSH File Transfer Protocol) für die sichere Dateiübertragung aus und klicken Sie auf Weiter.
Wählen Sie einen Identitätsanbieter und wählen Sie „Dienstverwaltet“.
Wählen Sie in der Endpunktkonfiguration „Öffentlich zugänglich“ aus und klicken Sie auf Weiter.
Wir wählen „Amazon S3“ als Speicheroption und klicken auf Weiter.
Belassen Sie im Abschnitt „Zusätzliche Details konfigurieren“ die Einstellungen auf ihren Standardwerten.
Überprüfen, auf Weiter klicken und erstellen.
Sobald die Erstellung abgeschlossen ist, werden wir etwas Ähnliches haben. Wir können sehen, dass wir noch keine Benutzer haben und dass es in Kürze über einen öffentlichen Endpunkt und die Verwendung von S3 als Speicher starten wird.
Erstellen Sie eine neue Rolle für den AWS-Transfer-Familie-zu-S3-Service. Gehen Sie dazu zum IAM-Dienst und erstellen Sie eine neue Rolle des AWS-Diensttyps. Wählen Sie im Anwendungsfall „Übertragen“ und „Weiter“ aus.
Berechtigungsrichtlinie, AmazonS3FullAccess für vollen Zugriff auf den S3-Bucket. Diese Richtlinie ist jedoch durchaus zulässig und wird nicht empfohlen, sie in der Produktion zu verwenden. Und als nächstes.
Wir weisen der Rolle weiterhin den Namen „role-example-transfer-to-s3“ zu, überprüfen sie und klicken auf „Rolle erstellen“.
Wir fahren mit der Erstellung des S3-Buckets fort. Dazu gehen wir zum S3-Dienst und erstellen einen neuen Bucket.
Wir legen den Namen des Buckets fest, belassen die Standardkonfiguration und erstellen einen Bucket.
Bucket-Name: „bucket-example-transfer“.
Am Ende der Creación werden wir so etwas haben:
Gehen Sie zum AWS Transfer Family-Dienst und wählen Sie den Server aus, den Sie zuvor erstellt haben.
Um diesem Artikel folgen zu können, müssen Sie den öffentlichen Schlüssel bereitstellen, der beim Start aws_example_ssh_key.pub generiert wurde.
Um den Inhalt des öffentlichen Schlüssels anzuzeigen, verwenden Sie den folgenden Befehl:
$ cat aws_example_ssh_key.pub
Der öffentliche Schlüssel sieht so aus:
ssh-keygen -t rsa -b 4096 -f <PATH>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <PATH>/aws_example_ssh_key Your public key has been saved in <PATH>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+
Dies ist der Schlüssel, den wir in das Feld „SSH Public Keys“ einfügen müssen. Stellen Sie sicher, dass Sie den gesamten Schlüssel genau kopieren und in dieses Feld einfügen, um einen sicheren Zugriff auf den Server zu ermöglichen.
Nachdem Sie den Benutzer erstellt haben, sollten Sie einen Bestätigungsbildschirm ähnlich dem folgenden sehen. Dies zeigt an, dass der Benutzer erfolgreich eingerichtet wurde und bereit ist, den SFTP-Dienst zu verwenden.
Im Folgenden geben wir einen detaillierten Überblick über die Struktur des Golang-Projekts und fügen als Referenz einen Link zum GitHub-Repository hinzu. Diese Übersicht hilft Ihnen, die Organisation des Projekts zu verstehen und wie verschiedene Komponenten strukturiert und miteinander verbunden sind.
ssh-rsa AAAAB3NzaC1yc2EBBAADAQABAAACAQC/qNMJaCz8+I3G71bTFf8Cpe+AAAA0BBBBBBBA6C+/a8fyl9Dw4wjj0huc4ItlX2auKG3skxTYP1ZgO5/7M7xmp2Hf+AAAA0BBBBBBBA6CynWwfwkS5XEIfNtoNWCSeB6ra4anljFdLJH4ZReOM18xxBZCyz2gGA7ePprM0nfpgoQKjp8eDoz6HFcvH4Qynea06W72D+tUWjCRH6bgPBsw/cCfj+VrcqsQXif/X8nViS679+V+AAAA0BBBBBBBA6C+t/5dD3uFPyc8yJn2fNEHB4kfIB9JR5fPIo4dVqPebloPg9vKT2M+AAAA0BBBBBBBA6C/AAAA0BBBBBBBA6C+XLTJSAljgq9JQ4l3vnT4RSsKuK+DX2um5DsN/Zwk9Qwf8JRJey/AAAA0BBBBBBBA6C+/AAAA0BBBBBBBA6CNkVaeDOYSIeGkMBUmmMaeVNeaR967SBLoHNzBfodKKaIpsmW2yHvIitg/YKu2YXKe/DnYU3G8om13uL8qIOB85CugVQ== rodrigoquispe@AAAA0BBBBBBBA6C
Die Abhängigkeiten, die wir verwenden werden, sind Gin und SFTP.
├── cmd │ └── main.go ├── go.mod ├── go.sum └── internal ├── app │ └── service.go ├── domain │ └── models.go ├── handler │ └── sftp_handler.go └── infra ├── config.go └── sftp_client.go
Legen Sie die folgenden Anmeldeinformationen in der Datei config.go fest, in der sich der private Schlüssel und die Anmeldeinformationen des Transfer Family-Benutzers befinden, um eine Verbindung zum SFTP-Server herzustellen.
$ go get -u github.com/gin-gonic/gin $ go get -u github.com/pkg/sftp
Denken Sie auch darüber nach, den Pfad festzulegen, in dem die auf den SFTP-Server hochgeladenen Dateien gespeichert werden. In meinem Fall ist es /bucket-example-transfer/rodrigo.
// config.go func LoadConfig() *Config { return &Config{ Host: "<HOST>.server.transfer.us-east-1.amazonaws.com", Port: "<PORT>", User: "<USER>", PrivateKeyPath: "<PATH>/aws_example_ssh_key", } }
Funktion zum Erstellen eines neuen SFTP-Clients mit der angegebenen Konfiguration:
// service.go func (u *Service) Upload(file *domain.File) error { return u.sftpClient.UploadFile(file, "/bucket-example-transfer/rodrigo/") }
Methode zum Hochladen einer Datei auf den SFTP-Server.
ssh-keygen -t rsa -b 4096 -f <PATH>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <PATH>/aws_example_ssh_key Your public key has been saved in <PATH>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+
Führen Sie das Projekt mit dem folgenden Befehl aus:
$ go run cmd/main.go
Jetzt laden wir mit Postman eine Datei auf den SFTP-Server hoch. Anschließend navigieren wir zu S3, um zu überprüfen, ob die Datei korrekt hochgeladen wurde.
Die Dateien wurden ohne Probleme erfolgreich hochgeladen.
Vielen Dank fürs Lesen.
Das obige ist der detaillierte Inhalt vonAWS Transfer-Familie mit Golang für Dateiübertragungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!