원격 Mac CI에서 terraform init이 Registry와 provider mirror를 오가면 .terraform.lock.hcl이 흔들리고 큐가 막힙니다. 평가 임계·환경 변수·명령·비교 매트릭스·FAQ로 한 페이지에 모았습니다. 링크(로그인 불필요): , 블로그 목록, sccache·ccache 매트릭스.

왜 원격 Mac에서 Terraform 풀이 자주 깨지나

  1. 공용 플러그인 캐시: TF_PLUGIN_CACHE_DIR 공유 시 권한·부분 쓰기 경합.
  2. 국경 지연·429: Registry 직통 + 무한 대기는 러너 고갈.
  3. 락 드리프트: 플랫폼·Terraform 패치 불일치 시 providers lock 결과 상이.

평가 차원과 임계값

공유 Apple Silicon 러너 기준 출발점입니다. p95 측정 후 팀만 조정하세요. 레지스트리 직통은 HashiCorp 공식 엔드포인트와 사내 프록시의 DNS·TLS 체인이 다르면 동일 버전이라도 핸드셰이크 시간이 갈립니다. 미러를 쓸 때는 include에 조직이 실제로 쓰는 네임스페이스만 넣어 불필요한 폴백을 줄입니다.

차원시작값지표게이트
Registry 타임아웃TF_REGISTRY_CLIENT_TIMEOUT 30s→60sinit p95초과 시 mirror
init 재시도2·4·8초, 최대 3~4회5xx·리셋뮤텍스
캐시 디스크82·87·92% 경고·유예·스윕df92%↑ 잡 보류
동시 init잡 수 ≤ 물리 코어APFS 대기세마포

복붙 명령·환경 변수 목록

잡 시작 시 한 번에 export하면 셸 하위 프로세스까지 동일하게 물려갑니다. GitLab·GitHub Actions 모두에서 CI_PROJECT_DIR 또는 GITHUB_WORKSPACE를 우선 쓰고 없으면 $PWD로 떨어지게 두면 경로 표기가 짧아집니다.

export TF_CLI_CONFIG_FILE="${CI_PROJECT_DIR:-$PWD}/.terraformrc"
export TF_PLUGIN_CACHE_DIR="${CI_PROJECT_DIR:-$PWD}/.terraform-plugin-cache"
export TF_REGISTRY_CLIENT_TIMEOUT="${TF_REGISTRY_CLIENT_TIMEOUT:-30s}"
export TF_INPUT=0
export TF_IN_AUTOMATION=1
mkdir -p "$TF_PLUGIN_CACHE_DIR"
cat > "$TF_CLI_CONFIG_FILE" <<EOF
plugin_cache_dir = "$TF_PLUGIN_CACHE_DIR"
disable_checkpoint = true

provider_installation {
  network_mirror {
    url = "https://terraform-mirror.example.com/providers/"
    include = ["registry.terraform.io/hashicorp/*"]
  }
  direct {
    exclude = ["registry.terraform.io/hashicorp/*"]
  }
}
EOF
terraform providers lock -platform=darwin_arm64 -platform=linux_amd64
terraform init -input=false -no-color -upgrade
n=0; until terraform init -input=false -no-color; do
  n=$((n+1)); [ "$n" -le 4 ] || exit 1; sleep $((2**n))
done
terraform validate -no-color

비교표·의사결정 매트릭스

경로장점주의언제
direct설정 최소지연·감사소규모
network_mirroregress 통제스키마·인증서사내 허브
filesystem_mirror에어갭zip 동기화규제

원격 Mac CI 게이트 다섯 단계

플랜 단계는 PR과 메인을 나눠도 되지만 providers lock을 갱신하는 주체는 보통 메인 전용 봇 한 대로 고정하는 편이 머지 큐에서 덜 싸웁니다.

  1. Terraform CLI 버전을 이미지 태그로 고정.
  2. TF_CLI_CONFIG_FILE·TF_PLUGIN_CACHE_DIR 잡별 경로.
  3. .terraform.lock.hcl diff + terraform fmt -check.
  4. validateplan 단계 분리.
  5. 실패 로그에 호스트·HTTP코드·경과시간 기록.

인용 포인트:

  • terraform providers schema -json 스냅샷.
  • TF_LOG=INFO는 재현 구간만.
  • providers lock -fs-mirror=./mirror 오프라인 번들.

FAQ

Q. plugin_cache_dir vs TF_PLUGIN_CACHE_DIR?
A. 같은 절대경로로 통일하거나 한쪽만.

Q. mirror+direct 동시?
A. 블록 순서·include exclude로 우선순위 명시, 패턴 중복 금지.

Q. Mac CI만 lock 변동?
A. Terraform 빌드·플랫폼 목록·미러 URL을 노트북과 동일화.

요약

Registry·mirror·캐시·락·재시도를 한 문서로 묶어야 재현됩니다. 전용 노드는 MacPull 원격 Mac에서 선택하세요.

로그인 없이: ·요금·구매·고객 지원·블로그·Nix substituter 매트릭스.

원격 Mac에서 Terraform CI 고정

요금·구매·고객 지원·블로그는 로그인 없이 이용할 수 있습니다.