Appaloft Docsv685dc5b2b9b264bb9b5749efdc50a341b407289b
Projects And Resources

Dependency resources

管理依赖资源、绑定、secret 轮换和备份恢复。

Dependency resource 是 Appaloft 管理的数据库或服务依赖记录。Phase 7 支持 provider-neutral Postgres、Redis、MySQL、ClickHouse、S3/MinIO object storage 和 OpenSearch 记录、 Appaloft-managed realization、外部依赖导入、安全 read model、删除安全检查,以及备份恢复。

创建或导入依赖资源
appaloft dependency provision --kind postgres --project prj_prod --environment env_prod --name app-db
appaloft dependency import --kind redis --project prj_prod --environment env_prod --name cache --connection-url redis://cache.internal:6379/0

List/show 输出必须屏蔽连接 secret、provider token、密码和原始连接字符串。

Resource dependency binding 让后续 deployment snapshot 引用一个依赖资源。绑定只保存 provider-neutral 安全元数据和 secret reference,不会把数据库 URL 或密码写进 Resource,也不需要把数据库 URL 传给 deployments.create

绑定依赖资源
appaloft resource dependency bind res_web --dependency dep_db --target DATABASE_URL

Unbind 只移除绑定关系,不删除数据库、不重启运行时、不改写历史 deployment snapshot。

当 Resource 有 active ready 的 dependency binding 时,Appaloft 会在 deployment plan 和 deployment detail 输出中包含安全的 runtime injection readiness。依赖处于 ready 状态、binding 目标是 DATABASE_URLREDIS_URL 这样的运行时环境变量,并且所选 runtime target 支持依赖 secret delivery 时,binding 才能被交付。

部署前预览依赖 runtime injection
appaloft deployments plan --project prj_prod --environment env_prod --resource res_web --server srv_prod
appaloft deployments show dep_123

deployments.create 不接收依赖连接字符串。Appaloft 会在 deployment snapshot 中捕获当前安全的 binding reference,并要求 runtime target 向 workload 提供配置好的环境变量。后续 binding secret 轮换不会改写历史 deployment snapshot 中已捕获的 reference。

Plan 和 show 输出会把 dependency runtime injection 标记为 readyblockednot-applicableblocked 表示至少一个 active binding 无法被所选 runtime target 安全交付。常见安全原因包括依赖还未 ready、缺少安全 secret reference、已存储的依赖 secret 无法解析、不支持的 dependency kind、不支持的 scope 或 injection mode、重复的 target name、已有环境变量冲突,或 runtime target 无法交付依赖 secret。

deployments.create 看到同样的 blocked 状态时,会在接受部署前以 dependency_runtime_injection_blocked 拒绝请求。不会创建 deployment attempt,响应也不会暴露原始连接 字符串、密码或 provider payload。修复 dependency resource、binding、target name 或 runtime target 后,再重新运行 plan。

resources.rotate-dependency-binding-secret 只替换绑定上的安全 secret reference 或版本。它影响未来 deployment snapshot,不会修改 provider-native 数据库密码、运行中的容器环境变量或历史部署。

轮换后应创建新的部署,让 workload 读取新的快照引用。

Backup 会创建 safe restore point;restore 会在明确确认数据覆盖和 runtime 不会自动重启后,对同一个 dependency resource 执行 in-place restore。

备份和恢复
appaloft dependency backup create dep_db
appaloft dependency backup list dep_db
appaloft dependency backup restore bkp_123

对于带有 Appaloft-owned connection reference 的 imported dependency,shell provider 会执行 native Postgres dump/restore 或 Redis logical backup/restore。Provider-owned 或无法解析的 reference 仍会生成 安全的 metadata-only restore point,直到对应 provider 提供自己的 backup substrate。原始连接值不会出现在 backup artifact、read model、event 或 error 里。

恢复不会修改 ResourceBindings、deployment rollback/redeploy 状态、运行时进程或历史 deployment snapshot。 如果有保留中的 backup 或 in-flight restore,dependency delete 必须被阻塞。

Scheduled backup policy 是显式启用的策略记录。除非 self-hosted shell 启用了 scheduled dependency backup runner,否则策略不会执行。到期策略会调度和手动备份相同的 dependency-resources.create-backup 操作,并记录安全的 process attempt 元数据供 operator 审查。

配置定时依赖备份
appaloft dependency backup policy configure dep_db --retention-days 7 --interval-hours 24
appaloft dependency backup policy list dep_db
appaloft dependency backup policy show dbp_123

删除 dependency resource 前,Appaloft 会检查活动 binding、backup retention、deployment snapshot 引用和 provider-managed 安全状态。Imported external delete 只删除 Appaloft 控制面记录,不删除外部数据库。

被阻塞时,先查看 dependency detail、binding list 和 backup list,再显式清理对应引用。