新しいAWS SDK for PHPのラッパー「AWS Resource APIs for PHP」を触ってみた

90件のシェア(ちょっぴり話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。弊社ではJavaやRubyの使い手が多いのですが、私は個人的にPHPが好きだったりします。そんな全国3000万人のペチパーに向けてAWSから新しいSDKラッパーがリリースされたのでご紹介致します。

AWS Resource APIs for PHPってなんだ

AWSには各サービスを色々な言語のコード上で扱えるように各言語毎にSDKが用意されています。PHPにも当然AWS SDK for PHPというSDKが用意されています。
ですが基本的にこのAWS SDK for PHPはAWSサービスに対して1対1で操作するような作り方をしています。識別情報(image-id等)で個別指定するので余り汎用的な感じはしないんですよね。
このAWS Resource APIs for PHPはAWS SDK for PHPとパッケージは分かれているもののAWS SDK for PHPのバージョン3の拡張版として動く高機能のラッパーです。

何ができるの?

このAWS Resource APIs for PHPを使うと何ができるのでしょうか。実はこのラッパーを使うことで個別の識別情報をカプセル化することができます。これによりAWSサービスをよりリソース指向として扱うことが出来るようになります。
AWSはCLIにてタグを使用することでカプセル化する等リソース指向が進んでいます。AWSを使用してシステムを作るときも最近のトレンドとしてサーバー側はREST API化、リソース指向化が進んでいるので、このようなラッパーライブラリはこれから非常に有用になりますね。
現在このラッパーで使えるAWSサービスはAmazon EC2, Amazon Glacier, Amazon S3, Amazon SNS, Amazon SQS, AWS CloudFormation,AWS Identity and Access Management (IAM)になります。それではサンプルコードを実際に動かしてみましょう。

さわってみた

まずEC2を一台立ち上げ、PowerUserのIAM Roleをつけておきます。

aws-resource-api-for-php2

aws-resource-api-for-php1

ログインした後にAWS Resource APIs for PHPをインストールします。上に書いたようにこのラッパーを使うにはAWS SDK for PHPのバージョン3が必要です。両方共ComposerでインストールできるのでComposerでやっつけましょう。Githubにあるソースとpackagistを書いておきます。

では実際にインストールしていきます。まずはComposerをインストールします。

[ec2-user@ip-172-31-27-131 sdk]$ mkdir sdk
[ec2-user@ip-172-31-27-131 sdk]$ cd sdk/
[ec2-user@ip-172-31-27-131 sdk]$ curl -s http://getcomposer.org/installer | php

次にAWS SDK for PHPとAWS Resource APIs for PHPをComposerを使ってインストールします。

{
    "require": {
        "aws/aws-sdk-php": "3.*@dev",
        "aws/aws-sdk-php-resources": "0.1.0"
    }
}
[ec2-user@ip-172-31-27-131 sdk]$ php composer.phar install

さて、コードを書いていきましょう。まずはS3のバケットの中身を確認してみます。

<?php

require 'vendor/autoload.php';

use Aws\Resource\Aws;

$aws = new Aws([
    'region'  => 'ap-northeast-1',
    'version' => 'latest',
]);

$bucket = $aws->s3->bucket('testchao2suke');
$object = $bucket->object('image/upper-right.png');

echo $object['LastModified'].PHP_EOL;

[ec2-user@ip-172-31-27-131 sdk]$ php test.php
Sat, 03 Jan 2015 14:00:16 GMT
[ec2-user@ip-172-31-27-131 sdk]$

バケット内の最終更新日時を取得することができました。次にバケットを作り、画像を追加してみます。

<?php

require 'vendor/autoload.php';

use Aws\Resource\Aws;

$aws = new Aws([
    'region'  => 'ap-northeast-1',
    'version' => 'latest',
]);
// Create a bucket and object.
$bucket = $aws->s3->createBucket([
    'Bucket' => 'aws-sdk-php-resource-cm'
]);


$object = $bucket->putObject([
    'Key'  => 'images/upper-right.png',
    'Body' => fopen('test.png', 'r'),
]);

aws-resource-api-for-php3

aws-resource-api-for-php4

aws-resource-api-for-php5

画像がアップロードされたことが確認出来ました。

まとめ

いかがでしたでしょうか。プレビュー版ということで正直まだ少しバギーなところはありますが、そのうちこなれて来たら使いやすいものになるかと思います。皆さんも是非お試しください。

参考資料