API EC2 Query (97 actions), signatures SigV2 et SigV4 vérifiées par Keystone : AWS CLI, boto3, Terraform.
Go Nova, Neutron, Cinderopenkeel-ec2-api
Le module
OpenKeel implementation in Go of OpenStack ec2-api (ec2-api), generated from the reverse-specification of branch 17.0.0 by the generate-go-from-spec skill. It replaces the Python service without its clients noticing: the same EC2 Query API (97 actions of ec2-api 17.0.0, SigV2 and SigV4 verified by Keystone ec2tokens), the same XML documents and error codes, the same EC2 identifiers and the same ec2api database. What is reproduced and what differs is in docs/CONFORMANCE.md; the security checklist is in docs/SECURITY.md.
Clients: the AWS CLI and boto3, Terraform's AWS provider with a custom endpoint, euca2ools/boto2
Backends: Nova, Neutron (with VPNaaS for the VPN actions), Cinder and Glance, called with the caller's token; the EC2 IDs and tags are in MariaDB (items, tags). Not included: ec2-api-metadata (Nova's metadata service or cloud-init serves instances) and ec2-api-s3 (Swift s3api) — docs/CONFORMANCE.md D9, D10
Go module: github.com/openkeel/openkeel-ec2-api
Binary: ec2-api (API on port 8788, health and metrics on 9090)
Configuration: YAML, see config/config.example.yaml
Setting up a development environment, the database and the tests: docs/GETTING-STARTED.md
Database schema, migrations and upgrades: docs/DATABASE.md
Extrait de openkeel-ec2-api/README.md (en anglais).
Actions d'API
100 actions de l'API d'origine, et leur état dans OpenKeel.
L'ec2-api retiré est vérifié par rapport à son comportement enregistré et surtout face aux vrais clients AWS : l'AWS CLI et le provider AWS de Terraform.
Rejeu des échanges enregistrés
Erreurs de validation et sondes enregistrées
Les échanges d'erreur enregistrés donnent le même statut, le même code EC2 et le même message ; les sondes du dispatcher comparent les erreurs en texte brut et les racines de réponse.
Exécution
test/e2e/exchanges_test.go et test/e2e/probes_test.go.
Dernier résultat 40 / 40 identiques ; sondes : 9 identiques à l'octet près, 6 volontairement différentes (2026-11-02).
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Scénario
Scénario de toutes les familles d'actions
Chaque famille d'actions s'exécute, et les formes de réponse sont comparées à celles enregistrées depuis Python.
Exécution
test/e2e/scenario_test.go.
Dernier résultat 97 / 97 actions réussies ; 93 formes de réponse vérifiées, aucun élément inexpliqué (2026-11-02).
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Contrat client
AWS CLI v2
La vraie AWS CLI fonctionne sur 42 actions, avec SigV4 vérifié par l'algorithme de keystoneclient.
Exécution
test/awscli (build tag awscli), AWS CLI v2 2.18.
Dernier résultat Réussi (2026-11-02).
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Contrat client
Provider Terraform AWS
Terraform applique un VPC, un sous-réseau, une passerelle, des routes, un groupe de sécurité, une paire de clés, une instance, une EIP et un volume, puis ne planifie aucun changement et détruit le tout.
Exécution
test/terraform (build tag terraform), Terraform 1.5.4 et hashicorp/aws 5.100.0, sur MariaDB.
Dernier résultat Réussi sur MariaDB (2026-11-02).
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Concurrence sur Galera
Concurrence sur MariaDB Galera
Un VPC par défaut et un ID EC2 par serveur sous requêtes concurrentes sur trois nœuds ; les écritures de tags convergent.
Exécution
test/galera (build tag galera) sur un cluster à 3 nœuds.
Dernier résultat Réussi, 3 exécutions, aucun 5xx (2026-11-02).
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Tempest
ec2api-tempest-plugin
Le plugin Tempest amont du projet.
Exécution
Retiré avec le projet en amont.
Dernier résultat Non exécuté.
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Écarté de la réécriture
L'API EC2 (retirée en amont en 2024) conserve ses actions mais abandonne son propre serveur S3 et son service de métadonnées, que la plateforme fournit déjà.
Assuré par la plateforme Cloud Native
Serveur ec2-api-s3
Repris par Rook-Ceph RGW
Pourquoi c'est écarté
Le serveur S3 Python n'est pas authentifié ; le stockage objet compatible S3 vient de la plateforme.
Pourquoi la solution n'est pas affectée
Les clients S3 utilisent l'endpoint RGW avec les identifiants EC2 de Keystone (okadm --ceph-s3).
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Assuré par la plateforme Cloud Native
Service ec2-api-metadata
Repris par KubeVirt (cloud-init)
Pourquoi c'est écarté
Les instances obtiennent leurs métadonnées par les datasources OpenStack et NoCloud de cloud-init (config drive).
Pourquoi la solution n'est pas affectée
Les invités démarrent et se configurent comme d'habitude ; seuls les identifiants EC2 (i-, ami-, r-) manquent dans leurs métadonnées.
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Mécanique interne simplifiée
Verrou fichier par hôte pour le VPC par défaut
Pourquoi c'est écarté
Plusieurs répliques et un Galera multi-écrivain exigent un verrou à l'échelle du cluster : une ligne en base avec expiration.
Pourquoi la solution n'est pas affectée
Les VPC par défaut sont toujours créés une fois par projet, désormais de façon sûre entre répliques.
Source : openkeel-ec2-api/docs/CONFORMANCE.md
Seul ce qui a été écarté par choix de conception figure ici ; le travail pas encore fait se trouve dans les Known gaps du docs/CONFORMANCE.md du module. Tous les modules
Interactions de API EC2
Vue « service » générée par la skill diagramme depuis le modèle d'OpenKeel.