首页 告别资源瓶颈,函数计算驱动多媒体文件处理

告别资源瓶颈,函数计算驱动多媒体文件处理

更新时间: 2024-10-12 10:18:55

手动部署

70

https://www.aliyun.com/solution/tech-solution/fc-drive-file

方案概览

在企业办公应用或社交媒体应用中,通常需要处理各种类型的文件,如图片、视频和文档。这些文件处理任务包括格式转换、水印添加和内容审核等。文件处理任务往往会消耗大量的计算、存储和网络资源,如果长时间占用这些资源,可能会影响应用的核心功能,进而影响业务稳定性。本方案通过在应用中使用函数计算来处理文件,利用事件驱动和异步任务的方式,将文件处理与核心应用解耦。函数计算具备自动弹性扩展和按使用付费的优势,可以提升文件处理效率和服务稳定性。

方案架构

本方案使用云服务器ECS和RDS MySQL版提供WEB服务,通过对象存储OSS存储用户文件。采用服务端签名的WEB直传方式,将文件上传直接发送到OSS,减少对应用网络资源的占用。文件上传到OSS后,通过事件驱动机制触发函数计算执行文件处理任务(示例代码是将PPT转换为PDF并添加水印)。处理完成后,通过OSS事件触发的轻量消息队列(原MNS)通知应用。

方案提供的默认设置完成部署后在阿里云上搭建的架构如下图所示。

image

本方案的技术架构包括以下基础设施和云服务:

  • 1个专有网络VPC:为云服务器ECS、云数据库RDS MySQL版等云资源构建云上私有网络。

  • 2台交换机: 分别用于链接云服务器ECS实例和云数据库RDS MySQL版实例。

  • 1台云服务器ECS实例:用于部署业务系统,提供应用服务。

  • 1个云数据库RDS MySQL版实例:为业务系统提供数据服务。

  • 1个对象存储OSS Bucket:用于存储用户上传的文件和处理后的文件。

  • 1个函数计算函数:用于文件处理,解耦在线用户服务和文件处理。

  • 1个轻量消息队列(原MNS):通过感知对象存储OSS Bucket中文件变化,通知应用服务文件处理完成。

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值。本方案的云资源支持按量付费,且默认设置均采用按量付费引导操作。如果确定任何一个云资源采用按量付费方式部署,账户余额都必须大于等于100元。

部署资源

30

请按照以下步骤部署方案中的所有资源。

创建专有网络VPC、交换机和安全组

创建专有网络VPC和交换机

  1. 登录专有网络管理控制台

  2. 在顶部菜单栏,选择华东1(杭州)地域。

  3. 在左侧导航栏,单击专有网络

  4. 专有网络页面,单击创建专有网络

  5. 创建专有网络页面,配置1个专有网络和2个交换机。配置交换机时,请确保交换机所属的可用区的ECS、RDS是可用状态。

    项目

    说明

    示例值

    VPC名称

    建议您在部署过程中新建一个VPC作为本方案的专有网络。部署过程中填写VPC名称即可创建对应名称的VPC。

    长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和连字符(-)。

    VPC_HZ

    IPv4网段

    在创建VPC时,您必须按照无类域间路由块(CIDR block)的格式为您的专有网络划分私网网段。阿里云VPC支持的网段信息请参见组成部分

    在网络规划时可以按照管理网段-开发网段-测试网段-生产网段等规则做好规划。网段一旦投入使用,调整过程复杂,因此规划十分重要。

    192.168.0.0/16

    交换机

    建议您创建2个交换机,用于连接ECS实例和RDS实例

    交换机名称

    长度为2~128个字符,以英文大小字母或中文开头,可包含数字、下划线(_)和连字符(-)。

    • vsw_web

    • vsw_db

    可用区

    建议选择排序靠后的,一般此类可用区较新。新可用区资源更充沛,新规格也会在新的可用区优先上线。

    • 可用区 J

    IPv4网段

    每台虚拟交换机需要一个IPv4网段

    例如:

    • vsw_web:192.168.1.0/24

    • vsw_db:192.168.2.0/24

创建安全组

  1. 登录ECS管理控制台

  2. 在顶部菜单栏,选择华东1(杭州)地域。

  3. 在左侧导航栏,选择网络与安全>安全组

  4. 安全组页面,单击创建安全组

  5. 创建安全组页面,创建1个安全组。

    项目

    说明

    示例值

    名称

    设置安全组的名称。

    SecurityGroup_1

    网络

    选择之前规划的专有网络VPC。

    VPC_HZ

    安全组类型

    本方案选择普通安全组,具体差异您可以参考普通安全组与企业级安全组

    普通安全组

创建云数据库 RDS MySQL实例

