Представляем mamori: типизированные, наблюдаемые конфигурации и секреты для Go
Каждый сервис на Go, который я когда-либо выпускал, в конечном итоге обрастает одним и тем же "органом". Он начинается с малого: пара вызовов os.Getenv. Затем секрет должен поступить из AWS Secrets Manager, и вы добавляете SDK. Затем кто-то хочет, чтобы этот секрет ротировался без развертывания, и вы добавляете time.Ticker. Затем тикеру нужен мьютекс, потому что две горутины читают конфигурацию, пока она заменяется. Затем в лог попадает некорректное значение, и вы добавляете обертку для маскирования.В итоге у вас в каждом репозитории появляется самодельный ConfigManager: загрузчик, получатель, цикл обновления, мьютекс и молитва. Он никогда не бывает полностью одинаковым, редко хорошо тестируется и является именно тем кодом, которым никто не хочет владеть.
os.Getenv. Затем секрет должен поступить из AWS Secrets Manager, и вы добавляете SDK. Затем кто-то хочет, чтобы этот секрет ротировался без развертывания, и вы добавляетеtime.Ticker. Затем тикеру нужен мьютекс, потому что две горутины читают конфигурацию, пока она заменяется. Затем в лог попадает некорректное значение, и вы добавляете обертку для маскирования.В итоге у вас в каждом репозитории появляется самодельныйConfigManager: загрузчик, получатель, цикл обновления, мьютекс и молитва. Он никогда не бывает полностью одинаковым, редко хорошо тестируется и является именно тем кодом, которым никто не хочет владеть.