ホームページ  >  記事  >  PHPフレームワーク  >  Laravel で AWS S3 の使い方を完全にマスターする

Laravel で AWS S3 の使い方を完全にマスターする

WBOY
WBOY転載
2022-02-14 14:51:462921ブラウズ

この記事では、Laravel での AWS S3 の使用に関する関連知識を提供します。AWS S3 は、サーバー ファイルを保存する場所を提供します。クラウドにファイルを保存すると、多くのスペースを消費しません。ディスク スペース、Iそれがみんなに役立つことを願っています。

Laravel で AWS S3 の使い方を完全にマスターする

#AWS S3 は、サーバー ファイルを保存する場所を提供します。これを行う利点は次のとおりです。

  • バックアップ/冗長性 - S3 および類似の製品にはバックアップと冗長性が組み込まれています

  • 拡張機能- 最新のサーバー(サーバーレスまたはコンテナ化された環境、従来の負荷分散環境など)では、ファイルをサーバーの外に保存することが必要になります

  • ディスク使用量 - クラウドにファイルを保存するときに多くのディスク容量を必要としません

  • 機能- S3 (および他のクラウド) にはいくつかの優れた機能がありますファイルのバージョン管理、古いファイルを削除する (または安価に保存する) ためのライフサイクル ルール、削除保護などの機能

S3 を使用すると (単一サーバー設定でも) 頭痛の種を軽減できます。長い目で見れば。知っておくべきことは次のとおりです。

Configuration

S3 の設定には次のものが必要です:

  • Laravel の場合 - 通常は .env 経由ですが、場合によっては config/filesystem.php でも使用できます。

  • ##あなたの AWS アカウント

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

config/filesystem.php ファイルには次のオプションが含まれています:

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),
        ],
    ],
];

.env ファイルでは使用しないオプションもあります。たとえば、AWS_URL を設定できます。これは、CloudFlare の R2 や Digital Ocean の Spaces など、S3 互換 API を備えた他のファイル ストレージ クラウドを使用する場合に便利です。

AWS 構成

AWS では、次の 2 つのことを行う必要があります:

  • S3 サービスにバケットを作成する

  • IAM ユーザーを作成してキーと秘密キーを取得し、S3 API へのアクセスを許可するポリシーをユーザーにアタッチします。

AWS の他のものと同様、S3 でバケットを作成するには、多くの設定オプションを検討し、それらが必要かどうかを検討する必要があります。ほとんどの使用例では、その必要はありません。

S3 コンソールに移動し、バケット名を作成し (AWS アカウントに固有であるだけでなく、グローバルに一意である必要があります)、運用しているリージョンを選択し、すべてのデフォルトのままにします (「パブリックをブロック」のマークを含む)アクセス設定」エリア)。

これらのオプションの一部は使用する可能性がありますが、後で選択できます。

バケットを作成した後、バケットに対して操作を実行するための権限が必要です。 my-awesome-bucket というバケットを作成するとします。

IAM ユーザーを作成し、「プログラムによるアクセス」を選択できますが、ポリシーをアタッチしたり、その他の設定をしたりすることはできません。シークレット アクセス キーは 1 回だけ表示されるため、必ず記録してください。

バケットの作成と IAM 権限の設定のプロセスを示すビデオをここに作成しました: www.youtube.com/watch?v=FLIp6BLtwj...

Visit## The #Access Key

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 の使用法

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 をさらに便利に使用する方法を見つけてください。

価格

S3 はかなり安いです。ほとんどの人は月に数セントから数ドルを費やします。これは、ファイルを使い終わったときに S3 からファイルを削除する場合、または一定期間後にファイルを削除するようにライフサイクル ルールを設定する場合に特に当てはまります。

価格は (主に) 3 つの要素によって決まります。価格は地域や用途によって異なります。これは、S3 に大量のデータを保存する Chipper CI (私の Laravel アプリケーションの CI) の特定の月に基づく実際のアプリケーションの使用例です:

    #Storage
  • : 1 GB あたり $0.023、~992GB ~= $22.82

  • API 呼び出し数 : ~700 万リクエスト ~ = 12 ドル

  • 帯域幅使用量: これは非常に不正確です。データ転送には約 23 ドルの費用がかかりますが、これには EC2 ベースの帯域幅料金は含まれません。

S3 に関する役立つ情報

AWS セットアップでプライベート ネットワーク内にサーバーがあり、NAT ゲートウェイを使用している場合は、必ず S3 エンドポイント (ゲートウェイ タイプ) を作成してください。これは、VPC サービスのエンドポイント セクションで行われます。これにより、S3 との間の通話が NAT ゲートウェイをバイパスできるようになり、追加の帯域幅料金が回避されます。使用するのに追加料金はかかりません。

ファイルの上書きまたは削除が心配な場合は、S3 バケットでバージョニングを有効にすることを検討してください。

S3 バケットでインテリジェント階層化を有効にして、ファイルの保存コストを節約することを検討してください。古いものになると再び操作されなくなります。

大きなバケット (大量のファイル) を削除すると、費用がかかる可能性があることに注意してください。これは、ファイルを削除するために多数の API 呼び出しを行う必要があるためです。

関連する推奨事項: Laravel ビデオ チュートリアル

以上がLaravel で AWS S3 の使い方を完全にマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。