
Pipeline CI/CD pour une Fonction Lambda
Ce projet m’a permis de découvrir GitHub Actions et AWS ensemble. Franchement très intéressant, et étonnamment simple à mettre en place !
1 — Vue d’ensemble
2 — Étapes
3 — Vérification
1 - Vue d’ensemble
L’objectif ici est de mettre à jour une fonction Lambda existante dès qu’on pousse du code dans un repo GitHub. On utilise des secrets pour authentifier GitHub Actions auprès d’AWS et déployer la fonction automatiquement.
Le runner GitHub fait les étapes suivantes :
- Récupère le code depuis le repo
- Met en place l’environnement Python et installe les dépendances
- Configure les identifiants AWS
- Emballe le code de la Lambda
- Déploie la fonction Lambda sur AWS
On crée la fonction Lambda via la console AWS pour aller plus vite.
2 - Étapes
1 - Créer un nouveau repo GitHub
Depuis l’interface GitHub.
2 - Ajouter un secret dans les Actions
Il faut stocker nos identifiants AWS de manière sécurisée pour que notre pipeline puisse s’authentifier correctement.
3 - Créer la fonction Lambda
4 - Ajouter le code de la Lambda dans le repo
Au début, la fonction affiche juste un "Hello from Lambda"
en réponse à une requête HTTP. On veut changer ce comportement via notre pipeline.
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Bonne pratique : toujours inclure un fichier requirements.txt
pour les dépendances Python.
On ajoute le fichier de pipeline .github/workflows/lambda.yaml
name: Deploy AWS Lambda
on:
push:
branches:
- main
paths:
- "lambda/*"
jobs:
deploy-lambda: # Job name
runs-on: ubuntu-latest # Specify the runner
steps:
# 1 - Checkout and get the code in the runner environment
- uses: actions/checkout@v2
# 2 - Set up Python environment
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "3.12"
# 3 - Install dependencies
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r lambda/requirements.txt
# 4 - Setup AWS credentials
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: eu-west-3
# 5 - Zips the lambda code and updates the lambda function
- name: Deploy Lambda
run: |
cd lambda
zip -r lambda.zip .
aws lambda update-function-code --function-name my-test-cicd-lambda --zip-file fileb://lambda.zip
On met à jour le code comme ceci :
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda changes made from vscode!')
}
5 - Commit & Push
On commit et on push, ce qui déclenche automatiquement le pipeline :
3 - Verification
Et là, si on va dans la console AWS, on peut voir que le code de la fonction a bien été mis à jour :
C’est un succès ! Notre fonction Lambda a été mise à jour grâce au pipeline GitHub Actions. On peut la supprimer maintenant si on veut.