Help us understand the problem. What is going on with this article?

AWS SDK for PHPをラップしたS3 Wrapper を作ってみた

More than 1 year has passed since last update.

はじめに

最近、S3にデータを保存したいがやり方がわからないという話をよく聞く。
以前に比べて随分AWSが一般の人の手にも届いているということだと思っている。
しかし、ディベロッパーに対して優しいとは言い難いドキュメントしかAWSが出してくれないので、公式のドキュメントを読んでもイマイチ初見では理解できないのではないかと思う。

そこで、AWSのS3上にPHPでImageデータをアップロードする際に役に立つSDKのラッパーを作成した。
このラッパーを使えば簡単にほとんどコピペで画像をS3にアップロードすることができる。
また、AWS SDK for PHPでは連想配列を指定する形になっているが、これだとオブジェクト的にプログラムを操作できないので、できるだけオブジェクト操作できるような形にした。
まだまだ、未完成な部分があり、必要最小限のメソッドしか定義されていないが、今後さらに機能拡張をしていくつもりである。

導入

PHPで公開されているライブラリを利用する為にはComposerというパッケージ管理ソフトを利用する。
Composerをインストールするには以下のコマンドを利用する。

setup.sh
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Composerをインストールできたらプロジェクトを作成し、今回の目玉のライブラリであるaws-s3-wrapperをインストールする。

setup2.sh
mkdir hoge
cd hoge
composer require syoou/aws-s3-wrapper
touch index.php

ライブラリの使い方

これでプロジェクトとして最低限の環境が整った。
index.phpにこれから示すプログラムを記述するだけで、S3に画像をアップロードできる。
ネット上の記事にはちゃんとコピーしただけで動作するサンプルプログラムがないので、実際にコピーしただけで動作するプログラムを下記に貼り付ける。

index.php
<?php

use syoou\Aws\S3Wrapper;

require_once(__DIR__ . '/vendor/autoload.php');

$config = [
    's3' => [
        'key' => 'アクセスキー',
        'secret' => 'シークレットキー',
        'bucket' => 'バケット名',
    ]
];

$s3 = new S3Wrapper($config);
$url = $s3->makeObjectArray()
           ->addSourceFile(__DIR__ . '/test.png')
           ->addKey('test/img.png')
           ->addImageContentType('png')
           ->upload();
echo $url;

configのkeyとsecretとbucketをそれぞれAWSの管理コンソールから取得し、入力する。
あとの部分はこれから一つひとつ説明する。

まず、初めの13行は設定ファイルやオートロードなどの項目なので、説明はカットする。
この通りに書けば動くので、問題ない。

問題は$s3からである。
まず、インスタンスを生成する。
その後、ベースとなるobjectArrayを作成するメソッドを実行する。
そのあとは、ソースファイルやキー、コンテンツタイプを追加していく。
・ ソースファイルはS3にアップロードしたい画像のPathを指定する。
・ キーは実際にS3にアップロードした時のファイル名とpathを指定する。
・ コンテンツタイプはファイルの形式を指定する今回はpng形式の画像なので、pngを指定する。
最後のuploadメソッドはアップロードを実行するためのメソッドである。
返り値の$urlにはアップロードした画像のURLが格納されている。

おわりに

今回はAWS SDK for PHPをラップしてS3に画像を簡単にアップロードするためのラッパーを作成した。
課題もまだまだあるが、基本的な挙動がわかってもらえるような記事になっていればこの記事の役目は十分ではなかと思う。

参考

S3Clientクラス(AWS SDK for PHP 3.x)
aws-s3-wrapper

Syo_pr
PHP / Kotlin / Python / Swift / HTML / CSS / JavaScript / MariaDB / 大学では、過去にはOpenMPやSIMDによる並列化 / 大学院では、歌詞動画の自動生成に関する機械学習 / ソフトウェアテストを書くのがとても好きです / 単体テスト、結合テストの魅力を広めて行きたいと思います / 依存性注入していきましょう!!!
recode
Recode は個人開発者が集う Slack コミュニティです。エンジニア・デザイナー等の職種を問わず、多様性のあるコミュニティを目指しています。
http://hukumoto.pe-gawa.com/club/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away