[PYTHON] [AWS] Beurteilen Sie die Existenz von Next Token und nehmen Sie alle Werte [boto3]

Guten Morgen Anderson Dies ist mein Memorandum. Speichern Sie es

Der Anfang der Sache

In AWS Lambda gab es ein Skript, das sich mit EC2-Instanzinformationen (description_instances) befasst. Mir ist aufgefallen, dass ich nicht alle Instanz-IDs erhalten habe. Ja, boto3 verfügt über eine API namens NextToken, die eine Obergrenze für die gleichzeitige Erfassung aufweist.

was ist das

Bitte lesen Sie das boto3-Dokument ... es wird nichts tun ... Siehe hier als Beispiel https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_instances

EC2 description_instances API Antwort-Syntax zurückgeben

'string'


 Es sollte einen Wert geben.

 Wie viele Werte können gleichzeitig genommen werden? ich bin neugierig
 ** Vielleicht ungefähr 50? ** Vielleicht hängt es von der API ab. Wenn der Wert von MaxResults die Obergrenze ist, beträgt description_instances bis zu 1000.
 Wie auch immer, der Schlüssel wie Next Token ist das Symbol für "Holen Sie es von hier als nächstes".

 Zur Zeit habe ich ein Skript bekommen, das alle Fälle aufnehmen kann.
 Fragen Sie den Support oder lesen Sie die Dokumentation für Details (schrecklich)

 Was! ?? Diese Side-Dressing-Sache! Gib mir das Ergebnis! ??
 Verstehen.

# Beispiel für ein Skriptbeispiel
```python
NextToken = None
while True:
    if NextToken is None:
        ec2_var = ec2_cli.describe_instances()
    else:
        ec2_var = ec2_cli.describe_instances(NextToken=NextToken)
    
    #Rufen Sie den erforderlichen Wert aus dem EC2-Rückgabewert (JSON) ab.
    for Reservations in ec2_var['Reservations']:
        for instances in Reservations['Instances']:
            #Hostname (Tag/Name) Extraktion
            ec2_list_nametag.append(instances['Tags'][0]['Value'])
            #Extraktion der Hostinstanz-ID
            ec2_list_id.append(str(instances['InstanceId']))
            #Extraktion von Host-Platzierungs-AZ-Informationen
            ec2_list_az.append(instances['Placement']['AvailabilityZone'])
            #Extraktion des Hoststatus
            ec2_list_status.append(instances['State']['Name'])
    
    if not 'NextToken' in ec2_var:
        break
    NextToken = ec2_var['NextToken']
else:
    print(NextToken)

#Kombinieren Sie die Werte in der extrahierten EC2-Liste
ec2_list = [ec2_list_nametag,ec2_list_id,ec2_list_az,ec2_list_status]

#(Beispiel) AZ-Holen Sie sich den Host, in dem Sie sich befinden.
for i in ec2_list[0]:
    if 'hoge' in i:
        num =ec2_list[0].index(i)
        if ec2_list[2][num] == 'ap-northeast-1a':
            hostname = str(i)

#(Beispiel) Überprüfen des Status Ihres Ziels.
if hostname in != '': #Lass es uns tun, wenn du danach suchst
    for i in ec2_list[0]:
        if hostname in i:
            num =ec2_list[0].index(i)
                host_status = str(ec2_list[3][num])
else:
    print('Sieht es nicht so aus, als hättest du keine Adresse?')

Ergebnis

Mit dem obigen Skript konnten wir alle Instanzinformationen in einer Variablen speichern. Graben Sie dann die erforderlichen Werte im internen für aus und erstellen Sie eine Liste. Aufgrund eines lächerlichen Spielzeugs namens EMR kann EC2, selbst wenn es einige Male ausgeführt wird, schnell genommen werden.

Ergänzung

Ich verwende ein mehrdimensionales Array, aber mit diesem kann ich auf verschiedene Weise aus der gesamten Menge eines Arrays graben. Was möchten Sie sagen? Wenn Sie auf die API klicken und gute Laune haben, wird dies zu einer Drosselung führen und die Verarbeitung wird langsam sein. Wenn Sie so etwas wie einen Wiederholungsvorgang hinzufügen möchten, ist es einfacher, ihn zuerst mit einem Schuss auszuführen, nicht wahr? Das ist die Theorie. Wow das Wenn Sie also den gleichen Rückgabewert mit for von oben verfolgen, ist die Reihenfolge dieselbe, oder? Das ist die Theorie. Wow das Ist es leicht zu erkennen, dass ich die Einschlussartnotation nicht verwendet habe? Es ist meine eigene Sorge, dass jeder es verstehen kann. Möglicherweise werden Sie gebeten, über die Speichernutzung von Variablen nachzudenken. Wenn Sie diese jedoch unter AWS Lambda ausführen, sollten Sie sich ein wenig Sorgen machen. Speichermenge.

Das ist es.

Recommended Posts

[AWS] Beurteilen Sie die Existenz von Next Token und nehmen Sie alle Werte [boto3]
[AWS S3] Bestätigung des Vorhandenseins von Ordnern in S3
Denken Sie an das Rack und WSGI der nächsten Generation
So erhalten Sie alle Schlüssel und Werte im Wörterbuch