接下来您需要创建云数据库RDS MySQL实例、数据库、数据库账号。您需要记录创建的云数据库的内网连接地址、数据库名称、账号、密码用于之后的服务端配置。

  1. 访问RDS管理控制台,单击创建实例

  2. 在顶部选择快捷创建方式。填入如下表单内容。

      项目

      说明

      示例值

      付费类型

      支持包年包月、按量付费和Serverless。本方案以按量付费为例。

      按量付费

      地域

      本方案以华东1(杭州)地域为例。

      华东1(杭州)

      引擎

      本方案以MySQL为例。

      MySQL 8.0

      实例规格

      关于不同规格对比,请参见产品规格

      本方案选择基础系列、通用云盘的mysql.n2e.medium.1规格。

      mysql.n2e.medium.1

      存储空间

      默认40GB。

      40GB

      网络

      选择之前规划的专有网络VPC和选择之前规划的交换机。

      VPC_HZ

      vsw_db:192.168.1.0/24

  3. 在页面右侧同意服务条款,单击确认下单

  4. 创建数据库:

    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

    2. 在左侧导航栏中单击数据库管理

    3. 单击创建数据库

    4. 设置如下参数。

      参数

      说明

      数据库(DB)名称

      • 长度为2~64个字符。

      • 以小写字母开头,以小写字母或数字结尾。

      • 支持小写字母、数字、下划线和中划线。

      • 数据库名称在实例内必须唯一。

      说明

      数据库名称中如果包含-,创建出的数据库的文件夹的名字中的-会变成@002d

      支持字符集

      选择需要的字符集。

      备注说明

      数据库相关的备注说明,支持输入2~256个字符。

    5. 单击创建

  5. 创建数据库账号:

    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID

    2. 在左侧导航栏选择账号管理

    3. 单击创建账号

      说明

      账号重名或账号创建过于频繁(上一个账号还未创建结束)可能会有报错提示,出现该情况时,请检查账号名称是否重复或在上一个账号创建完成后再创建下一个账号。

    4. 填写数据库账号

      • 以小写字母开头,以小写字母或数字结尾。

      • 支持小写字母、数字和下划线。

      • 长度为2~32个字符。

    5. 选择账号类型

      • 选择普通账号:如果已创建数据库,则需选择要授权的数据库,单击图标添加至右侧,并设置权限:读写(DDL+DML)只读仅DDL仅DML

    6. 填写账号密码

      • 长度为8~32个字符。

      • 至少包含大写字母、小写字母、数字、特殊字符中的任意三种。特殊字符为!@#$%^&*()_+-=

    7. 单击确定

  6. 设置白名单:

    1. 在左侧导航栏,选择白名单与安全组

    2. 在顶部Tab页签,选择安全组,单击添加安全组按钮。

    3. 选择安全组面板,选择规划的安全组,然后单击确定

  7. 获取数据库的内网地址:

    1. 在左侧导航栏,单击数据库连接

    2. 复制内网地址

创建轻量消息队列(原MNS)

接下来您需要创建一个轻量消息队列(原MNS),使用轻量消息队列(原MNS)订阅对象存储OSS Bucket中的文件变更,感知函数计算处理文件的完成后上传到Bucket的文件上传事件。

创建队列

  1. 登录轻量消息队列(原MNS)控制台

  2. 在左侧导航栏,单击队列列表

  3. 在顶部菜单栏,选择地域。

  4. 队列列表页面,单击创建队列

  5. 创建队列面板配置以下参数,然后单击确定

    字段

    描述

    示例

    名称

    队列名称

    oss-queue

    消息最大长度

    发送到队列的消息体的最大长度

    64

    长轮询时间

    当队列中没有消息时,该队列的ReceiveMessage请求的最大等待时长。

    0

    消息可见性超时时间

    消息从队列中取出后从Active状态变成Inactive状态后的持续时间。

    30

    消息保存时长

    消息在队列中的最长存活时间。从发送到队列开始经过此参数指定的时间后,不论消息是否被取出都将被删除。

    4

    消息定时时间

    发送到队列的所有消息将延后此参数指定的时间后被消费。

    0

    启用日志功能

    是否开启日志管理功能。

创建对象存储OSS Bucket

接下来您需要创建一个对象存储OSS Bucket用于存储用户上传的文件和函数计算处理后的文件。

