Un account AWS con una sola persona si controlla con un'occhiata alla fattura. Con quattro o cinque persone che creano cose, no. Ognuna crea "una macchina piccola per provare", "una copia per sicurezza", "un database per un momento", e nessuna vede quello che creano le altre. Nessuno spende molto; tutte insieme, la fattura raddoppia in tre mesi. E quando arriva, non c'è modo di sapere di chi è ogni euro.
La soluzione non è proibire, ma dare a ogni persona una cifra al mese e rendere visibile quanto ha speso finora. È come una carta aziendale con un limite: nessuno se la prende a male, ed evita il 90 % degli spaventi.
AWS non ha un "budget per utente" vero e proprio. Si può imitare con tre pezzi: un tag obbligatorio con il nome di chi crea ogni cosa, un budget (Budgets) filtrato per quel tag e una policy IAM che impedisca di creare senza tag. I passi qui sotto lo montano; le sezioni seguenti spiegano come decidere le cifre e cosa contare.
Prima di iniziare: cosa significa ogni cosa
- Tag
- Una coppia nome = valore che metti a ogni cosa che crei in AWS (per esempio, Propietario = ana) per poi raggruppare la spesa in base ad essa.
- Tag di allocazione dei costi
- Un tag che hai attivato in Billing perché Cost Explorer e Budgets possano filtrare in base ad esso. Senza attivarlo, il tag esiste ma non serve per i costi.
- Budgets
- Lo strumento di AWS per fissare una cifra al mese e ricevere un'email quando la spesa effettiva o prevista la supera. Avvisa; non blocca.
- IAM
- Il sistema di utenti e permessi di AWS. Ogni persona ha un utente e dei permessi che dicono cosa può creare, vedere o cancellare.
- Policy
- Un testo in formato JSON che concede o nega permessi in IAM. Una policy di negazione vince sempre su qualsiasi permesso concesso.
- Cost Explorer
- La schermata di AWS che mostra la spesa in grafici e permette di raggrupparla per servizio, regione, account o tag.
- Spesa effettiva e previsione
- Quello che si è già consumato questo mese e quello che AWS calcola che avrai consumato a fine mese al ritmo attuale.
- Istantanea
- Una copia di un disco o di una macchina. Si paga per GB al mese finché esiste; è l'oggetto che più si accumula senza che nessuno se ne accorga.
- Bucket
- Una "cartella" di S3 dove si conservano i file. Si pagano lo spazio e quello che si scarica.
Passo dopo passo
Decidi il tag e dillo a tutti
Scegli un nome di tag e un formato per il valore, e non cambiarlo mai: per esempio
Propietariocon il nome utente IAM di ogni persona (Propietario = ana). Scrivilo in un posto che tutti vedano. Da adesso in poi, tutto ciò che si crea (macchine, dischi, istantanee, database, bucket) porta quel tag.Attiva il tag come tag di allocazione dei costi
Nella console AWS, menu del tuo account, Billing and Cost Management, sezione Cost allocation tags. Cerca
Propietarionell'elenco dei tag definiti dall'utente e premi Activate. Finché non è attivato, Cost Explorer e Budgets non possono filtrare in base ad esso. Impiega fino a 24 ore a comparire, e conta solo la spesa da quando viene attivato, non quella precedente.Crea un budget per persona in Budgets
In Billing and Cost Management, entra in Budgets e premi Create budget. Scegli Customize, tipo Cost budget, periodo Monthly, importo fisso (per esempio
60dollari). In Filters, scegli la dimensione Tag, chiavePropietario, valoreana. Chiamalopresupuesto-ana.Negli avvisi, aggiungine due: quando la spesa effettiva supera l'80 % e quando la previsione supera il 100 %, con l'email di quella persona e la tua. Ripeti il budget per ogni persona. I primi due budget dell'account sono gratuiti; da lì in poi costano pochi centesimi al giorno ciascuno.
Impedisci di creare macchine senza tag
In IAM, Policies, Create policy, editor JSON. Una policy di negazione come questa impedisce di creare un'istanza EC2 o un volume che non porti il tag
Propietario:{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": ["ec2:RunInstances", "ec2:CreateVolume"], "Resource": ["arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*"], "Condition": { "Null": { "aws:RequestTag/Propietario": "true" } } }] }Collega la policy al gruppo di utenti. Con una condizione simile (
StringNotEqualssuaws:RequestTag/Propietarioe la variabile${aws:username}) puoi obbligare che il valore sia il proprio nome utente, così nessuno intesta le sue macchine a un altro. Ogni servizio ha le sue azioni (rds:CreateDBInstance,lightsail:CreateInstances); comincia da EC2 e RDS, che è dove stanno i soldi.Limita le taglie che si possono creare
Un budget avvisa, ma non frena una macchina da 2 dollari l'ora creata un venerdì pomeriggio. Aggiungi un'altra policy di negazione per
ec2:RunInstancescon la condizioneec2:InstanceTypefuori da un elenco (t3.micro,t3.small,t3.medium...). Chi ha bisogno di qualcosa di più grande, lo chiede. In RDS l'equivalente èrds:DatabaseClass.Controlla una volta al mese
In Cost Explorer, raggruppa per il tag
Propietario. Vedrai una barra per persona e un'altra, "No tag", con tutto quello che è stato creato saltando la regola o prima di stabilirla. Quella barra è la lista delle cose da fare: taggare o cancellare. Dedica dieci minuti all'inizio di ogni mese e commenta le cifre con il team. La trasparenza fa più di qualsiasi policy.
Perché la spesa schizza in alto con più persone
Non è malafede né trascuratezza; è che la console AWS non dà nessun segnale di quanto costa ogni clic. Creare una macchina non mostra il prezzo al mese, solo il tipo. Un'istantanea non avvisa che si paga per sempre. E ogni persona vede l'account come "suo": non sa che ci sono già tre macchine di prova di altri colleghi che fanno la stessa cosa.
I tre schemi che costano più soldi:
- Creare e dimenticare. Una macchina per una prova di due giorni che resta accesa tre mesi. È, di gran lunga, la causa numero uno.
- Copie "per sicurezza". Istantanee prima di ogni modifica, che nessuno cancella dopo.
- Taglia per comodità. Scegliere una macchina quattro volte più grande del necessario "perché vada bene", senza sapere che costa quattro volte di più.
Come impostare la cifra
Parti da quello che già si spende. Guarda in Cost Explorer gli ultimi tre mesi e ripartiscilo mentalmente per persona (se non ci sono tag, chiedi). Di solito una o due persone hanno quasi tutta la spesa legittima (produzione) e il resto sono prove e sviluppo.
Separa due cose: ciò che è condiviso (i server di produzione, il database dell'azienda) e ciò che è personale (quello che ognuno crea per il suo lavoro). Il budget per utente si applica solo al secondo. Per una persona che sviluppa, una cifra ragionevole sta tra 30 e 100 dollari al mese: basta per una o due macchine piccole accese in orario d'ufficio e qualche istantanea. Per chi consulta soltanto, zero.
Metti la cifra un po' sopra quello che spende oggi chi spende di più in modo ragionevole, e abbassala dopo due mesi se avanza.
Cosa contare nel budget di ogni persona
Tutto quello che quella persona crea e che ha un costo ricorrente:
- Macchine EC2 e Lightsail, a ore o a piano mensile. Ricorda che in Lightsail la macchina ferma si paga.
- Dischi di quelle macchine, compresi quelli che restano orfani quando le si cancella.
- Database RDS e di Lightsail, che di solito sono l'oggetto più caro che una persona crea.
- Istantanee, per GB al mese finché esistono.
- Bucket S3: spazio e, soprattutto, quello che se ne scarica.
- IP riservati e non associati.
Quello che all'inizio non serve contare: trasferimento dati, log di CloudWatch, interrogazioni DNS. Sono piccoli e difficili da attribuire. Concentrati su quello che si crea con un pulsante e si dimentica.
Una trappola: Budgets conta la spesa accumulata nel mese. Quello che qualcuno ha creato il giorno 2 e cancellato il giorno 3 continua a sommarsi anche se l'oggetto non esiste più.
Quello che AWS non può fare
Conviene essere onesti sui limiti di questo montaggio:
- Budgets avvisa, non blocca. Esistono le "azioni di budget" che applicano una policy di negazione al superamento di una soglia, ma sono grossolane e arrivano tardi: la spesa è già fatta.
- I tag dipendono dal fatto che la gente li metta. La policy IAM obbliga in EC2 e RDS, ma non tutti i servizi permettono di taggare al momento della creazione, e le istantanee automatiche non ereditano il tag del disco.
- Lightsail tagga, ma la sua console non obbliga, e quello che è stato creato prima di attivare il tag di costo non viene contato.
- Costa fatica mantenerlo: ogni persona nuova è un budget, un valore di tag e una revisione; ogni persona che se ne va, pulire le sue cose.
Anche così, è molto meglio di niente.
Cosa può andare storto
Il budget non mostra nessuna spesa
Quasi sempre è che il tag non è attivato come tag di allocazione dei costi, o che l'hai attivato da meno di un giorno. Controllalo in Billing. E ricorda che conta solo dall'attivazione: la spesa delle macchine taggate la settimana scorsa non compare retroattivamente.
C'è molta spesa "No tag"
È normale il primo mese. Raggruppa in Cost Explorer per servizio dentro "No tag" per vedere cos'è: di solito sono macchine vecchie, dischi orfani e istantanee. Taggali (in EC2 puoi selezionarne diversi e aggiungere i tag tutti insieme) o cancellali. Se la spesa senza tag è di produzione condivisa, dagli il tag Propietario = compartido e basta.
Qualcuno non riesce a creare una macchina
La policy di negazione funziona: sta cercando di creare senza tag o con una taglia non permessa. Nella console, l'errore dice "not authorized ... with an explicit deny". Deve aggiungere il tag nel passo di creazione (sezione Tags della procedura guidata di EC2) o scegliere una taglia dall'elenco. Se ha davvero bisogno di qualcosa di più grande, la aggiungi all'elenco della policy.
Le istantanee automatiche non hanno il tag
Le istantanee create da AWS Backup o da Data Lifecycle Manager ereditano i tag se lo configuri nella regola; quelle automatiche di Lightsail non si possono taggare. Conta quella spesa come condivisa o calcola a parte quanto pesano (sono facili da vedere in fattura, come "snapshot").
In Simplio
In Simplio il budget per utente è una casella nella scheda di ogni persona: una cifra al mese. Tutto quello che quella persona crea da Simplio (macchine, database, istantanee, bucket) viene registrato a suo nome con il costo approssimativo e, se lo cancella nello stesso mese, le viene scalato. Ogni utente vede quanto ha speso e quanto gli resta prima di creare qualcosa, e riceve un avviso via email quando si avvicina al tetto; l'amministratore vede tutte le persone nella schermata Costi. Non serve taggare, attivare nulla in Billing né scrivere policy.
Combinato con i permessi per utente e per oggetto (chi può creare, chi può solo vedere, chi può cancellare cosa) e con il registro delle attività, sai in ogni momento chi ha creato ogni cosa e quando.
La stessa cosa, in AWS e in Simplio
| Nella console di AWS | In Simplio | |
|---|---|---|
| Dare un tetto mensile a ogni persona | Tag obbligatorio, attivarlo in Billing, un budget per persona, policy IAM: 6 passi e manutenzione | Una cifra nella scheda di ogni utente |
| Sapere cosa ha creato ciascuno | Cost Explorer per tag, solo ciò che è taggato e da quando è stato attivato | Quello che si crea da Simplio viene registrato a chi lo ha creato, con il costo approssimativo |
| Impedire che si crei di troppo | Policy di negazione per taglia di macchina | Permessi per utente e per oggetto, e avviso quando ci si avvicina al budget |