当前位置: 首页 > news >正文

Serverless 使用OOS将http文件转存到对象存储

目录

背景介绍

系统运维管理OOS

文件转存场景

前提条件

实践步骤

附录

示例模板


背景介绍

系统运维管理OOS

系统运维管理OOS(CloudOps Orchestration Service)提供了一个高度灵活和强大的解决方案,通过精巧地编排阿里云提供的OpenAPI,使得用户能够将分散的单个原子运维任务链接起来,形成复杂的运维场景和流程。这种方式不仅大幅提升了运维的效率,也极大地减少了人为错误的可能性。更进一步,OOS的编排能力不仅限于基础的云服务管理操作,它还扩展到了阿里云的其他核心服务如函数计算FC和对象存储OSS。

文件转存场景

对于http文件转存到对象存储的场景,经典的做法通常涉及一个繁琐的双步骤过程:首先,用户需要手动下载目标文件至本地存储;随后,通过使用命令行工具或编写特定脚本,再将文件上传到云端的对象存储服务。这个流程不仅效率较低,还需要用户依赖于本地硬件资源或者支付额外费用租用阿里云上的ECS实例。

然而,借助于阿里云OOS这一过程得到了极大简化和优化。用户无需依赖任何本地硬件或者额外的云服务实例,仅需在阿里云的函数计算服务上执行一段定制的Python脚本。利用了云计算的弹性和函数计算的无服务器(Serverless)特性,实现了从HTTP源直接将文件高效转存到对象存储的目的。这样不仅消除了对物理硬件或计算实例的需求,而且极大降低了操作成本,提升了数据处理的效率。此外,这一过程的自动化也意味着可以极大减少因手动操作引入的错误。

前提条件

  • 使用此功能必须开通函数计算服务。
  • 创建执行前需要为FC创建RAM角色并授予访问OSS的权限。

实践步骤

  1. 登录 OOS 控制台并使用附录中示例模板创建自定义模板。您可以参考FC提供的Python开发指南自定义脚本和模板。
  2. 模板创建完成后,配置参数并创建执行。执行成功后,在目标OSS Bucket中可以看到已下载的文件。

image.png

附录

示例模板

FormatVersion: OOS-2019-06-01
Description:en: FC runs script, To use this template, you must first <a href='https://help.aliyun.com/zh/functioncompute/getting-started/quickly-create-a-function#p-t79-y7o-68z' target="_blank">activate the function computing service< /a>zh-cn: FC运行脚本,使用此功能必须<a href='https://help.aliyun.com/zh/functioncompute/getting-started/quickly-create-a-function#p-t79-y7o-68z' target="_blank">开通函数计算服务</a>name-en: FC-RunScriptname-zh-cn: FC运行脚本
Parameters:FileUrl:Label:en: FileUrlzh-cn: 文件存储URLType: StringOSSRegionId:Label:en: OSSRegionIdzh-cn: OSS bucket所在地域IDType: StringAssociationProperty: RegionIdOSSBucketName:Label:en: OSSBucketNamezh-cn: OSS Bucket 名称Type: StringAssociationProperty: ALIYUN::OSS::Bucket::BucketNameAssociationPropertyMetadata:RegionId: ${OSSRegionId}Default: ''OSSDirectory:Type: StringLabel:en: OSSDirectoryzh-cn: OSS目录Description:en: The directory where files are stored in the OSS Bucket. / is used to split the path and quickly create subdirectories. However, do not start with / and do not appear consecutive / s.zh-cn: 文件存储在 OSS Bucket 中的目录,/ 用于分割路径,可快速创建子目录,但不要以 / 开头,不要出现连续的 / 。Default: Download/Demo/FCAssumeRole:Label:en: FCAssumeRolezh-cn: FC扮演的RAM角色Description:en: The Function Compute platform will use this RAM role to generate a temporary key for accessing your Alibaba Cloud resources and pass it to your code. For details, please see <a href="https://help.aliyun.com/zh/functioncompute/user-guide/grant-function-compute-permissions-to-access-other-alibaba-cloud-services" target="_blank ">Grant Function Compute permissions to access other cloud services</a>zh-cn: 函数计算平台会使用这个 RAM 角色(Role)来生成访问您的阿里云资源的临时密钥,并传递给您的代码。详情请查看<a href="https://help.aliyun.com/zh/functioncompute/user-guide/grant-function-compute-permissions-to-access-other-alibaba-cloud-services" target="_blank">授予函数计算访问其他云服务的权限</a>Type: StringAssociationProperty: ALIYUN::RAM::Service::RoleAssociationPropertyMetadata:Service: fc.aliyuncs.comDefault: ''OOSAssumeRole:Label:en: OOSAssumeRolezh-cn: OOS扮演的RAM角色Type: StringDefault: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:- Name: ExecuteScriptAction: ACS::FC::ExecuteScriptDescription:en: Run the python scriptzh-cn: 运行Python脚本Properties:runtime: 'python3.10'role: '{{ FCAssumeRole }}'script: |-import oss2import requestsdef handler(event, context):# 获取FC角色credentialauth = oss2.StsAuth(context.credentials.access_key_id, context.credentials.access_key_secret, context.credentials.security_token)endpoint = 'https://oss-{{OSSRegionId}}.aliyuncs.com'bucket = oss2.Bucket(auth, endpoint, '{{OSSBucketName}}')file_url = '{{FileUrl}}'# 下载文件file_content = requests.get(file_url)file_name = file_url.split('/')[-1]# 将文件上传到指定OSSbucket.put_object(f'{{OSSDirectory}}{file_name}', content)

