From 3f21df5a8b4ad3378f035859cf8f9d2afc08aa32 Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 22 Feb 2022 14:24:54 -0500 Subject: [PATCH 1/3] fix typo --- code/ddns-lambda.py | 281 +++++++++++++++++++++---------------------- code/ddns-lambda.zip | Bin 11680 -> 11678 bytes 2 files changed, 140 insertions(+), 141 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index 76c7559..df64417 100755 --- a/code/ddns-lambda.py +++ b/code/ddns-lambda.py @@ -72,7 +72,7 @@ LOGGER = logging.getLogger() ACCOUNT = None REGION = None -VERSION = '0.1.0' +VERSION = '0.1.1' # Adjust the logging level [logging.INFO, logging.DEBUG, logging.WARNING, etc] LOGGER.setLevel(logging.DEBUG) @@ -141,7 +141,7 @@ def get_caller_account_id(): :return str: AWS Account ID """ try: - return boto3.client('sts').get_caller_identity()['Account']) + return boto3.client('sts').get_caller_identity()['Account'] except ClientError as err: print("Unexpected error: %s" % err) @@ -149,9 +149,9 @@ def get_caller_account_id(): def lambda_handler( event, context, - dynamodb_client = get_dynamodb_client(), - compute = get_ec2_client(), - route53 = get_route53_client() + dynamodb_client=get_dynamodb_client(), + compute=get_ec2_client(), + route53=get_route53_client() ): @@ -171,9 +171,9 @@ def lambda_handler( LOGGER.info("event: %s", str(event) + lineno()) LOGGER.info("context: %s", str(context) + lineno()) - caller_response=[] + caller_response = [] # Checking to make sure there is a dynamodb table named in the Env Variable - tables=list_tables(dynamodb_client) + tables = list_tables(dynamodb_client) LOGGER.info("tables: %s", str(tables)) if DDBNAME in tables['TableNames']: @@ -184,15 +184,15 @@ def lambda_handler( # Set variables # Get the state from the Event stream - state=event['detail']['state'] + state = event['detail']['state'] LOGGER.debug("instance state: %s", str(state) + lineno()) # Get the instance id, region, and tag collection - instance_id=event['detail']['instance-id'] + instance_id = event['detail']['instance-id'] LOGGER.debug("instance id: %s", str(instance_id) + lineno()) - region=event['region'] + region = event['region'] LOGGER.debug("region: %s", str(region) + lineno()) - account_id=get_caller_account_id() + account_id = get_caller_account_id() LOGGER.debug("account_id: %s", str(account_id) + lineno()) # Only doing something if the state is running @@ -200,7 +200,7 @@ def lambda_handler( LOGGER.debug("sleeping for maximum {} seconds {}".format(SLEEPTIME, lineno())) # wait increment and wait until maximum sleeptime - i=1 + i = 1 while i < SLEEPTIME: LOGGER.debug("waiting count: %s", str(i) + lineno()) time.sleep(1) @@ -208,12 +208,12 @@ def lambda_handler( try: # Get instance information - instance=get_instances(compute, instance_id) + instance = get_instances(compute, instance_id) - t_private_ip=instance['Reservations'][0]['Instances'][0]['PrivateIpAddress'] - t_private_dns_name=instance['Reservations'][0]['Instances'][0]['PrivateDnsName'] - t_subnet_id=instance['Reservations'][0]['Instances'][0]['SubnetId'] - t_vpc_id=instance['Reservations'][0]['Instances'][0]['VpcId'] + t_private_ip = instance['Reservations'][0]['Instances'][0]['PrivateIpAddress'] + t_private_dns_name = instance['Reservations'][0]['Instances'][0]['PrivateDnsName'] + t_subnet_id = instance['Reservations'][0]['Instances'][0]['SubnetId'] + t_vpc_id = instance['Reservations'][0]['Instances'][0]['VpcId'] # if key attributes are found, then break out of the loop if all([t_private_ip, t_private_dns_name, t_subnet_id, t_vpc_id]): @@ -229,9 +229,9 @@ def lambda_handler( # Remove null values from the response. You cannot save a dict/JSON # document in DynamoDB if it contains null values LOGGER.debug("instance: %s", str(instance) + lineno()) - instance=remove_empty_from_dict(instance) - instance_dump=json.dumps(instance, default = json_serial) - instance_attributes=json.loads(instance_dump) + instance = remove_empty_from_dict(instance) + instance_dump = json.dumps(instance, default=json_serial) + instance_attributes = json.loads(instance_dump) LOGGER.debug("instance_attributes: %s", str(instance_attributes) + lineno()) LOGGER.debug("trying to put instance information in " "dynamo table %s", str(instance_attributes) + lineno()) @@ -605,13 +605,13 @@ def lambda_handler( " %s", str(valid_dns_zones) + lineno()) # create the TXT heritage record - heritage = initialize_heritage(HERITAGE_TAG,VERSION, - { - 'instance_id': instance_id, - 'account_id': account_id, - 'region': region - } ) - add_heritage_item_timestamp(heritage,'create_time') + heritage = initialize_heritage(HERITAGE_TAG, VERSION, + { + 'instance_id': instance_id, + 'account_id': account_id, + 'region': region + }) + add_heritage_item_timestamp(heritage, 'create_time') heritage_value = format_heritage(heritage) # txt=format_heritage(h) @@ -637,24 +637,24 @@ def lambda_handler( ' with value: ' + str(private_ip)) - if len(heritage)>0: - LOGGER.debug("Creating heritage TXT resource records %s", lineno()) - create_resource_record( - route53, - final_hosted_zone_id, - final_private_hostname, - final_hosted_zone_name, - 'TXT', - heritage_value - ) - - caller_response.append('Created TXT record in zone id: ' + - str(final_hosted_zone_id) + - ' for hosted zone ' + - str(final_private_hostname) + '.' + - str(final_hosted_zone_name) + - ' with value: ' + - str(heritage_value)) + if len(heritage) > 0: + LOGGER.debug("Creating heritage TXT resource records %s", lineno()) + create_resource_record( + route53, + final_hosted_zone_id, + final_private_hostname, + final_hosted_zone_name, + 'TXT', + heritage_value + ) + + caller_response.append('Created TXT record in zone id: ' + + str(final_hosted_zone_id) + + ' for hosted zone ' + + str(final_private_hostname) + '.' + + str(final_hosted_zone_name) + + ' with value: ' + + str(heritage_value)) if reverse_zone_associated: create_resource_record( @@ -673,24 +673,23 @@ def lambda_handler( 'in-addr.arpa with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - create_resource_record( - route53, - reverse_lookup_zone_id, - reversed_ip_address, - 'in-addr.arpa', - 'TXT', - heritage_value - ) - - caller_response.append('Created TXT reverse record in zone id: ' + - str(reverse_lookup_zone_id) + - ' for hosted zone ' + - str(reversed_ip_address) + - 'in-addr.arpa with value: ' + - str(heritage_value)) - - + if len(heritage) > 0: + create_resource_record( + route53, + reverse_lookup_zone_id, + reversed_ip_address, + 'in-addr.arpa', + 'TXT', + heritage_value + ) + + caller_response.append('Created TXT reverse record in zone id: ' + + str(reverse_lookup_zone_id) + + ' for hosted zone ' + + str(reversed_ip_address) + + 'in-addr.arpa with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.info("unexpected error. %s\n", str(err) + lineno()) @@ -716,26 +715,26 @@ def lambda_handler( ' with value: ' + str(private_ip)) - if len(heritage)>0: - # pause 1 before deleting to avoid API limit - time.sleep(1) - delete_resource_record( - route53, - final_hosted_zone_id, - final_private_hostname, - final_hosted_zone_name, - 'TXT', - heritage_value - ) - - caller_response.append('Deleted TXT record in zone id: ' + - str(final_hosted_zone_id) + - ' for hosted zone ' + - str(final_private_hostname) + '.' + - str(final_hosted_zone_name) + - ' with value: ' + - str(heritage_value)) - + if len(heritage) > 0: + # pause 1 before deleting to avoid API limit + time.sleep(1) + delete_resource_record( + route53, + final_hosted_zone_id, + final_private_hostname, + final_hosted_zone_name, + 'TXT', + heritage_value + ) + + caller_response.append('Deleted TXT record in zone id: ' + + str(final_hosted_zone_id) + + ' for hosted zone ' + + str(final_private_hostname) + '.' + + str(final_hosted_zone_name) + + ' with value: ' + + str(heritage_value)) + # pause 1 before deleting to avoid API limit time.sleep(1) delete_resource_record( @@ -755,26 +754,26 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - # pause 1 before deleting to avoid API limit - time.sleep(1) - delete_resource_record( - route53, - reverse_lookup_zone_id, - reversed_ip_address, - 'in-addr.arpa', - 'TXT', - heritage_value - ) - - caller_response.append('Deleted PTR record in zone id: ' + - str(reverse_lookup_zone_id) + - ' for hosted zone ' + - str(reversed_ip_address) + - str(private_dns_name) + - ' with value: ' + - str(heritage_value)) - + if len(heritage) > 0: + # pause 1 before deleting to avoid API limit + time.sleep(1) + delete_resource_record( + route53, + reverse_lookup_zone_id, + reversed_ip_address, + 'in-addr.arpa', + 'TXT', + heritage_value + ) + + caller_response.append('Deleted PTR record in zone id: ' + + str(reverse_lookup_zone_id) + + ' for hosted zone ' + + str(reversed_ip_address) + + str(private_dns_name) + + ' with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.debug("%s", str(err) + lineno()) @@ -814,25 +813,25 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - create_resource_record( - route53, - cname_domain_suffix_id, - TXT_RR_PREFIX + '.' + cname_host_name, - cname_domain_suffix, - 'TXT', - heritage_value - ) - - caller_response.append('Created TXT for CNAME record in zone id: ' + - str(cname_domain_suffix_id) + - ' for hosted zone ' + - str(TXT_RR_PREFIX) + '.' + - str(cname_host_name) + '.' + - str(cname_domain_suffix) + - ' with value: ' + - str(heritage_value)) - + if len(heritage) > 0: + create_resource_record( + route53, + cname_domain_suffix_id, + TXT_RR_PREFIX + '.' + cname_host_name, + cname_domain_suffix, + 'TXT', + heritage_value + ) + + caller_response.append('Created TXT for CNAME record in zone id: ' + + str(cname_domain_suffix_id) + + ' for hosted zone ' + + str(TXT_RR_PREFIX) + '.' + + str(cname_host_name) + '.' + + str(cname_domain_suffix) + + ' with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.debug("%s", str(err) + lineno()) else: @@ -858,25 +857,25 @@ def lambda_handler( ' with value: ' + str(final_private_dns_name)) - if len(heritage)>0: - delete_resource_record( - route53, - cname_domain_suffix_id, - TXT_RR_PREFIX + '.' + cname_host_name, - cname_domain_suffix, - 'TXT', - heritage_value - ) - - caller_response.append('Deleted TXT for CNAME record in zone id: ' + - str(cname_domain_suffix_id) + - ' for hosted zone ' + - str(TXT_RR_PREFIX) + '.' + - str(cname_host_name) + '.' + - str(cname_domain_suffix) + - ' with value: ' + - str(heritage_value)) - + if len(heritage) > 0: + delete_resource_record( + route53, + cname_domain_suffix_id, + TXT_RR_PREFIX + '.' + cname_host_name, + cname_domain_suffix, + 'TXT', + heritage_value + ) + + caller_response.append('Deleted TXT for CNAME record in zone id: ' + + str(cname_domain_suffix_id) + + ' for hosted zone ' + + str(TXT_RR_PREFIX) + '.' + + str(cname_host_name) + '.' + + str(cname_domain_suffix) + + ' with value: ' + + str(heritage_value)) + except BaseException as err: LOGGER.debug("%s", str(err) + lineno()) diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 157de091162e7ab17881d972a5320971d3c92c37..8ef42fc38efcdee974feb48a4a95741f5fd13f84 100644 GIT binary patch delta 11476 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 delta 11494 zcmV@6aWAK2mpm@R#Yl#g>vpJ004*e000gE8~|iwZgVYcVQpe$ zVJ>iaRa6N816nB+Vp=H`Vs&^6009IO1ONa8fCT^m?R{%^<2I7$cmE2Ed~+ymWc6z@ zd#}%G<~X)H?VTRmYdgto93LH8q-@3#$t5Xwd;0W$->SlYgLsjmWVa`i8=a&rkwBrU zP^bq`0D8UN*1^H?IeQ;2uA`8hK2*0^`i7lPizKgDzliUXGL8mYTNk%6EBVt8$$ZX= zxGIwPK4ulXNYYtWEW#?uQZ_5H1wB06e+@6nDom#_%ZmEN!9yA@vV(8gMR+}rS)5kI z!)WX1tpFu|Y9u8qmT8)#H$#?)MyEv_RsEQZxwz@T|M`0C?w*HNs7Rf!-Im-8< zsEEt5esqwQ$KfJ|2j|P{G_H;!`1(UWg}+-rCJ4+XjpJ||Pw!X>q!;0w(t{{lgh|SPl$iC;vLz7r z%^P<5?xz7S2TTadGMgrVZ&XtWa7J6Np+V@m+pMgpew-pZBdx8iH@rx>%=4_Md?o%k zVrNK78MF6UcDKygKeE)p1z12eN@7$iR$E7+ui!}v9T&?kE3)McFLx2%0Dv@N*CEIj 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 MEg=RrEdT%j0B;mmxBvhE From 64343f308457b27d2695623eaf25efbd8a2e00ba Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 22 Feb 2022 15:16:00 -0500 Subject: [PATCH 2/3] add sample running --- code/sample-event.running.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 code/sample-event.running.json diff --git a/code/sample-event.running.json b/code/sample-event.running.json new file mode 100644 index 0000000..d6c8e98 --- /dev/null +++ b/code/sample-event.running.json @@ -0,0 +1,16 @@ +{ + "version": "0", + "id": "9b21b346-1786-9c5b-bb6a-5e7d12a6ee91", + "detail-type": "EC2 Instance State-change Notification", + "source": "aws.ec2", + "account": "252999262699", + "time": "2022-02-22T15:41:07Z", + "region": "us-gov-west-1", + "resources": [ + "arn:aws-us-gov:ec2:us-gov-west-1:252999262699:instance/i-06eaa7e7ec1ca43dd" + ], + "detail": { + "instance-id": "i-06eaa7e7ec1ca43dd", + "state": "running" + } +} From c2710391b9fd615d9e23a7ea0943606e3633f592 Mon Sep 17 00:00:00 2001 From: badra001 Date: Tue, 22 Feb 2022 15:23:35 -0500 Subject: [PATCH 3/3] fix typo --- code/ddns-lambda.py | 5 +++-- code/ddns-lambda.zip | Bin 11678 -> 11689 bytes 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/ddns-lambda.py b/code/ddns-lambda.py index df64417..6b3ae20 100755 --- a/code/ddns-lambda.py +++ b/code/ddns-lambda.py @@ -72,7 +72,7 @@ LOGGER = logging.getLogger() ACCOUNT = None REGION = None -VERSION = '0.1.1' +VERSION = '0.1.2' # Adjust the logging level [logging.INFO, logging.DEBUG, logging.WARNING, etc] LOGGER.setLevel(logging.DEBUG) @@ -196,6 +196,7 @@ def lambda_handler( LOGGER.debug("account_id: %s", str(account_id) + lineno()) # Only doing something if the state is running + LOGGER.debug("instance state is {} {}".format(state, lineno())) if state == 'running': LOGGER.debug("sleeping for maximum {} seconds {}".format(SLEEPTIME, lineno())) @@ -1553,7 +1554,7 @@ def initialize_heritage(application_name, version='null', items={}): :param dict(str) items: A dict of key/value pairs to set on initialization. They key of version is not permitted here. :return dict(str): dict with the application name, version, and items ready for use """ - if application_name != '' and appication_name is not none: + if application_name != '' and application_name is not none: return { 'application_name': str(appname), 'version': str(version), diff --git a/code/ddns-lambda.zip b/code/ddns-lambda.zip index 8ef42fc38efcdee974feb48a4a95741f5fd13f84..70a7a5d8385f205fbf411244dc13ab4d31af1b43 100644 GIT binary patch literal 11689 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