この記事では、Laravel での AWS S3 の使用に関する関連知識を提供します。AWS S3 は、サーバー ファイルを保存する場所を提供します。クラウドにファイルを保存すると、多くのスペースを消費しません。ディスク スペース、Iそれがみんなに役立つことを願っています。
#AWS S3 は、サーバー ファイルを保存する場所を提供します。これを行う利点は次のとおりです。
バックアップ/冗長性 - S3 および類似の製品にはバックアップと冗長性が組み込まれています
拡張機能- 最新のサーバー(サーバーレスまたはコンテナ化された環境、従来の負荷分散環境など)では、ファイルをサーバーの外に保存することが必要になります
ディスク使用量 - クラウドにファイルを保存するときに多くのディスク容量を必要としません
機能- S3 (および他のクラウド) にはいくつかの優れた機能がありますファイルのバージョン管理、古いファイルを削除する (または安価に保存する) ためのライフサイクル ルール、削除保護などの機能
S3 を使用すると (単一サーバー設定でも) 頭痛の種を軽減できます。長い目で見れば。知っておくべきことは次のとおりです。
S3 の設定には次のものが必要です:
Laravel の場合 - 通常は .env 経由ですが、場合によっては config/filesystem.php でも使用できます。
Laravel Config
config/ filesystem.php ファイルを確認する場合、すでに S3 オプションがあることがわかります。これは、.env ファイル内で環境変数としてすでに設定されています。 これをカスタマイズする必要がない限り、そのままにして .env ファイルに設定するだけでかまいません:#(可选)将默认文件系统驱动设置为 S3 FILESYSTEM_DRIVER=sqs # 添加基于 S3 的文件驱动所需的参数 AWS_ACCESS_KEY_ID=xxxzzz AWS_SECRET_ACCESS_KEY=xxxyyy AWS_DEFAULT_REGION=us-east-2 AWS_BUCKET=my-awesome-bucket AWS_USE_PATH_STYLE_ENDPOINT=false
return [ 'disks' => [ // 'local' 和 'public' 省略... 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), ], ], ];
と Secret Access Key
は、 .env
ファイルに配置する必要があります。 次に、[IAM ユーザー] をクリックしてインライン ポリシーを追加します。 JSON エディターを使用して編集し、次の行を追加します (Flysystem ドキュメントから):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1420044805001", "Effect": "Allow", "Action": [ "s3:ListBuckets", "s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:ReplicateObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::my-awesome-bucket", "arn:aws:s3:::my-awesome-bucket/*" ] } ] }
これにより、新しいバケットで必要な S3 API 操作を実行できるようになります。
Laravel の使用法
# 如果您将 S3 设置为默认值: $contents = Storage::get('path/to/file.ext'); Storage::put('path/to/file.ext', 'some-content'); # 如果您没有将 S3 作为默认设置: $contents = Storage::disk('s3')->get('path/to/file.ext'); Storage::disk('s3')->put('path/to/file.ext', 'some-content');
(S3 内の) ファイルへのパスがバケット名に追加されるため、A path/to/file.ext という名前のファイルは s3://my-awesome-bucket/path/to/file.ext` に存在します。
技術的には、S3 にはディレクトリは存在しません。 S3 では、ファイルは「オブジェクト」と呼ばれ、ファイルのパス名は「オブジェクトキー」と呼ばれます。したがって、バケット my-awesome-bucket に、キー path/to/file.ext を持つオブジェクトを作成しました。
Storage の Laravel ドキュメントを必ずチェックして、ファイル ストリームや一時 URL など、Storage をさらに便利に使用する方法を見つけてください。
価格
価格は (主に) 3 つの要素によって決まります。価格は地域や用途によって異なります。これは、S3 に大量のデータを保存する Chipper CI (私の Laravel アプリケーションの CI) の特定の月に基づく実際のアプリケーションの使用例です:
API 呼び出し数 : ~700 万リクエスト ~ = 12 ドル
帯域幅使用量: これは非常に不正確です。データ転送には約 23 ドルの費用がかかりますが、これには EC2 ベースの帯域幅料金は含まれません。
AWS セットアップでプライベート ネットワーク内にサーバーがあり、NAT ゲートウェイを使用している場合は、必ず S3 エンドポイント (ゲートウェイ タイプ) を作成してください。これは、VPC サービスのエンドポイント セクションで行われます。これにより、S3 との間の通話が NAT ゲートウェイをバイパスできるようになり、追加の帯域幅料金が回避されます。使用するのに追加料金はかかりません。
ファイルの上書きまたは削除が心配な場合は、S3 バケットでバージョニングを有効にすることを検討してください。
S3 バケットでインテリジェント階層化を有効にして、ファイルの保存コストを節約することを検討してください。古いものになると再び操作されなくなります。
大きなバケット (大量のファイル) を削除すると、費用がかかる可能性があることに注意してください。これは、ファイルを削除するために多数の API 呼び出しを行う必要があるためです。
関連する推奨事項: Laravel ビデオ チュートリアル
以上がLaravel で AWS S3 の使い方を完全にマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。