테라폼에서 이전 상태로 롤백하는 방법
나는 테라폼 작업을 하고 있고 상태 파일이 어떻게 작동하는지 이해하려고 노력하고 있다. 나는 main.tf 파일을 만들었다
vpc,firewall,subnet,compute_instance
GCP에서 생성해야 합니다. 그래서 나는 이것을 GCP 환경에 적용했고 파일 이름 파일을 만들고 이 파일을 1st-run이라는 폴더에 백업했다.
이제 나는 내 것을 업데이트했다
2vpc,2firewalls,2subnets,compute_instance
VM에 다른 NIC를 추가해야 하기 때문입니다.테라포름이 적용되어 환경이 생성되고 테라포름.tfstate 파일이 생성되었나요. 나는 이 파일을 라는 폴더에 백업했다.
첫 번째 실행을 위해 실행한 환경을 롤백하고 싶습니다. 나는 첫 번째 실행 폴더에 있는 상태 파일을 가지고 있다.
코드를 터치하는 대신 상태 파일을 사용하여 롤백하여 내 GCP 환경이 자동으로 다음을 수행하도록 하는 명령은 무엇입니까
vpc,firewall,subnet,compute_instance
내가 처음으로 실행한 것이다.
현재 Terraform의 상태 파일에 설명된 것처럼 이전 상태로 롤백할 수 있는 방법은 없습니다. Terraform은 항상 이전 상태(최신 상태 스냅샷)에서 구성으로 표시되는 목표 상태로 이동하는 것을 목표로 변경을 계획합니다. Terraform은 공급자 구성과 같이 상태에서 추적되지 않는 정보에 대해서도 구성을 사용합니다.
Terraform에서 "롤백"을 나타내는 일반적인 방법은 구성을 버전 제어에 넣고 각 변경 전에 커밋하는 것입니다. 그런 다음 필요한 경우 버전 제어 시스템의 기능을 사용하여 이전 구성으로 되돌릴 수 있습니다.
그러나 VCS 변경 사항을 되돌리는 것만으로 모든 변경 사항을 롤백할 수는 없습니다. 예를 들어 한 번의 커밋으로 해당 공급자에 대한 새 블록과 리소스를 모두 추가한 다음 결과를 적용한 경우 롤백하려면 블록은 계속 포함하되 블록은 포함하도록 구성을 변경해야 하므로 되돌리는 동안 구성을 조정해야 합니다. 그런 다음 Terraform은 나머지 블록을 사용하여 제공자가 파괴 작업을 실행하도록 구성하고, 그 후에 최종적으로 블록도 제거할 수 있습니다.
에 대한 명령이 있지만 이전 상태, 즉 마지막 이전 상태로 롤백하는 명령은 없습니다.
그러나 에 를 사용하는 경우 S3 버킷에서 버전 관리를 사용하도록 설정한 경우 롤백할 수 있습니다. 예를 들어, 이전 버전이 최신 버전이 되도록 복사할 수 있습니다. 그런 다음 dynamodb 테이블에서 다이제스트를 업데이트해야 합니다. 그렇지 않으면 에 다음과 같은 메시지가 표시됩니다:
Error refreshing state: state data in S3 does not have the expected content.
This may be caused by unusually long delays in S3 processing a previous state
update. Please wait for a minute or two and try again. If this problem
persists, and neither S3 nor DynamoDB are experiencing an outage, you may need
to manually verify the remote state and update the Digest value stored in the
DynamoDB table to the following value: vvvvvvvvvvvvvv
이 값을 사용하여 테이블을 업데이트하면 롤백이 완료됩니다. 되돌리려면 S3 버킷에서 마지막 상태를 삭제하여 이전의 "최신" 상태로 돌아가고 dynamodb 테이블을 해당 다이제스트로 다시 업데이트하기만 하면 됩니다.
원격 상태는 동료와 공유되므로 위의 절차는 피해야 합니다.
상태 파일을 변경하는 것만으로는 인프라가 변경되지 않는다는 점을 이해하는 것이 중요합니다. 그것은 테라폼 코드를 버전화하고 원하는 인프라를 설명하는 코드를 실행함으로써 수행되어야 한다.
AWS에서 tfstate 파일을 유지 관리하는 AWS 버킷에 버전 관리가 활성화되어 있는지 확인하십시오.
버킷 내부에서 버전 표시/보기를 활성화하여 이름별로 tfstate 파일을 찾았습니다.
불일치를 일으키는 최신 버전을 삭제했습니다(내 경우 테라폼 버전의 경우와 마찬가지로), 해당 버전에 대한 삭제 마커 파일을 추가합니다. 삭제 후 실제로 백업합니다. 추가된 삭제 마커 파일을 삭제하기만 하면 원래 파일을 쉽게 복원할 수 있습니다.)
그리고 나서 나는 복원할 이전 버전의 tfstate 파일을 조사했고, 배포 기록을 확인하여 필요한 파일을 다운로드했다. (다운로드 후 caee 세부사항, 나를 위해 그것의 정확한 버전 일치 확인)
그런 다음 충돌한 tfstate 파일을 삭제한 동일한 위치에 이전 tfstate 파일을 업로드했습니다.
배포를 다시 시작할 때 아래와 같은 오류가 발생했습니다.
상태 새로 고침 오류: S3의 상태 데이터에 필요한 콘텐츠가 없습니다.
이는 S3가 이전 상태 업데이트를 처리하는 데 비정상적으로 긴 지연으로 인해 발생할 수 있다. 1~2분 정도 기다렸다가 다시 시도하십시오. 이 문제가 지속되고 S3 또는 DynamoDB에서 운영 중단이 발생하지 않는 경우 원격 상태를 수동으로 확인하고 DynamoDB 테이블에 저장된 Digest 값을 다음 값으로 업데이트해야 할 수 있습니다. b55***********************************************************************
즉, DynamoDB>table>view table details에서 이 새 값으로 업데이트해야 하는 이전 tfstate lock 파일에 대한 다이제스트 값이 이미 있음을 의미합니다.
- 배포를 완료할 수 있는 Spinnaker에서 재개 배포(예: 다른 공급자를 사용하여 생성된 사용되지 않는 리소스를 파괴하는 최신 파이프라인이 포함되어 있으므로 먼저 공급자를 되돌리고 다시 시작하면 변경 사항을 성공적으로 배포할 수 있습니다.)
'개발하자' 카테고리의 다른 글
M1 Apple Silicon에서 Android 스튜디오 Arctic Fox(2020.3.1)를 업데이트한 후 플러터 닥터가 포함된 번들 Java 버전을 찾을 수 없습니다 (0) | 2023.02.01 |
---|---|
플러터 시 Firebase Auth 예외 처리 방법 (1) | 2023.02.01 |
svelte 유형 스크립트의 svelte 사용자 지정 이벤트 (0) | 2023.01.31 |
FastAPI는 병렬 방식이 아닌 직렬 방식으로 API 호출 실행 (1) | 2023.01.30 |
Fastapi + 딸기 그래프QL (0) | 2023.01.30 |