Deployer Go sur AWS : Un Tutoriel Approfondi
Pourquoi Deployer Go sur AWS ?
Deployer une application Go sur AWS permet d'avoir un environnement cloud performant, sécurisé et scalable. Cela offre plusieurs avantages pratiques :
- Scalabilité : AWS facilite la mise à l'échelle de vos applications en permettant d'ajouter ou de diminuer les instances selon la demande.
- Haute disponibilité : En déployant sur des services comme Elastic Beanstalk ou ECS, vous gardez votre application disponible même si une instance rencontre un problème.
- Sécurité : AWS propose des outils robustes pour sécuriser vos applications, y compris des options de contrôle d'accès granulaires et des fonctionnalités de chiffrement.
Un cas concret est celui d'une petite start-up qui utilise Go pour construire une application web simple. En déployant sur AWS, la société peut gérer facilement les fluctuations en demande et assurer la continuité opérationnelle de son service.
Prerequis
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :
Connaissances :
- Langage Go
- Connaissance de base de l'infrastructure cloud AWS (S3, RDS, EC2)
- Familiarité avec le terminal et les commandes bash
Outils à installer :
- Go (v1.17 ou ultérieure)
- AWS CLI (version 2 ou plus tard)
- Docker (optionnel, pour l'utilisation de Elastic Beanstalk)
Concepts fondamentaux
1. AWS Elastic Beanstalk
Elastic Beanstalk est un service qui permet le déploiement et la gestion des applications cloud sans avoir à gérer les infrastructures sous-jacentes.
// Importer les packages nécessaires pour Elastic Beanstalk
import "github.com/aws/aws-sdk-go/service/elasticbeanstalk"
2. AWS IAM (Identity and Access Management)
IAM vous permet de contrôler l'accès et les autorisations des utilisateurs, des groupes et des entités.
// Créer un utilisateur IAM avec les droits nécessaires pour Elastic Beanstalk
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticbeanstalk:CreateApplicationVersion",
"elasticbeanstalk:DescribeEnvironmentResources"
],
"Resource": "*"
}
]
}
3. AWS S3 (Simple Storage Service)
S3 est un service de stockage d'objets dans le cloud.
// Importer le package pour travailler avec S3
import "github.com/aws/aws-sdk-go/service/s3"
// Créer une nouvelle instance de S3
s3Svc := s3.New(session.New())
4. Docker (optionnel)
Docker permet de containeriser votre application, facilitant le déploiement et la mise à l'échelle.
## Installer Docker sur votre machine locale
$ brew install docker
## Créer un fichier Dockerfile pour votre application Go
FROM golang:1.17
WORKDIR /app
COPY . .
RUN go build -o main
CMD ["./main"]
Mise en pratique : Projet fil rouge
Nous allons créer une application web simple utilisant Go et déployer-la sur AWS Elastic Beanstalk.
Étape 1 : Création du projet
Créez un nouveau dossier pour votre projet et initialisez-le avec Go.
$ mkdir go-eb-app
$ cd go-eb-app
Créer le fichier main.go qui servira comme point d'entrée de l'application.
// main.go
package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", helloHandler)
http.ListenAndServe(":8080", nil)
}
Étape 2 : Création du fichier de configuration Elastic Beanstalk
Créez un fichier Procfile pour indiquer à Elastic Beanstalk comment exécuter votre application.
## Procfile
web: main.go
Étape 3 : Initialisation du projet Git (optionnel)
Pour utiliser les fonctionnalités de versioning d'Elastic Beanstalk, initialisez un dépôt Git.
$ git init
$ git add .
$ git commit -m "Initial commit"
Étape 4 : Déploiement sur Elastic Beanstalk
Installez l'AWS CLI et configurez-la avec vos identifiants AWS.
## Installer AWS CLI
$ brew install awscli
## Configurer AWS CLI
$ aws configure
Créez une nouvelle application Elastic Beanstalk et déploiez votre projet.
## Créer une nouvelle application Elastic Beanstalk
$ aws elasticbeanstalk create-application --application-name go-eb-app
## Créer un environnement pour l'application
$ aws elasticbeanstalk create-environment --application-name go-eb-app --environment-name go-eb-env --solution-stack-name "64bit Amazon Linux 2 v3.5.0 running Go 1.17"
## Déployer le code sur l'environnement
$ zip -r go-eb-app.zip .
$ aws elasticbeanstalk update-environment --application-name go-eb-app --environment-name go-eb-env --version-label $(date +%s)
Étape 5 : Accès à votre application
Une fois le déploiement terminé, récupérez l'URL de votre application et accedez-y.
## Obtenir l'URL de l'environnement
$ aws elasticbeanstalk describe-environment-resources --environment-name go-eb-env | jq '.EnvironmentResources.EnvironmentLinks[0].LinkName'
Erreurs fréquentes et debugging
1. Erreur : Error response from daemon: No such image: golang:1.17
Le Dockerfile spécifie une image Go qui n'existe pas.
## ❌ Mauvais code
FROM golang:1.18
Correction :
## ✅ Correct code
FROM golang:1.17
2. Erreur : Error response from daemon: OCI runtime error: container_linux.go:349: starting container process caused "exec: \"main\": executable file not found in $PATH"
L'application n'est pas correctement compilée ou exécutée.
## ❌ Mauvais code
CMD ["./main"]
Correction :
## ✅ Correct code
RUN go build -o main
CMD ["./main"]
3. Erreur : Error: application version 1234567890 has no artifacts
Le déploiement sur Elastic Beanstalk échoue car il n'y a pas d'artifacts.
## ❌ Mauvais code
$ aws elasticbeanstalk update-environment --application-name go-eb-app --environment-name go-eb-env --version-label $(date +%s)
Correction :
## ✅ Correct code
$ zip -r go-eb-app.zip .
$ aws elasticbeanstalk update-environment --application-name go-eb-app --environment-name go-eb-env --version-label $(date +%s)
Pour aller plus loin
1. Utilisation de RDS pour la gestion de la base de données
Intégrez une instance RDS dans votre application Go pour stocker des données persistantes.
2. Configurations environnementales avec AWS Systems Manager Parameter Store
Gestion sécurisée des configurations sensibles en utilisant le Parameter Store.
3. Utilisation de CloudWatch pour la supervision et l'analyse
Supervisez les performances de votre application avec CloudWatch.
Défi pratique : Ajoutez une base de données à votre application Go, utilisez RDS pour stocker des données et supervisez vos performances avec CloudWatch.
Ce tutoriel couvre les bases du déploiement d'une application Go sur AWS Elastic Beanstalk en utilisant Docker. En suivant ces étapes et en approfondissant chaque concept, vous serez prêt à déployer vos applications Go complexes sur le cloud AWS.