# 高级 Bundle 开发

在普通 Bundle 之上扩展外部资源生命周期、跨资源初始化和故障补偿。

大多数 Bundle 不需要高级能力。先完成模块、平台应用和其他平台资源的组合、版本创建、安装
与升级；只有平台默认安装器无法完成产品交付时，才增加 Bundle 生命周期插件。

## 三个开发层级

| 层级            | 示例                        | 处理方式                  |
| ------------- | ------------------------- | --------------------- |
| 普通 Bundle     | 安装模块、平台应用、工作流和定时任务        | Runtime 安装器按不可变版本内容编排 |
| 可配置 Bundle    | 用户填写 API Key、区域或已有第三方租户编号 | 安装参数和资源属性             |
| 带插件的高级 Bundle | 自动开通外部租户、数据库、许可证，或者执行升级迁移 | Bundle 生命周期插件         |

> **已有租户编号可以手工填写**
>
> 用户已经拥有外部系统账号时，可以把租户编号和凭据作为安装配置填写。插件管理服务不是
> 保存配置或让模块自动安装的前置条件。

## 什么时候需要生命周期插件

同时满足下面两个条件时才使用插件：

1. 动作属于整个 Bundle 的安装、升级、配置变更、停止或卸载生命周期。
2. 动作需要修改平台资源账本之外的外部状态。

典型场景包括：

- 为每次 Bundle 安装创建独立外部租户或业务空间。
- 为多个模块和平台应用分配一个共享数据库或许可证。
- 升级 Bundle 时迁移外部配置或业务数据。
- 卸载时停用外部 worker，并根据产品策略保留或回收数据。
- 外部操作需要长时间运行、状态查询、重试、回滚或补偿。

以下情况不需要插件：

- 只安装或升级 Bundle 内的平台资源。
- 模块把数据保存在 Runtime 提供的数据能力中。
- 模块调用无状态 HTTP API。
- 用户手工填写已有第三方租户、Endpoint 或凭据。
- 普通配置更新不需要同步外部安装态资源。

## 责任边界

Bundle 定义服务只负责定义、创建不可变版本并生成只读安装计划。Runtime 安装器负责安装、
升级和卸载的生命周期状态、资源执行账、失败恢复与最终活动版本；生命周期插件管理器只负责
解析注册记录、鉴权、可靠调用和记录插件执行结果；外部插件服务执行租户、许可证、数据库等
平台外部动作。

插件不能绕过 Runtime 安装器直接安装模块、平台应用或工作流，也不能直接修改安装资源台账。
需要回写模块属性或其他资源配置时，插件返回受约束的输出，由 Runtime 安装器校验、应用并记录。

继续阅读 [Bundle 生命周期插件](/development/bundle-development/advanced/lifecycle-plugins/)。
