首頁  >  文章  >  php框架  >  完全掌握AWS S3在Laravel的使用

完全掌握AWS S3在Laravel的使用

WBOY
WBOY轉載
2022-02-14 14:51:462989瀏覽

這篇文章為大家帶來了關於在Laravel中使用AWS S3的相關知識,AWS S3為我們提供了儲存伺服器檔案的地方,在雲端儲存檔案不需要佔用太多的磁碟空間,希望對大家有幫助。

完全掌握AWS S3在Laravel的使用

AWS S3 為我們提供了儲存伺服器檔案的地方。這樣做有的好處是:

  • 備份/ 冗餘 - S3 和類似產品具有內建備份和冗餘

  • 擴展- 在現代伺服器(例如無伺服器或容器化環境以及傳統負載平衡環境)中,在伺服器外保存檔案成為了必要的

  • 磁碟使用率 - 在雲端儲存檔案時不需要太多的磁碟空間

  • 功能- S3(和其他雲端)具有一些很棒的功能,例如對檔案的版本控制、刪除舊檔案(或以更便宜的方式儲存它們)的生命週期規則、刪除保護等等

現在使用S3 (即使在單一伺服器設定中)從長遠來看可以減少麻煩。這是你該知道的!

設定

設定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,這對於使用具有 S3 相容 API 的其他檔案儲存雲是有用的,例如 CloudFlare 的 R2 或 Digital Ocean 的 Spaces。

AWS 設定

在AWS 中,您需要做兩件事:

  • 在S3 服務中建立儲存桶

  • 建立一個IAM 使用者以取得Key 和Secret Key,然後將策略附加到該使用者以允許存取S3 API。

與 AWS 中的任何東西一樣,在 S3 中建立儲存桶需要查看大量配置選項,並想知道您是否需要其中的任何一個。對於大多數用例,您不需要!

前往S3 控制台,建立一個儲存桶名稱(它必須是全域唯一的,而不僅僅是您的AWS 帳戶唯一),選擇您操作的區域,並保留所有預設值(包括標記為“阻止公共存取設定” 的區域)。

其中一些選項是您可能想要使用的,但您可以稍後選擇它們。

建立儲存桶後,我們需要對其執行操作的權限。假設我們建立了一個名為 my-awesome-bucket 的儲存桶。

我們可以建立一個 IAM 用戶,選擇 “程式存取”,但不要附加任何策略或設定任何其他內容。確保記錄秘密存取金鑰,因為他們只會顯示一次。

我創建了一個視頻,展示了在此處創建存儲桶和設置IAM 權限的過程: www.youtube.com/watch?v=FLIp6BLtwj...

訪問Access KeySecret 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 中)被附加到儲存桶名稱中,因此名為path/to/file.ext 的檔案將存在於s3://my-awesome-bucket/path/to/file.ext `。

從技術上講,S3 中不存在目錄。在 S3 中,檔案稱為 “物件”,檔案路徑 名稱是 “物件鍵”。因此,在儲存桶 my-awesome-bucket 中,我們剛剛建立了一個帶有鍵 path/to/file.ext 的物件。

請務必查看 Laravel 文件的 Storage  以找到更多有用的使用 Storage 的方法,包括檔案流和臨時 URL。

價錢

S3 相當便宜 —— 我們大多數人每月會花費幾美分到幾美元。如果您在使用完文件後從 S3 中刪除文件,或者設定生命週期規則以在設定的時間段後刪除文件,則尤其如此。

定價(主要)由 3 個維度驅動。價格因地區和用途而異。以下是一個基於給定月份的Chipper CI (我的Laravel 應用程式的CI)實際應用程式使用情況的範例,它在S3 中儲存了大量資料:

  • 儲存: 每GB 0.023 美元,~992GB ~= $22.82 美元

  • API 呼叫數量: 約700 萬個請求~= $12

  • 頻寬使用: 這是非常不精確的。資料傳輸費用約為 23 美元,但這不包括基於 EC2 的頻寬費用。

關於S3 的有用資訊

如果您的AWS 設定在私有網路中有伺服器,並使用NAT 網關,請務必建立一個S3 端點(網關類型) 。這是在 VPC 服務的 Endpoints 部分中完成的。這允許向 / 來自 S3 的呼叫繞過 NAT 網關,從而避免額外的頻寬費用。使用它不需要額外費用。

如果您擔心檔案被覆蓋或刪除,請考慮在您的S3 儲存桶中啟用版本控制 

考慮在您的S3 儲存桶中啟用Intelligent Tiering ,以幫助節省您在舊文件後可能不會再次互動的文件的儲存成本

請注意, 刪除大儲存桶(大量文件)可能會花錢!這是由於您必須進行大量 API 呼叫才能刪除檔案。

相關推薦:Laravel影片教學

#

以上是完全掌握AWS S3在Laravel的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除