"""Update Cloudwatch event with new task definition ARN.""" import os import boto3 from botocore.exceptions import ClientError from dotenv import load_dotenv import deploy # Load env file if it exists load_dotenv(verbose=True) environment = os.environ.get('Environment', 'qa') aws_region = os.environ.get('AWS_REGION', 'us-east-1') task_family = os.environ.get('TASK_FAMILY') service_name = os.environ.get('SERVICE_NAME') cloudwatch_rule = '{}-{}-fargate-event'.format(environment, service_name) def update_cloudwatch_event(cloudwatch_rule_name, task_definition_arn): """Update cloudwatch event to use new task definition.""" client = boto3.client('events', region_name=aws_region) target = client.list_targets_by_rule( Rule=cloudwatch_rule ) target['Targets'][0]['EcsParameters']['TaskDefinitionArn'] = \ task_definition_arn print('\nUpdating Cloudwatch event: {}'.format(cloudwatch_rule)) try: response = client.put_targets( Rule=cloudwatch_rule_name, Targets=target['Targets'] ) except ClientError as error: print(error.response['Error']['Message']) raise SystemExit('Error updating cloudwatch event') if response['ResponseMetadata']['HTTPStatusCode'] != 200: raise SystemExit('\nCloudwatch error. Full response: {}'.format( response)) else: return response['ResponseMetadata'] def main(): """Main entrypoint function.""" client = boto3.client('ecs', region_name=aws_region) current_task_def, new_task_def = deploy.create_new_task_definition( client, task_family) response = deploy.register_new_task_definition(client, new_task_def) new_task_definition_arn = response['taskDefinition']['taskDefinitionArn'] updated_event = update_cloudwatch_event( cloudwatch_rule, new_task_definition_arn) print('\nEvent updated successfully. Response details: {}'.format( updated_event)) if __name__ == "__main__": main()