创建Bucket

  1. 登录OSS管理控制台

  2. 在左侧导航栏,单击Bucket 列表,然后单击创建 Bucket

  3. 创建 Bucket面板,按如下说明配置各项参数。

    参数

    描述

    示例

    Bucket名称

    填写Bucket名称。命名规则如下:

    • Bucket名称在OSS范围内必须全局唯一。

    • 只能包括小写字母、数字和短划线(-)。

    • 必须以小写字母或者数字开头和结尾。

    • 长度必须在3~63字符之间。

    fc-demo

    地域

    Bucket的数据中心。

    您需要下拉选择有地域属性,然后指定某个地域。

    如需通过ECS内网访问OSS,请选择与您ECS相同的地域。更多信息,请参见OSS访问域名使用规则

    cn-hangzhou

    Endpoint

    Bucket所在地域对应的外网Endpoint。更多Endpoint,请参见OSS访问域名、数据中心、开放端口

    -

    存储类型

    Bucket的存储类型。

    • 标准存储提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问。适用于各种社交、分享类的图片、音视频应用、大型网站、大数据分析等业务场景。

    • 低频访问存储提供高持久性、较低存储成本的对象存储服务。有最小计量单位(64 KB)和最低存储时间(30天)的要求。支持数据实时访问,访问数据时会产生数据取回费用。适用于较低访问频率(平均每月访问频率1到2次)的业务场景。

    • 归档存储提供高持久性、极低存储成本的对象存储服务。有最小计量单位(64 KB)和最低存储时间(60天)的要求。数据需解冻(约1分钟)后访问,会产生数据解冻费用。如果开启归档直读,无需解冻就可以访问数据,会产生数据直读取回费用。适用于数据长期保存的业务场景,例如档案数据、医疗影像、科学资料、影视素材等。

    • 冷归档存储提供高持久性、成本更低于归档存储的对象存储服务。有最小计量单位(64 KB)和最低存储时间(180天)的要求。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用以及取回请求费用。适用于需要超长时间存放的冷数据,例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等业务场景。

    • 深度冷归档存储提供高持久性、比冷归档存储成本更低的对象存储服务。有最小计量单位(64 KB)和最低存储时间(180天)的要求。数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用以及取回请求费用。适用于需要超长时间存放的极冷数据,例如大数据及人工智能领域的原始数据的长期积累留存、媒体数据的长期保留、法规和合规性存档、磁带替换等业务场景。

    关于存储类型的更多信息,请参见存储类型概述

    标准存储

    存储冗余类型

    Bucket的数据容灾类型。

    • 本地冗余存储

      采用单可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一个可用区内多个设施的多个设备上,确保硬件失效时的数据持久性和可用性。

    • 同城冗余存储(推荐)

      采用多可用区(AZ)内的数据冗余存储机制,将用户的数据冗余存储在同一地域(Region)的多个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。

      关于同城冗余存储的更多信息,请参见创建同城冗余存储Bucket

    本地冗余存储

    阻止公共访问

    开启阻止公共访问,已有的公共访问权限会被忽略,且不允许创建新的公共访问权限,以此关闭数据的公开访问渠道,确保数据安全。更多信息,请参见阻止公共访问

    开启

    读写权限

    选择Bucket的读写权限。

    • 私有:只有该存储空间的拥有者可以对该存储空间内的文件进行读写操作,其他人无法访问该存储空间内的文件。

    • 公共读:只有该存储空间的拥有者可以对该存储空间内的文件进行写操作,任何人(包括匿名访问者)可以对该存储空间中的文件进行读操作。

      重要

      互联网上任何用户都可以对该Bucket内文件进行访问,这有可能造成您数据的外泄以及费用激增,请谨慎操作。

    • 公共读写:任何人(包括匿名访问者)都可以对该存储空间内文件进行读写操作。

      重要

      互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可能会侵害您的合法权益。除特殊场景外,不建议您配置公共读写权限

    私有

    所属资源组

    选择Bucket所属资源组。资源组对您拥有的云资源从用途、权限、归属等维度上进行分组,实现企业内部多用户、多项目的资源分级管理。更多信息,请参见资源组概述

    default resource group

    版本控制

    选择是否开通版本控制功能。

    • 开通:开通Bucket版本控制功能后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。当您在错误覆盖或者删除Object后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。更多详情请参见版本控制概述

    • 不开通:不开通版本控制功能,则不保存覆盖或删除的数据。

    不开通

    服务端加密方式

    选择Object的加密方式。

    • :不启用服务器端加密。

    • OSS完全托管:使用OSS托管的密钥进行加密。OSS会为每个Object使用不同的密钥进行加密,作为额外的保护,OSS会使用定期轮转的主密钥对加密密钥本身进行加密。

    • KMS:使用KMS默认托管的CMK或指定CMK ID进行加解密操作。

      使用KMS加密方式前,需要开通KMS服务。具体步骤,请参见开通密钥管理服务

    • 加密算法可选择AES256或SM4加密算法。

    • 加密密钥服务端加密方式选择KMS时,可配置此项。参数说明如下:

      • alias/acs/oss:使用默认托管的CMK生成不同的密钥来加密不同的Object,并且在Object被下载时自动解密。

      • CMK ID:使用指定的CMK生成不同的密钥来加密不同的Object,并将加密Object的CMK ID记录到Object的元数据中,具有解密权限的用户下载Object时会自动解密。选择指定的CMK ID前,您需在KMS管理控制台创建一个与Bucket处于相同地域的普通密钥或外部密钥。详情请参见创建密钥

    实时日志查询

    如果您希望在不付费的情况下实时查询最近7天的OSS访问日志,请开通实时日志查询。

    有关实时日志查询的更多信息,请参见实时日志查询

    如果您不需要进行实时日志查询,请保持不开通的默认配置。

    不开通

    定时备份

    如果您希望定时备份您的OSS数据,请开通定时备份。此时,OSS将自动创建备份计划,并由云备份(Cloud Backup)执行每天备份一次OSS数据,备份文件保存一周的任务。

    如果您不需要定时备份您的OSS数据,请保持不开通的默认配置。

    不开通

    HDFS服务

    如果您希望通过JindoSDK访问OSS实现数据湖场景,需要开通HDFS服务。开通HDFS功能前,需要打开开关,并按照页面指引完成授权操作。

    不开通

