본문 바로가기

개발하자

별도의 서브디렉토리에서 테라포밍하기 위해 기존 리소스를 가져오는 방법?

반응형

별도의 서브디렉토리에서 테라포밍하기 위해 기존 리소스를 가져오는 방법?

나는 오래전에 콘솔을 이용하여 AWS에서 VPC를 포함한 몇가지 리소스를 만들었고 지금은 Terraform으로 가져오기를 원한다. 나는 이미 내 프로젝트를 위해 다음과 같은 구조물을 만들었다:

└── project_xxx
    ├── main.tf
    ├── modules
    │   ├── module_foo
    │   │   ├── main.tf
    │   │   ├── outputs.tf
    │   │   └── variables.tf
    │   ├── module_bar
    │   │   ├── main.tf
    │   │   ├── outputs.tf
    │   │   └── variables.tf
    │   ...
    ├── outputs.tf
    ├── provider.tf
    ├── README.md
    ├── terraform.tfvars
    ├── variables.tf
    └── versions.tf

그러나 내가 그들의 모듈에 있는 리소스를 가져오려고 하면 테라폼이 에러를 표시하고 루트 디렉터리에 리소스를 생성해 달라고 요청한다. 좋은 의견이라도 있나?

예를 들어, modules/ module_foo/main.tf 에서는 다음 코드가 있습니다:

  resource "aws_vpc" "main" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = {
    Name = "main"
  }
}

그런 다음: 루트에서 다음 명령을 실행합니다:

terraform init
terraform plan # it shows one resource will be added
terraform import aws_vpc.main vpc-xxx1234

그러면 리소스가 루트에서 생성되어야 한다는 오류가 나타납니다.




모듈로 리소스를 가져오려고 하므로 모듈을 사용하지 않는 경우와 비교하여 가져오기 구문이 약간 다릅니다. 이 경우에는 다음과 같은 것이 필요합니다:

terraform import module.module_foo.aws_vpc.main vpc-xxx1234

자세한 정보는 여기에서 확인할 수 있습니다.




나는 얼마 전에 이것과 씨름했는데, 정확히는 너의 사용 사례가 아니라 비슷한 것이라서 여기서 찾은 것을 버릴 것이다, 아마도 다른 사람에게 도움이 될 것이다. 이러한 경우에 테라포머를 사용하는 것을 추천합니다. 기존 인프라를 잘 이해하는 데 도움이 되고 상태를 생성합니다. 방탄은 아니지만 실제로 도움이 됩니다. 기존 인프라(역 테라포밍)에서 테라포밍 파일을 생성하는 CLI 도구입니다. 인프라스트럭처에서 코드까지




나도 같은 문제에 직면했었다. 이 경우 루트 디렉터리의 main.tf 파일에 모듈을 만들어야 합니다.

module "aws_vpc" {
  source = "./modules/module_foo"

다음 명령을 사용하여 리소스를 가져옵니다:

terraform import module.aws_vpc.aws_vpc.main vpc-xxx1234

반응형