AWS SDK for PHP の使い方

AWS

渡辺です。

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