ПеременныеПерекрёстные ссылки между сервисами

Перекрёстные ссылки

Ссылки позволяют сервису читать значения другого сервиса или аддона без копирования учётных данных. Они хранят каждое значение в одном месте; потребители подхватывают изменения при следующем деплое.

Синтаксис

${{<name>.<KEY>}}
  • <name> — имя целевого сервиса или аддона (то, что показано в дашборде и используется в lizard add -n).
  • <KEY> — ключ в объединённом окружении цели.

Используйте их везде, где принимается значение — чаще всего в секрете:

lizard secrets set DATABASE_URL='${{postgres.DATABASE_URL}}' --service api

Как они разрешаются

  • Ссылки разрешаются во время деплоя против объединённого окружения цели.
  • Они сопоставляются с текущим именем цели. Переименование цели ломает их; после переименования обновите каждую ${{oldname.KEY}}.
  • Ссылка на отсутствующую цель или ключ разрешается в пустую строку — она не проваливает деплой. В логе сборки для каждой пустой ссылки выводится предупреждение с указанием причины.
  • Ошибку выдают только циклические ссылки.

После настройки ссылки проверьте в логе сборки, нет ли пустых:

lizard logs --build --service api

Если ссылка не отображается так, как ожидалось, см. Устранение неполадок → секрет или ссылка не отображается.

Типичные сценарии

Подключить аддон к нескольким сервисам — привяжите на каждом потребителе; внутри проекта используйте приватный URL:

lizard secrets set REDIS_URL='${{redis.REDIS_PRIVATE_URL}}' --service api
lizard secrets set REDIS_URL='${{redis.REDIS_PRIVATE_URL}}' --service worker

Ссылаться на значение другого сервиса — например, делиться вычисленным URL или токеном. LIZARD_PUBLIC_DOMAIN — это просто имя хоста, и он существует, когда у сервиса есть домен; LIZARD_PRIVATE_DOMAIN (<name>.lizard.internal) обеспечивает доступ к сервису внутри проекта:

lizard secrets set UPSTREAM_URL='https://${{api.LIZARD_PUBLIC_DOMAIN}}' --service web
lizard secrets set INTERNAL_API='http://${{api.LIZARD_PRIVATE_DOMAIN}}:8080' --service web

Ссылаться на второй аддон того же типа — используйте его сгенерированное имя:

lizard secrets set CACHE_URL='${{redis-winter-otter.REDIS_URL}}' --service api

Почему не просто --global?

Размещение общего значения в области проекта (--global) раскрывает его для каждого сервиса, включая те, которые ему не нужны. Ссылка хранит значение в одном месте и привязывает его только там, где вы её задали. Учтите, что DATABASE_URL и REDIS_URL каждого запущенного аддона Postgres и Redis в любом случае попадают в каждый сервис с самым низким приоритетом; ссылка их переопределяет. См. Область видимости секретов.

См. также

Обновлено