Automatiser un déploiement serverless en 15 minutes : GitHub Actions + AWS Lambda avec Terraform (OpenTofu)
Un guide express pensé pour la communauté DevOps de Normandie (Caen, Rouen, Le Havre).
Les start‑up de Caen au Havre, les ESN de Rouen et même les freelances dispersés entre le Calvados et la Manche ont un besoin commun : déployer vite, proprement et à moindre coût. Le triptyque GitHub Actions, AWS Lambda et Terraform (OpenTofu) répond parfaitement à ce défi. Suivez ce tutoriel pas‑à‑pas et livrez votre première fonction serverless en moins de 15 minutes, sans quitter votre bureau normand (ni le couchsurfing avec vue sur la mer !).
Pourquoi ce stack ?
- GitHub Actions : déjà intégré à vos dépôts GitHub, facile à déclencher à chaque push.
- AWS Lambda : 1 million d’invocations gratuites par mois, idéal pour tester sans exploser votre budget, que vous soyez à Cherbourg‑en‑Cotentin ou à Évreux.
- Terraform (OpenTofu) : infra‑as‑code 100 % open‑source, gère la création comme la destruction de ressources.
1. Prérequis
Outil | Version conseillée | Installation rapide |
---|---|---|
Git & GitHub | ≥ 2.44 | sudo apt install git sur votre VM OVH Gravelines (à 2 h de Rouen) |
Terraform / OpenTofu | ≥ 1.8 | brew install opentofu ou choco install opentofu |
AWS CLI | ≥ 2.14 | brew install awscli |
Compte AWS | Free Tier | Sélectionner la région eu-west-3 (Paris) pour une latence minimale depuis la Normandie |
Astuce local SEO : Pensez à taguer vos ressources AWS avec location=normandie
pour retrouver vos stacks dédiés !
2. Bootstrap du dépôt GitHub
Créez un nouveau repo public ou privé, par exemple serverless-normandie-demo
.
mkdir serverless-normandie-demo && cd $_
git init
gh repo create serverless-normandie-demo --private
Arborescence minimale :
.
├── src/ # votre code Lambda (Python, Node.js, etc.)
├── iac/ # fichiers .tf OpenTofu
└── .github/
└── workflows/
└── deploy.yml
3. Écrire l’infra avec Terraform (OpenTofu)
iac/main.tf
:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
required_version = ">= 1.8.0"
}
provider "aws" {
region = "eu-west-3" # Paris, proche des équipes de Normandie
}
resource "aws_iam_role" "lambda_exec" {
name = "lambda_exec_role_normandie"
assume_role_policy = data.aws_iam_policy_document.lambda.json
}
data "aws_iam_policy_document" "lambda" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["lambda.amazonaws.com"]
}
}
}
resource "aws_lambda_function" "hello_normandie" {
function_name = "helloNormandie"
role = aws_iam_role.lambda_exec.arn
handler = "handler.hello"
runtime = "nodejs20.x"
filename = "${path.module}/../src/hello.zip"
timeout = 10
}
4. Ajouter vos secrets GitHub
Dans Settings → Secrets and variables → Actions, créez :
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_REGION
→eu-west-3
Tip Rouen Devs : Activez les GitHub Environments pour valider vos déploiements vers l’environnement production-normandie
.
5. Le workflow GitHub Actions
.github/workflows/deploy.yml
:
name: Deploy Lambda to AWS (Normandie edition)
on:
push:
branches:
- main
jobs:
plan-and-apply:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup OpenTofu
uses: opentofu/setup-opentofu@v1
with:
tofu_version: '1.8.0'
- name: Tofu Init
run: |
cd iac
tofu init
- name: Tofu Plan
run: |
cd iac
tofu plan -out=tfplan
- name: Tofu Apply
if: github.ref == 'refs/heads/main'
run: |
cd iac
tofu apply -auto-approve tfplan
En un push sur main, la fonction AWS Lambda est compilée, empaquetée et déployée en région Paris, idéale pour les sites web hébergés dans le Calvados.
6. Tester depuis la Normandie
- Naviguez dans la console AWS → Lambda →
helloNormandie
. - Cliquez sur Test puis choisissez un événement par défaut.
- Vérifiez la réponse « Bonjour Normandie ! » dans la sortie JSON.
Pour un test HTTP, configurez l’AWS Lambda Function URL ou API Gateway :
curl https://abc123.lambda-url.eu-west-3.on.aws/
# → Bonjour Normandie !
La latence depuis Caen devrait rester sous 25 ms.
7. Nettoyer : rollback facilité
Lorsque votre démonstration au prochain meetup Caen DevOps est terminée :
cd iac && tofu destroy
Vos ressources AWS sont supprimées, pas de mauvaise surprise sur la facture.
8. Aller plus loin
- Observabilité : branchez AWS CloudWatch Logs et exportez vers Grafana Cloud (datacenter Roubaix).
- Multi-cloud normand : répliquez le tuto avec Azure Functions (région France Centre) pour comparer la latence depuis la Seine-Maritime.
- Runner auto‑hébergé : implémentez un runner GitHub sur un VPS à Rouen pour réduire encore le cold‑start des jobs.
FAQ pour les développeurs normands
- ⏱️ Combien de temps dure réellement le déploiement ?
- La phase
tofu apply
prend ~40 s. Ajoutez le packaging Lambda : comptez 2 à 3 minutes de bout en bout. - 💸 Le Free Tier suffit‑il si mon trafic vient de Caen ?
- Oui : 1 million d’invocations/ mois. Au‑delà, chaque 1 million supplémentaire coûte environ 0,20 € dans la région Paris — un café sur le port du Havre !
- 🌐 Puis‑je héberger la Lambda en région
eu-west-1 (Irlande)
? - Oui, mais la latence réseau depuis la Normandie est 15‑30 ms plus élevée qu’en
eu-west-3
. Gardez‑le pour un public international.
Conclusion
En combinant GitHub Actions, AWS Lambda et Terraform (OpenTofu), vous disposez d’une chaîne CI/CD serverless‑friendly et 100 % as‑code. Mieux encore, elle s’adapte parfaitement aux réalités des équipes Normandie Tech : rapidité de mise en place, facturation à l’usage et scalabilité sans stress.
Prêt à montrer votre fonction serverless ? Partagez‑la lors du prochain Rouen Cloud & DevOps Meetup, ou envoyez‑nous le lien sur X/Twitter avec le hashtag #ServerlessNormandie.