配置Bucket可跨域访问

  1. 在左侧导航栏,选择数据安全 > 跨域设置

  2. 跨域设置页面,单击创建规则

  3. 创建跨域规则面板,按以下说明设置跨域规则。

    参数

    说明

    示例

    来源

    指定允许的跨域请求的来源。配置规则如下:

    • 允许多条匹配规则,多条规则需换行填写。

    • 域名需包含协议名,例如HTTP、HTTPS。

    • 支持通配符星号(*),每条匹配规则最多允许使用一个星号(*)。

    • 如果域名使用的不是默认端口,还需要携带端口号。例如https://www.example.com:8080

    域名配置示例如下:

    • 匹配指定域名时,填写完整域名,例如https://www.example.com。

    • 匹配泛二级域名,可使用通配符星号(*)。例如https://*.example.com。

    • 匹配所有域名,可直接填写通配符星号(*)。

    *

    允许 Methods

    指定允许的跨域请求方法。

    GET、POST、HEAD

    允许 Headers

    指定允许跨域请求的响应头。配置规则如下:

    • 格式为key:value,例如content-type:text/plain,大小写不敏感。

    • 允许多条匹配规则,多条规则需换行填写。

    • 支持通配符星号(*),每条匹配规则最多允许使用一个星号(*)。建议没有特殊需求的情况下设置为星号(*)。

    *

    暴露 Headers

    指定允许用户从应用程序中访问的响应头,例如一个JavaScript的XMLHttpRequest对象。不允许使用星号(*)通配符。

    建议暴露的常见Headers如下:

    • x-oss-request-id

      在您使用OSS服务遇到问题时,请凭借此Request ID请求技术支持协助排查并解决您遇到的问题。

    • ETag

      可用于检查Object内容是否发生变化。

    不填

    缓存时间(秒)

    指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。

    0

    返回 Vary: Origin

    配置是否返回Vary: Origin Header

    如果实际应用中同时存在CORS和非CORS请求,或者Origin头有多种可能值时,建议选中返回 Vary: Origin以避免本地缓存错乱。

    不选择

  4. 单击确定

配置事件通知

  1. 在左侧导航栏,选择数据处理>事件通知

  2. 事件通知页面,单击创建规则

  3. 创建规则面板,配置以下参数:

    参数

    说明

    示例

    规则名称

    设置事件通知规则的名称。

    相同账号在同一地域下创建的规则名称不能重复。规则名称必须以英文字母开头,只能包含大小写字母、数字和短划线(-),长度不超过85个字符。

    processed-completed

    事件类型

    为目标Object配置事件类型。例如,您希望接收到目标Object通过拷贝操作创建或覆盖文件的事件通知,请将事件类型配置为CopyObject。

    有关事件类型对应Object操作的更多信息,请参见通过事件通知实时处理OSS文件变动

    PutObject、PostObject

    资源描述

    设置事件通知涉及的目标Object。

    • 通过全名匹配目标Object

      • 如果要匹配Bucket根目录下名为exampleobject.txt的目标Object,则填写为exampleobject.txt

      • 如果要匹配Bucket根目录下destdir目录中名为myphoto.jpg的目标Object,则填写为destdir/myphoto.jpg

    • 通过前后缀匹配目标Object

      • 如果要匹配Bucket内的所有Object,则前缀和后缀均置空。

      • 如果要匹配Bucket根目录下examplefolder目录中的所有Object,则前缀填写为examplefolder/,后缀置空。

      • 如果要匹配Bucket内所有JPG格式的Object,则前缀置空,后缀填写为.jpg

      • 如需匹配Bucket根目录下examplefolder目录中所有MP3格式的Object,则前缀填写为examplefolder/,后缀填写为.mp3

    您可以单击添加按钮,创建最多5条资源描述

    前后缀

    • 前缀processed

    • 后缀.pdf

    接收终端

    设置事件的接收终端,支持HTTP队列

    • HTTP:填写接收事件通知的HttpEndpoint地址,例如http://198.51.100.1:8080。搭建HttpEndpoint的具体操作,请参见主题使用手册HttpEndpoint

    • 队列:填写您在轻量消息队列(原MNS)中创建的队列名称。创建队列的具体操作,请参见创建队列

    您可以单击添加按钮,创建最多5个接收终端

    队列

    oss-queue

  4. 单击确定

    以上步骤配置完成后,事件通知规则约10分钟后生效。

创建角色和权限策略

接下来您需要创建自定义角色并授权。角色可以与ECS实例和函数关联起来。当您需要在ECS实例中的应用程序或函数中访问其他云资源时,可以通过角色获取STS临时凭证访问其他云资源,避免在代码中明文使用长期AccessKey,减少AccessKey泄露风险。

