Inherit는 인프라 코드로 관리하지 않던 AWS 계정을 읽고 Terraform/OpenTofu 프로젝트를 생성하는 오픈소스 도구다. 로컬에서 읽기 전용 API로 계정을 스캔하며, 생성한 구성은 plan과 import로 확인하고 가져올 수 있다.

제작자에 따르면 모든 AWS 요청은 프로세스 밖으로 나가기 전에 읽기 작업인지 검사하는 서명 시점 보호 절차를 거친다. 자격 증명과 데이터는 로컬에 머물며 계정 정보나 텔레메트리를 업로드하지 않는다. 시크릿은 .tf 파일 대신 Git에서 무시하도록 설정된 로컬 파일에 저장되고, 관련 속성은 ignore_changes 아래에 둔다.

도구는 발견한 리소스를 범주별 모듈로 나눈 HCL 구성과 각 리소스의 import 블록을 만든다. 스캔에서 함께 발견한 다른 리소스를 가리키는 ID는 참조로 연결하고, 스캔 범위 밖의 값은 변수로 처리한다. import --fast는 계획이 변경 없는 가져오기만 포함하는지 확인한 뒤 일괄 적용한다. 제작자 설명에 따르면 import는 제공자(provider)의 읽기 작업만 호출한다.

제작자가 제시한 시뮬레이션에서는 inherit scan --profile demo가 17개 리전에서 리소스 207개를 찾은 뒤 기본 리소스 155개와 단일 인스턴스 리소스 34개를 제외했다. 최종적으로 2개 리전의 리소스 18개를 남겼고, 7개 모듈에 16개 리소스와 18개 가져오기 블록을 생성했다. 이어진 계획 결과는 가져오기 18건, 추가·변경·삭제 각 0건이었다.

AWS 제공자의 리소스 유형 1,735개 중 지원하는 유형은 363개다. AWS에서 Lambda 코드를 다시 읽을 수 없어 함수에는 자리 표시자 ZIP 파일이 연결되며, 제공자 전용 설정 일부는 가져온 뒤 한 번 차이가 표시될 수 있다.

설치 명령은 다음과 같다.

$ curl -fsSL https://raw.githubusercontent.com/virtualbeck/inherit/main/install.sh | sh

또는 go install github.com/virtualbeck/inherit/cmd/inherit@latest를 사용하거나 Releases에서 Linux, macOS, Windows용 바이너리를 받을 수 있다. plan과 import를 실행하려면 OpenTofu 또는 Terraform이 필요하다. 자세한 내용과 지원 범위는 GitHub 저장소에서 확인할 수 있다.

부록: 원문 예시

text
resource "aws_security_group" "main" {
 description = "ssh from the office"
 name = var.security_group_name
 vpc_id = aws_default_vpc.main.id
}

resource "aws_vpc_security_group_ingress_rule" "main" {
 cidr_ipv4 = "198.51.100.42/32"
 from_port = 22
 ip_protocol = "tcp"
 security_group_id = aws_security_group.main.id
 to_port = 22
}
text
module "compute" {
 source = "./modules/compute"
 network_main_id = module.network.main_id # cross-module wiring
 subnet_id = "subnet-0fff5555666677778"
}
text
import {
 to = module.network.aws_security_group.main
 id = "sg-0bbb22223333cccc2"
}