Last active
January 9, 2021 00:48
-
-
Save nir0s/0f28e0498de5d63d11eb22a8a41b3fee to your computer and use it in GitHub Desktop.
A Lambda function to delete a CloudFormation Stack on Pull Request Close GitHub Event
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import json | |
import logging | |
import boto3 | |
def _get_logger(): | |
logger = logging.getLogger(__name__) | |
logger.setLevel(logging.DEBUG) | |
logger.addHandler(logging.StreamHandler(sys.stdout)) | |
return logger | |
def _delete_stack(branch_name): | |
"""Delete a stack if it exists for `branch_name` | |
""" | |
logger.info('Branch is: %s', branch_name) | |
client = boto3.client('cloudformation') | |
logger.info('Describing stacks...') | |
response = client.describe_stacks() | |
for record in response['Stacks']: | |
if record['StackName'] == branch_name: | |
logger.info('Deleting stack: %s...', branch_name) | |
client.delete_stack(StackName=branch_name) | |
logger.info('Stack deleted') | |
break | |
else: | |
logger.info('Stack %s does not exist. Ignoring...', branch_name) | |
def _process_branch(event_type, event_message): | |
"""Process a branch if the GitHub event is a closing of a PR. | |
""" | |
if event_type == 'pull_request' and event_message.get('action') == 'closed': | |
_delete_stack(event_message['pull_request']['head']['ref']) | |
else: | |
logger.info('`event_type` is not `pull_request` or `action` is not `closed`. Ignoring...') | |
def call(event): | |
"""Process a GitHub event | |
event (dict): GitHub generated info about the current event. | |
""" | |
logger = _get_logger() | |
event_data = event['Records'][0]['Sns'] | |
event_type = event_data['MessageAttributes']['X-Github-Event']['Value'] | |
event_message = json.loads(event_data['Message']) | |
_process_branch(event_type, event_message) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment