函数计算帮助修改OSS文件前缀

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: ## 背景 在从七牛云迁移数据到阿里云OSS的时候,有遇到客户的文件名前缀是以`/`开始的,例如`/abc/123.jpg`。这样的文件名在OSS上面是非法的,所以如果直接使用在线迁移服务是无法迁移成功。一般建议的方案是添加一个前缀,例如变成`new/abc/123.jpg`,这样可以解决迁移不了的问题。但是这样会引发另外一个问题,就是导致用户的文件路径变更。对于用户来说,可能涉及到改代码,

背景

在从七牛云迁移数据到阿里云OSS的时候,有遇到客户的文件名前缀是以/开始的,例如/abc/123.jpg。这样的文件名在OSS上面是非法的,所以如果直接使用在线迁移服务是无法迁移成功。一般建议的方案是添加一个前缀,例如变成new/abc/123.jpg,这样可以解决迁移不了的问题。但是这样会引发另外一个问题,就是导致用户的文件路径变更。对于用户来说,可能涉及到改代码,是一个额外的迁移成本。本文提供一个间接的方案,利用函数计算的能力,当文件被复制到OSS后,自动修改文件的名称,达到无缝迁移。

原理

arch.png

利用在线迁移服务将七牛的数据迁移到OSS,注意OSS这边要加上前缀tmp
利用函数计算,当发现指定Bucket有新建文件并且文件名以tmp开始的话,触发函数计算功能。
函数负责将文件名的tmp去掉。这里利用了OSS的copy和delete操作。
整个过程在同一个Bucket中发生。

执行步骤

关于在线迁移服务的部分,参考官网手册,这里不再作详细论述。下面直接从函数计算的配置入手。

一. 进入函数计算业务,选择新建函数。
新建函数.jpg

二. 配置函数,填入服务/函数等名字,运行环境选择python3,其他按照默认。
配置函数.jpg

三. 建立好之后会跳转到在线编辑页面。
IDE.jpg

把下面的代码复制到编辑框里面,完整覆盖原来的代码并保存。

import logging
import oss2
import json

def handler(event, context):
  logger = logging.getLogger()
  logger.info('start of the function')

  creds = context.credentials
  #获取当前的ak和as
  auth=oss2.StsAuth(
         creds.access_key_id,
         creds.access_key_secret,
         creds.security_token)

  #获取旧的路径名
  evt = json.loads(event)
  evt = evt['events'][0]
  object_name = evt['oss']['object']['key']
  logging.info('path is ' + object_name)
  if object_name.startswith('tmp') == False :
    #不是tmp开头的不处理
    return
  #去除掉tmp/
  if object_name.startswith('tmp/') :
    new_object_name = object_name[4:]
  else :
    new_object_name = object_name[3:] 

  #获取到事件触发的bucket
  bucket_name = evt['oss']['bucket']['name']
  endpoint = 'oss-' +  evt['region'] + '.aliyuncs.com'
  bucket = oss2.Bucket(auth, endpoint, bucket_name)
  logging.info('bucket name is ' + bucket_name)

  #复制文件之后再删除原文件
  bucket.copy_object(bucket_name, object_name, new_object_name)
  bucket.delete_object(object_name)
  
  return

四. 创建一个触发器。选择对象存储触发器,触发器名称自行创建。Bucket列表注意选择准备要上传文件的那个Bucket。触发事件选择 oss:ObjectCreated:PostObjectoss:ObjectCreated:PutObject。触发规则前缀那里,一定要输入tmp如果没有加入这个前缀,可能会引起额外的调用
trigger.jpg

五. 配置好触发器之后,还需要做一个权限设置,否则即使任务触发成功,也会因为没有权限,函数无法将文件复制成功。回到主界面,选择服务配置,然后修改
进入角色配置.jpg

往下到权限配置,这里需要创建一个新的角色。这里需要选择把 AliyunOSSFullAccessAliyunLogFullAccess 添加进去。

赋予角色.jpg

role.jpg

六. 权限配置好之后,整个配置就完成了。如果需要做多个Bucket的迁移,只需要重复第4步,在同一个函数上面多建立几个触发器,监测不同的Bucket即可。

验证方式

通过网页的方式上传文件到到tmp/目录下面的文件,该文件会被移动到根目录。
通过网页的方式上传文件到根目录,如果名字是以tmp开始的,会被去掉tmp几个字符。

由于引入了函数计算,所以迁移任务最后会报失败。这只是因为迁移服务要比对的文件都被我们重命名了,所以产生这样的报告,只要确保迁移的文件数量一致即可

故障排查

如果网页方式上传无效,没有触发任何效果,可能是权限配置没有设置正确,返回第五步检查一下。
如果网页方式上传生效,但是在线迁移没有触发效果,可能是触发器中,触发事件配置不正确,返回第四步检查一下。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
2天前
|
消息中间件 关系型数据库 Serverless
【阿里云】一键部署创建函数计算服务以处理多媒体文件
通过阿里云的一键部署功能,轻松创建函数计算服务以处理多媒体文件。首先选择地域并配置资源栈名称及其他必要参数,如登录凭证、实例类型及数据库配置。过程中可能需开通相关服务如消息服务MNS,并确保账户有足够的余额。完成配置后,系统自动创建资源栈。当状态显示“创建成功”即部署完毕。最后,通过提供的URL及凭据访问应用,上传PPTX文件进行处理,并下载处理后的结果。
25 4
|
12天前
|
存储 前端开发 Serverless
Serverless 魔法之旅:如何用 Funcraft、OSS 和 ROS 打造超级CI/CD流水线!
【8月更文挑战第8天】在现代软件开发中,CI/CD对于提升效率与代码质量至关重要。本文介绍如何运用阿里云的Serverless服务——Funcraft、OSS及ROS构建完整的CI/CD流程。首先配置Funcraft实现代码自动化构建与部署;接着利用OSS管理静态文件,确保网站内容正确加载;最后借助ROS自动化资源创建与管理,实现代码自动部署。通过整合这些服务,不仅加速了开发进程,还保证了代码质量和部署一致性,充分发挥Serverless架构的优势。
33 5
|
20天前
|
运维 Kubernetes Serverless
Serverless 应用引擎使用问题之s.yaml文件中如何使用外部环境变量
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
20天前
|
存储 缓存 运维
函数计算产品使用问题之如何将外部环境变量放到s.yaml文件中使用
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
20天前
|
监控 Java Serverless
函数计算产品使用问题之对于OSS打包的zip的保存目录,该如何操作
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
21天前
|
Java Serverless 数据库连接
函数计算操作报错合集之调用打包的OSS函数时发生报错,该怎么办
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
21天前
|
缓存 Serverless API
函数计算产品使用问题之没有s.yaml文件,修改代码如何重新部署
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
21天前
|
域名解析 Serverless API
函数计算产品使用问题之如何配置自定义域名访问OSS中的内容
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
21天前
|
运维 Serverless 数据处理
函数计算产品使用问题之在对象存储服务(OSS)上创建ZIP包解压触发器后,触发器未按预期执行,一般是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5天前
|
弹性计算 Kubernetes 安全
Kubernetes 的架构问题之在Serverless Container中保障应用的安全防护如何解决
Kubernetes 的架构问题之在Serverless Container中保障应用的安全防护如何解决
38 8

热门文章

最新文章