示例脚本说明:

  1. 运行环境默认 python3.10
  2. 函数名称默认 index.handler
  3. 使用模块oss2和requests,详情请查看Python内置模块

相关文章:

  • Spring的循环依赖
  • Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)
  • Python第二语言(八、Python包)
  • 解决富文本中抖音视频无法播放的问题——403
  • HTML静态网页成品作业(HTML+CSS)—— 非遗皮影戏介绍网页(6个页面)
  • 后端启动项目端口冲突问题解决
  • 【随手记】maplotlib.use函数设置图像的呈现方式
  • Android FirebaseApp.initializeApp(this)无法初始化
  • 璨与序列 题解(stl,dfs)
  • 【Python入门与进阶】Python如何处理不同进制的数据
  • Spring Cloud Bus 消息总线基础入门与实践总结
  • 数字化那点事:一文读懂智慧城市
  • CATIA P3 V5-6R 中文版软件下载安装 达索CATIA三维设计软件获取
  • Vitis HLS 学习笔记--移除内存分配malloc
  • 活久见!谁想的这种办法让大模型PK
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • Android开源项目规范总结
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • co模块的前端实现
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • js学习笔记
  • k8s如何管理Pod
  • laravel 用artisan创建自己的模板
  • Linux Process Manage
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux后台研发超实用命令总结
  • PAT A1120
  • Rancher如何对接Ceph-RBD块存储
  • Swift 中的尾递归和蹦床
  • 解决iview多表头动态更改列元素发生的错误
  • 前端js -- this指向总结。
  • 协程
  • Hibernate主键生成策略及选择
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • ()、[]、{}、(())、[[]]命令替换
  • (done) 两个矩阵 “相似” 是什么意思?
  • (独孤九剑)--文件系统
  • (二)丶RabbitMQ的六大核心
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (未解决)macOS matplotlib 中文是方框
  • (轉)JSON.stringify 语法实例讲解
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .Net面试题4
  • .stream().map与.stream().flatMap的使用
  • /var/spool/postfix/maildrop 下有大量文件
  • [10] CUDA程序性能的提升 与 流
  • [Angular] 笔记 6:ngStyle
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [CF407E]k-d-sequence
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页