def load(self): self.stack = self.aws_cfn.Stack(self.stack_name) try: self.stack.load() logger.debug('Loaded Stack: %r', self.stack) except ClientError as error: logger.error(MESSAGE_STACK_NOT_FOUND.format( stack_name=self.stack_name, message=error.message)) self.notify(DeploymentResponse.STATUS_FAILURE, error.message)
def __init__(self, event, context): self.event = event logger.debug('Received event: %r', event) self.context = context logger.debug('Received context: %r', context) self.aws_cfn = boto3.resource('cloudformation') self.aws_sns = boto3.resource('sns') self.aws_lambda = boto3.client('lambda') self._output_topics = None self._cfn_output_topics = None self._stack_update_parameters = None self._stack_name = None self.stack = None
def update(self): logger.debug('Parameters to be updated: %s', self.stack.parameters) merged = self.stack_update_parameters.merge(self.stack.parameters) logger.debug('Merged parameters: %s', merged) try: logger.debug('Will try to update Cloudformation') self.stack.update( UsePreviousTemplate=True, Parameters=merged, Capabilities=['CAPABILITY_IAM'], NotificationARNs=self.cfn_output_topics) message = 'Cloudformation was triggered successfully.' logger.debug(message) self.notify(DeploymentResponse.STATUS_SUCCESS, message) except ClientError as error: logger.error(MESSAGE_UPDATE_PROBLEM.format( stack_name=self.stack_name, message=error.message)) self.notify(DeploymentResponse.STATUS_FAILURE, error.message)
def parse_event(self): message = json.loads(self.event['Records'][0]['Sns']['Message']) self._stack_update_parameters = StackUpdateParameter(message) self._stack_name = self._stack_update_parameters.stack_name logger.debug('Extracted Update Parameters: %r', self._stack_update_parameters)