このトピックでは、Elastic Compute Service (ECS) SDK V2.0 for PHPをインストールする方法について説明し、SDKを使用してECS API操作を呼び出す方法の例を示します。 この例では、ECS SDK V2.0 for PHPを使用してDescribeInstancesを呼び出し、ECSインスタンスに関する情報を照会します。
前提条件
最低限必要な権限を持つResource Access Management (RAM) ユーザーは、AccessKeyペアを使用してログオンします。 Alibaba Cloudアカウントには完全な権限があり、AccessKeyペアが侵害された場合に重大なセキュリティリスクとなるため、Alibaba Cloudアカウントの使用は推奨しません。 AccessKeyペアの作成の詳細については、「AccessKeyペアの作成」をご参照ください。
RAMユーザーはECSリソースの管理を許可されています。 この例では読み取り専用アクセスが必要で、AliyunECSReadonlyAccessシステムポリシーが使用されます。 ビジネス要件に応じて権限を許可します。
カスタムポリシーを作成します。
カスタムポリシーの作成に関するガイダンスについては、「カスタマイズポリシーの作成」と「RAM権限付与」をご参照ください。
ECSは、ベストプラクティスに基づいたカスタムポリシーテンプレートを提供します。 これらのポリシーテンプレートを参照して、ニーズに基づいてポリシーをすばやく確立します。 詳細については、「ECSのカスタムポリシー」をご参照ください。
システムポリシーを使用します。
ECSがサポートするシステムポリシーとその権限の詳細については、「ECSのシステムポリシー」をご参照ください。
AccessKeyペアは環境変数で設定されます。 詳細については、「Linux、macOS、およびWindowsでの環境変数の設定」をご参照ください。
ECS SDK V2.0 for PHPのインストール
ECS SDK V2.0 For PHPのインストール方法については、 SDKセンターを使用します。 次のコマンドをコピーし、ターミナルでコマンドを実行して、PHP用ECS SDK V2.0をインストールできます。
composer require alibabacloud/ecs-20140526 4.3.0
PHPでのECS SDK V2.0の使用
1. Initialize a client.
Alibaba Cloud SDKは、クライアントを初期化するために、AccessKeyペアやSTS (Security Token Service) トークンなどの複数のアクセス資格情報をサポートしています。 詳細については、「アクセス資格情報の管理」をご参照ください。 この例では、AccessKeyペアを使用してクライアントを初期化します。
<?php
require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use Darabonba\OpenApi\Models\Config;
class Sample
{
public static function createClient()
{
$config = new Config([
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
# Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
"endpoint" => "ecs.cn-hangzhou.aliyuncs.com",
]);
return new Ecs($config);
}
}2. API操作のリクエストオブジェクトを作成します。
リクエストオブジェクトを作成する前に、呼び出すAPI操作のパラメーターを表示します。 この例では、DescribeInstances操作が使用されています。 DescribeInstances操作のパラメーターは、DescribeInstancesで表示できます。
リクエストオブジェクトの名前は {操作名} リクエスト形式です。 たとえば、DescribeInstances操作の要求オブジェクトは、DescribeInstancesRequestという名前です。
// Create a request object.
$describeInstancesRequest = new DescribeInstancesRequest([
"regionId" => "cn-beijing"
]);3. API操作を呼び出します。
クライアントからAPI操作を呼び出す場合、タイムアウトパラメーターやプロキシパラメーターなどの実行時パラメーターを指定できます。 詳細は、「高度な設定」をご参照ください。
応答オブジェクトの名前は {操作名} 応答形式です。 たとえば、DescribeInstances操作の応答オブジェクトは、DescribeInstancesResponseという名前です。
// Create a runtime configuration object.
$runtime = new RuntimeOptions();
// Send the request.
$describeInstancesResponse = $client->describeInstancesWithOptions($describeInstancesRequest, $runtime);4. 例外を処理します。
SDK for PHPは、例外を次のタイプに分類します。
TeaUnableRetryError: このタイプの例外は、ネットワークの問題によって発生します。 ほとんどの場合、再試行の最大数に達すると、TeaUnableRetryError例外がスローされます。
getLastExceptionメソッドを呼び出して、例外が発生したときにAPIリクエストに関する情報を取得できます。TeaError: ほとんどの場合、このタイプの例外はビジネスエラーが原因です。
システムの堅牢性と安定性を確保するために、例外のレポート、例外のログ記録、再試行などの操作を実行して例外を適切に処理することを推奨します。
5. 完全なサンプルコード。
<?php
require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeInstancesRequest;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
class Sample
{
public static function main()
{
try {
$config = new Config([
"accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
"accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
"endpoint" => "ecs.cn-beijing.aliyuncs.com", // <endpoint>
]);
$client = new Ecs($config);
// Create a request object.
$describeInstancesRequest = new DescribeInstancesRequest([
"regionId" => "cn-beijing"
]);
// Create a runtime configuration object.
$runtime = new RuntimeOptions();
// Send the request.
$describeInstancesResponse = $client->describeInstancesWithOptions($describeInstancesRequest, $runtime);
var_dump($describeInstancesResponse);
} catch (\Exception $error) {
if ($error instanceof TeaError) {
// Handle exceptions with caution in actual business scenarios and do not ignore the exceptions in your project. In this example, exceptions are provided only for reference.
print_r("message:" . $error->getMessage() . "\n");
print_r("code:" . $error->getCode() . "\n");
print_r($error->data);
} elseif ($error instanceof TeaUnableRetryError) {
// Handle exceptions with caution in actual business scenarios and do not ignore the exceptions in your project. In this example, exceptions are provided only for reference.
print_r($error->getLastException());
} else {
// Handle exceptions with caution in actual business scenarios and do not ignore the exceptions in your project. In this example, exceptions are provided only for reference.
print_r("message:" . $error->getMessage());
}
}
}
}
Sample::main();関連ドキュメント
ECS SDK V2.0 for PHPを使用して、ECS API操作のジェネリック呼び出しを実行することもできます。 詳細については、「ジェネリック呼び出し」をご参照ください。
ECS SDK V1.0 for PHPを使用している場合は、SDKの詳細については「V1.0 PHP SDK」をご参照ください。