[AWS] Freunde dich mit Lambdas JSON-Eingabe an (Python-Version)

Sie müssen mit JSON auskommen, um Informationen über das Ereignis zu erhalten, das Lambda ausgelöst hat. Dieses Mal werden wir uns ansehen, wie die Informationen an Lambda weitergegeben werden.


Geben Sie JSON ein

Alle an Lambda übergebenen JSON-Nachrichten werden in event gespeichert. Die Standard-Lambda-Funktion ist in Ordnung

sample


def lambda_handler(event, context):
	message = event["Message"][0]["hoge"]
	
	

Deshalb wird etwas geschrieben. Event wird auch in der Eingabe der Hauptfunktion korrekt angegeben.


Basic

Basic


event['Elementname'][Array-Elementnummer]

Dies ist die Grundform. Sie können den "Wert" erhalten, indem Sie den Wörterbuchtyp "Schlüssel" angeben. Wenn es sich um ein Array handelt, können Sie die Elemente des Arrays abrufen, indem Sie die "Elementnummer" dieses Arrays angeben.


trainieren

[AWS] Um JSON mit aws-cli-jq-Grundlagen zu behandeln- [AWS] Um JSON mit den Grundlagen von aws-cli-jq zu behandeln ②- ← Wird Anfang nächster Woche hochgeladen Lassen Sie uns üben, indem wir die Instanzinformationen verwenden, die oft verwendet wurden.

Angenommen, dieser JSON wird im Ereignis gespeichert. (Ich werde es vorerst ganz unten platzieren)

Wenn Sie die Instanz-ID der aktuell vorhandenen Instanz abrufen möchten

Instanz-ID abrufen


InstanceId = event['Reservations'][n]['Instances']['InstanceId']

Es sieht aus wie das. Beachten Sie das "n" im zweiten []. Dies bedeutet, dass so viele Instanzinformationen wie Instanzen im Reservierungsarray gespeichert sind. Mit anderen Worten, wenn Sie alle Instanzen überprüfen möchten, können Sie dies einfach tun, indem Sie eine for-Anweisung oder etwas anderes verwenden.

Eine Funktion, die eine Instanz-ID abruft und prüft, ob sie mit einer bestimmten ID übereinstimmt


TARGET_INSTANE_ID = 'i-********'

def check_instance_id(TARGET_INSTANE_ID): 
	event_msg = event['Reservations']
	count = len(event_msg)
	
	for n in range(0,count):
		InstanceId = event['Reservations'][n]['Instances']['InstanceId']
		if InstanceId == TARGET_INSTANE_ID:
			msg = "OK"
		else:
			msg = "NG"
			
		print(msg)
		
		return msg
		

Wenn Sie in einer solchen Atmosphäre schreiben, können Sie sie verschieben. Schaben Sie auf jeden Fall die erforderlichen Werte ab und speichern Sie sie in Variablen. Verwenden Sie es auf irgendeine Weise! Ich denke, es gibt viele Szenarien.


__ Vor kurzem habe ich mit sts zusammengearbeitet, um die Instanzinformationen unter allen Konsolidierungskonten zu überprüfen und einen Coulomb-Job zu erstellen, der mich mit Slack benachrichtigt, wenn es eine Instanz gibt, die bestimmten Bedingungen entspricht. Ich mache es. __ __ Wenn die Anzahl der Konten und die Anzahl der Instanzen groß sind, tritt eine Zeitüberschreitung auf. Sie müssen also sorgfältig überlegen, was Sie dagegen tun sollen. Wenn Sie jedoch JSON mit Lambda verwenden, können Sie es vorerst so verwenden.


Beispiel JSON

