load_dotenv로 튜플 자료형을 불러올 때의 문제
aws opensearch 클라이언트를 생성하는 간단한 함수를 생성한 뒤, 도메인에 대한 정보와 계정 정보를 전달하는 코드를 작성하였다.
from dotenv import load_dotenv
def os_client(host: str, port: int, auth: tuple) :
client = OpenSearch(
hosts=[f"{host}:{port}"],
http_compress=True,
http_auth=auth,
use_ssl=True,
verify_certs=True
)
return client
if __name__ == "__main__":
load_dotenv()
host = os.getenv('OPENSEARCH_HOST')
port = os.getenv('OPENSEARCH_PORT')
auth= os.getenv('OPENSEARCH_AUTH')
client = os_client(host, port, auth)
# .env
OPENSEARCH_HOST = '도메인 엔드포인트'
OPENSEARCH_PORT = 443
OPENSEARCH_AUTH = '(유저ID, 패스워드)'
간단한 함수였기에, 쉽게 연결될 줄 알았지만, 계속해서 opensearchpy.exceptions.AuthenticationException: AuthenticationException(401, 'Unauthorized')
에러를 뱉었다. 그래서 검색해보니, os.getenv()
로 불러온 값들은 모두 문자열로 처리되기 때문에 아예 .env
에 변수를 적을 때는 string으로 적고 불러와서 다시 튜플로 묶어주는 로직이 추가로 필요했다.
따라서 아래와 같이 수정하니 문제없이 해결되었다.
if __name__ == "__main__":
load_dotenv()
host = os.getenv('OPENSEARCH_HOST')
port = os.getenv('OPENSEARCH_PORT')
auth_str = os.getenv('OPENSEARCH_AUTH')
auth_username, auth_password = auth_str.split(':')
auth = (auth_username, auth_password)
client = os_client(host, port, auth)
get_top5_keyword_graph(client)
# .env
OPENSEARCH_HOST = '도메인 엔드포인트'
OPENSEARCH_PORT = 443
OPENSEARCH_AUTH = '유저ID:패스워드'
즐겁게 읽었습니다. 유용한 정보 감사합니다.