この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。
なんだかんだと環境構築することが一番多いのはPHPです(次にJava)。 PHPのAWS SDKも使ったことが無かったので、使ってみました(宗教上の理由からあまりPHPでコードは書かない)。
ゴール
今回、PHP5.6とAWS SDK for PHPを使い、EC2インスタンスのPrivate IPを取得してみます。
EC2の準備
はじめにAmazonLinuxでEC2インスタンスを起動します。
アクセスキーは使いたくないので、インスタンスプロファイルの指定を忘れないでください。
インスタンスプロファイル(EC2ロール)には、EC2周りの権限を与えておきます。
管理ポリシーであればAmazonEC2ReadOnlyAccess
で良いでしょう。
SSH接続できたならば、PHPをインストールします。
$ yum -y install php56
AWS SDK for PHPのインストール
今回、Composerを使ってAWS SDK for PHPをインストールします。 ComposerはPHP用のパッケージ(ライブラリ)管理ツールです。 従来はPEARがよく使われていたようですが、グローバル空間にインストールするなど問題にもなるため、各プロジェクト毎にインストールして管理できるComposerがよく用いられるようになっているようです。
早速、ホームディレクトリで試していきます。 はじめにComposerのインストールです。
$ curl -sS https://getcomposer.org/installer | php
AWS SDK for PHPをComposerでインストールします。
$ php composer.phar require aws/aws-sdk-php
実行ディレクトリのvendor以下にSDKがインストールされます。
$ ls vendor/aws/ -1
aws-sdk-php
サンプルコードの実行
以下のサンプルコードは、Ec2Clientを利用してEC2のメタ情報を取得し、その中からPrivateIpAddress
を表示するPHPプログラムです。
test.php
<?php
require 'vendor/autoload.php';
use Aws\Ec2\Ec2Client;
$client = new Ec2Client([
'region' => 'ap-northeast-1',
'version' => '2016-09-15'
]);
$result = $client->describeInstances([
'Filters' => [
[
'Name' => 'tag:Name',
'Values' => ['test1a'],
],
]
]);
print $result['Reservations'][0]['Instances'][0]['PrivateIpAddress'];
はじめにrequire 'vendor/autoload.php'
を実行し、Composerでインストールしたライブラリのロードを行います。
次にEc2Client
のインスタンスを作成します。
この時、リージョン(region)とSDKのバージョン(version)を指定してください。
インスタンスプロファイル(IAMロール)を利用しているので、ここにアクセスキー/シークレットキーの指定は不要です。
describeInstances
メソッドの実行時にはパラメータを指定します。
今回は、タグ「Name」が「test1a」であるインスタンスの情報を取得しています。
実行結果はオブジェクトですが、配列アクセスで要素を参照可能です。
実行してみましょう。
$ php test.php
172.31.13.189
まとめ
PHPを利用する場合、Composerを利用すればグローバル空間を汚染せずにAWS SDKを利用できます。 ちょっとした処理を行うのであればAWS CLIが最強ですが、リトライ処理などロジックが絡むとPHPやPythonなどの高級言語が欲しくなります。 かといって既にPHPがインストールされているならば、他の言語を利用するのも無駄なので、AWS SDK for PHP を利用しましょう。 なお、各言語のAWS SDKについては基本的に似たように使えます。