개발 노트/에러 화풀이 기록

ECS fargate 환경에서 FCM에 쓸 service-account.json 설정하기

hectick 2024. 11. 7. 22:51

 

로컬에서 테스트할때는 걍 디렉터리에 json 저장해주고 디렉터리 경로만 잘 GOOGLE_APPLICATION_CREDENTIALS로 환경변수 설정해주면 됨

 

그러나? aws ecs fargate 환경 에서는? 시크릿한 json 파일 어떻게 저장?전송?할건데~

 

1. secret manager -> 돈나오니까 패스

2. parameter store -> 오케이 도전!

 

찾아보니 fargate는 기본적으로 /tmp 경로에 임시 저장소를 제공한다고 함

 

1. parameter store에 firebase에서 받은 service-account.json 내용을 그대로 복붙해서 저장

2. terraform에서 task definition을 설정할때 parameter store에서 내용을 읽어서 secret한 GOOGLE_APPLICATION_CREDENTIALS_CONTENT 환경 변수로 저장하게 함

3. terraform에서 task definition 설정할때 GOOGLE_APPLICATION_CREDENTIALS  환경변수에 /tmp/service-account.json 설정

4. terraform에서 command로 컨테이너 시작할때 GOOGLE_APPLICATION_CREDENTIALS_CONTENT를 /tmp/service-account.json 파일에다가 쓰게 함

 => 근데 또 여기서 docker 파일의 cmd랑 동시작동이 잘 안되는 이슈가 있었음 그래서 걍 task definition command에 어플리케이션 실행 커맨드도 넣음

 

*terraform안쓰면 걍 aws 콘솔에서 하면 됨

 

그런데 이슈는 golang 어플리케이션에서 json 파싱을 못함; 알림을 보내려 했더니 project Id를 찾을 수 없다구 나옴

 

디버깅 해보니까 service-account.json에 있던 privatekey에 있던 이스케이프 문자 \n 때문이었음

그래서 다음 파이썬 코드로 \n -> \\n으로 바꿔서 다시 parameter store에 저장함

 

import json

# JSON 파일 읽기
with open('원본json경로', 'r', encoding='utf-8') as file:
    data = json.load(file)

# 'private_key' 필드의 줄바꿈 문자 처리
if 'private_key' in data:
    data['private_key'] = data['private_key'].replace('\n', '\\n')

# 변환된 JSON 파일 저장
with open('수정본json경로', 'w', encoding='utf-8') as file:
    json.dump(data, file, indent=4)

print("private_key의 줄바꿈 문자가 \\n으로 변환되었습니다.")

 

잘됨. 굿

 

근데 이렇게하는게 맞나?ㅎㅎ