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