Come taggare e denominare l'istanza EC2 che è stata lanciata da una richiesta Spot EC2?


8

Ho un paio di richieste Spot EC2 che avviano istanze EC2 quando il prezzo è giusto. Vorrei che le istanze risultanti fossero taggate con un Namee Roletag in modo che il mio strumento di gestione della configurazione sappia che tipo di macchina è.

AGGIORNAMENTO :

Ho seguito il consiglio di Hyper Anthony e l'ho implementato: poiché il polling sarebbe stato soggetto a errori e dispendioso in termini di risorse, ho aggiunto uno script di avvio alla mia AMI che aggiorna i tag all'avvio di un'istanza, questi sono i passaggi che ho intrapreso:

Assicurati che Boto sia installato su qualsiasi AMI che stai utilizzando

pip install boto

Assegnare un ruolo IAM all'istanza EC2

L'istanza che stai avviando deve avere un modo per accedere alle informazioni sulla richiesta spot. Utilizzare un ruolo IAM o in alternativa rendere disponibili le chiavi di accesso all'istanza. La politica che ho allegato al ruolo IAM che ho usato è:

{
    "Statement": [
        {
            "Action": [
                "ec2:CreateTags",
                "ec2:DescribeTags",
                "ec2:DescribeInstances"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ],
            "Sid": "Stmt1432737176000"
        }
    ],
    "Version": "2012-10-17"
}

Esegui uno script all'avvio per aggiornare i tag

def get_tags_from_spot_request():

    instance_id = boto.utils.get_instance_identity()['document']['instanceId']
    region = boto.utils.get_instance_identity()['document']['region']
    conn = boto.ec2.connect_to_region(region)
    inst = boto.ec2.instance.Instance(connection=conn)
    inst.id = instance_id
    inst.update()
    spot_id = inst.spot_instance_request_id
    tags = conn.get_all_tags(filters={'resource-type': 'spot-instances-request', 'resource-id': spot_id})
    for tag in tags:
        inst.add_tag(tag.name, tag.value)

Risposte:


10

Le richieste di istanze spot sono un tipo di risorsa EC2. La documentazione di AWS osserva che questo tipo di risorsa può essere taggato , ma i tag risultanti non vengono riportati alle istanze effettive:

I tag creati per le richieste dell'istanza Spot si applicano solo alle richieste. Questi tag non vengono aggiunti automaticamente all'istanza Spot avviata dal servizio Spot per soddisfare la richiesta. È necessario aggiungere personalmente tag a un'istanza Spot quando si crea la richiesta dell'istanza Spot o dopo l'avvio dell'istanza Spot.

Quindi dovrai aggiungere i tag dopo l'avvio delle istanze. Hai alcune opzioni qui:

  • Script dati utente sull'istanza creata: scrivere uno script dati utente che utilizza gli strumenti della riga di comando e il servizio metadati EC2 per consentire all'istanza di scoprire il proprio ID istanza e creare tag per sé. Puoi utilizzare i tag di creazione della CLI AWS per taggare le tue risorse EC2. In alternativa, è possibile inserirlo nell'AMI come script di avvio per qualsiasi sistema operativo che si intende utilizzare. In entrambe le situazioni, l'istanza dovrà disporre di autorizzazioni sufficienti per creare tag EC2 per sé.
  • Utility esterna che monitora la tua richiesta spot: puoi utilizzare uno degli SDK AWS per monitorare la tua richiesta spot e taggare le istanze una volta che sono state create. AWS ha un tutorial proprio su questo argomento sotto l'intestazione "Come contrassegnare le richieste e le istanze Spot". Senza essere troppo prolisso, ciò implica semplicemente il polling Descrivi richieste istanze Spot fino a quando non è disponibile un ID istanza creato e quindi chiama Crea tag .


1

Un'altra possibilità è utilizzare Ansible come strumento di gestione della configurazione. Nel modulo ec2, che consente di avviare istanze spot e normali del ciclo di vita, è possibile aggiungere gli attributi "istanza_tag" per creare i tag. Un semplice playbook sarebbe:


  - name: Provision Spot Instance
    hosts: localhost
    connection: local
    gather_facts: False
    tasks:
      - name: Launch the new Spot Instance
        local_action:
          module: ec2
          spot_price: 0.02
          group: testSG
          instance_type: m3.medium
          image: ami-12345
          wait: true
          instance_tags:
            Name: TagValueForName
            Foo: TagValueForFoo
          region: us-east-1
          keypair: mykeypair

È interessante notare che la mia lamentela è che contrassegna solo l'istanza e non contrassegna la richiesta spot, l'opposto del problema.


Se questa richiesta di risposta è scaduta. La richiesta spot vive all'interno di AWS, ma cosa succede se ansible non è più attivo per taggare l'istanza una volta attiva? A seconda di come il resto del playbook gestisce istanze senza tag, potrebbe portare a istanze "zombi"?
t1m0,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.