Laravel クラウドストレージの利用

2023/01/31
石原

こんにちは。株式会社リンクネット、ソリューション事業部の石原です。

当社ではPHPのフレームワークであるLaravelを使用したWEBサービスの開発を行っています。

AWS S3などのクラウドストレージを使用した開発を行う場合に、ローカル開発環境でも同様の操作が行えるよう、S3互換APIを提供するMinIOを利用する設定を行いましたのでご紹介します。

■ 環境

$ sail artisan --version
Laravel Framework 9.49.0

■ ローカル開発環境

Laravelアプリケーションの新規作成時に、デフォルトのスタック以外に、MinIOを有効化しておきます。不要なスタックがあれば削除してください。

$ curl -s "https://laravel.build/example-app2?with=mysql,redis,meilisearch,mailpit,selenium,minio" | bash

S3ドライバをインストールしておく必要があります。

$ sail composer require league/flysystem-aws-s3-v3 "^3.0"

http://localhost:8900 にアクセスして、バケットを作成しておきます。docker-compose.ymlに記載されているMINIOROOTUSERとMINIOROOTPASSWORDでログインします。

.envファイルには以下のように設定しました。エンドポイントのIPアドレスにホストマシンのIPアドレスを指定することで、temporaryUrlメソッドによる一時ストレージURLの生成もうまく動作するようになります。

FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID={MINIO_ROOT_USERの値}
AWS_SECRET_ACCESS_KEY={MINIO_ROOT_PASSWORDの値}
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET={バケット名}
AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_ENDPOINT=http://{ホストマシンのIPアドレス}:9000

■ AWS(EC2 + S3)

あらかじめバケットを作成し、バケットにアクセス可能なIAMユーザーのアクセスキーペアを準備しておきます。

.envファイルには以下のように設定しました。

FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID={IAMユーザーのアクセスキーID}
AWS_SECRET_ACCESS_KEY={IAMユーザーのシークレットアクセスキー}
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET={バケット名}
AWS_USE_PATH_STYLE_ENDPOINT=false

■ Alibaba Cloud(ECS + OSS)

Alibaba Cloud のOSSを利用する場合、インターネット経由とイントラネット経由でエンドポイントのURLが異なります。 そのため、専用のパッケージを利用することにしました。

$ sail composer require alphasnow/aliyun-oss-laravel

あらかじめバケットを作成し、バケットにアクセス可能なRAMユーザーのアクセスキーペアを準備しておきます。

.envファイルには以下のように設定しました。

FILESYSTEM_DISK=s3
OSS_ACCESS_KEY_ID={RAMユーザーのアクセスキーID}
OSS_ACCESS_KEY_SECRET={RAMユーザーのシークレットアクセスキー}
OSS_BUCKET={バケット名}
OSS_ENDPOINT=oss-ap-northeast-1.aliyuncs.com
OSS_INTERNAL=oss-ap-northeast-1-internal.aliyuncs.com

■ まとめ

上記のように設定を行うことで、プログラムには変更を加えることなく、ローカル開発環境でもクラウドストレージの操作を気軽に検証することが可能になりました。

前の記事次の記事