import json import cfnresponse import boto3 from botocore.exceptions import ClientError import time

def getEnvironmentName(client,stackName):

time.sleep(5)
max_retries = 5
sleep_time = 1
for i in range(max_retries):
    try:
        response = client.describe_stacks(StackName=stackName)
    except ClientError as e:
        print e
        time.sleep(sleep_time)
        sleep_time += sleep_time
        continue
    else:
        break
else:
    return stackName
if 'Parameters' in response['Stacks'][0]:
    for r in response['Stacks'][0]['Parameters']:
        if r['ParameterKey'] == 'EnvironmentName':
            return r['ParameterValue']
    return stackName
else:
    return stackName

def handler(event, context):

stackName = event['ResourceProperties']['StackName']
region = event['ResourceProperties']['Region']
client = boto3.client('cloudformation',region_name=region)

responseData = {}
responseData['EnvironmentName'] = getEnvironmentName(client,stackName)
cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID")