☁️ Cloud

cloud-serverless-designer

Conception d'architectures serverless couvrant Functions, event-driven, cold start et patterns avancés.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- cloud-serverless-designer --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } cloud-serverless-designer -Launch"

🚀 Déjà installé ?

claude "/cloud-serverless-designer"

Ou tapez /cloud-serverless-designer dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

serverlessfunctions as a serviceFaaScold startevent-driven serverlessAzure Functions

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/cloud-serverless-designer ~/.claude/skills/

Payload du plugin : skills/cloud-serverless-designer · source éditable : cloud-skills/serverless-designer

📖 Manuel

Serverless Designer

Workflow

1. Évaluer l'adéquation serverless

Appliquer la grille de décision avant tout design :

CritèreServerless ✅Conteneur/VM ❌
Durée d'exécution< 15 min (Lambda), < 10 min (AZ Func)Longue durée / streaming
TraficTrès variable, spikyStable et prévisible
Cold start toléréOui (< 2 s acceptable)Non (latence < 50 ms requise)
État local requisNonOui (session, cache local)
Charge réseauFaible à modéréeTrès haute (> 10 K req/s en continu)

Si 3 critères ou plus sont dans la colonne droite, proposer un déploiement conteneurisé (ECS/AKS/Cloud Run).

2. Cartographier les déclencheurs

Lister tous les événements et associer chaque source à une fonction :

HTTP/REST      → API Gateway + Lambda / Azure APIM + Function
File upload    → S3 Event / Blob Trigger
Message queue  → SQS / Service Bus → fonction consumer
Timer/CRON     → EventBridge Scheduler / Timer Trigger
Stream         → Kinesis / Event Hub → fonction par batch
Auth event     → Cognito / AAD B2C → Pre/Post trigger

Documenter le schéma de l'événement d'entrée dès cette étape pour éviter les surprises au déploiement.

3. Découper les fonctions (SRP)

# Handler thin — délègue à un module testable
def handler(event, context):
    payload = parse_event(event)          # module pur
    result = process_order(payload)       # logique métier
    return format_response(result)        # module pur

4. Choisir plateforme et runtime

Comparatif 2026 rapide :

PlateformeRuntime topTimeout maxCold start typique
AWS LambdaPython 3.12, Node 22, Java 2115 min200 ms–1 s (SnapStart Java)
Azure Functions v4.NET 8 Isolated, Node 2010 min (Consumption)300 ms–2 s
Google Cloud Functions 2nd genPython 3.12, Go 1.2260 min100–500 ms
Cloudflare WorkersJS/TS (V8 Isolates)30 s CPU< 5 ms (pas de cold start)

Cloudflare Workers = meilleur choix si latence critique et logique légère. AWS Lambda SnapStart = meilleur choix Java/JVM pour éliminer le cold start.

5. Gérer l'état et la persistance

Les fonctions sont stateless — tout état doit être externalisé :

Session courte     → ElastiCache (Redis) / Azure Cache for Redis
Données structurées → DynamoDB / Cosmos DB (mode serverless)
Fichiers           → S3 / Azure Blob Storage
État de workflow   → Step Functions / Durable Functions
Compteurs atomiques → DynamoDB atomic increment / Redis INCR

Pattern recommandé — idempotence :

# Utiliser un idempotency_key pour éviter les doubles traitements
def process(event):
    key = event["idempotency_key"]
    if cache.exists(key):
        return cache.get(key)
    result = do_work(event)
    cache.set(key, result, ttl=3600)
    return result

6. Optimiser le cold start

Techniques classées par impact :

  1. Provisioned Concurrency (Lambda) / Premium Plan (AZ Func) — élimine le cold start sur les fonctions critiques

```bash aws lambda put-provisioned-concurrency-config \ --function-name my-api \ --qualifier prod \ --provisioned-concurrent-executions 10 ```

  1. Réduire la taille du package — ne bundler que le strict nécessaire

```bash # Lambda — vérifier la taille réelle zip -r function.zip . --exclude "*.test.*" "node_modules/.cache/*" du -sh function.zip # cible < 5 MB décompressé ```

  1. Lazy loading des clients lourds — initialiser hors handler mais avec import paresseux

```python _db_client = None def get_db(): global _db_client if _db_client is None: _db_client = boto3.resource("dynamodb") return _db_client ```

  1. SnapStart (Java Lambda) — snapshot post-init, restore ~100 ms
  2. Cloudflare Workers / Fastly Compute — V8 Isolates, pas de cold start

7. Choisir le pattern d'orchestration

Séquence simple       → Step Functions Express / Durable Functions Activity Chain
Compensation (saga)   → Step Functions Standard + compensating transactions
Fan-out / fan-in      → SNS → N Lambdas → SQS aggregator
Longue durée          → Durable Functions Orchestrator (stateful)
Event choreography    → EventBridge / Event Grid (pas de coordinateur central)

Orchestration vs Choreography :

8. Sécurité

- IAM least privilege par fonction (pas de AdministratorAccess)
- Secrets dans Secrets Manager / Key Vault — jamais en variable d'env plaintext
- VPC endpoint si accès RDS/interne (attention cold start accru ~500 ms)
- Validation du schéma d'entrée dès le handler (ex. Pydantic, Zod)
- Activer Lambda function URL auth type IAM si pas d'API Gateway

9. Observabilité

Triad minimal obligatoire :

import json, logging
logger = logging.getLogger()
logger.setLevel("INFO")

def handler(event, context):
    logger.info(json.dumps({
        "correlation_id": event.get("headers", {}).get("x-correlation-id"),
        "action": "order_processing",
        "order_id": event["order_id"]
    }))

Garde-fous / Anti-patterns

Anti-patternRisqueCorrection
Fonction monolithique (> 500 lignes)Impossible à tester, cold start longDécouper par responsabilité
Appels synchrones chaînés (Lambda → Lambda direct)Couplage fort, timeout cumuléPasser par une queue SQS/SNS
Connexions DB ouvertes dans le handlerPool épuisé, connexions orphelinesRDS Proxy / Cosmos serverless / client hors handler
Pas de DLQ sur les consumers asyncPerte silencieuse de messagesDLQ systématique + alerte CloudWatch
Variables d'env avec secrets plaintextExposition dans logs/consoleSecrets Manager + cache en mémoire
Timeout trop long sans circuit-breakerCoût et latence incontrôlésTimeout agressif + retry avec backoff exponentiel
Fan-out sans throttlingThrottling DynamoDB/RDS en avalSQS batch + reserved concurrency

Bonnes pratiques 2026

```bash # Déploiement SAM sam build && sam deploy --guided

# Azure Functions Core Tools func azure functionapp publish <app-name> --python ```