最近は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を利用することで起動中のものだけを取得も可能です。
プログラム上で選別する必要がないのは便利ですね。