Avec la montée en puissance des architectures serverless, créer une API REST sans gérer de serveurs devient un atout majeur pour les startups et PME. Dans ce tutoriel, nous verrons comment développer et déployer en quelques étapes une API REST en Python sur AWS Lambda, afin de réduire vos coûts d’infrastructure et d’assurer une scalabilité automatique.

1. Préparer l’environnement de développement

  1. Installer AWS CLI
    brew install awscli    # macOS
    sudo apt-get install awscli  # Ubuntu

    Puis configurez vos identifiants : aws configure.

  2. Installer AWS SAM CLI
    brew tap aws/tap
    brew install aws-sam-cli

    Le SAM CLI simplifie la création et le déploiement de fonctions Lambda.

  3. Créer un environnement virtuel Python
    python3 -m venv venv
    source venv/bin/activate
    pip install boto3

2. Développer la fonction Lambda

2.1. Structure du projet

my-api/
├── app.py
├── requirements.txt
└── template.yaml

2.2. Code de l’API (app.py)

import json
import boto3
from boto3.dynamodb.conditions import Key

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Items')

def lambda_handler(event, context):
    http_method = event['httpMethod']
    if http_method == 'GET':
        resp = table.scan()
        return {'statusCode': 200, 'body': json.dumps(resp['Items'])}
    elif http_method == 'POST':
        data = json.loads(event['body'])
        table.put_item(Item=data)
        return {'statusCode': 201, 'body': json.dumps({'message': 'Item créé'})}
    else:
        return {'statusCode': 405, 'body': 'Méthode non autorisée'}

Ce handler gère deux routes : GET /items et POST /items.

3. Définir l’infrastructure avec AWS SAM

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  ItemsFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.lambda_handler
      Runtime: python3.9
      Policies:
        - DynamoDBCrudPolicy:
            TableName: Items
      Events:
        ApiGetItems:
          Type: Api
          Properties:
            Path: /items
            Method: get
        ApiPostItems:
          Type: Api
          Properties:
            Path: /items
            Method: post

4. Déploiement et tests

  1. Build : sam build
  2. Déploy : sam deploy --guided
  3. Tester localement : sam local start-api

Après déploiement, notez :

  • Cold start moyen : ~120 ms (python3.9).
  • Coût estimé : 0,20 $ par million d’invocations (source AWS).

5. Bonnes pratiques pour vos API serverless

  • Gestion des versions : utilisez les aliases Lambda pour déployer progressivement.
  • Sécurité : limitez les permissions IAM à la stricte nécessité.
  • Observabilité : activez les logs CloudWatch et installez un monitoring adapté.
  • Tests locaux : simulez les événements API Gateway avec SAM CLI.
  • Scalabilité : ajustez la mémoire Lambda pour optimiser le ratio coût/performance.

Conclusion

Vous savez maintenant créer et déployer une API REST serverless en Python sur AWS Lambda, avec un déploiement automatisé et des bonnes pratiques pour la production. Cette approche vous libère de la gestion serveur et assure une montée en charge instantanée.

Contactez notre équipe si vous souhaitez accélérer votre migration vers le serverless et optimiser vos coûts.