Dieser Artikel vermittelt Ihnen relevantes Wissen über die Verwendung von AWS S3 in Laravel. Das Speichern von Dateien in der Cloud nimmt nicht zu viel Speicherplatz in Anspruch . Jeder ist hilfsbereit.
AWS S3 bietet uns einen Ort zum Speichern von Serverdateien. Dies hat folgende Vorteile:
Sicherung/Redundanz – S3 und ähnliche Produkte verfügen über integrierte Sicherung und Redundanz
Skalierung – Auf modernen Servern wie serverlosen oder Container-Umgebungen sowie traditionellen Workloads In einer ausgeglichenen Umgebung wird das Speichern von Dateien außerhalb des Servers zu einer Notwendigkeit
Festplattennutzung – Beim Speichern von Dateien in der Cloud ist nicht viel Speicherplatz erforderlich
Funktionen- S3 (und andere Clouds) haben einige tolle Funktionen wie Versionskontrolle von Dateien, Lebenszyklusregeln zum Löschen alter Dateien (oder deren kostengünstigeres Speichern), Löschschutz und mehr
Jetzt kann Ihnen die Verwendung von S3 (auch in einem Einzelserver-Setup Medium) auf lange Sicht Ärger ersparen. Das sollten Sie wissen!
Die Konfiguration von S3 erfordert Folgendes:
In Laravel – normalerweise über .env, möglicherweise aber in config/filesystem.php
Ihr AWS-Konto
Laravel Config
Wenn Sie Überprüfen Sie Ihre Datei config/filesystem.php. Sie werden feststellen, dass es bereits eine S3-Option gibt. Es ist bereits als Umgebungsvariable in der .env-Datei festgelegt!
Sofern Sie dies nicht anpassen müssen, können Sie es in Ruhe lassen und es einfach in der .env-Datei festlegen:
#(可选)将默认文件系统驱动设置为 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
Die Datei config/filesystem.php enthält die folgenden Optionen:
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), ], ], ];
Einige Optionen haben wir nicht die in der Datei verwendete .env. Sie können beispielsweise die AWS_URL festlegen, was für die Verwendung anderer Dateispeicher-Clouds mit S3-kompatiblen APIs nützlich ist, z. B. R2 von CloudFlare oder Spaces von Digital Ocean.
In AWS müssen Sie zwei Dinge tun:
Einen Bucket im S3-Dienst erstellen
Erstellen Sie einen IAM-Benutzer, um den Schlüssel und den geheimen Schlüssel zu erhalten, und hängen Sie dann die Richtlinie an diesen Benutzer an um den Zugriff auf die S3-API zu ermöglichen.
Wie bei allem in AWS erfordert das Erstellen eines Buckets in S3 die Prüfung vieler Konfigurationsoptionen und die Frage, ob Sie welche benötigen. In den meisten Anwendungsfällen ist dies nicht erforderlich!
Gehen Sie zur S3-Konsole, erstellen Sie einen Bucket-Namen (er muss global eindeutig sein und nicht nur für Ihr AWS-Konto), wählen Sie die Region aus, in der Sie tätig sind, und belassen Sie alle Standardeinstellungen (einschließlich der mit „Öffentlichen Zugriff blockieren“ gekennzeichneten Einstellungen). " Bereich).
Einige dieser Optionen möchten Sie vielleicht nutzen, aber Sie können sie später auswählen.
Nachdem wir den Bucket erstellt haben, benötigen wir Berechtigungen, um Vorgänge daran auszuführen. Nehmen wir an, wir erstellen einen Bucket namens „my-awesome-bucket“.
Wir können einen IAM-Benutzer erstellen, „Programmatic Access“ auswählen, aber keine Richtlinien anhängen oder etwas anderes festlegen. Notieren Sie sich unbedingt die geheimen Zugangsschlüssel, da diese nur einmal angezeigt werden.
Ich habe hier ein Video erstellt, das den Prozess der Erstellung eines Buckets und des Festlegens von IAM-Berechtigungen zeigt: www.youtube.com/watch?v=FLIp6BLtwj...
Zugriff Access Key
和 Secret Access Key
应放入您的 .env
in der Datei.
Klicken Sie als Nächstes auf IAM-Benutzer und fügen Sie eine Inline-Richtlinie hinzu. Bearbeiten Sie es mit dem JSON-Editor und fügen Sie Folgendes hinzu (aus der Flysystem-Dokumentation):
{ "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/*" ] } ] }
Dadurch können wir die erforderlichen S3-API-Operationen für unseren neuen Bucket ausführen.
In Laravel können Sie die Dateispeicherung wie folgt verwenden:
# 如果您将 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');
Der Pfad der Datei (in S3) wird an den Bucket-Namen angehängt, sodass in s3 eine Datei mit dem Namen path/to/file.ext existiert ://my-awesome-bucket/path/to/file.ext`.
Technisch gesehen existiert das Verzeichnis in S3 nicht. In S3 werden Dateien „Objekte“ genannt und der Dateipfad + Name ist der „Objektschlüssel“. Also haben wir im Bucket my-awesome-bucket gerade ein Objekt mit dem Schlüssel path/to/file.ext erstellt.
Schauen Sie sich unbedingt die Laravel-Dokumentation für Storage an, um weitere nützliche Möglichkeiten zur Nutzung von Storage zu finden, einschließlich Dateistreams und temporärer URLs.
Der S3 ist ziemlich günstig – die meisten von uns geben ein paar Cent bis ein paar Dollar pro Monat aus. Dies gilt insbesondere, wenn Sie Dateien aus S3 löschen, wenn Sie sie nicht mehr verwenden, oder Lebenszyklusregeln einrichten, um Dateien nach einem festgelegten Zeitraum zu löschen.
Die Preisgestaltung wird (hauptsächlich) von drei Dimensionen bestimmt. Die Preise variieren je nach Region und Nutzung. Hier ist ein Beispiel basierend auf der tatsächlichen Anwendungsnutzung für einen bestimmten Monat mit Chipper CI (dem CI für meine Laravel-Anwendung), das eine große Datenmenge in S3 speichert:
Speicher: 0,023 $ pro GB, ~ 992 GB ~= 22,82 $
API-Rufnummer: ~7 Millionen Anfragen ~ = 12 $
Bandbreitennutzung: Dies ist sehr ungenau. Die Datenübertragung kostet etwa 23 US-Dollar, EC2-basierte Bandbreitengebühren sind darin jedoch nicht enthalten.
Wenn Ihr AWS-Setup über Server in einem privaten Netzwerk verfügt und ein NAT-Gateway verwendet, stellen Sie sicher, dass Sie einen S3-Endpunkt (Gateway-Typ) erstellen. Dies erfolgt im Abschnitt „Endpunkte“ des VPC-Dienstes. Dadurch können Anrufe zu/von S3 das NAT-Gateway umgehen und so zusätzliche Bandbreitengebühren vermeiden. Für die Nutzung fallen keine zusätzlichen Kosten an.
Wenn Sie befürchten, dass Dateien überschrieben oder gelöscht werden, sollten Sie erwägen, die Versionierung in Ihrem S3-Bucket zu aktivieren.
Erwägen Sie die Aktivierung von Intelligent Tiering in Ihrem S3-Bucket, um alte Dateien zu speichern, mit denen Sie möglicherweise nicht mehr interagieren. Speicherkosten für Dateien.
Bitte beachten Sie dass das Löschen großer Buckets (viele Dateien) Geld kosten kann! Dies liegt an der großen Anzahl von API-Aufrufen, die Sie zum Löschen der Datei durchführen müssen.
Verwandte Empfehlungen: Laravel-Video-Tutorial
Das obige ist der detaillierte Inhalt vonBeherrschen Sie die Verwendung von AWS S3 in Laravel vollständig. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!