-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathecs-service-count.py
100 lines (75 loc) · 2.56 KB
/
ecs-service-count.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env python3
import time
import logging
import boto3
import os
import requests
class ECSServiceUpdate(object):
def __init__(self, cluster, service, region):
if not region:
boto3.setup_default_session(
region_name=self._identity().get('region')
)
self.service = service
self.cluster = cluster or self._metadata().get('Cluster')
self.ecs = boto3.client('ecs')
def _metadata(
self,
uri='http://172.17.0.1:51678/v1/metadata'
):
return requests.get(uri).json()
def _identity(
self,
uri='http://169.254.169.254/latest/dynamic/instance-identity/document'
):
return requests.get(uri).json()
def _cluster_response(self):
return self.ecs.describe_clusters(
clusters=[self.cluster]
)['clusters'][0]
def _service_response(self):
return self.ecs.describe_services(
cluster=self.cluster,
services=[self.service]
)['services'][0]
def update_service(self):
instance_count = self._cluster_response().get(
'registeredContainerInstancesCount'
)
if not instance_count:
logging.error("Could Not Get Instance Count")
return False
logging.info("Instance Count: {}".format(instance_count))
service_desired = self._service_response().get('desiredCount')
if not service_desired:
logging.error("Could Not Get Service Count")
return False
logging.info(
"Service Count: {}".format(service_desired)
)
if service_desired != instance_count:
logging.info(
"Updating Service Count to: {}".format(instance_count)
)
self.ecs.update_service(
cluster=self.cluster,
service=self.service,
desiredCount=instance_count
)
return True
if __name__ == "__main__":
log_level = os.getenv('LOG_LEVEL', "INFO")
logging.basicConfig(level=log_level)
daemon = os.getenv('DAEMON', True)
interval = os.getenv('INTERVAL', 30)
region = os.getenv('AWS_DEFAULT_REGION', None)
cluster = os.getenv('CLUSTER', None)
service = os.getenv('SERVICE', None)
ecs_service_update = ECSServiceUpdate(cluster, service, region)
if daemon:
logging.info("Running in Daemon mode")
while True:
ecs_service_update.update_service()
time.sleep(interval)
else:
ecs_service_update.update_service()