Reputation: 671
I have some existing cloudwatch alarms in AWS , i have successfully exracted them and stored them in a list of dicts as follows:
[ { 'alarm_name': u'emsclassicldap_db_connections',
'alarm_threshold': 200.0,
'rds_name': u'emsclassicldap',
'rds_type': u'db.m3.medium'},
{ 'alarm_name': u'smso-jenkins-40-shared_db_connections',
'alarm_threshold': 266.0,
'rds_name': u'smso-jenkins-40-shared',
'rds_type': u'db.m3.medium'},
{ 'alarm_name': u'smso-jenkins-master-shared_db_connections',
'alarm_threshold': 266.0,
'rds_name': u'smso-jenkins-master-shared',
'rds_type': u'db.m3.large'},
{ 'alarm_name': u'syd01-devops-deepali-shared_db_connections',
'alarm_threshold': 266.0,
'rds_name': u'syd01-devops-deepali-shared',
'rds_type': u'db.m3.medium'}]
The above if a simple list and nothing fancy. Now i have some of the above alarms have some wrong alarm_threshold
values which need to be updated with the following standard right ones:
thershold_db_t2_medium = 309 # 99% of 312
thershold_db_m3_medium = 316 # 99% of 320
thershold_db_m3_large = 633 # 99% of 640
thershold_db_m3_xlarge = 1267 # 99% of 1280
thershold_db_m3_2xlarge= 2534 # 99% of 2560
thershold_db_m4_large = 675 # 99% of 682
thershold_db_m4_xlarge = 1351 # 99% of 1365
thershold_db_m4_2xlarge= 2703 # 99% of 2730
I wrote the following to update the alarm
my_region_list=['ap-southeast-2']
def final_compare_update(w):
for region in my_region_list:
c = boto.ec2.cloudwatch.connect_to_region(region)
for each_dict in w:
#print each_dict['rds_type']
if each_dict['rds_type']=="db.m2.medium" and each_dict['alarm_threshold'] != thershold_db_t2_medium:
c.update_alarm(name=each_dict['alarm_name'],comparision='>=',threshold=thershold_db_t2_medium, period=300, evaluation_periods=3,statistic='Maximum')
print "updated "+each_dict['alarm_name']
elif each_dict['rds_type']=="db.m3.medium" and each_dict['alarm_threshold'] != thershold_db_m3_medium:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m3_medium,period=300, evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
elif each_dict['rds_type'] == "db.m3.large" and each_dict['alarm_threshold'] != thershold_db_m3_large:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m3_large, period=300,evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
elif each_dict['rds_type'] == "db.m3.xlarge" and each_dict['alarm_threshold'] != thershold_db_m3_xlarge:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m3_xlarge,period=300,evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
elif each_dict['rds_type'] == "db.m3.2xlarge" and each_dict['alarm_threshold'] != thershold_db_m3_2xlarge:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m3_2xlarge,period=300, evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
elif each_dict['rds_type'] == "db.m4.large" and each_dict['alarm_threshold'] != thershold_db_m4_large:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m4_large,period=300, evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
elif each_dict['rds_type'] == "db.m4.xlarge" and each_dict['alarm_threshold'] != thershold_db_m4_xlarge:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m4_xlarge,period=300, evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
elif each_dict['rds_type'] == "db.m4.2xlarge" and each_dict['alarm_threshold'] != thershold_db_m4_2xlarge:
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m4_2xlarge,period=300, evaluation_periods=3, statistic='Maximum')
print "updated " + each_dict['alarm_name']
else:
print "Nothing was updated!"
This throws me ERROR:
Traceback (most recent call last):
File "update_alarm.py", line 128, in <module>
final = final_compare_update(w)
File "update_alarm.py", line 88, in final_compare_update
c.update_alarm(name=each_dict['alarm_name'], comparision='>=', threshold=thershold_db_m3_medium,period=300, evaluation_periods=3, statistic='Maximum')
TypeError: put_metric_alarm() got an unexpected keyword argument 'name'
how to do so?
Upvotes: 0
Views: 1699
Reputation: 269480
The update_alarm()
function takes a MetricAlarm
object as input. Here is an example from the boto documentation:
from boto.ec2.cloudwatch import MetricAlarm
scale_up_alarm = MetricAlarm(
name='scale_up_on_cpu', namespace='AWS/EC2',
metric='CPUUtilization', statistic='Average',
comparison='>', threshold='70',
period='60', evaluation_periods=2,
alarm_actions=[scale_up_policy.policy_arn],
dimensions=alarm_dimensions)
cloudwatch.create_alarm(scale_up_alarm)
By the way, it appears that update_alarm()
is an alias for put_metric_alarm()
, which is why the error message mentioned that that funciton.
Here is one that worked for me, calling update_alarm()
:
c.update_alarm(MetricAlarm(
name='hello', namespace='AWS/EC2',
metric='CPUUtilization', statistic='Average',
comparison='<', threshold='60',
period='60', evaluation_periods=2
))
Therefore, your code should be updated to:
c.update_alarm(MetricAlarm(
name=each_dict['alarm_name'],
comparison='>=',
threshold=threshold_db_m3_medium,
period=300,
evaluation_periods=3,
statistic='Maximum'
))
Upvotes: 2