도메인 주소에 따라 환경을 자동으로 설정하기

  • Post author:
  • Post category:칼럼
  • Post comments:0 Comments
  • Post last modified:June 28, 2015

뭘 하고 싶었냐면…

환경 도메인 Puppet Master AWS VPC
Staging *.si.test.com puppet.si.test.com staging
Production *.pi.test.com puppet.pi.test.com production

이런 식으로 각 환경(Environment)을 구성했다고 치자. 이때 특정 VPC에 노드를 추가하면 해당 노드가 자신이 어느 환경에 속했는지 스스로 판단하게 하려는 것이다. puppet.confenvironment 값을 적어넣지 않더라도 말이다.

참고

이를 구현하기는 그리 어렵지 않은데 삽질하느라 시간은 꽤 걸렸다. 우선, 적당한 경로에 getenv라는 Bash 스크립트를 작성해 넣는다. 여기서는 /etc/puppetlabs/code/bin/getenv을 경로로 잡았다.

#!/bin/bash

hostname="$(/opt/puppetlabs/bin/facter fqdn)"
if [[ $hostname =~ .*\.si\..* ]];
then
   echo "environment: staging"
   exit 0
fi

echo "environment production"

getenv 파일에 실행권한을 부여하는 걸 잊지 말자.

chown +x /etc/puppetlabs/code/bin/getenv

이제 Puppet 서버의 /etc/puppetlabs/puppet/puppet.conf을 수정해서 [master] 섹션에 두 줄을 써 넣는다.

[master]

node_terminus  = exec
external_nodes = /etc/puppetlabs/code/bin/getenv

이제 *.si.* 도메인을 가진 VPC에 속한 노드는 자신이 Staging 환경에 있음을 자동으로 파악한다. 그 외의 VPC의 경우에는 Production이라고 판단할 것이다.

참고 자료

AWS Rest API

getenv를 보면 Puppet의 facter를 이용해 노드의 FQDN을 알아낸다.

hostname="$(/opt/puppetlabs/bin/facter fqdn)"

똑같은 일을 AWS가 제공하는 기능으로도 해낼 수 있다.

hostname="$(/usr/bin/curl --silent http://169.254.169.254/latest/meta-data/local-hostname)"

Puppet이 없는 곳에서는 이 방법이 유용하다.

Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments