본문 바로가기

OS/AWS

[aws] .ebextensions 명령을 profile에 의해 동작시키기

스프링에서는 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

 

'OS > AWS' 카테고리의 다른 글

AWS CLI : 쿼리 하기  (1) 2018.11.09