Terraform에서 관리하는 인프라 배포 자동화
소개
안녕하세요. Wano 주식 회사 엔지니어 nari입니다.
이번에는 GitFlow를 이용하여 CodeBuild에서 실행하는 CI에서 terraform 리소스를 체크/배포하는 구조를 만들었으므로 그 비망록을 남겨두려고 생각합니다.
전체 시스템 이미지
왜 만들려고 생각했는가?
왜 만들려고 생각했는가?
우려점
이전 기사 과 같이, 컴퍼넌트(tfstate)를 분할해 관리하고 있으므로, 전부 일일이 plan이나 apply 하고 있으면 통지도 번잡해져, 실행 시간도 길어질 것 같다
어떻게 우려 사항을 개선했는가
Terraform 어디서 실행하고 있습니까? - mixi developers - Medium
run.sh
#!/bin/sh -xe
if echo $USER_BRANCH | grep -q 'plan/'; then
/bin/sh script/tf_ci/plan.sh
else
/bin/sh script/tf_ci/apply.sh
fi
plan.sh
#!/bin/sh -xe
if [ $ENV = "stage" ]; then
export EXCLUDE_ENV="prod"
elif [ $ENV = "prod" ]; then
export EXCLUDE_ENV="stage"
fi
export EXCLUDE_DIRS='^\.|script|server_src|resources|playground|env|dockerfiles|modules|fluentd|nginx|test_ci_conf|tf_ci_conf|events|'$EXCLUDE_ENV
echo $EXCLUDE_DIRS
DIRS=$(git --no-pager diff origin/master..HEAD --name-only | xargs -I {} dirname {} | egrep -v "$EXCLUDE_DIRS" | uniq)
if [ -z "$DIRS" ]; then
echo "No directories for plan."
exit 0
fi
BUILD_URL="https://ap-northeast-1.console.aws.amazon.com/codesuite/codebuild/projects/${USER_CODEBUILD_PROJECT_NAME}/build/${CODEBUILD_BUILD_ID}"
for dir in $DIRS
do
if [[ "`echo $dir | grep events`" ]] ;then
echo "events"
(cd $dir && cd ../ && apex deploy)
(cd $dir && cd ../ && apex infra init -input=false -no-color)
(cd $dir && cd ../ && apex infra plan -input=false -no-color | tfnotify --config ${REPOSITORY_ROOT}/${ENV}_tfnotify.yaml plan --message "dir : $dir user : $USER_AUTHOR console : $BUILD_URL")
else
(cd $dir && terragrunt init -input=false -no-color)
(cd $dir && terragrunt plan -input=false -no-color | tfnotify --config ${REPOSITORY_ROOT}/${ENV}_tfnotify.yaml plan --message "dir : $dir user : $USER_AUTHOR console : $BUILD_URL")
fi
done
향후 전망
참고문헌
Reference
이 문제에 관하여(Terraform에서 관리하는 인프라 배포 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fukubaka0825/items/64259a73749c75b09d20텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)