5

ProblemMetody zarządzania plików konfiguracyjnych między wieloma środowiskami

Używamy plików java Wojna i przechowywać pliki konfiguracyjne w s3 wiadrach. Nasze środowiska: DEV, QA, Stage i PROD mają własne pliki konfiguracyjne i s3. Jeśli dodaję nowe pole, takie jak "Polling_RATE = 5000", , należy je ręcznie dodać do każdego env, ponieważ te pliki konfiguracyjne również przechowują hasła, aby nie mogły być powiązane z aplikacją lub przechowywane w Github. Nie każdy inżynier ma dostęp do każdego env, więc musisz pamiętać, aby poinformować inżynierów wyższego poziomu (DEVOPS) przed datą wdrożenia prod, aby dodać nowe pole do działania aplikacji. Jest to obecnie bardzo brudny proces.

Pytanie

Czy istnieje narzędzie lub architektoniczny wzorzec projektowy oznaczało sobie z tym poradzić? Jak kontrolować "wrażliwe" pola konfiguracyjne, które nie mogą być przechowywane w github?

Odpowiedz

1

Rozpoznany problem.

Zazwyczaj pola konfiguracji zawierające poufne informacje, takie jak hasła, zmieniają się znacznie rzadziej niż niewrażliwe pola konfiguracji. Możliwym rozwiązaniem jest podzielenie konfiguracji na dwie części:

  1. Konfiguracja jest specyficzna dla środowiska, ale nie zawiera informacji poufnych. Radziłbym przechowywać te pliki razem z kodem źródłowym i jeśli to możliwe, generować pliki i automatycznie przesyłać je do magazynu konfiguracji (S3 w twoim przypadku) w czasie kompilacji. Muszą być wersjonowane i powiązane z wersją aplikacji.
  2. Konflikt zawierający poufne informacje. Patrząc na to pytanie, nie wszyscy członkowie zespołu mogą czytać/zapisywać te informacje. Możesz przechowywać je w S3 z określonymi prawami dostępu, aby tylko upoważnieni członkowie mieli do nich dostęp. Będziesz potrzebował mechanizmu, aby połączyć pliki ponownie podczas wdrażania lub zmienić aplikację na odczyt z różnych plików konfiguracyjnych.
    To jednak rozwiąże tylko część problemu. Ops faceci nadal będą musieli wykonywać zmiany, gdy zmienione zostaną wrażliwe klawisze konfiguracyjne. To, czy jest to dopuszczalne, zależy od tego, jak często zmieniają się wrażliwe klawisze konfiguracyjne.

Alternatywą dla S3 może być uruchomienie prywatnego repozytorium Git (na przykład AWS CodecCommit). Lepsza kontrola wersji i łatwiejszy dostęp dla programistów do wykonywania zmian, ponieważ już używasz Git. Nadal będziesz musiał naprawić rozszczepione prawa dostępu między deweloperami i ops, lub odejść (ponieważ DevOps dotyczy zaufania i współpracy, to może być dobry pomysł). Można zastosować podobny wzór tutaj, jak opisałem powyżej.

Innym rozwiązaniem może być przeniesienie konfiguracji wrażliwych wartości z plików właściwości do konfiguracji systemu. Kiedy już korzystasz z systemu rezerwacyjnego, takiego jak Puppet czy Chef, będzie to dla nich naturalne. Możesz też ustawić wszystkie czułe wartości, takie jak hasła, jako zmienne środowiskowe i pozwolić aplikacji na odczytanie jej jako właściwości systemu.

Mam nadzieję, że to pomoże!

0

Używamy dynamodb do utrzymywania wartości konfiguracyjnych. Zaletą tego podejścia jest to, że wartości są łatwe do odczytania z konsoli i sprawdzone. Kolejną zaletą jest to, że okresowo sprawdzamy wartości z dynamodb, więc jeśli jakaś wartość wymaga zmiany, zmieniamy ją, a aplikacja automatycznie wybiera nową wartość, zamiast ponownie ją uruchamiać. Wartości wrażliwe są przechowywane w postaci zaszyfrowanej przy użyciu kluczy KMS i tylko rola EC2, na której działa aplikacja, może odszyfrować ten klucz. Ulepszyliśmy projekt Netia Archiaus, dopasowując go do naszych potrzeb. Możesz to sprawdzić.

+0

Dzięki Rohit. Czy to oznacza, że ​​masz jedną instancję dynamodb, która trzyma konfigurację dla każdego env? –

+0

Tak. 1 stół na środowisko. I zadanie Jenkinsa, aby załadować dane do tej tabeli z csv, który jest utrzymywany w ramach repozytorium git. – Rohit

+0

Jeśli dodaję nowe właściwości do instancji dynamodb DEV. Czy muszę ręcznie pamiętać o aktualizacji 3 innych instancji dynamodb, czy też ta pojedyncza praca obejmuje wszystkie env? –

Powiązane problemy