{
    "Reservations": [
        {
            "OwnerId": "************", 
            "ReservationId": "r-********", 
            "Groups": [], 
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    }, 
                    "PublicDnsName": "ec2-*************.ap-northeast-1.compute.amazonaws.com", 
                    "State": {
                        "Code": 16, 
                        "Name": "running"
                    }, 
                    "EbsOptimized": false, 
                    "LaunchTime": "2016-03-08T08:25:51.000Z", 
                    "PublicIpAddress": "************", 
                    "PrivateIpAddress": "172.31.23.149", 
                    "ProductCodes": [], 
                    "VpcId": "vpc-********", 
                    "StateTransitionReason": "", 
                    "InstanceId": "i-********", 
                    "ImageId": "ami-59bdb937", 
                    "PrivateDnsName": "ip-172-31-23-149.ap-northeast-1.compute.internal", 
                    "KeyName": "ec2kye", 
                    "SecurityGroups": [
                        {
                            "GroupName": "launch-wizard-4", 
                            "GroupId": "sg-********"
                        }
                    ], 
                    "ClientToken": "AKWfs123456789", 
                    "SubnetId": "subnet-********", 
                    "InstanceType": "t2.micro", 
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use", 
                            "MacAddress": "06:e4:22:c1:df:c5", 
                            "SourceDestCheck": true, 
                            "VpcId": "vpc-********", 
                            "Description": "", 
                            "Association": {
                                "PublicIp": "*************", 
                                "PublicDnsName": "ec2-*********.ap-northeast-1.compute.amazonaws.com", 
                                "IpOwnerId": "amazon"
                            }, 
                            "NetworkInterfaceId": "eni-********", 
                            "PrivateIpAddresses": [
                                {
                                    "PrivateDnsName": "ip-172-31-23-149.ap-northeast-1.compute.internal", 
                                    "Association": {
                                        "PublicIp": "************", 
                                        "PublicDnsName": "ec2-***********.ap-northeast-1.compute.amazonaws.com", 
                                        "IpOwnerId": "amazon"
                                    }, 
                                    "Primary": true, 
                                    "PrivateIpAddress": "172.31.23.149"
                                }
                            ], 
                            "PrivateDnsName": "ip-172-31-23-149.ap-northeast-1.compute.internal", 
                            "Attachment": {
                                "Status": "attached", 
                                "DeviceIndex": 0, 
                                "DeleteOnTermination": true, 
                                "AttachmentId": "eni-attach-*********", 
                                "AttachTime": "2016-03-08T08:25:51.000Z"
                            }, 
                            "Groups": [
                                {
                                    "GroupName": "launch-wizard-1", 
                                    "GroupId": "sg-*********"
                                }
                            ], 
                            "SubnetId": "subnet-*************", 
                            "OwnerId": "************", 
                            "PrivateIpAddress": "172.31.23.149"
                        }
                    ], 
                    "SourceDestCheck": true, 
                    "Placement": {
                        "Tenancy": "default", 
                        "GroupName": "", 
                        "AvailabilityZone": "ap-northeast-1a"
                    }, 
                    "Hypervisor": "xen", 
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/xvda", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-**********", 
                                "AttachTime": "2016-03-08T08:25:52.000Z"
                            }
                        }
                    ], 
                    "Architecture": "x86_64", 
                    "RootDeviceType": "ebs", 
                    "RootDeviceName": "/dev/xvda", 
                    "VirtualizationType": "hvm", 
                    "AmiLaunchIndex": 0
                }
            ]
        }, 
        {
            "OwnerId": "**************", 
            "ReservationId": "r-**********", 
            "Groups": [], 
            "Instances": [
                {
                    "Monitoring": {
                        "State": "disabled"
                    }, 
                    "PublicDnsName": "", 
                    "Platform": "windows", 
                    "State": {
                        "Code": 80, 
                        "Name": "stopped"
                    }, 
                    "EbsOptimized": false, 
                    "LaunchTime": "2016-02-24T05:53:59.000Z", 
                    "PrivateIpAddress": "172.31.31.197", 
                    "ProductCodes": [], 
                    "VpcId": "vpc-c**********", 
                    "StateTransitionReason": "User initiated (2016-02-24 10:01:43 GMT)", 
                    "InstanceId": "i-**********", 
                    "ImageId": "ami-2044434e", 
                    "PrivateDnsName": "ip-172-31-31-197.ap-northeast-1.compute.internal", 
                    "KeyName": "macpro", 
                    "SecurityGroups": [
                        {
                            "GroupName": "RDP", 
                            "GroupId": "sg-**********"
                        }
                    ], 
                    "ClientToken": "rduVq123456789", 
                    "SubnetId": "subnet-*********", 
                    "InstanceType": "t2.micro", 
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use", 
                            "MacAddress": "06:34:e3:b1:a2:0d", 
                            "SourceDestCheck": true, 
                            "VpcId": "vpc-********", 
                            "Description": "", 
                            "NetworkInterfaceId": "eni-**********", 
                            "PrivateIpAddresses": [
                                {
                                    "PrivateDnsName": "ip-172-31-31-197.ap-northeast-1.compute.internal", 
                                    "Primary": true, 
                                    "PrivateIpAddress": "172.31.31.197"
                                }
                            ], 
                            "PrivateDnsName": "ip-172-31-31-197.ap-northeast-1.compute.internal", 
                            "Attachment": {
                                "Status": "attached", 
                                "DeviceIndex": 0, 
                                "DeleteOnTermination": true, 
                                "AttachmentId": "eni-attach-********", 
                                "AttachTime": "2016-02-24T05:53:59.000Z"
                            }, 
                            "Groups": [
                                {
                                    "GroupName": "RDP", 
                                    "GroupId": "sg-**********"
                                }
                            ], 
                            "SubnetId": "subnet-*********", 
                            "OwnerId": "************", 
                            "PrivateIpAddress": "172.31.31.197"
                        }
                    ], 
                    "SourceDestCheck": true, 
                    "Placement": {
                        "Tenancy": "default", 
                        "GroupName": "", 
                        "AvailabilityZone": "ap-northeast-1a"
                    }, 
                    "Hypervisor": "xen", 
                    "BlockDeviceMappings": [
                        {
                            "DeviceName": "/dev/sda1", 
                            "Ebs": {
                                "Status": "attached", 
                                "DeleteOnTermination": true, 
                                "VolumeId": "vol-**********", 
                                "AttachTime": "2016-02-24T05:54:04.000Z"
                            }
                        }
                    ], 
                    "Architecture": "x86_64", 
                    "StateReason": {
                        "Message": "Client.UserInitiatedShutdown: User initiated shutdown", 
                        "Code": "Client.UserInitiatedShutdown"
                    }, 
                    "RootDeviceName": "/dev/sda1", 
                    "VirtualizationType": "hvm", 
                    "RootDeviceType": "ebs", 
                    "Tags": [
                        {
                            "Value": "test", 
                            "Key": "Name"
                        }
                    ], 
                    "AmiLaunchIndex": 0
                }
            ]
        }
    ]
}

