Terraform의 디버그 노하우(AWS시)
이 페이지
생각
Terraform에서 오류가 발생한 경우 대략 7가지 모드(실제 6가지 모드)가 오류의 원인이다.위에서부터 차례대로 당할 확률이 높다.
특히 4 이후에는 보기 드물죠.
분할 방법
Terraform의 실행 환경 문제
terraform-v에 버전이 나오면 실행 환경으로서 문제가 없습니다.
이것이 나타나지 않을 때 환경 구축과terraform의 2진법 경로가 통과되지 않은 문제가 고려되어 확인되었다.
Terraform 코드 문제
실행하면 대체로 해결될 것이다.
Terraform 자체의 유효성도 부족하기 때문에 문제가 해결되지 않을 때도 있지만 플랜이 잘못 통과하지 않으면 기본적으로 문제없다
Terraform에서 제공되는 객체(AWS 측)의 문제
아마도 이것은 가장 많은 실수를 당한 것 같다.
Terraform의 정의 파일이 정확하지만 오류가 발생했을 때 기본적으로 AWS 측의 제약으로 인한 오류입니다.
예를 들어 특정 옵션의 조합은 AWS 측에서 허용하지 않는 오류입니다.
오류 정보를 먼저 읽습니다.
또한 이 메시지를 보내는 단계에서 테라form 내부에서 AWS API를 수행한 결과AWS용 API 문서가 자주 나오거나 AWS의 콘솔이 같은 조작을 할 때 오류가 발생했는지 확인하기 때문에 원인을 규명할 수 있다.
Terraform 자체 질문
여기서부터는 테라폼 내부의 말이라 너무 투덜거려도 메시지가 나오지 않는 경우가 많다.
이것은 이른바 Terraform 측의 오류일 수 있습니다.
이와 관련된 것은 주로 다음과 같은 세 개의 창고다.
제각기
provider=>AWS 등 대상 자원에 대한 미리 설정된 처리가 기록되어 있으며, 대체적으로 여기를 보면 각 자원을 어떻게 창설/정의하는지 기록되어 있다
Terraform 호스트=>Terraform에서 통용되는 처리 플랜이나 apply 등이 적혀 있지만 주체가 원인이 되는 경우에는 그렇지 않아 우선도가 낮다
plugin sdk=>provider 측의 코드를 읽고 왜 이 처리를 통해 다양한 조작을 할 수 있는지 생각할 때가 있다.이 비밀은 이곳에서 정의된 것이 매우 많다.여기도 읽을 필요가 거의 없다.
Terraform 내부에서 사용되는 AWS SDK Go의 문제
* AWS의 경우
Terraform provider aws에서 사용aws-sdk-go.2021/9/7에 V1을 사용합니다.이쪽 문제일 가능성도 있어.
조사 방법
Terraform provider aws측에서 자원을 어떻게 만드는지 조사한다.
우선 이 자원에 기재된 코드를 찾아보세요.
코드의 명명 규칙은
/aws/resource_<검색할 자원 이름 >>.go
그래서 찾기도 어렵지 않아요.
예: Aurora의 인스턴스
관심사
resourceAwsRDSClusterInstanceCreate
위에서 말한 바와 같이 Create에 기재된 방법이 있는데 이것은 자원의 제작 처리이다.
모든 자원 처리 코드는 기본적으로
의 구성.
따라서 자원 정의 정보를 확인하려면 Schema의 위치를 확인하고 제작 처리를 확인하려면 Create 방법을 확인합니다.
확정하다
resp, err = conn.CreateDBInstance(createOpts)
같은 conne.<어떤 방법>처리해.
AWS SDK를 통해 AWS API를 호출하는 곳입니다.
SDK 측에서 CreateDBInstance라는 코드를 호출하고 있습니다.
실제로 aws-sdk-go 쪽에서.
func (c *RDS) CreateDBInstance(input *CreateDBInstanceInput) (*CreateDBInstanceOutput, error) {
req, out := c.CreateDBInstanceRequest(input)
return out, req.Send()
}
같은 명칭의 방법이 있다.그리고 이 방법의 내용을 확인하고 설치 여부를 조사한다.
AWS API 문제
AWS SDK Go를 조사했으나 문제를 발견하지 못한 정황이 있다.
이 경우 AWS SDK Go에서 호출된AWS API 정보를 확인한 뒤 끝내 이해하지 못하면 AWS 측에 원인을 묻는다.
예컨대
의 경우 AWS SDK Go 측에 표시된 정의가 없어 AWS API 측의 처리를 더 조사해야 한다.
API의 정의 정보를 확인하면 원래 태그가 없음을 알 수 있습니다.
총결산
나는 차이가 많지 않으면 디버깅을 진행할 수 있을 것이라고 생각한다.
Reference
이 문제에 관하여(Terraform의 디버그 노하우(AWS시)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/bull/articles/9d8127c0680717텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)