Настраивайте переменные окружения, подстановку секретов, ключи провайдеров и доступ к ним в среде выполнения из тестовой панели функции — значения сохраняются в записи функции и попадают в process.env / os.environ / os.Getenv при запуске контейнера.
Переменные окружения#
Задайте переменные функции в тестовой панели: откройте вкладку Настройки, раскройте секцию Окружение, добавьте ключи и значения и сохраните функцию. Значения хранятся в записи функции и передаются в контейнер как переменные окружения при запуске.
Относитесь к этим значениям как к конфиденциальной конфигурации: они сохраняются в базе данных приложения вместе с остальными данными функции. Если на сервере задан ENCRYPTION_KEY, значения переменных окружения шифруются на диске алгоритмом AES-256-GCM (конверт enc:v1:); без ключа они хранятся в открытом виде. В любом случае ограничивайте доступ к базе, не коммитьте реальные учётные данные в систему контроля версий и ротируйте их при утечке.
Несколько имён зарезервированы платформой, и задать их функции нельзя (ответ 400): INQUIR_RUNTIME_*, INQUIR_INVOKE_*, INQUIR_GO_*, INQUIR_FUNCTION_*, INQUIR_MODULE_TYPE, INQUIR_ENTRY_FILE, INQUIR_TENANT_ID и INQUIR_PYTHON_BUILD_BINDING. Остальные имена с INQUIR_, например INQUIR_COMPUTE_API_URL, по-прежнему задаёте вы. Переменные, которые платформа сама задаёт контейнеру функции, например HANDLER, HOT_PORT, LAMBDA_TASK_ROOT, EVENT и CONTEXT, всегда сохраняют значение платформы: переменная функции с таким именем игнорируется.
Секреты и чувствительные значения#
В секции Окружение используйте поля типа «пароль» — так значения сложнее подсмотреть при вводе. Платформа маскирует типичные секретоподобные строки в сохранённых логах и трассировках там, где работает скрытие секретов, — но это конфигурация функции, а не полноценный отдельный менеджер секретов.
Ротируйте учётные данные при утечке. Для долгоживущих продакшен-секретов предпочитайте подстановку из 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 }), }; }