2017-03-06 1 views
5

terraform을 사용하여 AWS에 상당히 큰 인프라를 배치하는 동안 리모컨 tfstate이 손상되어 삭제되었습니다. 문서에서 terraform 새로 고침은 실제로 무엇을합니까?

, 나는 terraform refresh는 인프라의 실제 상태를 얻을 accordigly tfstate를 업데이트 AWS를 조회해야한다는 수집하지만이 발생하지 않습니다 : 내 tfstate은 그대로이고 계획 + Already existing 많은 오류를 줄 적용됩니다.

terraform refresh의 실제 기능은 무엇입니까?

답변

8

terraform refresh은 상태 파일에있는 리소스를 찾은 후 마지막으로 실행 된 이후 Terraform 외부의 공급자에서 발생한 드리프트로 업데이트하려고 시도합니다.

예를 들어 상태 파일에 인스턴스 ID가 i-abc123, i-abc124, i-abc125 인 3 개의 EC2 인스턴스가 포함되어 있고 Terraform 외부에서 i-abc124을 삭제한다고 가정 해 보겠습니다. terraform refresh을 실행 한 후 plan은 두 번째 인스턴스를 생성해야한다는 것을 보여 주지만 파괴 계획에서는 첫 번째 인스턴스와 세 번째 인스턴스 만 삭제하면됩니다 (누락 된 두 번째 인스턴스를 삭제하지 않아도 됨).

Terraform은 Terraform에서 관리하지 않는 사항을 간섭하지 않도록 매우 구체적인 결정을 내립니다. 즉 리소스가 상태 파일에 존재하지 않는다면 어떤 식 으로든 리소스를 절대 건드리지 않을 것입니다. 이를 통해 다른 도구와 함께 Terraform을 실행할 수있을뿐 아니라 AWS 콘솔에서 수동으로 변경할 수 있습니다. 또한 여러 가지 상태 파일을 제공함으로써 여러 가지 상황에서 Terraform을 실행할 수 있으므로 인프라를 여러 상태 파일로 분할하고 치명적인 상태 파일 손상으로부터 자신을 구할 수 있습니다.

현재 구멍에서 벗어나려면 상태 파일로 되돌리려면 terraform import을 자유롭게 사용하거나 가능한 경우 수동으로 Terraform 외부의 모든 것을 파괴하고 처음부터 시작하는 것이 좋습니다.

앞으로는 더 세분화 된 컨텍스트를 적용하고 버전 관리가 활성화 된 S3 버킷에 원격 상태를 저장하기 위해 상태 파일을 분할하는 것이 좋습니다. 또한 Terragrunt과 같은 도구를 사용하여 상태 파일을 잠궈 손상을 방지하거나 곧 출시 될 0.9 버전의 Terraform에서 기본 상태 파일 잠금을 기다릴 수 있습니다.

+0

명확하고 자세한 답변을 보내 주셔서 감사합니다. 사실 우리는 S3 버켓에 우리의 tfstate를 가지고 있었는데, 슬프게도 버전 관리가 없었습니다. 우리는 모든 것을 손으로 파괴 하자고 제안 했으므로 s3 버전 관리를 활성화하고 며칠 전에'terraform apply '를 다시 한 번 실행하십시오. 나는이 질문을 통해 매우 중요한 상황의 근본 원인을 더 잘 이해할 수 있도록 요청했다. – Bruno9779

관련 문제