Skip to content
Extraits de code Groupes Projets
Valider 03d40b9f rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

when reusing an existing AWS instance make sure the alarms are attached

parent 26cd0c6f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -21,16 +21,33 @@ class CloudWatch ...@@ -21,16 +21,33 @@ class CloudWatch
*/ */
private $config; private $config;
/**
* @var CloudWatchClient
*/
private $client;
public function __construct(Config $awsConfig) public function __construct(Config $awsConfig)
{ {
$this->config = $awsConfig; $this->config = $awsConfig;
$this->client = $this->getCloudWatchClient();
} }
public function terminateInstanceIfIdleForTooLong($instanceIds) public function hasAssignedAlarms($instanceIds)
{ {
$client = $this->getCloudWatchClient(); $result = $this->client->describeAlarmsForMetric(array(
'MetricName' => 'CPUUtilization',
'Namespace' => $this->getNamespace(),
'Dimensions' => $this->getDimensions($instanceIds)
));
$client->putMetricAlarm(array( $metricAlarms = $result->getPath('MetricAlarms');
return !empty($metricAlarms);
}
public function terminateInstanceIfIdleForTooLong($instanceIds)
{
$this->client->putMetricAlarm(array(
'AlarmName' => 'TerminateInstanceBecauseIdle', 'AlarmName' => 'TerminateInstanceBecauseIdle',
'AlarmDescription' => 'Terminate instances if CPU is on average < 10% for 5 minutes in a row 8 times consecutively', 'AlarmDescription' => 'Terminate instances if CPU is on average < 10% for 5 minutes in a row 8 times consecutively',
'ActionsEnabled' => true, 'ActionsEnabled' => true,
...@@ -48,7 +65,7 @@ class CloudWatch ...@@ -48,7 +65,7 @@ class CloudWatch
'ComparisonOperator' => ComparisonOperator::LESS_THAN_THRESHOLD, 'ComparisonOperator' => ComparisonOperator::LESS_THAN_THRESHOLD,
)); ));
$client->putMetricAlarm(array( $this->client->putMetricAlarm(array(
'AlarmName' => 'TerminateInstanceIfStatusCheckFails', 'AlarmName' => 'TerminateInstanceIfStatusCheckFails',
'AlarmDescription' => 'Terminate instances in case two status check fail within one minute', 'AlarmDescription' => 'Terminate instances in case two status check fail within one minute',
'ActionsEnabled' => true, 'ActionsEnabled' => true,
......
...@@ -63,6 +63,9 @@ class Instance ...@@ -63,6 +63,9 @@ class Instance
if (!empty($reservations)) { if (!empty($reservations)) {
$host = $this->getHostFromDescribedInstances($instances); $host = $this->getHostFromDescribedInstances($instances);
$instanceIds = $instances->getPath('Reservations/*/Instances/*/InstanceId');
$this->verifySetup($instanceIds);
return $host; return $host;
} }
} }
...@@ -96,15 +99,15 @@ class Instance ...@@ -96,15 +99,15 @@ class Instance
$instanceIds = $result->getPath('Instances/*/InstanceId'); $instanceIds = $result->getPath('Instances/*/InstanceId');
$this->client->waitUntilInstanceRunning(array(
'InstanceIds' => $instanceIds,
));
return $instanceIds; return $instanceIds;
} }
public function setup($instanceIds) public function setup($instanceIds)
{ {
$this->client->waitUntilInstanceRunning(array(
'InstanceIds' => $instanceIds,
));
$awsCloudWatch = new CloudWatch($this->config); $awsCloudWatch = new CloudWatch($this->config);
$awsCloudWatch->terminateInstanceIfIdleForTooLong($instanceIds); $awsCloudWatch->terminateInstanceIfIdleForTooLong($instanceIds);
...@@ -120,6 +123,17 @@ class Instance ...@@ -120,6 +123,17 @@ class Instance
return $host; return $host;
} }
public function verifySetup($instanceIds)
{
$awsCloudWatch = new CloudWatch($this->config);
$hasAlarms = $awsCloudWatch->hasAssignedAlarms($instanceIds);
if (!$hasAlarms) {
return $this->setup($instanceIds);
}
}
/** /**
* @param \Guzzle\Service\Resource\Model $resources * @param \Guzzle\Service\Resource\Model $resources
* @return mixed * @return mixed
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter