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 코드로 가져올 수 있다.
해당 tool은 AWS 뿐만 아니라 terraform 에서 지원하는 GCP, Azure, GitHub, Kubernetes 등 많은 클라우드 제공 없체를 지원하며, 최신 리소스 스키마를 기반으로 코드를 생성해주는 tool이다.
'Hello World > IaC' 카테고리의 다른 글
[AWS] Terraform 시작하기 - 기본구성, 개발환경, 동작과정 (0) | 2022.08.15 |
---|---|
[IaC] Terraform Docker image 생성 (0) | 2022.08.09 |
[AWS] AWS CDK 란? CloudFormation 과 비교하기 (0) | 2022.07.11 |
[K8S] Kubernetes Object 와 Manifest 작성 방법 (0) | 2022.04.17 |
[Ansible/AWX] AWX 관리 tip - Management Job (0) | 2021.03.24 |
댓글