[AWS] Faites-vous des amis avec l'entrée JSON de Lambda (version Python)

Vous devez vous entendre avec JSON pour obtenir des informations sur l'événement qui a déclenché Lambda. Cette fois, nous verrons comment faire passer les informations à Lambda.


Entrez JSON

Tous les messages JSON transmis à Lambda sont stockés dans event. La fonction Lambda par défaut est correcte

sample


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

C'est pourquoi quelque chose est écrit. Event est également spécifié correctement dans l'entrée de la fonction principale.


De base

De base


event['Nom de l'élément'][Numéro d'élément de tableau]

C'est la forme de base. Vous pouvez obtenir la "valeur" en spécifiant le type de dictionnaire "clé". De plus, s'il s'agit d'un tableau, vous pouvez obtenir les éléments du tableau en spécifiant le "numéro d'élément" de ce tableau.


entraine toi

[AWS] Pour gérer JSON avec les bases de aws-cli-jq- [AWS] Pour gérer JSON avec les bases de aws-cli-jq ②- ← Sera téléchargé au début de la semaine prochaine Pratiquons-nous en prenant les informations d'instance utilisées plusieurs fois dans.

Supposons que ce JSON soit stocké dans event. (Je vais le mettre en bas pour le moment)

Si vous souhaitez obtenir l'ID d'instance de l'instance actuellement existante

Obtenir l'identifiant de l'instance


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

Ça ressemble à ça. Notez le "n" dans le second []. Cela signifie qu'autant d'informations d'instance qu'il y a d'instances sont stockées dans le tableau Reservations. En d'autres termes, si vous souhaitez examiner toutes les instances, vous pouvez facilement le faire en utilisant une instruction for ou quelque chose.

Une fonction qui obtient un identifiant d'instance et vérifie si elle correspond à un identifiant spécifique


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
		

Si vous écrivez dans une telle atmosphère, vous pouvez la déplacer. Quoi qu'il en soit, grattez les valeurs nécessaires et stockez-les dans des variables. Utilisez-le d'une manière ou d'une autre! Je pense qu'il existe de nombreux scénarios.


__ Récemment, j'ai collaboré avec sts pour examiner les informations d'instance sous tous les comptes du consolidateur et créer une tâche coolon qui m'informe avec slack lorsqu'une instance répond à des conditions spécifiques. Je le fait. __ Si le nombre de comptes et le nombre d'instances sont importants, le délai expirera, vous devez donc réfléchir attentivement à ce qu'il faut faire à ce sujet, mais si vous utilisez JSON avec Lambda, vous pouvez l'utiliser comme ça pour le moment.


Exemple de 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] Faites-vous des amis avec l'entrée JSON de Lambda (version Python)
Convertir JSON en CSV avec Python de Splunk
[Python] Utiliser JSON avec Python
Vérifier la version avec python
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
POST json avec le script Python 3
Créez Puyopuyo AI avec Python
Faites une loterie avec Python
Spécifiez la version python avec virtualenv
Formater json avec Vim (avec python)
Lire des données json avec python
[Python] Transformez les ressources AWS simulées avec Moto en appareils Pytest
Créez un bot LINE avec Python + heroku
Représentation matricielle avec entrée standard Python
Faisons une interface graphique avec python.
Extraction de texte avec AWS Textract (Python3.6)
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Encodage et décodage JSON avec python
Créer un système de recommandation avec python
Créez une application de scraping avec Python + Django + AWS et modifiez les tâches
Gérez chaque version de Python avec Homebrew
Faisons un graphe avec python! !!
Notifier HipChat avec AWS Lambda (Python)
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
[AWS SAM] Présentation de la version Python
[AWS] [GCP] J'ai essayé de rendre les services cloud faciles à utiliser avec Python
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Entrée / sortie de données en Python (CSV, JSON)
Convertir des données Excel en JSON avec python
Fractal pour faire et jouer avec Python
Faisons la voix lentement avec Python
Je veux jouer avec aws avec python
Facilitez la soumission de pypy avec atcoder-cli (python)
Lire et écrire des fichiers JSON avec Python
[Python] Rendons matplotlib compatible avec le japonais
Connectez-vous à s3 avec AWS Lambda Python
Créez un framework Web avec Python! (1)
Créez une application de bureau avec Python avec Electron
Faisons un bot Twitter avec Python!
Créez un framework Web avec Python! (2)
Touchez AWS avec Serverless Framework et Python
Python #JSON
Pyinstaller transforme les scripts Python en .exes qui peuvent être exécutés sous Windows
[Version 2020] Comment installer Python3 sur EC2 d'AWS
Créer un bot Twitter Trend avec heroku + Python
Lire JSON avec Python et générer un CSV
Je veux faire un jeu avec Python
Gérez l'environnement de plusieurs versions de Python avec Pythonz, virtualenv
Essayez de créer un code de "décryptage" en Python
LINE BOT avec Python + AWS Lambda + API Gateway
Créez rapidement votre propre module avec setuptools (python)
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
[Rust / Python] Gérer numpy avec PyO3 (version d'août 2020)
[Version améliorée] Script pour surveiller le CPU avec Python
Gérez bien AWS avec la bibliothèque Python Boto