3. 资源模型基础概念:资源定义、资源类型、资源实例、资源生命周期
在 IDP 自助门户中,资源模型是连接开发者意图与基础设施能力的核心抽象层。开发者无需关心底层 IaaS/PaaS 的 API 差异,只需通过门户声明“我需要什么”,平台便自动完成资源的创建、配置与交付。理解资源模型的四个基础概念——资源定义、资源类型、资源实例、资源生命周期——是设计可扩展、可治理的自助门户的起点。
3.1 资源定义(Resource Definition)
资源定义是资源模型的元描述,它规定了某类资源在平台中的“长相”和“行为”。可以将其理解为面向开发者的资源契约,包含以下核心要素:
- 标识与元数据:唯一名称、版本号、显示名称、描述、所属域。
- 输入参数(Input Schema):开发者创建资源时必须提供的参数,如名称、规格、网络配置等。
- 输出属性(Output Attributes):资源创建成功后返回给开发者的信息,如连接地址、端口、凭证。
- 生命周期钩子(Lifecycle Hooks):定义资源在创建、更新、删除等阶段执行的操作。
- 治理策略(Governance Policies):配额限制、标签规范、成本归属规则。
关键原则:资源定义一旦发布,应遵循“向后兼容”策略。新增字段必须为可选,禁止删除或修改已有必填字段,否则会导致已有资源实例无法解析。
3.2 资源类型(Resource Type)
资源类型是资源定义的分类标签,用于在平台中对资源进行分组、搜索和权限控制。一个资源定义必须归属于一个资源类型。常见的资源类型包括:
| 资源类型 | 典型资源定义示例 | 治理关注点 |
|---|---|---|
| 计算 | Kubernetes 集群、虚拟机、Serverless 函数 | CPU/内存配额、运行时版本 |
| 存储 | 对象存储桶、文件系统、数据库实例 | 容量上限、备份策略、数据保留期 |
| 网络 | 负载均衡器、DNS 记录、VPC 网络 | 域名白名单、端口范围、跨域策略 |
| 中间件 | 消息队列、缓存集群、API 网关 | 连接数限制、版本兼容性 |
| 安全 | 证书、密钥、访问凭证 | 轮换周期、加密算法、审计日志 |
资源类型的设计直接影响门户的导航结构和权限模型。例如,可以为“生产环境数据库”资源类型设置“仅 DBA 可创建”的权限规则。
3.3 资源实例(Resource Instance)
资源实例是资源定义在特定环境中的具体化产物。当开发者在自助门户中填写参数并提交后,平台根据资源定义生成一个唯一的资源实例。每个资源实例包含:
- 唯一标识(Instance ID):全局唯一的 UUID,用于追踪和关联。
- 状态(Status):当前所处的生命周期阶段,如
Provisioning、Running、Failed、Deleting。 - 运行时属性(Runtime Attributes):实际运行时的连接信息、监控指标、健康状态。
- 归属信息(Ownership):创建者、所属项目、成本中心。
- 标签(Labels):用于搜索和分类的键值对,如
env=prod、team=payment。
设计建议:资源实例的标签应自动继承自资源定义中的默认标签,并允许开发者追加自定义标签。这有助于后续的成本分摊和资源审计。
3.4 资源生命周期(Resource Lifecycle)
资源生命周期定义了资源实例从创建到销毁的全过程状态流转。一个标准化的生命周期模型是平台自动化运维的基础。下图展示了 IDP 中典型的资源生命周期状态机:
生命周期中的关键状态说明:
| 状态 | 含义 | 平台行为 |
|---|---|---|
| Pending | 请求已提交,等待校验和调度 | 执行参数校验、配额检查、审批流程 |
| Provisioning | 正在创建底层基础设施 | 调用 Terraform/Crossplane 等 IaC 引擎执行资源编排 |
| Running | 资源就绪,可供开发者使用 | 返回连接信息,启动健康检查和监控 |
| Updating | 正在执行配置变更 | 执行原地升级或滚动更新,更新完成后回到 Running |
| Failed | 创建或更新过程中发生错误 | 记录错误日志,触发告警,提供重试或回滚入口 |
| Deleting | 正在销毁资源 | 执行清理脚本,释放底层资源,移除 DNS 记录等 |
| Deleted | 资源已完全销毁 | 保留审计日志,资源实例进入归档状态 |
3.5 四者关系总结
下图展示了资源定义、资源类型、资源实例与生命周期之间的整体关系:
常见设计误区:将资源类型与资源定义混为一谈。例如,将“MySQL 5.7”和“MySQL 8.0”分别定义为两个资源类型,而不是两个资源定义。正确的做法是:资源类型为“数据库”,资源定义为“MySQL 5.7”和“MySQL 8.0”,这样便于统一治理和版本管理。