본문 바로가기

♻ Terraform(테라폼)/Terraforming

Terraform을 활용하여 기존 인프라 정보를 가져오기

# AWS로 구성된 기존 인프라를 가져오는 방법에 대해서 설명

1. terraforming을 통한 기존 인프라 코드를 가져오기

- 일단 지금은 AWS만 지원이 되며 Ruby on Rails가 설치 되어 있어야 한다.

https://rubyinstaller.org/downloads/

 

Downloads

Which version to download? If you don’t know what version to install and you’re getting started with Ruby, we recommend that you use the Ruby+Devkit 3.1.X (x64) installer. It provides the biggest number of compatible gems and installs the MSYS2 Devkit

rubyinstaller.org

- 위의 링크에서 Ruby+Devkit 최신버전을 다운받고 설치를 진행한다.

2. cmd 터미널에서 실행하기

- cmd 터미널을 열고 아래의 명령어를 입력한다. 그리고 나면 여러개의 파일을 설치한다.

gem install terraforming

3. 기존 생성된 리소스를 가져오기

- terraforming 명령어를 입력하여 현재 지원 되는 리소스 확인하기

C:\Users>terraforming
Commands:
  terraforming alb             # ALB
  terraforming asg             # AutoScaling Group
  terraforming cwa             # CloudWatch Alarm
  terraforming dbpg            # Database Parameter Group
  terraforming dbsg            # Database Security Group
  terraforming dbsn            # Database Subnet Group
  terraforming ddb             # DynamoDB
  terraforming ec2             # EC2
  terraforming ecc             # ElastiCache Cluster
  terraforming ecsn            # ElastiCache Subnet Group
  terraforming efs             # EFS File System
  terraforming eip             # EIP
  terraforming elb             # ELB
  terraforming help [COMMAND]  # Describe available commands or one specific ...
  terraforming iamg            # IAM Group
  terraforming iamgm           # IAM Group Membership
  terraforming iamgp           # IAM Group Policy
  terraforming iamip           # IAM Instance Profile
  terraforming iamp            # IAM Policy
  terraforming iampa           # IAM Policy Attachment
  terraforming iamr            # IAM Role
  terraforming iamrp           # IAM Role Policy
  terraforming iamu            # IAM User
  terraforming iamup           # IAM User Policy
  terraforming igw             # Internet Gateway
  terraforming kmsa            # KMS Key Alias
  terraforming kmsk            # KMS Key
  terraforming lc              # Launch Configuration
  terraforming nacl            # Network ACL
  terraforming nat             # NAT Gateway
  terraforming nif             # Network Interface
  terraforming r53r            # Route53 Record
  terraforming r53z            # Route53 Hosted Zone
  terraforming rds             # RDS
  terraforming rs              # Redshift
  terraforming rt              # Route Table
  terraforming rta             # Route Table Association
  terraforming s3              # S3
  terraforming sg              # Security Group
  terraforming sn              # Subnet
  terraforming snss            # SNS Subscription
  terraforming snst            # SNS Topic
  terraforming sqs             # SQS
  terraforming vgw             # VPN Gateway
  terraforming vpc             # VPC

Options:
  [--merge=MERGE]                                # tfstate file to merge
  [--overwrite], [--no-overwrite]                # Overwrite existing tfstate
  [--tfstate], [--no-tfstate]                    # Generate tfstate
  [--profile=PROFILE]                            # AWS credentials profile
  [--region=REGION]                              # AWS region
  [--assume=ASSUME]                              # Role ARN to assume
  [--use-bundled-cert], [--no-use-bundled-cert]  # Use the bundled CA certificate from AWS SDK

- ec2가 지원이 되므로 현재 생성되어 있는 ec2 인스턴스 리소스를 가져오는 작업 진행

terraforming ec2

- 결과

resource "aws_instance" "terraforming-webserver" {
    ami                         = "ami-0eddbd81024d3fbdd"
    availability_zone           = "ap-northeast-2a"
    ebs_optimized               = false
    instance_type               = "t2.micro"
    monitoring                  = false
    key_name                    = "webserver"
    subnet_id                   = "subnet-000000000000000"
    vpc_security_group_ids      = ["sg-00000000000000"]
    associate_public_ip_address = true
    private_ip                  = "10.0.1.93"
    source_dest_check           = true

    root_block_device {
        volume_type           = "gp2"
        volume_size           = 8
        delete_on_termination = true
    }

    tags {
        "Name" = "terraforming-webserver"
    }
}

- 오류수정

가져온 값 중 문제가 되는 부분은 vs 코드에서 위의 결과 코드를 붙여서 보면 알 수 있다.

여기서는 두가지의 문제가 존재하는데 첫번째는 private_ip의 설정 값이다. private_ip는 ec2 인스턴스가 생성 되면서 자동으로 부여되는 값이므로 위의 처럼 선언이 되어 있으면 안된다.

그리고 두번째는 태그 값인데, 태그 값의 선언 부분이 잘못 되어 있다.

    # 잘못 작성된 구문
    tags {
        "Name" = "terraforming-webserver"
    }
    
    # 정상 구문
    tags = {
    	Name = "terraforming-webserver"
  }

위의 두가지만 수정 후 terraform init , plan, apply를 차례대로 진행해주면 정상적으로 1개의 인스턴스가 생성된다.