[PYTHON] Beschreibe ec2 mit boto3 und rufe den Wert ab

Ich bin Wakamatsu, ein Anfänger von Lambda (Python).

Benutzt ihr plötzlich alle Lambda?

Der Code funktioniert ohne Server. Es ist attraktiv, nicht wahr?

Immerhin sind die Zeiten serverlos. Ich möchte in der Lage sein, ungefähr eine Sprache in der Infrastruktur zu verwenden.

Mitten in einer großzügigen Generation, die einem solchen Trend nicht widerspricht, trat ich schließlich in Lambda ein.

Die Einführung ist länger geworden, aber ich hoffe, dass der Infrastruktur-Shop mit dem Gefühl, dass sie kämpfen und Witze machen, warm aussehen wird.

Was du machen willst

Ich möchte die Instanz-ID einer Instanz abrufen, die eine bestimmte IP hat.

Umgebung

AWS Lambda Python 3.6

Erste Form

Code

Vorerst habe ich mich entschlossen, alle Instanzinformationen abzurufen, also habe ich den folgenden Code geschrieben.

import boto3

def lambda_handler(event, context):

    ec2 = boto3.client('ec2')
    
    responce = ec2.describe_instances()

    return responce

Ergebnis

Die Rückgabe schlägt mit dem folgenden Fehler fehl

{
  "errorMessage": "An error occurred during JSON serialization of response",
  "errorType": "datetime.datetime(2017, 5, 11, 5, 15, 59, tzinfo=tzlocal()) is not JSON serializable"
}

Es scheint, dass das Ergebnis nicht so wie es ist als JSON behandelt werden kann.

Umfrage

Wenn ich die boto3-Referenz aufrufe, scheint der Rückgabewert von description_instances vom Typ dict (dictionary) zu sein. Vorerst ist es besser, mit Druck auszugeben, deshalb habe ich beschlossen, den Code zu ändern.

Zweite Form

Code

Ändern Sie die Ausgabe vorerst in eine Druckanweisung

import boto3

def lambda_handler(event, context):

    ec2 = boto3.client('ec2')
    
    responce = ec2.describe_instances()

    print(responce)

    return

Ergebnis

Folgendes wurde in das Protokoll ausgegeben. Das sehen Sie häufig in den AWS CLI-Ergebnissen.

