ご無沙汰です。最近ブログをサボっていました。
さて、最近はAWSというサービスを使い始めました。便利ですが、難しいところもありますね。今回はPHPからS3にアクセスして、バケットを作成するまでの流れを書いてみます
AWS SDK for PHPの使い方
ユーザの作成
まずはグループとユーザの追加が必要です。
グループの追加は以下の通り
- AWSにアクセスして、たくさんあるサービスの中からIAMをクリック
- 左ペインから、Groupを選択
- Create new groupを選択
- グループ名を任意に決めて、Next stepへ
- セキュリティポリシーを追加します。filterから s3 と入力して、AmazonS3FullAccessを選択
- Next stepでそのままグループを作成します
続いてユーザの作成です。ユーザの作成はこちらのホームページを参考にさせていただきました。
ユーザ作成後にIDとパスワードの書かれたファイルがダウンロードできますので、安全な場所へ保存しておいて下さい。後で使用します。
composerのインストール
SDKを使用するには、幾つかの方法があって、aws.pharをダウンロードして使用するのが一番簡単です。
しかしなぜかワタシの環境ではaws.pharを使用するとエラーが出てしまうので、composerを今回はじめて導入しました。
composerはPHP版のBowerみたいな感じです。(間違っていたらごめんなさい)
では、php開発環境のルートに移動して、以下のコマンドを入力します
curl -sS https://getcomposer.org/installer | php
これでカレントディレクトリに、composer.pharファイルが作成されます。
次に、composer.jsonを作成します。このファイルは手動で作る必要があります。
{ "require": { "aws/aws-sdk-php": "2.*" } }
※公式マニュアルの通りにコピペしましたが、現在の最新版は3のはずです。マニュアルの更新が追いついていないのかもしれません。
このcomposer.jsonファイルを、先ほどのcomposer.pharと同じディレクトリに格納して、以下のコマンドを入力します
php composer.phar install
すると、カレントディレクトリにvendorというディレクトリが作成されます。
PHPからS3へアクセスするコード
ユーザを作成したときにダウンロードしたファイルを開いて下さい。こんな感じになっていますね
User Name,Access Key Id,Secret Access Key
"name",ABCDEFGHIJKLMNOPQRST,abcdefghijkAbcdefghiJk/0123456789ab
ダブルクオーテーションでくくられたのが名前で、カンマで区切って、2つめがKey、3つめがSecretになります。
Secretは間にスラッシュが入りますが、スラッシュを含めた長い文字列です。
値を確認したのちに、PHPファイルを作成しましょう。
<?php require 'vendor/autoload.php'; //require './aws.phar'; //これは動きませんでした use Aws\S3\S3Client; $s3Client = S3Client::factory(array( 'credentials' => array( 'key' => '/**ここはユーザを追加した時にダウンロードしたkeyをいれます**/', 'secret' => '/**ここはユーザを追加した時にダウンロードしたsecretをいれます**/', 'region' => 'ap-northeast-1', ) )); $s3Client->createBucket(array('Bucket' => '/**ここに作成したいバケット名をいれます**/')); ?>
あとはこのPHPファイルにアクセスすることで、S3のバケットが追加されます。
ローカル環境でもS3にアクセスできます
チェックするためにわざわざscpコマンドでアップロードするのも面倒ですね。上記の書き方は、ローカルテスト環境でも正常に動作しましたし、もちろんサーバへアップしてもうごきました。
テストがラクっていうのは素晴らしいですね。
credentialsについて
AWSのIAMで作成したユーザの、KeyとSecretCodeを書く場所は、実は何通りかあります。
今回のサンプルでは、PHPのソースにそのまま書いてしまいましたが、できればサーバの ~/.aws/credentialsに書いたほうが安全らしいです。
ただこの方法だとローカルから書き込みができなさそうですので、今回はあえてPHPファイルに書いてみました。
credentials公式マニュアルも参考にして下さい。
SDK for PHPのS3に対する公式マニュアル
AWS SDK for PHP S3
順序立てて説明してくれる公式マニュアル。しかし英語
AWS SDK for PHP