AWS Sdk for PHPでS3のバケットを作成する

ご無沙汰です。最近ブログをサボっていました。

さて、最近は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