首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Rackspace Cloud SDK for PHP 入門指南:建立雲端伺服器實戰

     編輯:PHP 相關知識

SDK 簡介

Rackspace Cloud SDK for PHP(基於 php-opencloud)提供原生 PHP 介面操作 Rackspace/OpenStack 雲端服務:Cloud Servers、Cloud Files、Cloud Databases、Cloud Networks 等。

安裝方式

Composer 安裝(推薦)

composer require rackspace/php-opencloud

手動下載

  1. 前往 GitHub Releases
  2. 下載最新 .zip 或 .tar.gz
  3. 解壓至專案 vendor/ 目錄
  4. 引入 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()

實戰:建立兩台 Ubuntu 13.04 1GB 雲端伺服器

<?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  // 僅建立時回傳一次,請妥善保存
    );
}
?>

關鍵步驟解析

  1. 認證端點:Rackspace::US_IDENTITY_ENDPOINT 或 UK_IDENTITY_ENDPOINT,SDK 內建常數。
  2. API Key vs 密碼:Rackspace 使用 API Key(Control Panel → Account Settings → API Key),非登入密碼。
  3. 服務名稱:cloudServersOpenStack 為次世代 OpenStack 相容 API,舊版 cloudServers 已棄用。
  4. 非同步建立:create() 回傳 Response 物件,伺服器實際建立為非同步,需輪詢 $server->status() 或使用 waitFor()。
  5. Root 密碼:僅建立成功瞬間回傳一次($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();

掛載/卸載 Cloud Block Storage 磁碟

$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 中介軟體實作重試、日誌、監控。
  • 大量操作時使用批次 API 或非同步佇列(Laravel Queue、Symfony Messenger)。
  • 定期輪換 API Key,啟用雙因子驗證。
  • 生產環境務必啟用 SSL 憑證驗證(CURLOPT_SSL_VERIFYPEER = true)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved