Docker 컨테이너에서 변경된 구성 요소의 dir 만 terraform 명령을 돌리는 make 명령을 유지합니다.
4764 단어 ShellScript도커TerraformMakefile
소개
안녕하세요! 도내에서 엔지니어를 하고 있는, 지금부터 SRE를 해 가겠다 나르 라고 합니다.
최근 기사를 쓸 수 없었습니다만, 3월부터 새로운 직장이라고 하는 일도 있어, 이번 주는 전직으로 만든 것의 공양에 5개 정도 기사를 써 가고 싶습니다.
무엇을 만들었는가
Terraform에서 인프라를 코드 관리하고 아래 그림과 같이 미세한 구성 요소로 나누어 관리하는 경우,
pullrequest를 치기 전에 로컬에서 각각의 dir에 cd하고 terraform 명령을 치면 좋겠다 (plan-all 명령이 원하는) 케이스가 많이 있다고 생각합니다.
구성 요소를 나누는 이야기 세부 사항 -> Terraform의 구성 요소 분할을 고려하십시오.
이번에는 지금까지 개인 이용의 범위에서는 Bashscript 쓰고 make 명령 (make plan/all)으로 직접 호출했던 것을 팀에 공유 할 때 Windows 사용자도 사용할 수 있도록 docker 컨테이너를 시작하고 거기에서 terraform plan 치도록 변경했으므로, 그 구조를 공유하고 싶습니다.
파일 구성
Dockerfile
FROM hashicorp/terraform:0.12.xx
COPY . .
#大元のimageのENTRYPOINTを消す
ENTRYPOINT [] //❶
❶ : hashicorp/terraform의 이미지는 ENTRYPOINT [ "terraform"]가 설정되어 있으므로 docker run 플래그 (--entrypoint)로 덮어 쓰거나 여기에서 []로 덮어 씁니다 (실행을 COMMAND 측 에 보내는) 것이 좋다고 생각합니다.
scripts/tf/plan_all.sh
#!/bin/sh -xe
export EXCLUDE_DIRS='^\.|scripts|modules|config|app|slack_bot_cdk|dockerfiles|event_pattern'
DIRS=$(git --no-pager diff HEAD --name-only | xargs -I {} dirname {} | egrep -v "$EXCLUDE_DIRS" | uniq) //❶
if [ -z "$DIRS" ]; then echo "No directories for plan."
exit 0
fi
for dir in $DIRS //❷
do
echo $dir
(cd $dir && terraform init -input=false -no-color)
(cd $dir && terraform plan -input=false -no-color)
done
❶: EXCLUDE_DIRS로 지정한 dir 이외에 HEAD와의 차이가 있는 dir의 이름을 DIRS에 대입하고 있습니다
❷ : DIRS 각각으로 terraform plan을 치고 돌아갑니다
Makefile
build/tf:
docker build -f dockerfiles/tf/Dockerfile -t vk-tf:latest .\
--cache-from vk-tf:latest
plan/all:
make build/tf
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" \
vk-tf:latest scripts/tf/plan_all.sh //❶
❶: 정의한 Dockerfile의 image를 build 하고, 그 녀석을 기동해 작성한
scripts/tf/plan_all.sh
를 치고 있습니다. 실제의 조작으로서는, 실행하고 싶은 환경의 AWS의 ENV를 세트 해 make plan/all
마지막으로
컴포넌트 나누었다 + terragrunt 등의 툴 넣고 싶지 않은 경우에 상당히 유효할까라고 생각하므로 꼭 사용해 보세요.
Reference
이 문제에 관하여(Docker 컨테이너에서 변경된 구성 요소의 dir 만 terraform 명령을 돌리는 make 명령을 유지합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fukubaka0825/items/2dddfeb4abae5aeb27d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)