Cet article vous apporte des connaissances pertinentes sur l'utilisation d'AWS S3 dans LaravelAWS S3 nous fournit un endroit pour stocker les fichiers du serveur. Le stockage des fichiers dans le cloud ne prend pas trop d'espace disque. . Tout le monde est utile.
AWS S3 nous fournit un emplacement pour stocker les fichiers du serveur. Les avantages de cette opération sont les suivants :
Sauvegarde/Redondance - S3 et les produits similaires ont une sauvegarde et une redondance intégrées
Échelle - Sur des serveurs modernes tels que les environnements sans serveur ou conteneurisés ainsi que sur les charges de travail traditionnelles environnement équilibré), la sauvegarde des fichiers en dehors du serveur devient une nécessité
Utilisation du disque - Peu d'espace disque est requis lors du stockage de fichiers dans le cloud
Caractéristiques- S3 (et d'autres cloud) a de superbes des fonctionnalités telles que le contrôle de version des fichiers, les règles de cycle de vie pour supprimer les anciens fichiers (ou les stocker à moindre coût), la protection contre la suppression, et plus encore
Maintenant, l'utilisation de S3 (même dans une configuration de serveur unique Medium) peut vous éviter des problèmes à long terme. Voici ce que vous devez savoir !
La configuration de S3 nécessite les éléments suivants :
Dans Laravel - généralement via .env, mais éventuellement dans config/filesystem.php
Votre compte AWS
Laravel Config
Si vous vérifiez votre fichier config/filesystem.php, vous constaterez qu'il existe déjà une option S3. Elle est déjà définie comme variable d'environnement dans le fichier .env !
À moins que vous ayez besoin de personnaliser cela, vous pouvez le laisser tranquille et simplement le définir dans le fichier .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
Le fichier config/filesystem.php contient les options suivantes :
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), ], ], ];
Certaines options que nous n'avons pas dans le .env utilisé dans le fichier. Par exemple, vous pouvez définir l'AWS_URL, ce qui est utile pour utiliser d'autres nuages de stockage de fichiers avec des API compatibles S3, tels que R2 de CloudFlare ou Spaces de Digital Ocean.
Dans AWS, vous devez faire deux choses :
Créer un compartiment dans le service S3
Créer un utilisateur IAM pour obtenir la clé et la clé secrète, puis attacher la stratégie à cet utilisateur pour autoriser l'accès à l'API S3.
Comme pour tout dans AWS, créer un compartiment dans S3 nécessite d'examiner de nombreuses options de configuration et de se demander si vous en avez besoin. Dans la plupart des cas d’utilisation, ce n’est pas nécessaire !
Accédez à la console S3, créez un nom de compartiment (il doit être unique au monde, pas seulement unique à votre compte AWS), sélectionnez la région dans laquelle vous opérez et laissez toutes les valeurs par défaut (y compris celle marquée « Bloquer l'accès public »). " zone).
Certaines de ces options sont celles que vous souhaiterez peut-être utiliser, mais vous pourrez les choisir plus tard.
Après avoir créé le bucket, nous avons besoin d'autorisations pour effectuer des opérations dessus. Disons que nous créons un bucket appelé my-awesome-bucket.
Nous pouvons créer un utilisateur IAM, sélectionner « Accès programmatique », mais ne pas attacher de stratégie ni définir quoi que ce soit d'autre. Assurez-vous d'enregistrer les clés d'accès secrètes car elles ne seront affichées qu'une seule fois.
J'ai créé une vidéo montrant le processus de création d'un bucket et de définition des autorisations IAM ici : www.youtube.com/watch?v=FLIp6BLtwj...
Accès Access Key
和 Secret Access Key
应放入您的 .env
dans le fichier.
Ensuite, cliquez sur Utilisateurs IAM et ajoutez une stratégie en ligne. Modifiez-le à l'aide de l'éditeur JSON et ajoutez ce qui suit (à partir de la documentation 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/*" ] } ] }
Cela nous permet d'effectuer les opérations API S3 requises sur notre nouveau bucket.
Dans Laravel, vous pouvez utiliser le stockage de fichiers comme ceci :
# 如果您将 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');
Le chemin du fichier (dans S3) est ajouté au nom du bucket, donc un fichier nommé chemin/vers/fichier.ext existera dans s3 ://my-awesome-bucket/path/to/file.ext`.
Techniquement, le répertoire n'existe pas dans S3. Dans S3, les fichiers sont appelés « objets » et le chemin du fichier + le nom sont la « clé de l'objet ». Ainsi, dans le bucket my-awesome-bucket, nous venons de créer un objet avec la clé path/to/file.ext.
Assurez-vous de consulter la documentation Laravel pour le stockage pour trouver des façons plus utiles d'utiliser le stockage, y compris les flux de fichiers et les URL temporaires.
Le S3 est assez bon marché – la plupart d’entre nous dépenseront quelques centimes à quelques dollars par mois. Cela est particulièrement vrai si vous supprimez des fichiers de S3 lorsque vous avez fini de les utiliser, ou si vous configurez des règles de cycle de vie pour supprimer des fichiers après une période de temps définie.
La tarification est (principalement) déterminée par 3 dimensions. Les prix varient selon la région et l'utilisation. Voici un exemple basé sur l'utilisation réelle d'une application pour un mois donné avec Chipper CI (le CI de mon application Laravel), qui stocke une grande quantité de données dans S3 :
Storage : 0,023 $ par Go, ~ 992 Go ~= 22,82 $
Numéro d'appel API : ~7 millions de requêtes ~ = 12 $
Utilisation de la bande passante : C'est très imprécis. Le transfert de données coûte environ 23 $, mais cela n'inclut pas les frais de bande passante basés sur EC2.
Si votre configuration AWS dispose de serveurs dans un réseau privé et utilise une passerelle NAT, assurez-vous de créer un point de terminaison S3 (type passerelle). Cela se fait dans la section Endpoints du service VPC. Cela permet aux appels vers/depuis S3 de contourner la passerelle NAT, évitant ainsi des frais de bande passante supplémentaires. Il n’y a aucun coût supplémentaire pour l’utiliser.
Si vous craignez que des fichiers soient écrasés ou supprimés, envisagez d'activer la gestion des versions dans votre compartiment S3.
Envisagez d'activer la hiérarchisation intelligente dans votre compartiment S3 pour vous aider à sauvegarder les anciens fichiers avec lesquels vous ne pourrez plus interagir. Coût de stockage des fichiers
Veuillez noter que la suppression de gros compartiments (beaucoup de fichiers) peut coûter de l'argent ! Cela est dû au grand nombre d'appels API que vous devez effectuer pour supprimer le fichier.
Recommandations associées : Tutoriel vidéo Laravel
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!