Maison > développement back-end > Golang > Famille de transfert AWS avec Golang pour les transferts de fichiers

Famille de transfert AWS avec Golang pour les transferts de fichiers

Linda Hamilton
Libérer: 2024-12-26 01:01:09
original
962 Les gens l'ont consulté

Dans le monde de la technologie moderne, le transfert de fichiers sécurisé et efficace est une nécessité essentielle pour de nombreuses organisations. AWS Transfer Family, une solution de transfert de fichiers sécurisée gérée proposée par Amazon Web Services, permet les transferts de fichiers à l'aide de protocoles standards tels que SFTP, FTPS, FTP et AS2. Lorsqu'elle est combinée avec Golang, un langage de programmation connu pour son efficacité et sa facilité d'utilisation, une combinaison puissante est créée pour gérer et automatiser efficacement les transferts de fichiers.

Dans cet article, nous explorerons comment intégrer AWS Transfer Family à Golang pour optimiser vos processus de transfert de fichiers. De la configuration d'AWS Transfer Family à la mise en œuvre d'un client SFTP avec Golang, je vous guiderai étape par étape pour que vous puissiez tirer le meilleur parti de ces technologies.

Qu'est-ce que la famille de transfert AWS ?

AWS Transfer Family est un service sécurisé et entièrement géré qui permet le transfert de fichiers vers et depuis des services de stockage AWS tels qu'Amazon S3 et Amazon EFS à l'aide de protocoles tels que SFTP, AS2, FTPS et FTP.

Principales fonctionnalités

  • Protocoles pris en charge : SFTP, FTPS, FTP, AS2
  • Intégrations de stockage AWS : Amazon S3, Amazon EFS
  • Cas d'utilisation : lacs de données, transferts internes, distribution de données, workflows de conformité, logistique de la chaîne d'approvisionnement, transactions B2B.

Avantages

  • Évolutivité en temps réel.
  • Pas besoin de gestion d'infrastructure.
  • Exploitez les services AWS natifs pour le traitement et l'analyse des données.
  • Service de flux de travail sans serveur entièrement géré.
  • Tarifs à l'utilisation.

Conditions préalables

  • Compte AWS : un compte Amazon Web Services actif. Si vous n'en avez pas encore, vous pouvez vous inscrire sur le site Web AWS.
  • Golang : Connaissance du langage de programmation Go (Golang).
  • Privilèges administratifs dans AWS.
  • AWS Transfer Family : autorisations administratives de lecture et d'écriture pour configurer et gérer AWS Transfer Family. Cela inclut la possibilité de créer et de gérer des serveurs de transfert. Notez que ce service a un coût associé.
  • Amazon S3 : autorisations administratives pour lire et écrire dans les compartiments Amazon S3.
  • AWS IAM : autorisations pour gérer les rôles et politiques IAM nécessaires à l'intégration et à la sécurité des transferts.

Conception architecturale

La conception architecturale proposée pour l'intégration d'AWS Transfer Family avec Golang se compose des composants suivants, comme illustré dans le schéma ci-dessous :

AWS Transfer Family with Golang for File Transfers

L'API proposée dans cet article sert d'exemple de base pour démontrer ses fonctionnalités fondamentales. Dans un scénario réel, l'API peut être plus complexe et inclure des fonctionnalités supplémentaires. Sa fonction principale est de télécharger des fichiers sur le serveur AWS Transfer Family SFTP et de les stocker dans un compartiment S3, que ce soit à des fins de sauvegarde ou d'intégration avec d'autres systèmes. Les cas d'utilisation varient et dépendent des besoins de chaque organisation. Voici quelques exemples de cas d'utilisation supplémentaires : Clients de la famille AWS Transfer.

De plus, l'API proposée dans cet article peut être déployée sur le cloud AWS à l'aide de services tels qu'AWS Elastic Beanstalk ou AWS Fargate pour obtenir une plus grande évolutivité et disponibilité, en fonction des exigences spécifiques de chaque organisation.

Commençons !

Mise en œuvre

Générer une clé publique et privée

Générez une paire de clés publique et privée pour vous connecter au serveur SFTP AWS Transfer Family. Cela peut être fait localement sur notre machine à l'aide de la commande suivante.

$ ssh-keygen -t rsa -b 4096 -f /aws_example_ssh_key

  • aws_example_ssh_key : Nom de la clé
  • PATH : Répertoire où la clé sera enregistrée
  • rsa : Algorithme de chiffrement
  • 4096 : Taille de la clé
  • f : Nom du fichier de sortie
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]-----+
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • Entrez la phrase secrète (vide s'il n'y a pas de phrase secrète) : mot de passe pour la clé.
  • Entrez à nouveau la même phrase secrète : confirmez le mot de passe de la clé.
  • Votre identification a été enregistrée dans /aws_example_ssh_key : la clé privée sera enregistrée dans le fichier aws_example_ssh_key dans le chemin spécifié.
  • Votre clé publique a été enregistrée dans /aws_example_ssh_key.pub : la clé publique sera enregistrée dans le fichier aws_example_ssh_key.pub dans le chemin spécifié.

AWS Transfer Family with Golang for File Transfers

Créer un service de transfert de famille

Connectez-vous à AWS Management Console, sélectionnez le service AWS Transfer Family et créez un serveur.

AWS Transfer Family with Golang for File Transfers

Sélectionnez SFTP (SSH File Transfer Protocol) pour un transfert de fichiers sécurisé et cliquez sur Suivant.

AWS Transfer Family with Golang for File Transfers

