본문 바로가기
Hello World/IaC

[AWS] 이미 생성된 infra를 terraform 으로 가져오기

by Run DaramG 2022. 8. 26.

Terraform import 명령어는 말그대로 기존에 존재하는 인프라 상태를 가져오는 기능이다.

이미 생성되어 운영중인 AWS 리소스에 대해 terraform 으로 상태를 code로 가져올 수 있다.

 

Terraform import 로 기존에 구축된 리소스에 대한 terraform 코드를 작성하는 과정을 간단하게 정리하자면

1. 가져올 개체가 mapping될 리소스에 대한 빈 블록을 수동으로 작성한다

2. terraform import 명령어를 수행하면 terraform.tfstate파일에 가져온 리소스에 대한 상태값이 저장된다.

3. tfstate파일을 보면서 리소스.tf 파일에 각 속성을 하나하나 직접 선언한다.

 

혹은 Terraformer 라는 Tool 을 사용할 수도 있다.

Terraformer는 기존 인프라를 기반으로 tf code 및 tfstate 파일을 생성하는 CLI 도구이다.

1. Terraformer git 을 clone 받고 install 한다.

2. terraformer import aws --resources="*" 명령어를 사용하여 운영중인 인프라 리소스를 모두 가져와서 작성한다.(--filtering 옵션을 통해 원하는 리소스의 코드만 가져올 수 도 있다.)

 

 

terraform import 의 단계별로 실제 명령어와 함께 자세한 내용을 보여주자면.. 

 

사전 준비

기본적으로 provider.tf 가 작성되어있고, terraform init 까지는 수행되어야 한다.

아래와 같이 provider.tf 와 variables.tf 를 작성 후 terraform init 명령어를 수행한다. 

#provider.tf

terraform {
  required_version = ">= 0.12"
}

provider "aws" {
  region = var.aws_region
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
}

data "aws_availability_zones" "available" {}

provider "http" {}

 

#variables.tf

variable "aws_region" {
  default = "ap-northeast-2"
}

variable "aws_access_key" {
  default = "XXXXXXXXXXXXX"
}

variable "aws_secret_key" {
  default = "XXXXXXXXXXXXXXXXXXXXXXXXX"
}

 

 

1단계 : tf파일을 생성하여 가져올 리소스에 대한 빈 블록을 생성한다. 

 

2단계 : AWS 웹콘솔에 접속하여 가져올 리소스에 대한 id 값을 확인한 후 terraform import 명령어를 사용하여 가져온다.

명령어 - terraform import <리소스>.<모듈이름> <대상id>

ex) terrarom import aws_subnet.public_subnet1 subnet-04917582

ex) terraform import aws_mq_broker.myBroker b-fff381-ad9b78-1u8950

 

3단계 : terraform.tfstate 파일에 내가 import 한 리소스의 상태가 저장되었다. 

리소스를 선언했던 빈 블록에 terraform 문법에 맞게 tfstate 파일을 참조하여 작성한다.

 {
      "mode": "managed",
      "type": "aws_mq_broker",
      "name": "broker",
      "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "apply_immediately": null,
            "arn": "arn:aws:mq:ap-northeast-2:4111:broker:Mybroker:b-fff8",
            "authentication_strategy": "simple",
            "auto_minor_version_upgrade": true,
            "broker_name": "Mybroker",
            "configuration": [],
            "deployment_mode": "SINGLE_INSTANCE",
            "encryption_options": [
              {
                "kms_key_id": "",
                "use_aws_owned_key": true
              }
            ],
            "engine_type": "RabbitMQ",
            "engine_version": "3.9.16",
            "host_instance_type": "mq.m5.large",
            "id": "b-fff8adde-0e4b-406",
            "instances": [
              {
                "console_url": "https://b-fffXxxx.mq.ap-northeast-2.amazonaws.com",
                "endpoints": [
                  "amqps://b-fffCxxx.mq.ap-northeast-2.amazonaws.com:5671"
                ],
                "ip_address": ""
              }
            ],
            "ldap_server_metadata": [],
            "logs": [
              {
                "audit": "",
                "general": true
              }
            ],
            "maintenance_window_start_time": [
              {
                "day_of_week": "MONDAY",
                "time_of_day": "21:00",
                "time_zone": "UTC"
              }
            ],
            "publicly_accessible": true,
            "security_groups": [],
            "storage_type": "ebs",
            "subnet_ids": [
              "subnet-00362766215312f"
            ],
            "tags": {
              "dev": ""
            },
            "tags_all": {
              "dev": ""
            },
            "user": []
          },
          "sensitive_attributes": [],
          "private": "xxxxxxxxxx"
        }
      ]
    },

 

리소스가 많아질수록 한땀한땀 작성하는게 매우 노가다이다.

 

terraformer 도구를 사용하면 AWS 리소스를 tfstate 파일 혹은 tf 코드로 가져올 수 있다.

GitHub - GoogleCloudPlatform/terraformer: CLI tool to generate terraform files from existing infrastructure (reverse Terraform). Infrastructure to Code

해당 tool은 AWS 뿐만 아니라 terraform 에서 지원하는 GCP, Azure, GitHub, Kubernetes 등 많은 클라우드 제공 없체를 지원하며, 최신 리소스 스키마를 기반으로 코드를 생성해주는 tool이다.

 

댓글