Recommended Posts

[AWS] Freunde dich mit Lambdas JSON-Eingabe an (Python-Version)
Konvertieren Sie JSON mit Python von Splunk in CSV
[Python] Verwenden Sie JSON mit Python
Überprüfen Sie die Version mit Python
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
POST json mit Python 3-Skript
Erstelle Puyopuyo AI mit Python
Machen Sie eine Lotterie mit Python
Geben Sie die Python-Version mit virtualenv an
Formatieren Sie json mit Vim (mit Python)
Lesen von JSON-Daten mit Python
[Python] Machen Sie mit Moto verspottete AWS-Ressourcen zu Pytest-Fixtures
Erstelle einen LINE-Bot mit Python + Heroku
Matrixdarstellung mit Python-Standardeingabe
Lassen Sie uns eine GUI mit Python erstellen.
Textextraktion mit AWS Textract (Python3.6)
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
JSON-Codierung und -Decodierung mit Python
Erstellen Sie ein Empfehlungssystem mit Python
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
Verwalten Sie jede Python-Version mit Homebrew
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
[AWS SAM] Einführung in die Python-Version
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Dateneingabe / -ausgabe in Python (CSV, JSON)
Konvertieren Sie Excel-Daten mit Python in JSON
Fraktal zum Erstellen und Spielen mit Python
Lassen Sie uns mit Python langsam sprechen
Ich möchte mit aws mit Python spielen
Erleichtern Sie die Einreichung von Pypys mit atcoder-cli (Python)
Lesen und Schreiben von JSON-Dateien mit Python
[Python] Lassen Sie uns matplotlib mit Japanisch kompatibel machen
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie eine Desktop-App mit Python mit Electron
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Berühren Sie AWS mit Serverless Framework und Python
Python #JSON
Pyinstaller verwandelt Python-Skripte in EXE-Dateien, die unter Windows ausgeführt werden können
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Machen Sie Twitter Trend Bot mit Heroku + Python
Lesen Sie JSON mit Python und geben Sie CSV aus
Ich möchte ein Spiel mit Python machen
Verwalten Sie die Python-Umgebung mit mehreren Versionen mit Pythonz, virtualenv
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
LINE BOT mit Python + AWS Lambda + API Gateway
Erstellen Sie schnell Ihr eigenes Modul mit setuptools (Python)
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
[Rust / Python] Behandle Numpy mit PyO3 (Version August 2020)
[Verbesserte Version] Skript zur Überwachung der CPU mit Python
Verwalten Sie AWS mit der Python-Bibliothek Boto