
서버 MSA 연결을 하며 config 서버 연결에 애를 먹었던 과거의 나를 회상하며,, 작성해보는 fast api와 config 서버 연결기!
미리 말하자면 정말 별거 없었다.. 오히려 코드만 보면 스프링 프로젝트보다 별거 없는듯..??
# core/config.py
import requests
def get_config():
config_url = "http://localhost:8888/recommend-dev/default"
response = requests.get(config_url)
return response.json()
config = get_config()
config_url은 config 서버의 주소, recommend-dev부분은 config의 yml파일의 이름임!
# recommend-dev.yml
server:
port: 8084
application:
name: recommend-service
elasticsearch:
host: "****"
apiKey: "****"
config 서버 구축은 다른 분들의 글을 참고해주길 바란다!
# db.database.py
es_config = config['propertySources'][0]['source']
es_client = AsyncElasticsearch(
es_config['elasticsearch.host'],
api_key=es_config['elasticsearch.apiKey']
)
이렇게 불러오면 config 서버와의 연결이 끝난다! 간단하게 host와 api key를 불러오고, 포트번호를 지정할 수 있었다.
config에 대한 막연한 어려움이 있었는데 생각보다 별거 없었던..
def get_config():
config_url = "http://localhost:8888/recommend-dev/default"
response = requests.get(config_url)
return response.json()
뭐.. 진짜 별거 없다. 이부분이 전부다.
config 서버의 url을 변수값으로 저장하고, config url에게 requests를 보내게 되면 yml파일을 response로 받게 된다.
그렇게 되면 json형식으로 변경해야 쉬운 사용이 가능하기에 json으로 바꾸어 저장해주면 된다.
사실 reponse 자체가 json 형식이긴 하다. 다만 정확히 json이라고 명시가 되어있지 않아 그대로 쓰면 오류가 발생하게 된다.
그리고 불러오는 방식은 아래와 같이 불러오면 된다!
es_config = config['propertySources'][0]['source']
response.json()은 아래와 같은 결과값이 나온다.
따라서 위와 같은 형태로 불러온다.{'name': 'recommend-dev', 'profiles': ['default'], 'label': None, 'version': '****', 'state': None, 'propertySources': [{'name': '레포지토리 링크/recommend-dev.yml', 'source': {'server.port': 8084, 'application.name': 'recommend-service', 'elasticsearch.host': '****', 'elasticsearch.apiKey': '****' } }] }
그래서 결국! 아래와 같은 방식으로 호출하게 된다는거~~
es_client = AsyncElasticsearch(
es_config['elasticsearch.host'],
api_key=es_config['elasticsearch.apiKey']
)
근데 문제는 elasticsearch.host까지는 되는데 그 이상으로 쭉쭉 써내려가는게 안된다.
예를 들어
elasticsearch:
host:
host:
로 정의된 yml 파일을
elasticsearch.host.host 이런식으로 불러오는게 안된다. 왜인지는 아직도 모른다 ㅎ