API EC2 Query (97 azioni), firme SigV2 e SigV4 verificate da Keystone: AWS CLI, boto3, Terraform.
Go Nova, Neutron, Cinderopenkeel-ec2-api
Il modulo
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
Estratto da openkeel-ec2-api/README.md (in inglese).
Azioni API
100 azioni dell'API originale e il loro stato in OpenKeel.
L'ec2-api ritirato viene verificato rispetto al suo comportamento registrato e, soprattutto, con i veri client AWS: la AWS CLI e il provider AWS di Terraform.
Replay degli scambi registrati
Errori di validazione e sonde registrati
Gli scambi di errore registrati restituiscono lo stesso stato, lo stesso codice EC2 e lo stesso messaggio; le sonde del dispatcher confrontano gli errori in testo semplice e le radici delle risposte.
Esecuzione
test/e2e/exchanges_test.go e test/e2e/probes_test.go.
Ultimo risultato 40 / 40 identici; sonde: 9 identiche byte per byte, 6 deliberatamente diverse (2026-11-02).
Fonte: openkeel-ec2-api/docs/CONFORMANCE.md
Scenario
Scenario di tutte le famiglie di azioni
Ogni famiglia di azioni viene eseguita, e le strutture di risposta vengono confrontate con quelle registrate da Python.
La vera AWS CLI funziona su 42 azioni, con SigV4 verificato dall'algoritmo di keystoneclient.
Esecuzione
test/awscli (build tag awscli), AWS CLI v2 2.18.
Ultimo risultato Superato (2026-11-02).
Fonte: openkeel-ec2-api/docs/CONFORMANCE.md
Contratto client
Provider AWS di Terraform
Terraform applica una VPC, una subnet, un gateway, route, un security group, una coppia di chiavi, un'istanza, un EIP e un volume, poi non pianifica alcuna modifica e distrugge tutto.
Esecuzione
test/terraform (build tag terraform), Terraform 1.5.4 e hashicorp/aws 5.100.0, su MariaDB.
Ultimo risultato Superato su MariaDB (2026-11-02).
Fonte: openkeel-ec2-api/docs/CONFORMANCE.md
Concorrenza su Galera
Concorrenza su MariaDB Galera
Una VPC predefinita e un ID EC2 per server con richieste concorrenti su tre nodi; le scritture dei tag convergono.
Esecuzione
test/galera (build tag galera) su un cluster a 3 nodi.
L'API EC2 (dismessa upstream nel 2024) mantiene le sue azioni ma rinuncia al proprio server S3 e al servizio di metadati, che la piattaforma fornisce già.
Gestito dalla piattaforma Cloud Native
Server ec2-api-s3
Gestito da Rook-Ceph RGW
Perché è stato escluso
Il server S3 Python non è autenticato; lo storage a oggetti con S3 è fornito dalla piattaforma.
Perché la soluzione non ne risente
I client S3 usano l'endpoint RGW con le credenziali EC2 di Keystone (okadm --ceph-s3).
Fonte: openkeel-ec2-api/docs/CONFORMANCE.md
Gestito dalla piattaforma Cloud Native
Servizio ec2-api-metadata
Gestito da KubeVirt (cloud-init)
Perché è stato escluso
Le istanze ottengono i metadati dai datasource OpenStack e NoCloud di cloud-init (config drive).
Perché la soluzione non ne risente
I guest si avviano e si configurano come di consueto; mancano solo gli identificatori EC2 (i-, ami-, r-) nei loro metadati.
Fonte: openkeel-ec2-api/docs/CONFORMANCE.md
Meccanismi interni semplificati
Lock su file per host della VPC predefinita
Perché è stato escluso
Più repliche e un Galera multi-writer richiedono un lock a livello di cluster: una riga di database con scadenza.
Perché la soluzione non ne risente
Le VPC predefinite vengono sempre create una volta per progetto, ora in modo sicuro tra le repliche.
Fonte: openkeel-ec2-api/docs/CONFORMANCE.md
Qui è elencato solo ciò che è stato escluso per scelta progettuale; il lavoro non ancora svolto si trova nei Known gaps del docs/CONFORMANCE.md del modulo. Tutti i moduli
Interazioni API EC2
Vista del servizio generata dalla skill dei diagrammi a partire dal modello OpenKeel.