Rackspace Cloud SDK for PHP(基於 php-opencloud)提供原生 PHP 介面操作 Rackspace/OpenStack 雲端服務:Cloud Servers、Cloud Files、Cloud Databases、Cloud Networks 等。
composer require rackspace/php-opencloud
.zip 或 .tar.gzvendor/ 目錄require 'vendor/autoload.php';(或手動 require 'lib/php-opencloud.php';)| 概念 | 說明 | 對應類別 |
|---|---|---|
| Connection | 認證連線入口,含身分驗證端點、帳號密鑰 | OpenCloud\Rackspace |
| Service | 特定雲端服務(Compute、ObjectStore、Database) | $conn->Compute(), $conn->ObjectStore() |
| Region | 資料中心地區(DFW、ORD、IAD、LON、SYD、HKG) | 服務建立時指定 |
| Resource | 具體資源物件(Server、Image、Flavor、Container、Object) | $service->Server(), $service->Image() |
<?php
require 'vendor/autoload.php';
use OpenCloud\Rackspace;
// 1. 常數定義(映像 ID 與 Flavor ID 需依實際區域查詢)
define('IMAGE_UBUNTU_1304', '9922a7c7-5a42-4a56-bc6a-93f857ae2346');
define('FLAVOR_1GB', '3'); // 1GB 記憶體規格
// 2. 建立連線(美國區)
$connection = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, [
'username' => 'YOUR_RACKSPACE_USERNAME',
'apiKey' => 'YOUR_API_KEY', // 非密碼,為 API Key
]);
// 3. 取得 Compute 服務(ORD 區域)
$compute = $connection->computeService('cloudServersOpenStack', 'ORD');
// 4. 取得映像與規格物件
$image = $compute->image(IMAGE_UBUNTU_1304);
$flavor = $compute->flavor(FLAVOR_1GB);
// 5. 迴圈建立伺服器
for ($i = 0; $i < 2; $i++) {
$server = $compute->server();
$response = $server->create([
'name' => sprintf('web-server-%02d', $i + 1),
'image' => $image,
'flavor' => $flavor,
// 可選:網路、金鑰對、用戶資料腳本等
]);
// 錯誤檢查
if ($response->httpStatus() > 204) {
throw new RuntimeException(
"建立伺服器失敗: HTTP {$response->httpStatus()} - {$response->httpBody()}"
);
}
// 等待建立完成(實際專案建議用輪詢或 Webhook)
$server->waitFor('ACTIVE', 300, fn($s) => print("等待中... {$s->status()}\n"));
printf(
"✅ Server [%s] 建立完成!Root 密碼: %s\n",
$server->name(),
$server->adminPass // 僅建立時回傳一次,請妥善保存
);
}
?>
Rackspace::US_IDENTITY_ENDPOINT 或 UK_IDENTITY_ENDPOINT,SDK 內建常數。cloudServersOpenStack 為次世代 OpenStack 相容 API,舊版 cloudServers 已棄用。create() 回傳 Response 物件,伺服器實際建立為非同步,需輪詢 $server->status() 或使用 waitFor()。$server->adminPass),之後無法取回,必須立即記錄。$servers = $compute->serverList();
foreach ($servers as $server) {
printf("%-20s %-10s %s\n", $server->name, $server->status, $server->ipv4);
}
$server = $compute->server('SERVER_ID');
$server->delete();
$volume = $cbs->volume('VOLUME_ID');
$server->attachVolume($volume, '/dev/xvdb'); // 掛載
$server->detachVolume($volume); // 卸載
use OpenCloud\Common\Exceptions\ApiError;
try {
$server->create([...]);
} catch (ApiError $e) {
// HTTP 狀態碼
$code = $e->getHttpStatus();
// 回應主體(含錯誤詳情)
$body = $e->getResponseBody();
// 429 Too Many Requests → 指數退避重試
// 5xx 伺服器錯誤 → 重試
// 4xx 客戶端錯誤 → 記錄並人工介入
}
.env,勿硬編碼。GuzzleHttp\Client 中介軟體實作重試、日誌、監控。CURLOPT_SSL_VERIFYPEER = true)。