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.
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
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.
[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.
{
"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