AWS SDK for PHP の使い方
渡辺です。
なんだかんだと環境構築することが一番多いのは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については基本的に似たように使えます。