/** * Provides current active spot if available otherwise returns null * @return array|null * @throws \Exception */ public function getActiveSpot() { $spots = $this->getSpotRequests(); $activeSpot = null; foreach ($spots as $spot) { switch ($spot['Status']['Code']) { case 'pending-evaluation': case 'request-canceled-and-instance-running': case 'canceled-before-fulfillment': case 'instance-terminated-by-user': continue; case 'fulfilled': $activeSpot = $spot; break; case 'price-too-low': $this->ec2Client->cancelSpotInstanceRequests(['DryRun' => $this->dryRun, 'SpotInstanceRequestIds' => array($spot['SpotInstanceRequestId'])]); break; default: throw new \Exception($spot['Status']['Code'] . " spot status not handled yet."); } } return $activeSpot; }