Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Tag automatici per istanze e volumi AWS EC2

By Avi KeinanMar 17, 20214 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Allocare la spesa AWS applicando tag automatici ai workloads EC2

Le istanze "John Doe"

Quando si analizza l'utilizzo di AWS EC2, può capitare di trovare istanze o volumi privi di nome o, peggio ancora, con un nome poco chiaro. Queste risorse possono rivelarsi un puro spreco di denaro oppure essere fondamentali per i workloads di produzione.

Istanza m3.2xlarge "DO NOT DELETE" in us-east-1 dal costo di 388 $/mese

Le istanze potrebbero risalire a diversi anni fa, senza che nessuno in azienda disponga di informazioni o delle credenziali necessarie per connettersi.

Per ovviare a questo problema, le aziende adottano policy di tagging in base alle quali ogni istanza provisionata deve disporre di un tag Name/Owner/Project/ecc.

L'applicazione di tag a istanze e volumi EC2 non comporta alcun costo aggiuntivo…

…tuttavia, dato che le istanze vengono avviate manualmente o tramite script di automazione, il processo è soggetto a errori.

Per evitare questi scenari, ho sviluppato una soluzione per AWS (e una analoga per Google Cloud) che applica automaticamente alle istanze il tag Owner e ai volumi i tag Owner e AttachedInstance.

In questo modo, in futuro, chiunque si imbatta in un'istanza o in un volume di cui non conosce lo scopo potrà risalire più facilmente a chi l'ha configurato.

**Come funziona il tagging automatico?**

  1. L'utente crea un'istanza AWS EC2.
  2. AWS CloudTrail traccia le chiamate API e invoca AWS EventBridge.
  3. AWS EventBridge attiva la funzione Lambda.
  4. AWS Lambda applica i tag all'istanza e ai relativi volumi.

Una volta attivata con le informazioni di avvio dell'istanza, la funzione AWS Lambda applica all'istanza il tag Owner, che conterrà uno dei seguenti valori:

  1. Utente IAM
  2. Assume Role (ad esempio AutoScaling Role, utente SSO, ecc.).
  3. Utente Root

Pagina delle istanze, tag in fondo

Nella fase successiva, Lambda applica a tutti i volumi dell'istanza i tag 'Owner' e 'AttachedInstance'. Il tag 'Owner' contiene le stesse informazioni del tag 'Owner' dell'istanza, mentre il tag 'AttachedInstance' riporta l'instance-id e il nome dell'istanza, se disponibile.

Pagina dei volumi, tag in fondo

Come implementarla:

  1. Vada alla pagina di CloudTrail e clicchi su "Create trail".

2. Assegni un nome al trail.

3. Scorra verso il basso e imposti un nome per il bucket S3 di CloudTrail. Poi clicchi su Create.

4. Vada al dashboard di Lambda e clicchi su "Create function".

5. Assegni un nome alla funzione, selezioni "Python 3.8" nel menu a tendina Runtime e clicchi su "Create Function".

6. Incolli il codice dal repository GitHub e clicchi su "Save".

7. Scorra fino al riquadro "Basic settings" e clicchi sul pulsante Edit.

Aumenti quindi il timeout della funzione Lambda a 1 minuto.

Infine, clicchi sul pulsante Save.

8. Torni in alto e clicchi su Permissions. Poi clicchi sul nome del Role.

9. Clicchi sul pulsante "Add inline policy".

10. Clicchi sul pulsante JSON, incolli la seguente policy IAM e clicchi su Review policy.

{
    "Version": "2012-10-17",
    "Statement": [\
        {\
            "Sid": "VisualEditor0",\
            "Effect": "Allow",\
            "Action": "ec2:CreateTags",\
            "Resource": [\
                "arn:aws:ec2:*:*:instance/*",\
                "arn:aws:ec2:*:*:volume/*"\
            ]\
        },\
        {\
            "Sid": "VisualEditor1",\
            "Effect": "Allow",\
            "Action": [\
                "ec2:DescribeInstances",\
                "ec2:DescribeVolumes"\
            ],\
            "Resource": "*"\
        }\
    ]
}

Questa policy consente alla funzione Lambda di rilevare i volumi dell'istanza e di applicare i tag sia all'istanza sia ai relativi volumi.

11. Assegni un nome alla policy e clicchi su Create policy.

12. Torni alla scheda Lambda nel browser e clicchi su "Add trigger".

13. Clicchi su "Select a trigger", cerchi EventBridge, quindi clicchi su "Create a new rule" nel menu a tendina Rule.

Assegni un nome e una descrizione alla regola.

Sotto "Rule type", selezioni il radio button Event pattern.

Nel primo menu a tendina, scelga EC2, e nel secondo selezioni AWS API call via CloudTrail.

14. Scorra verso il basso, spunti la casella Operation e, sotto Operation, digiti RunInstances. Poi clicchi sul pulsante Add per creare il trigger dell'evento.

15. Infine, avvii una nuova istanza di test per verificare che tutto funzioni correttamente.

Dopo qualche secondo, la funzione Lambda appena implementata applicherà automaticamente i tag all'istanza e ai relativi volumi.

Aggiorni la pagina e controlli i tag dell'istanza.

Note:

  1. Questa soluzione applica i tag esclusivamente alle istanze create dopo l'installazione della funzione Lambda.
  2. Se ha appena attivato il trail di CloudTrail, può essere necessaria fino a un'ora prima che EventBridge inizi a invocare la funzione.
  3. La dimensione della risposta di CloudTrail è limitata a 500Kb. Se avvia un numero elevato di istanze con un'unica chiamata API, la funzione Lambda non sarà in grado di applicare i tag a tutte le istanze.
  4. AWS EventBridge è una risorsa regionale. Se opera su più regioni, dovrà distribuire la soluzione in ciascuna regione AWS.