この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。望月です。
PHPでアプリケーションを書いているときに、アプリケーション内からAWSを操作したいことがあります。
- S3へのファイルアップロード
- SQSへのキューイング
- SES経由でのメール送信
- EC2インスタンスの情報取得
AWSはRESTインターフェースを提供しており、HTTPリクエスト経由でAWSの様々なリソースを扱うことができます。ですが、アプリケーションで一からHTTPリクエストを書くのは非効率的です。
AWSが提供しているSDKを利用すると、こういった操作をするための記述を簡単に書けるようになります。
PHPには、[AWS SDK for PHP](SDK1) と [AWS SDK for PHP 2](SDK2)が存在します。
が、今から始めるならSDK2の方をお勧めします。
また、PHPには様々なWebアプリケーションフレームワークが存在します。Symfony, CakePHP, FuelPHP, Zend Frameworkなど、パッと思いつくだけで10個近くは出てきそうです。
その中で、私のお気に入りのCakePHPを使用して、AWS SDK for PHP 2を利用したAWS操作の簡単なサンプルアプリケーションを書いていきます。
CakePHP以外のフレームワークでも使えるよう、なるべく汎用的なコードを書いていこうと思います。
今日の記事では、環境を構築して、CakePHPのWelcomeページが表示されるところまで書いていきます。
CakePHPとは?
CakePHPは、オープンソースのPHP用Webアプリケーションフレームワークです。Ruby on Railsに影響を受けて開発され、bakeコマンドによるテンプレート自動生成などの機能を備えています。
更新も活発で、2013年1月に2.3.0が,8月末には2.4.0が登場しました。(2013/10/7現在での最新は2.4.1)
環境構築
前提環境
以下の環境で作成、検証しました。
- 環境: Amazon EC2
- Amazon Linux 2013.09 ami
- PHP5.4
- IAM Role設定済みインスタンス
PHP5.4を導入していますが、PHP5.2.8以降であればCakePHPを動かすことはできます。 また、一番最後のIAM Roleに関しては、こちらの記事を参考にしてください。権限は必要になったら付与していくので、何も設定しないでOKです。
パッケージインストール
EC2にログインし、まずは必要なパッケージをさくっと入れます。
$ sudo yum install -y php54 \
php54-pdo \
php54-mbstring \
httpd24 \
mysql55-server
$ sudo service mysqld start
$ sudo service httpd start
composerを利用したインストール
CakePHPとSDKをインストールするには、普通にtar.gzをダウンロードしてきて云々、という方法もありますが、今回はcomposerというツールを利用します。
Composer公式サイト(英語)
composerはRubyでいうBundlerにあたり、インストールするライブラリの依存管理とバージョン管理を引き受けてくれます。
composerの定義ファイルを、/var/www/html下にcomposer.jsonという形で、以下のように記述します。 *1
{
"name": "aws-cakesample",
"repositories": [
{
"type": "pear",
"url": "http://pear.cakephp.org"
}
],
"require": {
"pear-cakephp/cakephp": "2.4.1",
"aws/aws-sdk-php": "2.*"
},
"config": {
"vendor-dir": "vendor/"
}
}
"require" に記述してあるのが、アプリケーションから利用するライブラリです。
次に、以下のコマンドを実行します。
# curl -sS https://getcomposer.org/installer | php
# ls -al
total 904
drwxr-xr-x 2 root root 4096 Oct 6 03:29 .
drwxr-xr-x 7 root root 4096 Oct 6 03:22 ..
-rw-r--r-- 1 root root 307 Oct 6 03:26 composer.json
-rwxr-xr-x 1 root root 913318 Oct 6 03:29 composer.phar
composer.pharというファイルが作成されました。その後、以下のコマンドを実行します。
# php composer.phar install
(出力省略)
# ls -al
total 920
drwxr-xr-x 3 root root 4096 Oct 6 03:32 .
drwxr-xr-x 7 root root 4096 Oct 6 03:22 ..
-rw-r--r-- 1 root root 308 Oct 6 03:31 composer.json
-rw-r--r-- 1 root root 9273 Oct 6 03:32 composer.lock
-rwxr-xr-x 1 root root 913318 Oct 6 03:29 composer.phar
drwxr-xr-x 8 root root 4096 Oct 6 03:32 vendor
# ls -al vendor/
total 36
drwxr-xr-x 8 root root 4096 Oct 6 03:32 .
drwxr-xr-x 3 root root 4096 Oct 6 03:32 ..
-rw-r--r-- 1 root root 183 Oct 6 03:32 autoload.php
drwxr-xr-x 3 root root 4096 Oct 6 03:32 aws
drwxr-xr-x 2 root root 4096 Oct 6 03:32 bin
drwxr-xr-x 2 root root 4096 Oct 6 03:32 composer
drwxr-xr-x 3 root root 4096 Oct 6 03:32 guzzle
drwxr-xr-x 3 root root 4096 Oct 6 03:32 pear-pear.cakephp.org
drwxr-xr-x 3 root root 4096 Oct 6 03:32 symfony
依存関係含め、必要なパッケージ群がインストールされました。また.lockファイルも作成されています。
ミドルウェア設定
CakePHPを動作させるために、ミドルウェア群にいくつか設定が必要です。
httpd
CakePHPでは、.htaccessを利用したURLリライトを使うため、.htaccessの利用を許可する必要があります。
httpd.confのAllowOverrideの値を書き換えます。
$ diff -u /etc/httpd/conf/httpd.conf.orig /etc/httpd/conf/httpd.conf
--- /etc/httpd/conf/httpd.conf.orig 2013-10-05 10:14:41.094487436 +0000
+++ /etc/httpd/conf/httpd.conf 2013-10-05 10:15:10.841296014 +0000
@@ -148,7 +148,7 @@
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
- AllowOverride None
+ AllowOverride All
#
# Controls who can get stuff from this server.
$ sudo service httpd restart
httpdの再起動をお忘れなく。
PHP
PHPの設定内容は適宜変える必要がありますが、必ず変えて置かなければならない箇所が一箇所あります。
それがタイムゾーンの設定です。パッケージでインストールすると、デフォルトでは無指定(コメントアウトされている)ので、明示的に値を設定してあげましょう。
$ diff -u /etc/php.ini.orig /etc/php.ini
--- /etc/php.ini.orig 2013-10-05 09:56:28.151362646 +0000
+++ /etc/php.ini 2013-10-05 09:56:39.591377941 +0000
@@ -875,7 +875,7 @@
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
-;date.timezone =
+date.timezone = Asia/Tokyo
; http://php.net/date.default-latitude
;date.default_latitude = 31.7667
$ sudo service httpd restart
PHPの設定変更後も、httpdの再起動が必要になります。
アプリケーションの雛形作成
長かったですが、ようやくアプリケーション作成に移ります。
雛形の作成には、CakePHPの付属コマンドである[bake]を利用します。
$ cd /var/www/html
$ sudo mkdir aws-cakesample
$ sudo vendor/bin/cake bake project aws-cakesample/
Welcome to CakePHP v2.4.1 Console
---------------------------------------------------------------
App : html
Path: /var/www/html/
---------------------------------------------------------------
Skel Directory: /var/www/html/vendor/pear-pear.cakephp.org/CakePHP/Cake/Console/Templates/skel
Will be copied to: /var/www/html/aws-cakesample/
---------------------------------------------------------------
Look okay? (y/n/q)
[y] > y
---------------------------------------------------------------
Created: aws-cakesample in /var/www/html/aws-cakesample/
---------------------------------------------------------------
* Random hash key created for 'Security.salt'
* Random seed created for 'Security.cipherSeed'
* Cache prefix set
* app/Console/cake.php path set.
CakePHP is not on your `include_path`, CAKE_CORE_INCLUDE_PATH will be hard coded.
You can fix this by adding CakePHP to your `include_path`.
* CAKE_CORE_INCLUDE_PATH set to /var/www/html/vendor/pear-pear.cakephp.org/CakePHP in webroot/index.php
* CAKE_CORE_INCLUDE_PATH set to /var/www/html/vendor/pear-pear.cakephp.org/CakePHP in webroot/test.php
* Remember to check these values after moving to production server
Project baked successfully!
$ sudo chown -R apache:apache aws-cakesample/
$ ls -al aws-cakesample/
合計 64
drwxr-xr-x 14 apache apache 4096 10月 6 03:48 2013 .
drwxr-xr-x 4 root root 4096 10月 6 03:46 2013 ..
-rwxr-xr-x 1 apache apache 140 10月 6 03:32 2013 .htaccess
drwxr-xr-x 3 apache apache 4096 10月 6 03:48 2013 Config
drwxr-xr-x 4 apache apache 4096 10月 6 03:48 2013 Console
drwxr-xr-x 3 apache apache 4096 10月 6 03:48 2013 Controller
drwxr-xr-x 2 apache apache 4096 10月 6 03:48 2013 Lib
drwxr-xr-x 3 apache apache 4096 10月 6 03:48 2013 Locale
drwxr-xr-x 4 apache apache 4096 10月 6 03:48 2013 Model
drwxr-xr-x 2 apache apache 4096 10月 6 03:48 2013 Plugin
drwxr-xr-x 4 apache apache 4096 10月 6 03:48 2013 Test
drwxr-xr-x 2 apache apache 4096 10月 6 03:48 2013 Vendor
drwxr-xr-x 9 apache apache 4096 10月 6 03:48 2013 View
-rwxr-xr-x 1 apache apache 205 10月 6 03:32 2013 index.php
drwxrwxrwx 6 apache apache 4096 10月 6 03:48 2013 tmp
drwxr-xr-x 6 apache apache 4096 10月 6 03:48 2013 webroot
aws-cakesample/以下が、アプリケーションの本体で、vendor以下に入っている部分はCakePHPのコア部分です。
ここまでくれば、ブラウザでアクセスするとCakePHPのデフォルトWelcomeページが表示されるはずです。
http://<IP or Hostname>/aws-cakesample にアクセスしてみましょう。
データベース設定がない、と警告が出ていますが、そこは次回修正します。
まとめ
今回は環境構築だけで終わってしまいました。SDKを期待されていた方は、次回以降にご期待ください。
また、冒頭でPHPのSDKには2種類あると書きましたが、そちらの比較等もいずれまとめていこうと思います。
脚注
- 今回は実験環境なので、簡易化のため/var/www/htmlに置いていますが、ここはDocumentRoot以下のためHTTPでアクセスできてしまいます。
本来は/usr/localや/opt以下などに作成しましょう。 ↩