{
    "Reservations": [
        {
            "OwnerId": "xxxxxxxxxxxx", 
            "ReservationId": "r-xxxxxxxxxxxxxxxxx", 
            "Groups": [], 
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    }, 
                    "PublicDnsName": "ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com", 
                    "Platform": "xxxxxxx", 
                    "State": {
                        "Code": 80, 
                        "Name": "stopped"
                    }, 
                    "EbsOptimized": false, 
                    "LaunchTime": "xxxx-xx-xxxxx:xx:xx.xxxx", 
                    "PublicIpAddress": "xxx.xxx.xxx.xxx", 
                    "PrivateIpAddress": "xxx.xxx.xxx.xxx", 
                    "ProductCodes": [], 
                    "VpcId": "vpc-xxxxxxx", 
                    "StateTransitionReason": "", 
                    "InstanceId": "i-xxxxxxxxxxxxxxxxx", 
                    "EnaSupport": true, 
                    "ImageId": "ami-xxxxxxxx", 
Folgendes wird weggelassen

Umfrage

Als nächstes möchte ich nach IP eingrenzen. Es scheint, dass --filter in AWS CLI auch in boto3 enthalten ist, daher habe ich mich für die Verwendung entschieden.

Dritte Form

Code

Filter hinzugefügt, um auf Instanzen mit einer bestimmten IP einzugrenzen

import boto3

def lambda_handler(event, context):

    ec2 = boto3.client('ec2')
    
    responce = ec2.describe_instances(
        Filters=[{'Name':'network-interface.addresses.private-ip-address','Values':["xxx.xxx.xxx.xxx"]}]
    )

    print(responce)

    return

Ergebnis

Eingeschränkt auf Instanzen mit der angegebenen IP-Adresse.

Umfrage

Grenzen Sie als Nächstes den Rückgabewert auf die Instanz-ID ein. Das Bild ist "--query" in AWS CLI, aber es scheint nicht in boto3 zu sein. Es fiel mir schwer, weil ich von den Informationen im Internet getanzt wurde, weil ich hier zu JSON konvertierte. Als Ergebnis stellte ich fest, dass der Diktattyp in der Lage zu sein scheint, den Wert durch Schreiben von ["hoge"] ["fuga"] nach dem Objekt abzurufen.

Finale Form

Code

import boto3

def lambda_handler(event, context):

    ec2 = boto3.client('ec2')
    
    responce = ec2.describe_instances(
        Filters=[{'Name':'network-interface.addresses.private-ip-address','Values':["xxx.xxx.xxx.xxx"]}]
    )["Reservations"][0]["Instances"][0]["InstanceId"]

    print(responce)

    return

Ergebnis

Herzlichen Glückwunsch zum Erhalt der Instanz-ID. Ich möchte darauf hinweisen, dass es notwendig ist, 0 explizit als "[0]" zu schreiben, wenn es eine Liste gibt.

Zusammenfassung

Was haben Sie gedacht. Der Inhalt, den ich mache, ist sehr rudimentär, aber ich war süchtig danach, also habe ich ihn als Memorandum zusammengefasst.

Es ist überraschend leicht zu bewegen, also probieren Sie es bitte aus. Lambda Ich habe keine Angst.

Recommended Posts

Beschreibe ec2 mit boto3 und rufe den Wert ab
Extrahieren Sie den Maximalwert mit Pandas und ändern Sie diesen Wert
Lesen Sie das Tag, das Ihnen in ec2 mit boto3 zugewiesen wurde
Extrahieren Sie den Maximalwert mit Pandas.
Speichern und Abrufen von Dateien mit Pepper
Pandas mit subtilen Veränderungen in der Anzahl und wie man damit umgeht
Verwenden Sie Jupyter Lab und Jupyter Notebook mit EC2
Finden Sie den SHA256-Wert mit R (mit Bonus)
Verwenden Sie numpys .flatten () [0], um den Wert abzurufen
Füllen Sie den fehlenden Wert (null) von DataFrame mit den Werten davor und danach mit pyspark
[Python-Tipps] So rufen Sie mehrere Schlüssel mit dem Maximalwert aus dem Wörterbuch ab
Schaben Sie den Holojour ab und zeigen Sie ihn in der CLI an
Finden Sie den Stimmungswert mit Python (Rike Koi)
Verwalten Sie AWS mit der Python-Bibliothek Boto
Lösen des Lorenz 96-Modells mit Julia und Python
Archivieren und komprimieren Sie das gesamte Verzeichnis mit Python
Beschreiben Sie das mehrstufige SSH-Ziel in der Konfiguration, melden Sie sich einfach an und kopieren Sie die Datei mit scp
Lassen Sie uns die Matrix transponieren und die Matrizen mit numpy multiplizieren.
So rufen Sie den n-ten größten Wert in Python ab
Code-Server-Online-Umgebung (3) Starten Sie eine EC2-Instanz mit Boto3
Erstellen Sie Amazon Linux mit AWS EC2 und melden Sie sich an
Bearbeiten Sie S3-Objekte mit Boto3 (High-Level-API und Low-Level-API)
[Boto3] Suchen Sie mit der List Users API nach Cognito-Benutzern
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Extrahieren Sie Dateien mit dem Befehl scp aus dem EC2-Speicher
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Installieren Sie die neueste stabile Version von Python mit pyenv (sowohl 2 als auch 3).
Installieren Sie Ubuntu 20.04 mit GUI und bereiten Sie die Entwicklungsumgebung vor
POST das Bild mit json und erhalte es mit der Flasche
[Django 2.2] Sortieren und erhalten Sie den Wert des Beziehungsziels
Erstellen Sie AWS EC2 und RDS mit Terraform Terraform 3 Minuten Garzeit
Verwenden Sie mit boto3 etwas anderes als das Standardprofil
Rufen Sie die C-Funktion mit dart: ffi auf und rufen Sie die Dart-Funktion zurück