Настраивайте переменные окружения, подстановку секретов, ключи провайдеров и доступ к ним в рантайме из тестовой панели функции — значения сохраняются в записи функции и попадают в process.env / os.environ / os.Getenv при старте контейнера.
Переменные окружения
Задайте переменные функции в тестовой панели: откройте вкладку Настройки, раскройте секцию Окружение, добавьте ключи и значения и сохраните функцию. Значения хранятся в записи функции и передаются в контейнер как переменные окружения при запуске.
Относитесь к этим значениям как к конфиденциальной конфигурации: они сохраняются в базе данных приложения вместе с остальными данными функции. Если на сервере задан <code>ENCRYPTION_KEY</code>, значения переменных окружения шифруются на диске алгоритмом AES-256-GCM (конверт <code>enc:v1:</code>); без ключа они хранятся в открытом виде. В любом случае ограничивайте доступ к базе, не коммитьте реальные учётные данные в систему контроля версий и ротируйте их при утечке.
Секреты и чувствительные значения
В секции Окружение используйте поля с типом пароля — так значения сложнее подсмотреть при вводе. Платформа маскирует типичные секретоподобные строки в сохранённых логах и трассах там, где работает редактирование, — но это конфигурация функции, а не полноценный отдельный менеджер секретов.
Ротируйте учётные данные при утечке. Для долгоживущих продакшен-секретов предпочитайте подстановку из CI/CD или окружения хоста, а не хранение только в записи функции.
// Per-function env vars (Config → Environment in the editor, or API): await api.updateFunction("function-id", { envVars: { OPENAI_API_KEY: "sk-...", }, }); // Values are stored on the function and injected into the container at invoke time
export async function handler(event, context) { // OPENAI_API_KEY comes from function env — avoid logging it const payload = typeof event.body === 'string' ? JSON.parse(event.body || '{}') : (event || {}); const { prompt } = payload; const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, }); const completion = await openai.chat.completions.create({ model: "gpt-4o-mini", messages: [{ role: "user", content: prompt }], }); return { statusCode: 200, body: JSON.stringify({ result: completion.choices[0].message.content }), }; }