[ PROMPT_NODE_26836 ]
secrets
[ SKILL_DOCUMENTATION ]
# 密钥与环境变量
## 创建密钥
### 通过仪表板
在 https://modal.com/secrets 创建密钥。
提供以下模板:
- 数据库凭据 (Postgres, MongoDB)
- 云服务商 (AWS, GCP, Azure)
- 机器学习平台 (Weights & Biases, Hugging Face)
- 以及更多
### 通过 CLI
bash
# 创建包含键值对的密钥
modal secret create my-secret KEY1=value1 KEY2=value2
# 使用环境变量
modal secret create db-secret PGHOST=uri PGPASSWORD="$PGPASSWORD"
# 列出密钥
modal secret list
# 删除密钥
modal secret delete my-secret
### 程序化创建
从字典创建:
python
if modal.is_local():
local_secret = modal.Secret.from_dict({"FOO": os.environ["LOCAL_FOO"]})
else:
local_secret = modal.Secret.from_dict({})
@app.function(secrets=[local_secret])
def some_function():
import os
print(os.environ["FOO"])
从 .env 文件创建:
python
@app.function(secrets=[modal.Secret.from_dotenv()])
def some_function():
import os
print(os.environ["USERNAME"])
## 使用密钥
将密钥注入函数:
python
@app.function(secrets=[modal.Secret.from_name("my-secret")])
def some_function():
import os
secret_key = os.environ["MY_PASSWORD"]
# 使用密钥
...
### 多个密钥
python
@app.function(secrets=[
modal.Secret.from_name("database-creds"),
modal.Secret.from_name("api-keys"),
])
def other_function():
# 两个密钥中的所有键均可用
...
如果键名冲突,后面的密钥会覆盖前面的。
## 环境变量
### 保留的运行时变量
**所有容器**:
- `MODAL_CLOUD_PROVIDER` - 云服务商 (AWS/GCP/OCI)
- `MODAL_IMAGE_ID` - 镜像 ID
- `MODAL_REGION` - 区域标识符 (例如 us-east-1)
- `MODAL_TASK_ID` - 容器任务 ID
**函数容器**:
- `MODAL_ENVIRONMENT` - Modal 环境名称
- `MODAL_IS_REMOTE` - 在远程容器中设置为 '1'
- `MODAL_IDENTITY_TOKEN` - 用于函数身份验证的 OIDC 令牌
**沙盒容器**:
- `MODAL_SANDBOX_ID` - 沙盒 ID
### 设置环境变量
通过镜像设置:
python
image = modal.Image.debian_slim().env({"PORT": "6443"})
@app.function(image=image)
def my_function():
import os
port = os.environ["PORT"]
通过密钥设置:
python
secret = modal.Secret.from_dict({"API_KEY": "secret-value"})
@app.function(secrets=[secret])
def my_function():
import os
api_key = os.environ["API_KEY"]
## 常见密钥模式
### AWS 凭据
p