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 中,您需要做兩件事:
在 S3 服務中建立儲存桶
建立一個 IAM 使用者以獲取 Key 和 Secret Key,然後將策略附加到該使用者以允許存取 S3 API。
與 AWS 中的任何東西一樣,在 S3 中建立儲存桶需要檢視大量設定選項,並想知道您是否需要其中的任何一個。 對於大多數用例,您不需要!
前往 S3 控制檯,建立一個儲存桶名稱(它必須是全域性唯一的,而不僅僅是您的 AWS 賬戶唯一),選擇您操作的區域,並保留所有預設值(包括標記為 「阻止公共存取設定」 的區域)。
其中一些選項是您可能想要使用的,但您可以稍後選擇它們。
建立儲存桶後,我們需要對其執行操作的許可權。 假設我們建立了一個名為 my-awesome-bucket 的儲存桶。
我們可以建立一個 IAM 使用者,選擇 「程式設計存取」,但不要附加任何策略或設定任何其他內容。 確保記錄祕密存取金鑰,因為他們只會顯示一次。
我建立了一個視訊,展示了在此處建立儲存桶和設定 IAM 許可權的過程: www.youtube.com/watch?v=FLIp6BLtwj...
存取 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 中,你可以像這樣使用檔案儲存:
# 如果您將 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 的頻寬費用。
如果您的 AWS 設定在私有網路中有伺服器,並使用 NAT 閘道器,請務必建立一個 S3 端點(閘道器型別)。這是在 VPC 服務的 Endpoints 部分中完成的。這允許向 / 來自 S3 的呼叫繞過 NAT 閘道器,從而避免額外的頻寬費用。使用它不需要額外費用。
如果您擔心檔案被覆蓋或刪除,請考慮在您的 S3 儲存桶中啟用 版本控制
考慮在您的 S3 儲存桶中啟用 Intelligent Tiering ,以幫助節省您在舊檔案後可能不會再次互動的檔案的儲存成本
請注意, 刪除大儲存桶(大量檔案)可能會花錢!這是由於您必須進行大量 API 呼叫才能刪除檔案。
相關推薦:
以上就是完全掌握AWS S3在Laravel中的使用的詳細內容,更多請關注TW511.COM其它相關文章!