You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure容器实例部署时配置环境变量:解决机器学习模型部署中密钥环境变量无法在score.py中使用的问题

在Azure Container Instance部署的ML服务中设置密钥环境变量

我来帮你搞定这个问题,其实有两种实用的方案可以让你的score.py获取到密钥环境变量,分别适合不同的场景:

方法1:直接在部署配置中添加环境变量(测试场景适用)

这种方式最简单直接,你只需要在AciWebservice.deploy_configuration()里加上environment_variables参数,把密钥作为键值对传入就行:

from azureml.core.webservice import AciWebservice
deployment_config = AciWebservice.deploy_configuration(
    cpu_cores=0.5,
    memory_gb=1,
    auth_enabled=True,
    # 添加你的密钥环境变量
    environment_variables={"API_SECRET_KEY": "your-actual-secret-value"}
)

然后在你的score.py里,就可以通过os.getenv()读取这个变量了:

import os

def init():
    # 从环境变量中读取密钥
    secret_key = os.getenv("API_SECRET_KEY")
    # 这里可以用密钥做初始化操作,比如初始化API客户端、数据库连接等
    global api_client
    api_client = YourAPIClient(secret_key)

⚠️ 注意:这种方式会把密钥明文写在代码里,绝对不要把包含明文密钥的代码提交到版本控制系统,只适合本地测试或者临时验证场景。

方法2:使用Azure Key Vault管理密钥(生产环境推荐)

如果是生产环境,强烈建议用Azure Key Vault来存储和管理你的敏感密钥,避免密钥暴露。步骤如下:

  1. 把密钥存入Key Vault:先在你的Azure Key Vault中创建一个机密(Secret),比如命名为ml-api-secret。
  2. 关联Key Vault与Azure ML工作区:确保你的Azure ML工作区已经和Key Vault关联(通常创建工作区时会自动关联,若没有可以手动在Azure Portal配置)。
  3. 在环境中引用Key Vault密钥:创建或修改Azure ML环境,用特殊语法引用Key Vault里的密钥:
from azureml.core import Environment
from azureml.core.webservice import AciWebservice
from azureml.core.model import InferenceConfig, Model

# 获取你的工作区对象(假设已经初始化了ws)
# ws = Workspace.from_config()

# 加载或创建推理环境
env = Environment.get(workspace=ws, name="your-inference-env")
# 如果是新环境,先配置依赖:
# env = Environment(name="prod-inference-env")
# env.python.conda_dependencies = CondaDependencies.create(pip_packages=["azureml-defaults"])

# 添加环境变量,用Key Vault引用语法
env.environment_variables["API_SECRET_KEY"] = "{{secrets://your-key-vault-name/ml-api-secret}}"

# 配置推理和部署参数
inference_config = InferenceConfig(source_directory="./src", entry_script="score.py", environment=env)
deployment_config = AciWebservice.deploy_configuration(
    cpu_cores=0.5,
    memory_gb=1,
    auth_enabled=True
)

# 部署模型
service = Model.deploy(
    workspace=ws,
    name="prod-ml-service",
    models=[your_trained_model],
    inference_config=inference_config,
    deployment_config=deployment_config
)
service.wait_for_deployment(show_output=True)

同样,在score.py里读取的方式和方法1完全一样,用os.getenv("API_SECRET_KEY")就能拿到Key Vault里的密钥值,而且整个过程中密钥不会出现在代码或配置文件里,安全性拉满。

如何更新已部署服务的环境变量

如果你的服务已经部署好了,不想重新部署的话,可以直接更新服务的环境变量:

from azureml.core.webservice import AciWebservice

# 获取已部署的服务
service = AciWebservice(workspace=ws, name="your-service-name")

# 更新环境变量(可以用明文或Key Vault引用)
service.update(environment_variables={"API_SECRET_KEY": "new-secret-value"})
# 或者用Key Vault的方式
# service.update(environment_variables={"API_SECRET_KEY": "{{secrets://your-key-vault-name/new-secret-name}}"})

内容的提问来源于stack exchange,提问作者kuti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:27:52