from os import environ import actions from loader import Loader ARN = 'arn:aws:personalize:{region}:{account}:campaign/{name}' LOADER = Loader() def lambda_handler(event, context): campaignArn = ARN.format( region=environ['AWS_REGION'], account=LOADER.account_id, name=event['campaign']['name'] ) try: status = LOADER.personalize_cli.describe_campaign( campaignArn=campaignArn )['campaign'] # Point to new campaign if the new solution version is not the one listed in the campaign if(status['solutionVersionArn'] != event['solutionVersionArn']): try: newStatus = LOADER.personalize_cli.update_campaign( campaignArn=campaignArn, solutionVersionArn=event['solutionVersionArn'], minProvisionedTPS=event['campaign']['minProvisionedTPS']) status = LOADER.personalize_cli.describe_campaign( campaignArn=campaignArn )['campaign'] actions.take_action(status['latestCampaignUpdate']['status']) return campaignArn except LOADER.personalize_cli.exceptions.ResourceInUseException: actions.take_action(status['latestCampaignUpdate']['status']) return campaignArn except LOADER.personalize_cli.exceptions.ResourceNotFoundException: LOADER.logger.info( 'Campaign not found! Will follow to create a new campaign.' ) LOADER.personalize_cli.create_campaign( name=event['campaign']['name'], solutionVersionArn=event['solutionVersionArn'], minProvisionedTPS=event['campaign']['minProvisionedTPS'] ) status = LOADER.personalize_cli.describe_campaign( campaignArn=campaignArn )['campaign'] actions.take_action(status['status']) return campaignArn