Terraform의 Failed to install provider 에러에 대해

2022.09.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요! 컨설팅부의 수재입니다.

그룹에서 테라폼을 이용하여 인프라를 작성하다 보면 terraform init을 했을 때 다음과 같은 에러가 발생할 때가 있습니다.

Error: Failed to install provider

Error while installing hashicorp/azurerm v2.1.0: the current package for
registry.terraform.io/hashicorp/azurerm 2.1.0 doesn't match any of the
checksums previously recorded in the dependency lock file.

이번 글에서는 해당 내용에 대해 짧게 알아보고 가겠습니다.

에러의 원인

원인은 .terraform.hcl.lock 파일에 포함된 provider 체크섬이 여러 플랫폼을 지원하지 않기 때문이었습니다.
저 같은 경우에는 다음과 같은 경위로 해당 에러가 발생하였습니다.
우선 아무런 옵션을 지정하지 않고 가장 처음 'terraform init'을 합니다. 그럼 .terraform.hcl.lock 파일이 생성됩니다. 이 때 커맨드를 실행한 유저의 플랫폼에 해당하는 체크섬만 lock 파일에 작성됩니다. 이후 lock 파일을 포함하여 리포지토리에 업로드 한 후 플랫폼이 다른 유저가 해당 리포지토리를 클론하여 terraform init을 했더니 해당 에러가 발생하였습니다.

# hases에 하나의 플랫폼에 대한 체크섬만 작성되어 있음
+  version     = "2.30.0"
+  constraints = "~> 2.12"
+  hashes = [
+    "h1:FJwsuowaG5CIdZ0WQyFZH9r6kIJeRKts9+GcRsTz1+Y=",
+    "zh:09c603c8904ca4a5bc19e82335afbc2837dcc4bee81e395f9daccef2f2cba1c8",
+  ...
+ ]

따라서 OS나 CPU 아키텍처가 다른 환경에서 terraform init실행하고 싶다면 .terraform.hcl.lock 미리 만들어야 합니다.
해당 내용은 공식 문서에도 기재되어 있습니다.

해결 방법

해결 방법은 간단하게 여러 플랫폼에 대한 체크섬을 추가해주면 됩니다.
lock 파일을 삭제하고 다음 커맨드를 실행합니다.

terraform providers lock \
  -platform=linux_arm64 \
  -platform=linux_amd64 \
  -platform=darwin_amd64 \
  -platform=windows_amd64

이 중 windows arm64는 대응하지 않는 다는 점은 주의가 필요합니다.

마무리

간단하게 해당 에러에 대하여 알아보았습니다.
lock 파일 및 해쉬 값 등에 대한 상세한 내용은 공식 문서를 참고해주세요.

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다. must01940 지메일로 연락 주시면 감사합니다!


본 블로그 게시글을 보시고 문의 사항이 있으신 분들은
클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !