在Laravel中AWS S3的功能是什么,怎么进行配置
Admin 2022-06-16 群英技术资讯 429 次浏览
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 调用才能删除文件。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP怎么实现读取excel导入数据库?这篇文文章主要介绍基于ThinkPHP 框架实现的读取excel导入数据库操作,下面分享了具体的实现代码,有需要的朋友可以参考一下。
PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下:PHP 代码 => Token => 抽象语法树 => Opcodes => 执行。
在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标、取下标(一)只取值,不取下标<?phpforeach(数组as值){//执行的任务}?>(二)同时取下标和值<?phpforeach(数组as下标=>值){//执行的任务}?>例子:<?php$students=array(
PHP允许您从脚本直接发送电子邮件。本节将为你介绍PHP发送电子邮件的具体方法。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
PHP自定义加密函数有哪些?在做项目的时候,我们可能会需要使用到加密函数,接下来小编就给大家分享一些PHP自定义加密函数,都是比较实用的,希望大家阅读完这篇文章能有收获,感兴趣的朋友就继续往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008