创建角色

  1. 登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 角色

  3. 角色页面,单击创建角色

  4. 创建角色页面,选择可信实体类型为阿里云服务,然后单击下一步

  5. 选择角色类型为普通服务角色

  6. 输入角色名称备注。如FcDemoRole

  7. 选择可信服务云服务器

  8. 单击完成

  9. 单击关闭

修改信任策略

  1. 角色页面,单击目标RAM角色名称。

  2. 信任策略页签,单击编辑信任策略。修改信任策略如下:

    说明

    本例为了简化操作,将授权云服务器ECS实例的角色和授权函数计算服务的角色设定为一个角色,在您真实的应用中建议您分别为云服务器ECS实例和函数计算创建角色,隔离不同服务的权限,最小化精准授权。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "ecs.aliyuncs.com",
              "fc.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
  3. 修改信任策略内容,然后单击保存信任策略

创建自定义权限策略

  1. 在左侧导航栏,选择权限管理 > 权限策略

  2. 权限策略页面,单击创建权限策略

  3. 创建权限策略页面,单击脚本编辑页签。

  4. 输入如下权限策略内容,然后单击继续编辑基本信息

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "oss:PutObject",
                    "oss:GetObject",
                    "oss:GetObjectMeta",
                    "mns:ReceiveMessage",
                    "mns:BatchReceiveMessage",
                    "mns:DeleteMessage"
                ],
                "Resource": "*"
            }
        ]
    }

  5. 输入权限策略名称备注。如FcDemoPolicy

  6. 单击确定

为角色授权

  1. 在左侧导航栏,选择身份管理 > 角色

  2. 角色页面,单击刚刚创建的RAM角色名称。

  3. 权限管理页签,单击精确授权

    image

  4. 精确授权面板,选择权限策略类型为自定义策略,然后输入刚刚创建的权限策略名称。

  5. 单击确定

创建云服务器ECS

您需要创建1台云服务器ECS实例,来部署后端服务。

创建ECS实例

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像>实例

  3. 在顶部菜单栏,选择华东1(杭州)地域。

  4. 实例页面,单击创建实例

  5. 在云服务器ECS购买页面,创建1台云服务器ECS。

    项目

    说明

    示例值

    实例名称

    每个实例需要一个实例名称。

    APP001

    可用区

    选择刚刚创建交换机的可用区。

    可用区 J

    支付方式

    ECS实例的计费方式。

    ECS计费的详细信息请参见计费方式概述

    按量付费

    实例规格

    ECS的实例规格及内核、vCPU数量。关于ECS选型的最佳实践请参见ECS选型最佳实践

    ecs.c7.large 2 vCPU 4 GB

    镜像

    ECS的“装机盘”,为ECS实例提供操作系统、预装软件等。

    Alibaba Cloud Linux

    镜像版本

    镜像的版本。

    Alibaba Cloud Linux 3.2104 LTS 64位

    系统盘类型

    硬盘类型。

    ESSD云盘

    系统盘容量

    硬盘容量。

    40 GiB

    公网IP

    用于访问外网和提供后端服务。

    分配公网 IPv4 地址

    带宽计费方式

    由于本方案为解决方案示例,因此选择按使用流量,以节省流量成本。

    按使用流量

    带宽值

    本方案以5 Mbps为例。

    5 Mbps

    安全组

    使用之前创建的安全组。

    SecurityGroup_1

    管理设置

    选择设置自定义密码,方便后续登录机器安装服务环境。

    自定义密码

绑定实例角色

  1. 在实例列表页面,找到刚刚创建的实例,选择图标 > 实例设置 > 授予/收回RAM角色

  2. 在对话框中,选择创建好的实例RAM角色,单击确定完成授权。

部署应用

20

