Sun:Mon 07.00 23:00:Tue 07.00 23.00:Wed 07.00 23.00:Thu 07.00 23.00:Fri 07.00 23.00:Sat:31.12.2100:JiraDev
This tag specifies when the instance should be started/stopped and a Lambda scheduler will stop and start instances at required times.
Yet when an application is stopped a developer may wish to use this application. For this purpose a the following PHP web application can be used to start stopped applications:
Every minute an automated script produces list of applications and their status into file app.csv:
app1:app1-uat:i-12345678:0:stopped:start app2:app2-web,web2-db:i-12345601,i-12345602:120,0:stopped:start app3:app3-uat:i-12345603:0:running: app4:app4-web-uat,app4-app-uat,app4-db-uat:i-12345604,i-12345605,i-12345606:120,120,0:stopped:start app5:app5-web-uat,app5-app-uat,app5-db-uat:i-12345607,i-12345608,i-12345609:120,120,0:stopped:start zoranapp:app1-uat:i-0011b431b3bcccdaf:0:stopped:start
Script to produce file:
ec2 | tee ec2.`date +'%H.%M'`.out | cut -d ',' -f1-4,7,33,35-36 | grep -iv ',Prod$' | grep -iv ',null$' | while read line do account=`echo $line | cut -d',' -f1` instance=`echo $line | cut -d',' -f2` status=`echo $line | cut -d',' -f5` name=`echo $line | cut -d',' -f6` app=`echo $line | cut -d',' -f7` echo "$account,$app,$name,$instance,$status" done | sort > ec2.tmp for app in `cat ec2.tmp | cut -d',' -f2 | sort | uniq` do account=`grep "^$app," ec2.tmp | head -1 | cut -d',' -f1` name=`grep "^$app," ec2.tmp | cut -d',' -f3 | tr '\n' ','` instance=`grep "^$app," ec2.tmp | cut -d',' -f4 | tr '\n' ','` state=`grep "^$app," ec2.tmp | cut -d',' -f5 | tr '\n' ','` echo "$account:$app:$name:$instance:$status" done > app.csv
dashboard.php - produce a dashboard with status for all applications:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>dashboard.php</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <style> .row { background: #f8f9fa; margin-top: 20px; } .col { border: solid 1px #6c757d; padding: 10px; } </style> </head> <body> <h1>Applications Dashboard</h1> <div> <?php ini_set('display_startup_errors', 1); ini_set('display_errors', 1); error_reporting(-1); print <<< HERE <table class="table table-striped"> <thead> <tr> <th>Application</th> <th>Instance Name(s)</th> <th>Instance ID(s)</th> <th>Status</th> <th>Action</th> </tr> </thead> HERE; $data = file("app.csv"); // var_dump($data); foreach ($data as $line){ $lineArray = explode(":", $line); list($app, $name, $instance, $delay, $status, $action) = $lineArray; print <<< HERE <tr> <td>$app</td> <td>$name</td> <td>$instance</td> HERE; $id=$app; $salt="TOPSECRET"; $encrypted_id = base64_encode($id . $salt); if ($status == 'stopped') { print '<td><p style="color:red;">' . "$status</p></td>"; } else { print '<td><p style="color:green;">' . "$status</p></td>"; } if ($status == 'stopped') { print '<td>Click <a href="http://10.21.61.73/start.php?id=' . "$encrypted_id" . '">here</a> to start application instances</td>'; } else { print '<td></td>'; } print <<< HERE </td> </tr> HERE; } // end foreach //print the bottom of the table print "</table>\n"; ?> </div> </body> </html>
start.php - start the selected application:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>paramaters.php</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <style> .row { background: #f8f9fa; margin-top: 20px; } .col { border: solid 1px #6c757d; padding: 10px; } </style> </head> <body> <h1>Starting Application</h1> <div> <?php ini_set('display_startup_errors', 1); ini_set('display_errors', 1); error_reporting(-1); echo '<PRE>'; // echo "<br><br>id = " . $_GET["id"] . "<br><br>"; $decrypted_id_raw = base64_decode($_GET["id"]); $salt="TOPSECRET"; $decrypted_id = preg_replace(sprintf('/%s/', $salt), '', $decrypted_id_raw); // echo "<br><br>id = " . $decrypted_id . "<br><br>"; require 'vendor/autoload.php'; use Aws\Ec2\Ec2Client; $ec2Client = new Aws\Ec2\Ec2Client([ 'region' => 'ap-southeast-2', 'version' => 'latest', 'profile' => 'default' ]); $line = exec("grep $decrypted_id app.csv"); $lineArray = explode(":", $line); list($app, $name, $instance, $delay, $status, $action) = $lineArray; echo "Application: $app\nName(s): $name\nInstance(s): $instance\n\nResults:\n"; $instanceIds = explode(",", $instance); $result = $ec2Client->startInstances(array('InstanceIds' => $instanceIds)); // var_dump($result); echo($result); echo '</body> </html>'; ?>
No comments:
Post a Comment