ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

LiteLLM Terraform Provider 的 litellm_budgets 数据源:以基础设施即代码方式读取代理中的全部预算

LiteLLM Terraform Provider 的 litellm_budgets 数据源:以基础设施即代码方式读取代理中的全部预算 LiteLLM Terraform Provider 的 litellm_budgets 数据源以基础设施即代码方式读取代理中的全部预算【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm本篇技术指南聚焦 LiteLLM Terraform Provider 中的litellm_budgets数据源对应文档 budgets.md讲清它如何在 Terraform 中一次性拉取 LiteLLM Proxy 上配置的全部预算budget返回budgets列表与ids两个核心属性。读完本文你可以直接在 HCL 中枚举、审计和消费 Proxy 上的预算配置并理解该数据源从 Terraform 到 Proxy REST API 的完整实现链路。什么是 litellm_budgets 数据源LiteLLM 支持在代理proxy层面创建预算对象将其应用到 team、组织、用户或 API key 上统一约束美元额度、TPM/RPM 速率与并发请求数。当预算已经由其他流程控制台、litellm_budget资源或其他 IaC 栈创建后litellm_budgets数据源提供了一种只读的读取方式Retrieves all budgets configured on the LiteLLM proxy.它与litellm_budget单数数据源按budget_id查询单个预算见 budget.md配对使用两者共同覆盖查单个与列全部两类只读场景。前置条件配置 Provider数据源依赖 Provider 完成鉴权。Provider 的根 Schema 定义在 provider.go包含三个参数均支持同名环境变量作为默认值参数类型必填环境变量说明api_basestring是LITELLM_API_BASELiteLLM API 的基础 URLapi_keystring是LITELLM_API_KEY用于鉴权的 API key标记为 Sensitiveinsecure_skip_verifybool否LITELLM_INSECURE_SKIP_VERIFY跳过 TLS 证书校验仅建议开发环境或自签证书使用一个最小可用的 Provider 声明terraform { required_providers { litellm { source BerriAI/litellm version ~ 1.99.0 # 与你 proxy 运行的 LiteLLm 版本保持一致 } } } provider litellm { api_base var.litellm_api_base api_key var.litellm_api_key }注意 terraform/provider/README.md 强调的版本策略Provider 版本与 LiteLLM 版本一一对应每次 proxy 发布会同步发布同版本的 Provider因此required_providers中的版本约束应与 proxy 实际运行的版本行对齐。使用示例与属性参考完整用法继承自 budgets.md 的官方示例data litellm_budgets all {} output budget_ids { value data.litellm_budgets.all.ids }该数据源不接收任何参数This data source takes no argumentsterraform plan阶段即会调用代理接口读取全量预算并填充输出。Attribute Reference属性类型说明budgetslist of object代理上配置的全部预算列表每个条目包含下表字段idslist of string全部预算的 ID 列表等价于budgets[*].budget_id的扁平化budgets列表中每个条目的字段字段Terraform 类型说明budget_idstring预算 IDmax_budgetfloat硬预算上限USD超出后请求会失败soft_budgetfloat软预算上限USD超出仅触发告警不拦截请求max_parallel_requestsint该预算允许的最大并发请求数tpm_limitint该预算的每分钟 token 上限rpm_limitint该预算的每分钟请求数上限budget_durationstring预算重置周期如1hr、1d、28dmodel_max_budgetstring按模型的预算配置JSON 字符串格式例如{gpt-4o: {max_budget: 10.0}}budget_reset_atstring预算重置的时间datetime以上类型并非文档惯例而是与源码 Schema 逐一对应——data_source_budget.go 中budgets为TypeList元素是嵌套 Resourceids为元素TypeString的TypeListmax_budget/soft_budget为TypeFloatmax_parallel_requests/tpm_limit/rpm_limit为TypeInt。实战按预算迭代消费由于返回的是结构化列表可以直接驱动for_each做审计或二次编排例如把预算 ID 导出给合规报表或为某个预算下的 key 做交叉校验data litellm_budgets all {} # 仅输出设置了硬预算上限的条目 output budgets_with_hard_limit { value [ for b in data.litellm_budgets.all.budgets : b if b.max_budget 0 ] } # 用预算 ID 作为 for_each 键逐个拉取单预算详情 data litellm_budget each { for_each toset(data.litellm_budgets.all.ids) budget_id each.value }源码实现解析从 HCL 到 /budget/list读取流程litellm_budgets数据源的实现位于 data_source_budget.go 的dataSourceLiteLLMBudgetsRead核心链路为通过MakeRequest(client, GET, endpointBudgetList, nil)发起GET /budget/list请求端点常量endpointBudgetList /budget/list定义在 data_source_budget.go用handleResponse校验响应状态将响应体反序列化为[]budgetResponse切片——该结构体定义在 resource_budget.go除BudgetID外所有字段均为指针类型*float64、*int、*string用于区分未设置与零值遍历切片通过budgetListEntry组装每个预算 map同时收集ids执行d.SetId(budgets)并d.Set(budgets, ...)、d.Set(ids, ...)写入 state。字段映射与可空语义budgetListEntrydata_source_budget.go对每个可选字段都做了判空只有当对应指针非 nil 时才写入条目。这意味着代理上未设置的限额不会出现在返回的条目中HCL 侧消费时应使用coalescelist/条件判断等防御式写法而不是假设九个字段必然齐全。model_max_budget 的 JSON 归一化model_max_budget是数据源中最容易踩坑的字段Proxy 接口返回时它可能是嵌套对象dict而非字符串而 Terraform Schema 要求 string。源码通过budgetModelMaxBudgetStringdata_source_budget.go做了归一化——若已是 string 直接透传若是 map 则json.Marshal成字符串空 map 视为未设置。因此你在 HCL 中拿到的始终是合法 JSON 字符串如需在 Terraform 内解析应配合jsondecode(data.litellm_budgets.all.budgets[0].model_max_budget)使用。测试用例对行为的印证单元测试 data_source_budget_test.go 中的TestDataSourceBudgetsRead_MapsList用一个httptest假服务器覆盖了上述关键行为可作为行为契约断言请求必须是GET /budget/list与单数数据源的POST /budget/info形成对比返回两个预算bud-1带max_budget/tpm_limit/model_max_budget对象bud-2仅带soft_budget验证budgets列表长度、各字段映射以及model_max_budget被转为可json.Unmarshal的字符串且包含gpt-4o键验证ids精确为[bud-1 bud-2]。后端 API/budget/list 的服务端约束数据源调用的后端接口定义在 budget_management_endpoints.py 的list_budget有三个直接决定可用性的前提必须连接数据库prisma_client is None时接口返回 400db not connected error。也就是说纯配置 YAML 启动、未接入数据库的 proxy 无法提供该列表需要 admin 视角接口经过user_api_key_auth依赖鉴权后还会调用_user_has_admin_view(user_api_key_dict)校验角色非 admin/proxy admin 角色会得到 400 权限错误。因此provider litellm使用的api_key应是一个具备管理员角色的 master key数据源实现服务端通过BudgetRepository(prisma_client).table.find_many()全量拉取预算表记录后原样返回。同一文件头部注释列出了完整的预算管理端点集合/budget/new、/budget/info、/budget/update、/budget/delete、/budget/settings、/budget/list其中读写端点分别对应 Provider 中的litellm_budget资源resource_budget.go 定义了对应的四个端点常量与两个数据源。单数与复数数据源的差异对比维度litellm_budget单数litellm_budgets复数本篇参数budget_id必填无后端请求POST /budget/infobody 为{budgets: [id]}GET /budget/list未命中行为返回budget id not found错误空列表budgets/ids为空典型用途依赖已知预算 ID 的精确引用枚举、审计、for_each驱动两个实现细节值得注意单数数据源在 404 或空响应时直接报错data_source_budget.go而资源侧的resourceLiteLLMBudgetRead遇到预算消失时会执行d.SetId()将其移出 state二者在漂移处理策略上并不相同。小结litellm_budgets数据源用零参数设计换来了最简的枚举体验一条data litellm_budgets all {}声明即可在 state 中获得全量预算对象与 ID 列表。从源码看其字段判空映射、model_max_budget的 JSON 归一化均有单元测试固化使用时需牢记三件事——proxy 必须接入数据库、调用 key 必须具有 admin 视角、Provider 版本应与 proxy 版本保持一致。对于预算的创建与变更则应使用 resource_budget 相关文档 同系列的litellm_budget资源配合本篇的数据源完成写-读-校验的完整 IaC 闭环。【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表