配置服务器并部署应用

  1. 登录云服务器ECS管理控制台。点击右上角的远程连接,并使用root权限登录到云服务器。

    image

  2. 执行以下命令设置环境变量

    说明

    请将<>占位符中的值替换为真实配置。

    1. <数据库连接地址>、<数据库用户名>、<数据库名称>在数据库列表页进入实例的详情页,从左侧账号管理和数据库连接页面获取。

    2. <角色名称>可以在角色列表页获取。

    3. <外网访问 OSS endpoint>、<OSS region>、<OSS bucket name>在OSS Bucket列表页进入Bucket详情页获取。OSS endpoint 如oss-cn-hangzhou.aliyuncs.com,OSS region 如cn-hangzhou

    4. <ECS实例公网IP>在ECS实例列表页查看。

    5. <轻量消息队列(原MNS) endpoint>、<轻量消息队列(原MNS)名称>在轻量消息队列(原MNS)页,进入队列详情页查看接入点。轻量消息队列(原MNS) endpoint使用内网地址,如http://xxx.mns.cn-hangzhou-internal.aliyuncs.com

    6. 自定义设置<自定义界面登录用户名>和<自定义界面登录密码>。(为了防止IP泄露被人恶意访问,示例代码提供了登录校验,登录账号密码通过下面的环境变量进行设置。)

    export APPLETS_RDS_ENDPOINT=<数据库连接地址>
    export APPLETS_RDS_USER=<数据库用户名>
    export APPLETS_RDS_PASSWORD=<数据库密码>
    export APPLETS_RDS_DB_NAME=<数据库名称>
    export ALIYUN_RAM_ROLE_NAME=<角色名称>
    export ALIYUN_OSS_ENDPOINT=<外网访问 OSS endpoint>
    export ALIYUN_REGION_ID=<OSS region>
    export ALIYUN_OSS_BUCKET=<OSS bucket name>
    export ECS_IP=<ECS实例公网IP>
    export ALIYUN_MNS_ENDPOINT=<轻量消息队列(原MNS) endpoint>
    export ALIYUN_MNS_QUEUE=<轻量消息队列(原MNS)名称>
    export WANX_DEMO_USERNAME=<自定义界面登录用户名>
    export WANX_DEMO_PASSWORD=<自定义界面登录密码>
    EOF
    
    source ~/.bashrc
  3. 执行以下命令,部署并运行示例应用。

    1. curl -fsSL https://help-static-aliyun-doc.aliyuncs.com/install-script/fc-drive-file/install.sh|bash
    2. 看到如下信息表示启动成功,接下来准备进行函数配置。

      Installation completed.

创建并配置函数

接下来您需要创建函数计算函数,用于感知OSS Bucket中用户上传的文件,进行处理,然后将处理后的文件上传到OSS Bucket中。

创建函数

  1. 登录函数计算3.0控制台,在左侧导航栏,单击函数。

    当左上角显示函数计算 FC 3.0时,表示当前控制台为3.0控制台。image

  2. 在顶部菜单栏,选择地域,然后在函数页面,单击创建函数

  3. 创建函数页面,选择事件函数,配置以下配置项,然后单击创建

    • 基本设置:设置函数名称

    • 函数代码:配置函数的运行环境和代码相关信息。

      配置项

      说明

      示例

      运行环境

      选择您熟悉的语言,例如Python、Java、PHP或Node.js等。

      Java 11

      代码上传方式

      选择代码上传到函数计算的方式。

      • 使用示例代码:默认方式,您可以根据业务需要选择函数计算为您提供的创建函数的示例代码。

      • 通过 JAR 包上传代码:选择函数代码JAR包并上传。

      • 通过 OSS 上传代码:选择上传函数代码的Bucket 名称文件名称

      通过 JAR 包上传代码

      下载并上传代码包

    • 高级配置:配置函数的实例相关信息和函数执行超时时间等。

      配置项

      说明

      示例

      规格方案

      根据您的业务情况,选择或手动输入合理的vCPU规格内存规格组合。关于各资源使用的计费详情,请参见计费概述

      说明

      vCPU大小(单位为核)与内存大小(单位为GB)的比例必须设置在1:1到1:4之间。

      0.35核,512 MB

      临时硬盘大小

      根据您的业务情况,选择临时存储文件的硬盘大小。

      说明

      取值说明如下。

      • 512 MB:默认值。不计费,函数计算为您提供512 MB以内的硬盘免费使用额度。

      • 10 GB:按9.5 GB进行计费。

      512 MB

      执行超时时间

      设置超时时间。执行超时时间默认为60秒,最长为86400秒。

      60

      请求处理程序

      设置请求处理程序,函数计算的运行时会加载并调用您的请求处理程序处理请求。

      com.aliyun.demo.Main::handleRequest

      时区

      选择函数的时区。此处设置函数的时区后,将自动为函数添加一条环境变量TZ,其值为您设置的目标时区。

      UTC

      函数角色

      函数计算平台会使用这个RAM角色来生成访问您的阿里云资源的临时密钥,并传递给您的代码。更多信息,请参见授予函数计算访问其他云服务的权限

      之前创建的角色名称

      允许访问 VPC

      是否允许函数访问VPC内资源。更多信息,请参见配置网络

      允许函数默认网卡访问公网

      是否允许函数可以通过默认网卡访问公网。关闭后,当前服务中的函数将无法通过函数计算的默认网卡访问公网。

      说明

      使用固定公网IP地址功能时,您必须关闭允许函数默认网卡访问公网,否则配置的固定公网IP地址不生效。更多信息,请参见配置固定公网IP地址

      日志功能

      是否启用阿里云日志服务。取值说明如下:

      • 启用:函数的执行日志被持久化保存到日志服务,方便您进行代码调试、故障分析和数据分析等。

      • 禁用:函数的执行日志将无法通过日志服务存储和查询。

      禁用

    • 环境变量:设置函数运行环境中的环境变量。更多信息,请参见配置环境变量

  4. 单击创建

创建触发器

  1. 函数页面,单击目标函数。

  2. 在函数配置页面,选择配置页签,在左侧导航栏,单击触发器,然后单击创建触发器

  3. 在创建触发器面板,填写相关信息,然后单击确定

    配置项

    操作

    本文示例

    触发器类型

    选择对象存储 OSS

    对象存储 OSS

    名称

    填写自定义的触发器名称。

    oss-trigger

    版本或别名

    默认值为LATEST,如果您需要创建其他版本或别名的触发器,需先在函数详情页的版本或别名下拉列表选择该版本。关于版本和别名的简介,请参见版本管理别名管理

    LATEST

    Bucket 名称

    选择刚刚创建的OSS Bucket。

    选择刚刚创建的OSS Bucket。

    文件前缀

    输入要匹配的文件名称的前缀。建议您配置文件前缀和后缀,避免触发事件嵌套循环触发引起额外费用。此外,一个Bucket的不同触发器如果指定了相同的事件类型,则前缀和后缀不能重复。详细信息,请参见OSS触发器概述

    说明

    文件前缀不能以/开头,否则会导致OSS触发器无法被触发。

    source

    文件后缀

    输入要匹配的文件名称的后缀。强烈建议您配置前缀和后缀,避免触发事件嵌套循环触发引起额外费用。另外,一个Bucket的不同触发器如果指定了相同的事件类型,则前缀和后缀不能重复。详细信息,请参见OSS触发器概述

    不填

    触发事件

    选择一个或多个触发事件。关于对象存储OSS的事件类型,请参见OSS触发器概述

    本示例选择oss:ObjectCreated:PutObject

    oss:ObjectCreated:PutObjectoss:ObjectCreated:PostObjectoss:ObjectCreated:CompleteMultipartUpload

    角色名称

    选择AliyunOSSEventNotificationRole

    说明

    如果您第一次创建该类型的触发器,则需要在单击确定后,在弹出的对话框中选择立即授权

    AliyunOSSEventNotificationRole

方案验证

10

一、通过上传PPT文件并查看处理结果,验证水印效果

  1. 登录ECS控制台,在左侧菜单栏选择实例,从实例列表中获取ECS实例的公网IP。image

  2. 通过浏览器访问该公网IP,看到如下登录页面后,输入之前配置的用户名和密码,进入文件管理页面。image

  3. 在文件管理页面,单击上传新的文件,在上传文件对话框,上传ppt文件,示例要求必须是pptx文件格式。

    说明

    如果上传完成后一直未展示处理后的文件,您可以在OSS查看对应的文件,上传的源文件存储在OSS的source目录,处理后的文件会存储在processed目录。如果processed目录无对应文件,您可以在函数计算控制台查看函数的实时日志进行排查。

    image

  4. 当状态显示为已完成时,点击下载查看,可发现已经添加水印,并且格式为pdf.。image

    image

二、通过监控函数计算,验证处理过程

  1. 进入函数计算控制台,左侧导航栏,点击函数选项如下图:

image

  1. 点击监控,可以看到函数计算处理示例PPT格式文件的耗时情况和调用情况。

image

image

3.进入OSS管理控制台,点击Bucket 列表,点击创建的Bucket。

image

  • 上传的源文件存储在OSS的source目录。image

  • 处理后的文件会存储在processed目录。image

完成及清理

10

清理资源

在本方案中,您创建了1台云服务器ECS实例、1个云数据库RDS MySQL实例、2个交换机、1个专有网络VPC、1个OSS Bucket、1个轻量消息队列(原MNS)、1个函数计算函数、1个RAM角色。测试完方案后,您可以参考以下规则处理对应产品的实例,避免继续产生费用:

  1. 释放1台云服务器ECS实例:

    登录ECS控制台,在实例页面,找到目标实例,然后在操作列选择216更多-竖向..png>释放设置,根据界面提示释放实例。

  2. 释放1个云数据库RDS MySQL实例:

    登录云数据库RDS控制台,在集群列表页面,找到目标集群,然后在操作列中选择更多>释放实例

  3. 释放2个交换机:

    登录专有网络控制台,在交换机页面,找到目标交换机,然后在操作列单击删除,按照界面提示释放实例。

  4. 释放1个专有网络VPC:

    登录专有网络控制台,在专有网络页面,找到目标VPC,然后在操作列单击删除,按照界面提示释放实例。

  5. 删除OSS Bucket:

    登录OSS控制台,在Bucket列表页面,找到目标Bucket,单击进入详情页面。在详情页左侧菜单最底部单击删除Bucket,在删除Bucket页面,单击立即删除

  6. 删除消息服务队列

    登录轻量消息队列(原MNS)控制台,在左侧导航栏,单击队列列表,在队列列表中,找到目标队列,然后在操作列中选择更多>删除

  7. 删除函数

    登录函数计算控制台,在左侧导航栏,单击函数。找到目标函数,然后在操作列中选择更多>删除

  8. 删除角色

    登录RAM控制台,在左侧导航栏,单击角色。找到目标角色,然后在操作单击删除角色。在左侧导航栏,单击权限策略。选择策略类型自定义策略。找到目标权限策略,然后在操作列单击删除

一键部署

30

https://www.aliyun.com/solution/tech-solution/fc-drive-file

方案概览

在企业办公应用或社交媒体应用中,通常需要处理各种类型的文件,如图片、视频和文档。这些文件处理任务包括格式转换、水印添加和内容审核等。文件处理任务往往会消耗大量的计算、存储和网络资源,如果长时间占用这些资源,可能会影响应用的核心功能,进而影响业务稳定性。本方案通过在应用中使用函数计算来处理文件,利用事件驱动和异步任务的方式,将文件处理与核心应用解耦。函数计算具备自动弹性扩展和按使用付费的优势,可以提升文件处理效率和服务稳定性。

方案架构

本方案使用云服务器ECS和RDS MySQL版提供WEB服务,通过对象存储OSS存储用户文件。采用服务端签名的WEB直传方式,将文件上传直接发送到OSS,减少对应用网络资源的占用。文件上传到OSS后,通过事件驱动机制触发函数计算执行文件处理任务(示例代码是将PPT转换为PDF并添加水印)。处理完成后,通过OSS事件触发的轻量消息队列(原MNS)通知应用。

方案提供的默认设置完成部署后在阿里云上搭建的架构如下图所示。

image

本方案的技术架构包括以下基础设施和云服务:

  • 1个专有网络VPC:为云服务器ECS、云数据库RDS MySQL版等云资源构建云上私有网络。

  • 2台交换机: 分别用于链接云服务器ECS实例和云数据库RDS MySQL版实例。

  • 1台云服务器ECS实例:用于部署业务系统,提供应用服务。

  • 1个云数据库RDS MySQL版实例:为业务系统提供数据服务。

  • 1个对象存储OSS Bucket:用于存储用户上传的文件和处理后的文件。

  • 1个函数计算函数:用于文件处理,解耦在线用户服务和文件处理。

  • 1个轻量消息队列(原MNS):通过感知对象存储OSS Bucket中文件变化,通知应用服务文件处理完成。

部署准备

10

开始部署前,请按以下指引完成账号申请、账号充值。

准备账号

  1. 如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。

  2. 为阿里云账号充值。本方案的云资源支持按量付费,且默认设置均采用按量付费引导操作。如果确定任何一个云资源采用按量付费方式部署,账户余额都必须大于等于100元。

一键部署

10

一键部署基于阿里云资源编排服务ROS(Resource Orchestration Service)实现,ROS模板已定义好脚本,可自动化地完成云资源的创建和配置,提高资源的创建和部署效率。ROS模板完成的内容包括:

操作步骤

您可以通过下方提供的ROS一键部署链接,来自动化地完成这些资源的创建和配置:

  • 创建1台ECS实例。

  • 创建1个专有网络VPC。

  • 创建2台交换机。

  • 创建1个云数据库RDS MySQL版实例。

  • 创建1个OSS Bucket。

  • 创建1个函数计算函数。

  • 创建一个轻量消息队列(原MNS)。

  • 创建一个RAM角色。

  1. 一键部署资源。

    1. 单击一键部署,在顶部导航栏选择地域,默认华东1(杭州)地域。建议 ECS 配置选择可用区Jecs.c7.large(2 vCPU 4 GB);RDS Mysql 配置选择 mysql.n2e.medium.1(2 vCPU 4 GB)

    1. 在配置页面修改资源栈名称,按需选择和配置参数。

    2. 资源栈信息页面的状态显示为创建成功时表示一键配置完成。

方案验证

10

一、通过上传PPT文件并查看处理结果,验证水印效果

  1. 在资源栈详情页面,单击输出页签image

  2. 在输出页签下,单击url访问服务,看到如下登录页面后,输入之前配置的用户名和密码(可在资源栈详情页面输出页签查看),进入文件管理页面。image

  3. 在文件管理页面,单击上传新的文件,在上传文件对话框,上传ppt文件,示例要求必须是pptx文件格式。

说明

如果上传完成后一直未展示处理后的文件,您可以在OSS查看对应的文件,上传的源文件存储在OSS的source目录,处理后的文件会存储在processed目录。如果processed目录无对应文件,您可以在函数计算控制台查看函数的实时日志进行排查。

image

  1. 当状态显示为已完成时,点击下载查看,可发现已经添加水印,并且格式为pdf.。

image

image

二、通过监控函数计算,验证处理过程

  1. 进入函数计算控制台,左侧导航栏,点击函数选项如下图:

image

  1. 点击监控,可以看到函数计算处理示例PPT格式文件的耗时情况和调用情况。

image

image

3.进入OSS管理控制台,点击Bucket 列表,点击创建的Bucket。

image

  • 上传的源文件存储在OSS的source目录。image

  • 处理后的文件会存储在processed目录。image

完成及清理

10

清理资源

您可以使用ROS一键删除创建的云资源,避免继续产生费用。

  1. 登录ROS控制台

  2. 在左侧导航栏,选择资源栈

  3. 资源栈页面的顶部选择部署的资源栈所在地域,找到资源栈,然后在其右侧操作列,单击删除

  4. 删除资源栈对话框,选择删除方式释放资源,然后单击确定,根据提示完成资源释放。