阿里云函数计算:Java 函数部署 + OSS 触发
·
阿里云函数计算: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:打包与部署
- 使用 Maven 打包为 JAR(包含
com.aliyun.fc.runtime依赖) - 在 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 事件触发函数
- 指标监控:关注
InvocationCount和Duration指标
6. 最佳实践
- 冷启动优化:
- 使用预留实例
- 初始化逻辑放在静态代码块
- 错误处理:
try { // 业务代码 } catch (Exception e) { context.getLogger().error("Process failed: " + e.getMessage()); } - 资源复用:
- 在构造函数初始化 OSSClient
- 使用
context.getExecutionCredentials()
重要提示:OSS 触发器有消息大小限制,大文件处理建议结合消息队列(MNS)。
通过此方案,可实现 OSS 文件上传自动触发 Java 函数处理,典型应用场景包括:
- 图片压缩/水印
- 文件转码
- 数据备份清洗
更多推荐
所有评论(0)