Skip to content

Instantly share code, notes, and snippets.

@alexsavio
Created December 1, 2020 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexsavio/fdfde947023b009347584e68773b1a33 to your computer and use it in GitHub Desktop.
Save alexsavio/fdfde947023b009347584e68773b1a33 to your computer and use it in GitHub Desktop.
Switch on/off AWS CloudWatch Rules
import os
import logging
from typing import Dict, List
import boto3
from botocore.exceptions import ClientError
class CloudWatchRules:
def __init__(self, client=None):
self._client = client if client else boto3.client('events')
def switch(self, rule_name: str):
if self.is_enabled(rule_name):
self.disable(rule_name)
else:
self.enable(rule_name)
def _get_state(self, rule_name: str):
response = self._client.describe_rule(rule_name)
return response['State']
def is_enabled(self, rule_name: str) -> bool:
return self._get_state(rule_name) == 'ENABLED'
def enable(self, rule_name: str):
self._client.enable_rule(Name=rule_name)
def disable(self, rule_name: str):
self._client.disable_rule(Name=rule_name)
def list(self, prefix: str) -> List[Dict[str, str]]:
response = self._client.list_rules(NamePrefix=prefix)
return response['Rules']
if __name__ == "__main__":
logger = logging.getLogger(__name__)
action = os.environ.get('RULE_ACTION', 'ENABLE')
stage = 'dev'
events_name_prefix = 'mdl'
cloudwatch_events = CloudWatchRules()
cloudwatch_rules = [rule['Name'] for rule in cloudwatch_events.list(events_name_prefix)]
for rule_name in cloudwatch_rules:
logger.info(f"Switching CloudWatch Event Rule: {rule_name}.")
try:
if action == 'ENABLE':
cloudwatch_events.enable(rule_name)
else:
cloudwatch_events.disable(rule_name)
except ClientError as error:
error_code = error.response.get("Error", {}).get("Code")
if error_code == "ResourceNotFoundException":
logger.error(f"Error when switching CloudWatch Event Rule: {rule_name}. {error}.")
else:
raise
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment