24時間365日フルマネージドホスティングサービスのデイーネット

AWS SDK For PHPを使ってみた

最近はAWSを触る機会が増えました。
APIを使ってガリガリしたいと考えている、ディーネット谷口です。

今回はAWSのSDKで何かをしようとSDKを見ていたところ、
AWSのSDKで「AWS SDK for PHP」があったので、
EC2の情報を取得し、一部を表示してみようと思います。

まずは、EC2インスタンスに対してインスタンスに割り当てるロールを指定します。
ロールのポリシーとしては、「AmazonEC2ReadOnlyAccess」を指定。

EC2インスタンスにログインしたらPHPをインストール

php5.4で実施した場合は、インスタンスにロールを割り当てていても認証情報部分でエラーが発生します。
php5.6で実施した場合は、エラーが発生しませんので5.6以上をご利用下さい。
※php側の問題ではなくaws-sdk-php側の問題です(phpバージョンによってインストールされるバージョンが変わります)

$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/remi*.repo
$ yum install --enablerepo=remi,remi-php56 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt
$ php -v
PHP 5.6.35 (cli) (built: Mar 29 2018 07:28:25)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

AWS SDK for PHPのインストール

Composerを使ってAWS SDK for PHPをインストールします。
ComposerはPHP用のパッケージ管理ツールです。

$ curl -sS https://getcomposer.org/installer | php
All settings correct for using Composer
Downloading...

Composer (version 1.6.3) successfully installed to: /home/centos/composer.phar
Use it: php composer.phar

$ php composer.phar require aws/aws-sdk-php
Using version ^3.53 for aws/aws-sdk-php
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
  - Installing mtdowling/jmespath.php (2.4.0): Downloading (100%)
  - Installing psr/http-message (1.0.1): Downloading (100%)
  - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%)
  - Installing guzzlehttp/promises (v1.3.1): Downloading (100%)
  - Installing guzzlehttp/guzzle (6.3.2): Downloading (100%)
  - Installing aws/aws-sdk-php (3.53.1): Downloading (100%)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
aws/aws-sdk-php suggests installing aws/aws-php-sns-message-validator (To validate incoming SNS notifications)
aws/aws-sdk-php suggests installing doctrine/cache (To use the DoctrineCacheAdapter)
Writing lock file
Generating autoload files

$ ls vendor/aws/ -1
aws-sdk-php



EC2の情報取得プログラムの実行

今回はリージョン内のEC2インスタンスの情報を取得し、
出力するプログラムを実行してみる。


サンプルプログラム(aws.php)


require 'vendor/autoload.php';
use Aws\Ec2\Ec2Client;

$ec2Client = new Ec2Client([
    'region' => 'ap-northeast-1',
    'version' => '2016-11-15'
]);

$result = $ec2Client->describeInstances();
$Reservations = $result['Reservations'];

foreach ($Reservations as $key => $Reservation){
    $Reservations[$key] = $Reservation['Instances'];
}

foreach ($Reservations as $Reservation) {
    foreach ($Reservation[0]['Tags'] as $tag) {
        if ($tag['Key'] == 'Name') {
            echo  $tag['Value'] . "\n";
        }
    }
    echo $Reservation[0]['InstanceId'] . "\n";
    echo $Reservation[0]['State']['Name'] . "\n";
    echo $Reservation[0]['InstanceType'] . "\n";
    echo PHP_EOL;
}



実行結果 ※一部抜粋

php aws.php
taniguchi-web-1a
i-0a8bec3822d922d33
running
t2.micro


問題なくインスタンスの情報を取得する事が出来ました。
今回は使っていませんが、FILTERを利用することで起動中のものだけを取得も可能です。
プログラム上で選別する必要がないのは便利ですね。

  • このページの先頭へ

  • 東京本社
    〒105-0001東京都港区虎ノ門2-3-22 第一秋山ビル5F
    TEL:03-3591-8887 FAX:03-3591-8886
  • 大阪本社
    〒541-0041 大阪市中央区北浜2-6-11北浜エクセルビル5F
    TEL:06-6231-8887 FAX:06-6231-8897

  • 認証範囲はこちらをご覧ください。

Denet logo

クラウドサービス・データセンタ・高機能専有サーバ・共有サーバホスティングサービス 株式会社ディーネット
dot_bar