技术研究之阿里云OSS
我在开发大疆服务的时候,用到了阿里云的OSS服务,其中的一些参数刚开始的时候不是很理解,后来花了很长的时间去理解这个东西的。其实不应该算事在
参考文章:
【1】.用了一年多之后才搞懂阿里云OSS收费细则 需要把“低频访问”Bucket删掉,创建“标准”Bucket,否则我购买的标准存储包没用。购买的“资源包”只是存储包,不包含流量,所以要外网访问的话就会产生流量,如需较为划算的外网访问,还要购买流量包,但目前不需要,另外内网流量是免费的
【2】.阿里云 OSS收费是否真的贵?
【3】.对象存储服务(OSS)省钱建议 1.购买阿里云的 OSS 下行流量包,按年购买每个月 5TB 的流量,大概 1.6W 左右的费用,费用大概是 0.26 元/GB。2.不再使用 OSS 下行流量的方式直接读取资源。而是采用 CDN 回源的形式,下行流量统一走 CDN 流量,费用大概是 0.24 元/GB ~ 0.26 元/GB 这样。
【4】.OSS成本最佳实践
1.创建Bucket
(1)创建Bucket
(4)获取其他的信息
其他的信息,比如就是 accesskey 和 secretKey,可以通过 账号,访问控制页面进行获取。
1 | oss: |
参考文章:
【1】.springboot整合阿里云oss实现简单的增删改查
【2】.Java授权访问 使用
【3】.在URL中包含签名 可以使用 generatePresignedUrl 构造带签名的url.
【4】.通过Bucket Policy授权访问OSS
【5】.访问域名和数据中心
问题
(1)The Min/Max value of DurationSeconds is 15min/1hr
角色扮演时指定的过期时间无效,即AssumeRoleRequest.setDurationSeconds参数无效。角色扮演时可以指定过期时间,单位为秒,有效时间是900~3600秒,如assumeRoleRequest.setDurationSeconds(60 L * 20),20分钟内有效。
我在配置里面写了 360 秒,实际上是不对的。
参考文章:
1.使用STS中的AssumeRole接口访问OSS资源时常见的错误及错误原因
2.访问控制
访问阿里云的相关服务,需要一个 AccessKey 和一个 AccessSercet 这个东西,在新建用户之后,可以获取到。新建用户之后,还需要授权用户的访问权限,另外一种就是通过角色去控制访问权限。
- 用户
这里就是创建一个 AccessKey 访问控制的RAM,这个地方要授权的。基本上就是创建一个用户,然后给这个用户授权,获取到这个用的 AccessKey 和 AccessScertet。
- 角色
RAM虚拟角色,这个应该是最多人懵逼的,也就是RoleArn 参数的主体,简单说这个角色是阿里云STS授权方式主体,一般用于前端交互,通过token 的时效性保证在前端代码泄露情况下主体也是安全的,这个主体是通过RoleArn 参数鉴权。这个ARN的作用可以通过参考文章2说明的部分得到具体的作用,这个我刚开始找不到到底在哪里进行配置。后来还是在RAM访问控制,新建了一个角色,在角色的基本信息里面,找到了这个ARN。
1 | // RoleArn 需要在 RAM 控制台上获取 |
参考文章:
1.STS 阿里云 OSS授权
2.创建RAM角色并进行STS授权 由于RAM用户的权限启用后一直有效,一旦AccessKey泄露,可能会导致安全风险。建议您使用STS临时授权,通过自定义过期时间,并指定相对复杂的策略对不同的RAM角色进行限制,采取权限最小化原则,提高服务访问的安全性。步骤一:创建RAM用户并授予AssumeRole接口的调用权限;步骤二:创建RAM角色并授予IMS操作权限。步骤三:使用创建的RAM用户调用AssumeRole接口获取临时AccessKey
3.通过GDB控制台授权 这个是通过GDB访问OSS的方法。
4.通过RAM控制台授权 从对象存储OSS的Bucket中导入数据时,您需要具有访问该Bucket的权限。本文介绍通过在RAM(访问控制)控制台创建策略进行授权并创建AccessKey的方法。
5.如何查看RAM角色的ARN?
6.AssumeRole - 获取扮演角色的临时身份凭证
7.RAM角色和STS Token常见问题 AssumeRole接口允许谁调用?AssumeRole接口用于获取一个扮演RAM角色的STS Token,该接口仅允许RAM用户或RAM角色调用,不允许阿里云账号(主账号)调用。RAM角色有几种?分别可以被谁扮演?如何查看RAM角色的ARN?STS Token的权限限制是什么?STS服务调用次数是否有上限?STS Token的有效期是多久?STS获取的多个Token是否同时有效?STS Token发生泄露时如何处理?
8.阿里云RAM访问控制相关参数解析(RoleArn参数获取)
3.rclone同步到minio
详情请查看软件研究之Rclone
4.ossutil
ossutil是阿里云官方推出的一个oss管理工具,可以方便的下载和上传文件。 其中 accessKeySecret 和 accessKeyID 为用户的key,ramRoleArn在角色里面有。
1 | # 下载ossutil, 解压之后运行,按照相应的 提示进行配置,选择语言,配置 key, |
1 | # 沿用原文件名保存文件 cloud_url:oss文件路径 file_url:本地文件路径 |
region must be set in sign version 4
参考文章:
【1】.安装ossutil 这里有通过命令进行安装的方法
【2】.配置ossutil 配置ossutil的方法
【3】.config(创建配置文件) 该命令有交互式和非交互式两种用法。交互式用法允许您在使用命令前,通过配置文件完成相关配置项。命令使用过程中,ossutil将直接读取配置文件中的配置。而非交互式用法则需要您在使用命令时,通过选项来指定需要的配置项。相比非交互式用法,交互式用法具有更高的安全性。
【4】.cp(下载文件)
【5】.OSS访问域名、数据中心、开放端口
【6】.命令行工具ossutil快速入门
5.定时任务
为了从阿里云oss将数据传入内网 minio 中,我编写了相关的定时启动脚本,每天五点半到早上7点半,将数据使用 rclone 拷贝到内网minio中。
(1)后台启动
1 | # 后台运行 |
(2)启动脚本 start.sh
1 |
|
(3)关闭脚本 stop.sh
1 |
|
(4)创建定时任务
1 | # 打开定时任务配置文件 |
(5)检查服务是否存在,不存在则启动
1 |
|
参考文章:
【1】.使用 rclone 每天定时备份typecho博客网站内容及mysql数据库到 Google Drive/Onedrive等网盘
【2】.rclone食用手册,快速上手自动备份,实现Google Drive同步网站的备份目录 实现自动同步,首先crontab -e,然后将命令加入最后一行(每周一的8点30进行一次同步),30 8 * * 1 rclone sync /www/backup gdrive:backup
【3】.Shell单条指令查找并杀死进程
【4】.shell——查找指定进程并且关闭 这是相关的参考示例,指定名称关闭进程
【5】.Shell 检查服务进程是否存在,如果不存在则启动
6.列举文件
列举存储空间下的文件。单次请求默认最多列举100个文件。
1 | /** |
参考文章:
【1】.Java列举文件
7.视频截图
上传到阿里云oss的视频,可以进行截图处理,截图之后,可以显示预览图。配置起来还是挺麻烦的,弄了很久,我开始都找不到流程。
(1)开通媒体处理
在oss配置处,点击媒体处理,然后开通并授权相应的媒体处理
{asset_img oss4.png oss处理}
(2)创建编排任务
这个地方还费了很大的劲,就是要先绑定输入路径,输入路径的时候,还不一定有 Bucket,需要同区域,还有一定的权限,所以我也算是三开两开的弄完了这个东西,真不是好找的。
(3)任务配置
选择输入截图,然后配置截图参数,点击保存之后,就可以将工作流进行保存了。
(4)自动触发
我思考了一下这个整个流程,我发现可以通过上传视频文件,自动执行视频截图的任务,要是能实现,那还是挺好的,这样不用自己用代码再实现一遍了,虽然能自动触发,但是文件名是随机的,这让我怎么关联这个视频呢?
{asset_img oss_5.png oss配置 }
后来我还是通过阿里云工单知道了这个东西,主要就是设置这个输出路径,可以通过输出路径的变量控制访问的方式。
- 当输出路径和输入路径相同时:
- 若文件不同名,则输出文件不会覆盖源文件。
- 若文件同名,是否覆盖由OSS配置决定。无需覆盖的配置方法请参见Java禁止覆盖同名文件。配置后会导致同名文件转码完成后写入OSS失败,建议不要设置输出文件与源文件同名。
- 为避免媒体工作流多次执行时覆盖输出文件,您可以组合使用系统内置的UC变量参数:
- {RunId}:媒体工作流执行ID。
- {ObjectPrefix}:不含Bucket信息的原文件路径。
- {FileName}:含扩展名的原文件名,根据转码模板的format补齐后缀。
- {ExtName}:原文件扩展名。
比如我对某一个文件夹自动进行截图,输出路径就可以配置:snapshot/{ObjectPrefix}{FileName}.jpg。经过我的测试,这个 ObjectPrefix 是自带斜杠的,所以不能用 {ObjectPrefix}/
参考文章:
【1】.视频单帧截取 当您需要获取视频封面、提取视频关键帧图像进行视频编辑,或者提取视频中特定场景帧图像用于视频监控时,可以将视频上传至OSS存储空间,通过视频截帧提取关键帧图片。
【2】.数据处理费用 按视频截帧截取的图片数量计费,按量付费:视频截帧费用=截帧数×截帧单价÷1000
【3】.截图 截图的任务提交和查询代码
【4】.价格计算器 视频截图费用:0.1 元/千张
【5】.视频截图 视频截图流程
【6】.安装 这里是环境准备,引入sdk实现代码调用。
【7】.创建工作流 这里有一些变量的说明
8.视频播放
(1) 设置工作流
在阿里云管理控制台中,前往媒体处理(MPS)服务。创建一个媒体处理工作流,指定上传到OSS的视频文件会自动触发的转码操作。在这个工作流中,配置您希望生成的视频输出格式(如MP4、HLS等)、分辨率、码率等参数。
(2)上传视频
将视频文件上传到您在OSS中为媒体处理服务指定的Bucket。
(3)自动转码
当视频上传完成后,媒体处理服务会自动检测到文件,并根据您设置的工作流进行转码和压缩。
(4)获取结果
转码完成后,转码后的视频文件将自动存储到您指定的OSS Bucket中。
(5)播放视频
对于流媒体播放,通常会使用HTTP Live Streaming (HLS) 或Dynamic Adaptive Streaming over HTTP (DASH) 等格式,这允许播放器根据网络情况选择不同质量的视频流,提供更流畅的播放体验。
参考文章:
【1】.视频转码 当您需要修改视频编码格式、降低分辨率和码率、转换封装格式、调整视频参数以适应不同需求,可以使用视频转码功能。
【2】.转码模板 可以创建一个转码模版,实现视频的转码。
【3】.预置模板详情 转码模板是一系列处理参数的集合。在创建转码任务或使用工作流时,可以使用转码模板简化操作。本文介绍预置静态模板(普通模板、音频转码、转封装、窄带高清™1.0、窄带高清™2.0)、预置智能模板、旧版预置模板及模板ID规则。
【4】.音视频转码费用 HD(1920×1080)及以下 0.0651 元/分钟
【5】.播放音视频 视频点播支持播放音频和视频文件,您可以通过控制台预览、集成阿里云播放器SDK和集成第三方播放器进行播放。本文为您介绍音视频播放的整体流程、准备工作、前提条件、播放方式、播放地址和播放安全。
【6】.获取文件的在线预览链接 若要生成支持在线预览的链接(预签名 URL),需先绑定自定义域名。绑定完成后,使用自定义域名生成预签名URL。
