概要
S3バケットを作成し、Laravelから使えるようにするためのメモです
参考記事
一番参考にした記事
[Route53とCloudFrontとS3で静的コンテンツをホスティングするメモ] (https://qiita.com/buta/items/06a7e147d865fb862783)
S3バケットの作成
AWSマネジメントコンソールからS3を開き、「バケットを作成する」を押す
「バケット名」と「リージョン」のみ入力し次に進む
「パブリックアクセスを全てブロック」にチェックを入れる
また、「システムのアクセス許可」を無効にしておきます
設定の内容を確認して「バケットを作成」を押します
これでS3バケットの作成が完了しました
AWSのアクセスキーを準備する
※こちらの記事でIAMを使ったマネジメントコンソールへのアクセス制御を行っているのが前提です。
AWSのマネジメントコンソールのIAMを選択し以下の表示になったら
1 ユーザを選択
2 「認証情報」
3 「アクセスキーの作成」
の順に進むと以下の画面になる
csv
のダウンのロードを行っておく
S3とLaravelを結びつける
filesystem
を入れます
cd /var/www/{プロジェクト名} && composer require league/flysystem-aws-s3-v3
.env
を編集
以下を足します
AWS_ACCESS_KEY_ID={上で取得したアクセスキー}
AWS_SECRET_ACCESS_KEY={上で取得したシークレットアクセスキー}
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET={上で作ったバケット名}
具体的な使い方
使いたいControler
使いたいコントローラに以下を足す
use Illuminate\Support\Facades\Storage;
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
// S3に格納する処理
public function store(Request $request) {
//リクエストから画像を受ける
$image = $request->file('image');
// 第一引数:保存場所(バケット内)のパス
// 第二引数:保存したい画像
// 第三引数: 外部からアクセスするのに必要らしい
Storage::disk('s3')->putFile('/',$image,'public');
}
AWS S3のバケット内を確認して画像が保存されていれば成功です
CloudFront経由でのアクセス設定
マネジメントコンソールから「Cloud Front」を選択し以下の画面へ
Create Distribution
を押下
以下の画面でWEBの方のGet Started
を押下
「Origin Domain Name」で上で作ったs3を選択し
それ以外はそのままで下にスクロールし、次に進みます
画像では「status」がIn Progress
となっていますが、
Deployed
となれば完了です
Cloud Front のサブドメイン設定
Route53 でs3(cloud front)用のサブドメインを設定します
【前提】ドメインの設定は終わっている
###cloud front 用SSL発行しなおす
そのまま右下の「確認」を押下
右下の「確認とリクエスト」を押下
ドメインの「▶」押すと出てくる、「Route53でのレコードの作成」の青いボタンを押し、
その後「続行」を押下
直後は画像のように検証保留中となっていますが、この部分が「発行済み」に変わると完了です
再びCloud Front の Distrubution のEditに戻るとCustom SSL Certificate
が選択可能になっています。チェックを入れた後、先ほど取得したSSL証明書を選択し、編集を終了します。
その後、DistributionのDomain Nameをコピーしておきます
Route53でサブドメイン設定
Route53で既に作成してあるホストゾーンを選択し以下の画面に入り、
①「レコードセットの作成」を選択。
②右側に現れるフォームの「名前」の部分でサブドメインを設定し、値にコピーしたDomain Nameをペーストする。タイプを「CNAME - 正規名」を選択
③作成ボタンを押す
これで、今設定したサブドメイン/ファイルパス
で画像にアクセスすることができます