Choisissez un fournisseur d'identité et sélectionnez « Service géré ».

AWS Transfer Family with Golang for File Transfers

Dans la configuration du point de terminaison, sélectionnez « Accessible publiquement » et cliquez sur Suivant.

AWS Transfer Family with Golang for File Transfers

Nous sélectionnons « Amazon S3 » comme option de stockage et cliquons sur Suivant.

AWS Transfer Family with Golang for File Transfers

Dans la section « Configurer les détails supplémentaires », laissez les paramètres à leurs valeurs par défaut.

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

Révisez, cliquez sur Suivant et créez.
Une fois la création terminée, nous aurons quelque chose de similaire à ceci. Nous pouvons voir que nous n'avons pas encore d'utilisateurs et que cela démarrera sous peu via un point de terminaison public et en utilisant S3 comme stockage.

AWS Transfer Family with Golang for File Transfers

Créer un rôle

Créez un nouveau rôle pour la famille de transfert AWS vers le service s3. Pour ce faire, accédez au service IAM et créez un nouveau rôle de type de service AWS et dans le cas d'utilisation, sélectionnez transfert et suivant.

AWS Transfer Family with Golang for File Transfers

Politique d'autorisation, AmazonS3FullAccess pour avoir un accès complet au compartiment S3. Mais cette politique est tout à fait admissible et il n'est pas recommandé de l'utiliser en production. Et ensuite.

AWS Transfer Family with Golang for File Transfers

Nous procédons à l'attribution du nom du rôle "role-example-transfer-to-s3", nous le vérifions et cliquons sur "Créer un rôle".

AWS Transfer Family with Golang for File Transfers

Créer un compartiment S3

Nous procédons à la création du bucket s3, pour ce faire nous allons sur le service s3 et créons un nouveau bucket.

AWS Transfer Family with Golang for File Transfers

Nous définissons le nom du bucket, en laissant la configuration par défaut et créons le bucket.

Nom du bucket : "bucket-example-transfer".

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

À la fin de la création, nous aurons quelque chose comme ceci :

AWS Transfer Family with Golang for File Transfers

Configurer les utilisateurs SFTP pour Transfer Family avec S3

Accédez au service AWS Transfer Family et sélectionnez le serveur que vous avez créé précédemment.

  • Sélectionnez l'onglet "Utilisateurs" et cliquez sur "Ajouter un utilisateur".
  • Entrez le nom d'utilisateur.
  • Attribuez le rôle IAM que vous avez créé précédemment.
  • Définir "Politique" aucune
  • Dans le champ « Répertoire personnel », saisissez bucket-example-transfer, qui est le nom du bucket S3 que vous avez créé précédemment.
  • Cliquez sur "Ajouter un utilisateur".

AWS Transfer Family with Golang for File Transfers

Pour suivre cet article, vous devrez fournir la clé publique qui a été générée au démarrage aws_example_ssh_key.pub.

Pour visualiser le contenu de la clé publique, utilisez la commande suivante :

$ cat aws_example_ssh_key.pub

La clé publique ressemble à ceci :

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]-----+
Copier après la connexion
Copier après la connexion
Copier après la connexion

C'est la clé que nous devons inclure dans le champ "Clés publiques SSH". Assurez-vous de copier et coller l'intégralité de la clé avec précision dans ce champ pour permettre un accès sécurisé au serveur.

AWS Transfer Family with Golang for File Transfers

Après avoir créé l'utilisateur, vous devriez voir un écran de confirmation similaire à celui ci-dessous. Cela indique que l'utilisateur a été configuré avec succès et est prêt à utiliser le service SFTP.

AWS Transfer Family with Golang for File Transfers

Structure du projet

Ci-dessous, nous fournissons un aperçu détaillé de la structure du projet Golang et incluons un lien vers le référentiel GitHub pour référence. Cet aperçu vous aidera à comprendre l'organisation du projet et comment les différentes composantes sont structurées et interconnectées.

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
Copier après la connexion

Les dépendances que nous utiliserons sont Gin et 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
Copier après la connexion

Définissez les informations d'identification suivantes dans le fichier config.go, où se trouvent la clé privée et les informations d'identification de l'utilisateur Transfer Family, pour vous connecter au serveur SFTP.

$ go get -u github.com/gin-gonic/gin
$ go get -u github.com/pkg/sftp
Copier après la connexion
  • Hôte : le point de terminaison de connexion que nous avons obtenu précédemment.
  • Port : 22
  • Utilisateur : le nom d'utilisateur que nous avons créé précédemment.
  • PrivateKeyPath : le chemin d'accès à la clé privée que nous avons créée précédemment.

Pensez également à définir le chemin où seront enregistrés les fichiers téléchargés sur le serveur SFTP. Dans mon cas, c'est /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",
    }
}
Copier après la connexion

Fonction pour créer un nouveau client SFTP avec la configuration donnée :

// service.go

func (u *Service) Upload(file *domain.File) error {
    return u.sftpClient.UploadFile(file, "/bucket-example-transfer/rodrigo/")
}
Copier après la connexion

Méthode pour télécharger un fichier sur le serveur SFTP.

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]-----+
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exécutez le projet à l'aide de la commande suivante :

$ allez exécuter cmd/main.go

AWS Transfer Family with Golang for File Transfers

Maintenant, nous téléchargeons un fichier sur le serveur SFTP à l'aide de Postman. Ensuite, nous naviguons vers S3 pour vérifier que le fichier a été téléchargé correctement.

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

Les fichiers ont été téléchargés avec succès sans aucun problème.

Merci d'avoir lu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal