阿里云函数计算:Java 函数部署 + OSS 触发指南

1. 核心概念
  • 函数计算(FC):事件驱动的无服务器计算服务,自动扩缩容。
  • OSS 触发器:当对象存储服务(OSS)发生事件(如文件上传/删除)时自动触发函数执行。
  • Java 函数:通过 JAR 包部署的 Java 业务逻辑。
2. 部署流程
步骤 1:编写 Java 函数

实现 StreamRequestHandler 接口处理 OSS 事件流:

import com.aliyun.fc.runtime.*;

public class OssHandler implements StreamRequestHandler {
    @Override
    public void handleRequest(InputStream input, OutputStream output, Context context) {
        // 解析 OSS 事件(JSON 格式)
        String eventData = new Scanner(input).useDelimiter("\\A").next();
        context.getLogger().info("OSS Event: " + eventData);
        
        // 业务逻辑示例:获取触发文件信息
        // JSONObject event = JSON.parseObject(eventData);
        // String bucket = event.getJSONArray("events").getJSONObject(0).getString("bucket");
        // String object = event.getJSONArray("events").getJSONObject(0).getString("object");
    }
}

步骤 2:打包与部署
  1. 使用 Maven 打包为 JAR(包含 com.aliyun.fc.runtime 依赖)
  2. 在 FC 控制台:
    • 创建函数,选择 Java 运行环境
    • 上传 JAR 包
    • 设置处理程序:包名.OssHandler::handleRequest
步骤 3:配置 OSS 触发器
触发器类型:OSS
存储桶:your-bucket-name
事件类型:oss:ObjectCreated:*   # 监听文件创建
前缀过滤:images/               # 仅触发 images/ 目录
后缀过滤:.jpg                  # 仅触发 JPG 文件

3. 权限配置

通过 RAM 角色授权函数访问 OSS:

{
  "Statement": [
    {
      "Action": "oss:GetObject",
      "Resource": "acs:oss:*:*:your-bucket-name/*",
      "Effect": "Allow"
    }
  ]
}

4. 事件数据结构示例

OSS 触发时传递的 JSON 事件(简化):

{
  "events": [
    {
      "eventName": "ObjectCreated:PutObject",
      "oss": {
        "bucket": {"name": "test-bucket"},
        "object": {"key": "images/photo.jpg"}
      }
    }
  ]
}

5. 调试与监控
  • 日志查询:在 FC 控制台查看实时日志
  • 测试事件:使用模拟 OSS 事件触发函数
  • 指标监控:关注 InvocationCountDuration 指标
6. 最佳实践
  1. 冷启动优化
    • 使用预留实例
    • 初始化逻辑放在静态代码块
  2. 错误处理
    try {
      // 业务代码
    } catch (Exception e) {
      context.getLogger().error("Process failed: " + e.getMessage());
    }
    

  3. 资源复用
    • 在构造函数初始化 OSSClient
    • 使用 context.getExecutionCredentials()

重要提示:OSS 触发器有消息大小限制,大文件处理建议结合消息队列(MNS)。

通过此方案,可实现 OSS 文件上传自动触发 Java 函数处理,典型应用场景包括:

  • 图片压缩/水印
  • 文件转码
  • 数据备份清洗
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