Amazon EC2 Tips (8) AWS SDK for PHPのテスト<その2>
Embarcadero RadPHP XE2で AWS SDK for PHPを試してみた。
作成したアプリは、「EC2インスタンスのスタート・ストップ」および、「IPアドレスの割り当て」しかできない、
きわめてシンプルな内容。
画面イメージは以下の通り。
スタートボタンで開始、ストップボタンで停止、画面の下側でインスタンスの状態が確認できるようにした。
しかし、RadPHPはWinアプリのように画面にボタンなどをたくさん貼り付ける場合は、かなり便利かも...
■AWS SDK for PHPを使用する際のポイント
・AWS-SDKのライブラリーは、RadPHPのプロジェクトを保存したフォルダに配置し、sdk.class.phpを呼び出す際に
下記の様に指定した。
require_once("./aws-sdk/sdk.class.php");
・配布ファイルを保存するフォルダにも、AWS-SDKのライブラリーをコピーした。
その他に、実行ファイルをサーバーに転送し、実行してみて気づいたんですが、使用できるPHPに条件があったようです。
必須条件は、バージョン5.2以上で、cURLエクステンションが使用できることの様です。
■イベント処理のソース
同じ処理を何度も使い、ダラダラしたソースですが、テストなのでご勘弁...
◆フォームオープン処理 (インスタンスの状況を画面に表示する)
function mainCreate($sender, $params)
{
require_once("./aws-sdk/sdk.class.php");
define('instanceId','<インスタンスID>');
define('ipAddress','<公開IPアドレス>');
$ec2 = new AmazonEC2();
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
$options = array('InstanceId.1' => instanceId);
//インスタンス情報取得
$res = $ec2->describe_instances($options);
if($res->isOK()){
$info= $res->body->reservationSet->item->instancesSet->item;
$status= $info->instanceState->name;
$serverName= $info->tagSet->item->value;
$ipAddr= $info->ipAddress;
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = $serverName;
$this->Label_status->Caption = $status;
$this->Label_ipaddress->Caption = "none";
if($ipAddr){$this->Label_ipaddress->Caption = $ipAddr;}
}else{
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = "not found";
$this->Label_status->Caption = "";
$this->Label_ipaddress->Caption = "";
}
}
◆UPDATEボタン処理 (インスタンスの状況を画面に表示する)
function Button_statusClick($sender, $params)
{
require_once("./aws-sdk/sdk.class.php");
$ec2 = new AmazonEC2();
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
$options = array('InstanceId.1' => instanceId);
//インスタンス情報取得
$res = $ec2->describe_instances($options);
if($res->isOK()){
$info= $res->body->reservationSet->item->instancesSet->item;
$status= $info->instanceState->name;
$serverName= $info->tagSet->item->value;
$ipAddr= $info->ipAddress;
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = $serverName;
$this->Label_status->Caption = $status;
$this->Label_ipaddress->Caption = "none";
if($ipAddr){$this->Label_ipaddress->Caption = $ipAddr;}
}else{
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = "not found";
$this->Label_status->Caption = "";
$this->Label_ipaddress->Caption = "";
}
}
◆スタートボタン処理 (インスタンスのスタートとIPアドレスの割り当て)
function Button_startClick($sender, $params)
{
require_once("./aws-sdk/sdk.class.php");
$ec2 = new AmazonEC2();
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
//インスタンス・スタート
$res = $ec2->start_instances(instanceId);
if($res->isOK()){
$options = array('InstanceId.1' => instanceId);
//インスタンス情報取得
$res = $ec2->describe_instances($options);
$info= $res->body->reservationSet->item->instancesSet->item;
$status= $info->instanceState->name;
$serverName= $info->tagSet->item->value;
$ipAddr= $info->ipAddress;
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = $serverName;
$this->Label_status->Caption = $status;
$this->Label_ipaddress->Caption = "none";
if($ipAddr){$this->Label_ipaddress->Caption = $ipAddr;}
//5秒停止(ステータスが変わるのを待つ方法を試したが、待ちきれないの
//で、アバウトに停止させてます)
sleep(5);
//IPアドレス割り当て
$res = $ec2->associate_address(instanceId,ipAddress);
if($res->isOK()){
$res = $ec2->describe_instances($options);
$info= $res->body->reservationSet->item->instancesSet->item;
$ipAddr= $info->ipAddress;
$this->Label_ipaddress->Caption = "none";
if($ipAddr){$this->Label_ipaddress->Caption = $ipAddr;}
} else{
$this->Label_ipaddress->Caption = "NG";
}
}else{
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = "not start";
$this->Label_status->Caption = "";
$this->Label_ipaddress->Caption = "";
}
}
◆ストップボタン処理 (インスタンスの停止)
function Button_stopClick($sender, $params)
{
require_once("./aws-sdk/sdk.class.php");
$ec2 = new AmazonEC2();
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
//インスタンス・ストップ
$res = $ec2->stop_instances(instanceId);
if($res->isOK()){
$options = array('InstanceId.1' => instanceId);
//インスタンス情報取得
$res = $ec2->describe_instances($options);
$info= $res->body->reservationSet->item->instancesSet->item;
$status= $info->instanceState->name;
$serverName= $info->tagSet->item->value;
$ipAddr= $info->ipAddress;
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = $serverName;
$this->Label_status->Caption = $status;
$this->Label_ipaddress->Caption = "none";
if($ipAddr){$this->Label_ipaddress->Caption = $ipAddr;}
}else{
$this->Label_instanceid->Caption = instanceId;
$this->Label_servername->Caption = "not start";
$this->Label_status->Caption = "";
$this->Label_ipaddress->Caption = "";
}
}

RadPHP XE2 を使いこなされているようですごいですね。
RadPHP XE2 の簡単な入門書的なサイト、もしくは、書籍をご存知ではないでしょうか?
購入したのはいいのですが、使い方がいまいちよく分からず・・・;;
コメントありがとうございます。
私は「Delphi for PHPではじめるPHPビジュアルWeb開発」を買って使い方を調べました。
PHP言語入門の章もあり、非常に重宝した覚えがあります。