#*** A sample Lambda function that posts Instance status, InstandID and private IPv address to an SQS queue ***. #!/usr/bin/python # -*- coding: utf-8 -*- import boto3 import os import json import logging from botocore.exceptions import ClientError import datetime import sys # Set the log format logger = logging.getLogger() for h in logger.handlers: logger.removeHandler(h) h = logging.StreamHandler(sys.stdout) FORMAT = ' [%(levelname)s]/%(asctime)s/%(name)s - %(message)s' h.setFormatter(logging.Formatter(FORMAT)) logger.addHandler(h) logger.setLevel(logging.INFO) INSTANCE_AD_TAG = os.getenv("INSTANCE_AD_TAG") INSTANCE_TAG_VALUE = os.getenv("INSTANCE_TAG_VALUE") def lambda_handler(event, context): print(event) ec2_client = boto3.client('ec2') instance_id = event['detail']['instance-id'] instance_state = event['detail']['state'] print(instance_id) print(instance_state) var = ec2_client.describe_instances(Filters=[{'Name': 'tag:JoinAD','Values': [INSTANCE_TAG_VALUE]}, {'Name': 'instance-id','Values': [instance_id]}]).get('Reservations', '') testcount = sum([[i for i in r['Instances']] for r in var], []) if format(len(testcount)) == '1': if instance_state == 'terminated': privateIP = 'none' else: privateIP = var[0]['Instances'][0]['PrivateIpAddress'] print(privateIP) data = {} data['instanceId'] = instance_id data['privateIp'] = privateIP data['instance_state'] = instance_state json_data = json.dumps(data) print(json_data) QUEUE_NAME = os.getenv("QUEUE_NAME") SQS = boto3.client("sqs") q = SQS.get_queue_url(QueueName=QUEUE_NAME).get('QueueUrl') print(q) resp = SQS.send_message(QueueUrl=q, MessageBody=json_data) else: print('no result, check request parameters')