스프링에서는 profile에 따라 동작을 바꿀 수 있다.
외부 API 서버가 개발기와 운영기가 간은 도메인 주소로 되어 있었다.
hosts 파일을 특정 IP로 변경해서 사용을 하라고 하였다.
일단 /etc/hosts 파일에 값을 추가하는 것은 echo 명령과 append 리다이렉트 명령으로 가능하다.
echo '172.217.25.196 www.google.com' >> /etc/hosts
문제는 Elastic Beanstalk Configuration files(.ebextensions) 파일에 이것을 프로파일에 따라 분기를 해야 하는 요구사항이 생겼다.
전문가(?)에게 물어보니 /etc/aws-meta.env 파일에 아래와 같은 키=값 형태로 정보들이 있는데 프로파일도 있다고 한다.
$ cat /etc/aws-meta.env
instance_id=i-b10b8e9ad8b049293
tag_name=my-powerful-api
tag_service=power-stone
tag_environment=develop
결국은 tag_environment 키의 값을 구해야 한다.
이것은 아래의 명령으로 가능하다.
grep tag_environment= /etc/aws-meta.env | cut -d "=" -f 2
결국은 profile의 값을 비교해서 선택적으로 적용하면 되면 된다.
profile이 product, stage, qa, develop 네 가지가 있다고 할때 이중 qa, develop에 대해만 hosts 파일 덮어쓰기를 하려고 한다.
commands:
50_get_profile_from_aws_meta_env:
command: profile=`grep tag_environment= /etc/aws-meta.env | cut -d "=" -f 2`
51_apply_hosts_override:
command: |
if [[ "$profile" != "prod" && "$profile" != "stage" ]]
echo '172.217.25.196 www.google.com' >> /etc/hosts
echo "Hosts overrided"
else
echo "Skip hosts override"
fi
참고로 위의 스크립트는 에러가 난다.
시행착오
.ebextensions 파일을 만들면서 여러번의 실패를 했다. 아래 Jenkins가 그것을 보여준다. ㅜㅜ
/var/log/eb-activity.log 에 로그파일이 떨어지는 것을 알게 되었다. 웹 콘솔에도 나오지만 피드백 주기를 짧게 할 수 있다.
변수 할당을 source 명령을 쓰면 변수로 바로 읽어 올 수 있다.
source /etc/aws-meta.env
echo $tag_environment
따라서 아래와 같이 수정할 수 있다.
commands:
50_hostfile_override:
command: source /etc/aws-meta.env \
&& if [ "$tag_environment" != 'prod' && "$tag_environment" != 'stage' ]; then echo '172.217.25.196 www.google.com' >> /etc/hosts; echo "Hosts overrided"; else echo "Skip hosts override"; fi
References
- Bash 실행결과를 변수에 담기
- Bash script - if statements
- Get string after character [duplicate]
- Using AWS ebextensions, what is the proper way to pass an array of commands per their docs?
'OS > AWS' 카테고리의 다른 글
AWS CLI : 쿼리 하기 (1) | 2018.11.09 |
---|