Image for post
Image for post
Config Server Infrastructure

Spring Config Server Yönetimi

Yusuf Çakal
Dec 2, 2019 · 3 min read

Bu konuyla birlikte aslında iki yazıdan oluşan bir seri düşündüm; ilkinde yani bu yazıda, config server nedir? neden ihtiyaç duyulur? ve beraberinde ise projeyi dockerize hale getirip, Spring ile implementasyonundan bahsedip bir sonraki yazıda Gitlab’de CI/CD Pipeline ile birlikte AWS’ye deploy kısmına değineceğim. Merak edenler için amazon kısmındaki stack şu şekilde olacak. Dockerize edilmiş image’ı ECR (Elastic Container Registry)’ye pushlayıp ECS(Elastic Container Service) ile yöneteceğiz.

Neden Config Server Kullanmalıyız?

Büyük ölçekli bir monolitik api uygulamanız olduğunu düşünün ve bütün gerekli config bilgileri (postgre - elasticsearch - redis vs.) uygulamanın içerisinde tanımlı.

  • Herhangi bir config bilgisini değiştirmek için deploy çıkmak zorunda kalacaksınız ve deploy süreniz uzun ise bu sizin için eziyet olacak.
  • Tanımlı config bilgileri ekipteki herkes tarafından görünür ve/veya değiştirebilir olacak.

Yukarıdaki durumları önlemek için, beraberinde mikroservis gibi yapılarda esneklik ve tek yerden yönetim sağlamak için config server kullanmak büyük kolaylık sağlayacaktır.

Config Server nedir?

Config server, http tabanlı bir api ile, ilgili config bilgilerinin (veritabanı kullanıcı adı, parolası gibi) herhangi bir git tabanlı sağlayıcı üzerinden paylaşıldığı bir uygulama olarak düşünebiliriz.

Yazının buradan sonrasını spring üzerinden ilerleteceğm.

Aşağıda gördüğünüz gibi EnableConfigServer notasyonunu eklediğimizde bu uygulamanın bir config server olduğunu spring’e bildirmiş oluyoruz.

Config server’ın application.yml dosyasını aşağıda görebilirsiniz.

test ve canlı ortamlarınızın config değerleri farklı repoda olacağı için, yml dosyasında belirtilen değerleri environment variable olarak atamak mantıklı olacaktır. Config değerlerinin git tabanlı bir sistemde tutulması gerektiğinden bahsetmiştim. Github, gitlab veya bitbucket olabilir. Diyelim ki gitlab üzerinde tutuyoruz. Burada belirtilen username ve password gitlab’de repoya erişen kullanıcının bilgileri olacaktır ve repo name ise ortama bağlı config değerlerinin bulunduğu reponun adı. Örneğin test ortamı için gerekli config değerlerini qa-configs reposunda tutuyorsunuz dolayısıyla build aşamasında CONFIG_GIT_REPO_NAME değerini qa-configs olarak setlemeniz gerekir. Aşağıda 3 ortam için ilgili config bilgilerinin bulunduğu repoları görebilirsiniz. prod-configs reposu canlı ortama ait değerlerin olduğu repo, bu repoya erişimi sınırlandırmak isteyebilirsiniz. local-configs reposunda işe development esnasında local ortamınıza ait değerleri koyabilirsiniz.

Bu yapıda birçok microservice kullandığınızı göz önünde bulundurursak, örneğin; qa-configs reposu içerisinde her bir microservice’in qa ortamına özel değerleri barınmalı. 3 adet microservice’inizin olduğunu düşünürsek, her bir servisin ismi (spring.application.name)-qa.yml olarak belirtebilirsiniz. Mesela score service’ini qa ortamında ayağa kaldırdığınızda score-service-qa.yml dosyasından değerleri okuyacaktır.

Yazının başında projeyi dockerize hale getireceğimizden bahsetmiştim, config server’ın application.yml dosyasıda verdiğimiz environment variable’ları docker’ı run ederken parametre geçeceğiz.

Docker build alarak docker imajını çalıştırmak için hazır hale getirebiliriz. Bu yazıyı çok uzatmamak adına, bir sonraki yazıda AWS’nin ECR (Elastic Container Registry) servisine build edilmiş docker imajını push’layacağız ve ECS (Elastic Container Service) ile pushladığımız docker imajını ortam bazı (qa/prod) ayağa kaldıracağız.

Dockerize projeyi ayağa kaldırmak için docker build ve run komutlarına buradan erişebilirsiniz.

Son olarak toparlamak gerekirse, mevcut api uygulamalarınızda ortam bazlı tuttuğunuz bilgileri tek yerden güvenli ve hızlı bir şekilde değiştirebilir yapmak istiyorsanız config server kullanmak tutarlı olacaktır.

Umarım açıklayıcı bir anlatım olmuştur, aklınıza takılan bir kısım olursa aşağıya 👇 yorum bırakabilirsiniz.

Dolap Tech

Dolap.com — Elden ele teknoloji!

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store