Heim > Backend-Entwicklung > Golang > AWS Transfer-Familie mit Golang für Dateiübertragungen

AWS Transfer-Familie mit Golang für Dateiübertragungen

Linda Hamilton
Freigeben: 2024-12-26 01:01:09
Original
917 Leute haben es durchsucht

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.

Was ist die AWS Transfer Family?

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.

Hauptmerkmale

  • Unterstützte Protokolle: SFTP, FTPS, FTP, AS2
  • AWS-Speicherintegrationen: Amazon S3, Amazon EFS
  • Anwendungsfälle: Data Lakes, interne Übertragungen, Datenverteilung, Compliance-Workflows, Lieferkettenlogistik, B2B-Transaktionen.

Vorteile

  • Skalierbarkeit in Echtzeit.
  • Kein Infrastrukturmanagement erforderlich.
  • Nutzen Sie native AWS-Services für die Datenverarbeitung und -analyse.
  • Vollständig verwalteter, serverloser Workflow-Dienst.
  • Pay-as-you-go-Preise.

Voraussetzungen

  • AWS-Konto: Ein aktives Amazon Web Services-Konto. Wenn Sie noch keins haben, können Sie sich auf der AWS-Website anmelden.
  • Golang: Kenntnisse der Programmiersprache Go (Golang).
  • Administratorrechte in AWS.
  • AWS Transfer Family: Administrative Lese- und Schreibberechtigungen zum Konfigurieren und Verwalten der AWS Transfer Family. Dazu gehört die Möglichkeit, Transferserver zu erstellen und zu verwalten. Beachten Sie, dass für diesen Service Kosten anfallen.
  • Amazon S3: Administratorrechte zum Lesen und Schreiben in Amazon S3-Buckets.
  • AWS IAM: Berechtigungen zum Verwalten von IAM-Rollen und -Richtlinien, die für die Integration und Sicherheit von Übertragungen erforderlich sind.

Architekturdesign

Der vorgeschlagene Architekturentwurf für die Integration der AWS Transfer Family mit Golang besteht aus den folgenden Komponenten, wie im Diagramm unten dargestellt:

AWS Transfer Family with Golang for File Transfers

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!

Durchführung

Öffentlichen und privaten Schlüssel generieren

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 /aws_example_ssh_key

  • aws_example_ssh_key: Schlüsselname
  • PFAD: Verzeichnis, in dem der Schlüssel gespeichert wird
  • rsa: Verschlüsselungsalgorithmus
  • 4096: Schlüsselgröße
  • f: Name der Ausgabedatei
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]-----+
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • Geben Sie die Passphrase ein (leer für keine Passphrase): Passwort für den Schlüssel.
  • Geben Sie dieselbe Passphrase erneut ein: Bestätigen Sie das Passwort für den Schlüssel.
  • Ihre Identifikation wurde in /aws_example_ssh_key gespeichert: Der private Schlüssel wird in der aws_example_ssh_key-Datei im angegebenen Pfad gespeichert.
  • Ihr öffentlicher Schlüssel wurde in /aws_example_ssh_key.pub gespeichert: Der öffentliche Schlüssel wird in der Datei aws_example_ssh_key.pub im angegebenen Pfad gespeichert.

AWS Transfer Family with Golang for File Transfers

Erstellen Sie einen Transfer-Familienservice

Melden Sie sich bei der AWS-Managementkonsole an, wählen Sie den AWS Transfer Family-Dienst aus und erstellen Sie einen Server.

AWS Transfer Family with Golang for File Transfers

Wählen Sie SFTP (SSH File Transfer Protocol) für die sichere Dateiübertragung aus und klicken Sie auf Weiter.

AWS Transfer Family with Golang for File Transfers

Wählen Sie einen Identitätsanbieter und wählen Sie „Dienstverwaltet“.

AWS Transfer Family with Golang for File Transfers

Wählen Sie in der Endpunktkonfiguration „Öffentlich zugänglich“ aus und klicken Sie auf Weiter.

AWS Transfer Family with Golang for File Transfers

Wir wählen „Amazon S3“ als Speicheroption und klicken auf Weiter.

AWS Transfer Family with Golang for File Transfers

Belassen Sie im Abschnitt „Zusätzliche Details konfigurieren“ die Einstellungen auf ihren Standardwerten.

AWS Transfer Family with Golang for File Transfers
AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

Ü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.

AWS Transfer Family with Golang for File Transfers

Erstellen Sie eine Rolle

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.

AWS Transfer Family with Golang for File Transfers

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.

AWS Transfer Family with Golang for File Transfers

Wir weisen der Rolle weiterhin den Namen „role-example-transfer-to-s3“ zu, überprüfen sie und klicken auf „Rolle erstellen“.

AWS Transfer Family with Golang for File Transfers

Erstellen Sie einen S3-Bucket

Wir fahren mit der Erstellung des S3-Buckets fort. Dazu gehen wir zum S3-Dienst und erstellen einen neuen Bucket.

AWS Transfer Family with Golang for File Transfers

Wir legen den Namen des Buckets fest, belassen die Standardkonfiguration und erstellen einen Bucket.

Bucket-Name: „bucket-example-transfer“.

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

Am Ende der Creación werden wir so etwas haben:

AWS Transfer Family with Golang for File Transfers

Konfigurieren Sie SFTP-Benutzer für Transfer Family mit S3

Gehen Sie zum AWS Transfer Family-Dienst und wählen Sie den Server aus, den Sie zuvor erstellt haben.

  • Wählen Sie die Registerkarte „Benutzer“ und klicken Sie auf „Benutzer hinzufügen“.
  • Geben Sie den Benutzernamen ein.
  • Weisen Sie die IAM-Rolle zu, die Sie zuvor erstellt haben.
  • Legen Sie als „Richtlinie“ keine fest
  • Geben Sie im Feld „Home-Verzeichnis“ den Namen „bucket-example-transfer“ ein, den Namen des S3-Buckets, den Sie zuvor erstellt haben.
  • Klicken Sie auf „Benutzer hinzufügen“.

AWS Transfer Family with Golang for File Transfers

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]-----+
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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.

AWS Transfer Family with Golang for File Transfers

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.

AWS Transfer Family with Golang for File Transfers

Projektstruktur

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren
  • Host: Der Verbindungsendpunkt, den wir zuvor erhalten haben.
  • Port: 22
  • Benutzer: Der Benutzername, den wir zuvor erstellt haben.
  • PrivateKeyPath: Der Pfad zum privaten Schlüssel, den wir zuvor erstellt haben.

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",
    }
}
Nach dem Login kopieren

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/")
}
Nach dem Login kopieren

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]-----+
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Führen Sie das Projekt mit dem folgenden Befehl aus:

$ go run cmd/main.go

AWS Transfer Family with Golang for File Transfers

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.

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage