'http://169.254.169.254/{version}/', 'version' => 'latest', ), array('base_url', 'version')); return new self($config); } /** * Constructor override */ public function __construct(Collection $config) { $this->setConfig($config); $this->setBaseUrl($config->get(Options::BASE_URL)); $this->defaultHeaders = new Collection(); $this->setRequestFactory(RequestFactory::getInstance()); } /** * Get instance profile credentials * * @return Credentials * @throws InstanceProfileCredentialsException */ public function getInstanceProfileCredentials() { try { $request = $this->get('meta-data/iam/security-credentials/'); $request->getCurlOptions()->set(CURLOPT_TIMEOUT, 1)->set(CURLOPT_CONNECTTIMEOUT, 1); $credentials = trim($request->send()->getBody(true)); $result = $this->get("meta-data/iam/security-credentials/{$credentials}")->send()->json(); } catch (\Exception $e) { $message = 'Error retrieving credentials from the instance profile metadata server. When you are not' . ' running inside of Amazon EC2, you must provide your AWS access key ID and secret access key in' . ' the "key" and "secret" options when creating a client or provide an instantiated' . ' Aws\\Common\\Credentials\\CredentialsInterface object.'; throw new InstanceProfileCredentialsException($message, $e->getCode(), $e); } // Ensure that the status code was successful if ($result['Code'] !== 'Success') { $e = new InstanceProfileCredentialsException('Unexpected response code: ' . $result['Code']); $e->setStatusCode($result['Code']); throw $e; } return new Credentials( $result['AccessKeyId'], $result['SecretAccessKey'], $result['Token'], strtotime($result['Expiration']) ); } }