LoginSignup
8
8

More than 5 years have passed since last update.

【AWS】オートスケーリングしているIPをAWS SDK for PHPで取得する【API】

Last updated at Posted at 2014-10-31

世に出てるやつだとcomposerでインストールしてー。。
とか書いてあるの多数だったけど、phpファイルrequireしてするやり方できたので備忘録。

iAMユーザつくらなきゃいかんぽい。

AWS SDK使うのにアクセスキーとシークレットキーが必要くさい。

ルートユーザでは取得できないってどっかの記事でみたので専用ユーザを作るしかないってことでそのとおり作る。

ユーザ作ってアクセスキーとシークレットキー取得した後、権限も与えないといけないので忘れずに(ウチは忘れて数時間さまよった)
参照
http://joppot.info/2014/06/14/1621

次には本体ゲット

https://github.com/aws/aws-sdk-php/releases
ここの最新版。(2014/10/23現在で2.7.1)
zipをDL。

解凍してよしなにする

解凍フォルダ直下にaws-autoloader.phpってのがあるのでrequire。
後は使いたいライブラリをuseして使用。
参照
http://docs.aws.amazon.com/aws-sdk-php/latest/

面倒な人にサンプルコード

<?php
require('aws/aws-autoloader.php');

// AWS 接続情報を設定して下さい。
define('KEY' , 'xxxxxxxxxxxxxxxxx'); // アクセスキー
define('SECRET' , 'xxxxxxxxxxxxxxxxxxxx'); // シークレットキー
define('REGION' , 'ap-northeast-1'); // 東京リージョンってことらしいよ

// AWS 対象となるセキュリティグループ。
define('SECURITYGROUPS_NAME', 'default');

// AWS インスタンス ステータス
define('STATUS_running', '16');

use Aws\Ec2\Ec2Client;

$ec2 = new AwstarEc2();
// EC2インスタンスのプライベートIP一覧取得
$ipList = $ec2->getInstanceList();

var_dump($ipList);

/*
 * AwsClass
 */
class AwstarEc2{

    private static $client;

    /**
     * init
     * Aws\Ec2\Ec2Client にリージョンをセットして初期化
     */
    private static function init(){
        $config = array(
            'key'    => KEY,
            'secret' => SECRET,
            'region' => REGION,
        );
        self::$client = Ec2Client::factory($config);
    }

    /**
     * getInstanceList
     * 特定リージョンのインスタンス情報をフォーマットを指定して取得する
     * @param type $rsync_type
     * @return type
     */
    public static function getInstanceList(){
        self::init();

        // 対象EC2(runnning)の取得
        $response = self::$client->describeInstances(array(
            "Filter" => array(
                array("Name" => "instance-state-name", "Value" => "running")
            )
        ));

        $ipList = array();
        // この時点で情報色々はいってる
        foreach ($response['Reservations'] as $instances_no=>$reservations){
            foreach ($reservations as $key=>$value){
                // インスタンス情報のみにしぼる
                if($key=="Instances"){
                    // インスタンス情報軍
                    foreach($value as $k=>$v){
                        // 必要あらばここでさらにソート、今回はオートスケーリングしてるのがセキュリティグループ「default」のやつだったのでそれを算出
                        if($v['State']['Code'] == STATUS_running && $v['SecurityGroups'][0]['GroupName'] == SECURITYGROUPS_NAME){
                            $ipList[] = $v['PublicIpAddress'];
                        }
                    }
                }
            }
        }

        return $ipList;
    }
}

?>

いやー、はまったはまった。
本来ならcomposer使ってインストールしつつ依存ライブラリインストールした環境で使う形紹介してるサイトが多かったので。。
ミニマムで使うならこの形で使えるんじゃないですかね。
ソート条件に関してはそれぞれ任意で変えて取得すればいいと思います。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8