본문 바로가기

♻ Terraform(테라폼)/Terraform-Import

Terraform Import를 활용한 기존 리소스 가져오기

# Terraform Import를 활용하여 기존의 인프라 자원을 Terraform으로 가져오는 작업을 진행

Terraform Import가 필요한 이유?

Terraform으로 생성하지 않고 AWS 콘솔이나 클라우드 포메이션 같은 도구를 통해 생성한 AWS 리소스를 Terraofrm으로 Import하여 사용하기 위한 작업

- Terrraform Import를 하는 방법은 여러가지가 존재 하지만 해당 방법을 사용하는 이유는 tfstate파일에 존재하는 리소스만을 가지고 Import를 진행하기 때문에 편리하다.

1. 예시로 AWS IAM User에 대한 Resource를 가져오는 작업을 수행

- IAM User의 상태를 보면 아래와 같다. 약 10여개 이상의 User가 생성되어 있는것을 볼 수 있다.

- 특정 IAM 유저에 대한 리소스를 가져오는 작업을 수행하면 아래와 같다.

seungkim이라는 유저가 있다고 치자, 해당 유저의 정보를 Import 하는 방법은 아래와 같다.

일단 아래의 코드와 같이 해당 IAM 유저가 저장될 공간을 만들어 줘야 한다.

일단 TERRAFORM-IMPORT라는 폴더를 아래와 같이 생성 후 해당 폴더 하위에 IAM이라는 폴더를 생성 하였다.

IAM 폴더 하위에 main.tf라는 파일을 생성 후 아래와 같이 IAM User를 import 하기위한 공간을 생성해 준다.

terraform init → terraform plan → terraform apply를 통해 해당 소스를 적용한다.

resource "aws_iam_user" "seungkim" {
  
}

위와 같이 작성 후 아래의 코드 형태를 활용하여 import를 진행하면 terminal창에 정상적으로 import 되었다고 나온다.

terraform import aws_iam_user.seungkim seungkim

결과

aws_iam_user.seungkim: Importing from ID "seungkim"...
aws_iam_user.seungkim: Import prepared!
  Prepared aws_iam_user for import
aws_iam_user.seungkim: Refreshing state... [id=seungkim]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

그리고 아래와 같이 terraform.tfstate 파일이 생성이 되었다.

그리고 terraform.tfstate 파일의 내용을 보면 아래와 같다.

여기서 주의할 점은 import 후에 terraform plan 및 apply를 해서는 안된다. plan 및 apply를 하게되면 해당 리소스의 정보를 모두 업데이트 하기 때문에 기존의 정보가 모두 사라진다. 그래서 반드시 plan 및 apply를 해서는 안된다.

위의 내용은 해당 유저의 껍데기 정보만 가져온 것이라고 볼 수 있고 해당 유저가 가지고 있는 개별 정보를 가져오기 위해서는 여러가지 옵션을 추가해야 한다.

2. IAM 옵션정보 가져오기 (암호 정책)

IAM 유저의 옵션중에 암호정책과 해당 Policy 정책을 가져오는 작업에 대해서 알아보자.

일단 IAM 유저 옵션을 확인하는 사이트는 아래에 있다.

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_account_password_policy

 

Terraform Registry

 

registry.terraform.io

그리고 해당 내용을 보면 아래와 같다. 그리고 위의 Terraform Docs에서 Import할때 사용하는 명령어 포맷을 확인할 수있다.

그리고 main.tf에 아래와 같이 리소스가 저장될 공간을 만든다.

자동완성 기능을 사용하면 편하다. name을 정의하는 부분에는 임의의 이름을 넣어주면 된다.

- 아래와 같이 코드를 작성한다.

resource "aws_iam_account_password_policy" "password_policy" {
  
}

그리고 terraform import를 수행한다.

terraform import aws_iam_account_password_policy.password_policy password_policy

Import 확인

3. IAM 정책 가져오기

- 아래와 같아 AdministratorAccess 정책을 가져오는 작업을 진행한다.

- 리소스 코드 생성

resource "aws_iam_policy" "admin_access" {
  
}

- import 수행

terraform import aws_iam_policy.admin_access arn:aws:iam::aws:policy/AdministratorAccess

- terraform.tfstate 파일 확인, import가 완료된것을 확인할 수 있다.

terraform import를 통해 terraform으로 생성하지 않은 리소스를 가져오는 방법에 대해서 알아 보았다.

tfstate는 테라폼 코드로 생성한 리소스의 상태를 관리하는 매우 중요한 요소이므로 잘 관리해야 한다.

그래서 해당 파일을 원격으로 상태 관리를 해야하는 이유이기도 하다.

- 끝 -