brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Aug 06. 2023

6. GCP-테라폼 import 하기



실제 리소스로 부터 테라폼 코드를 만들어보자.



<1> 테라폼 워크 플로우

<2> 테라폼 IMPORT 워크 플로우

<3> 도커 컨테이너 생성

<4> 컨테이너로 부터 import하기

<5> 컨피그 만들기

<6> 이미지 리소스 만들기

<7> 테라폼 파일로 관리하기

<8> 파괴하기

<9> 참고 자료






<1> 테라폼 워크 플로우


컨피그 작성 -- PLAN------APPLY




<2> 테라폼 IMPORT 워크 플로우


존재하는 인프라--IMPORT----컨피그 작성 -- PLAN------APPLY




<3> 도커 컨테이너 생성


1

docker run --name hashicorp-learn --detach --publish 8080:80 nginx:latest



2

docker ps




<4> 컨테이너로 부터 import하기


1

git clone https://github.com/hashicorp/learn-terraform-import.git


2

cd learn-terraform-import


main.tf

Docker provider.

docker.tf

Docker container

3

terraform init


Error: Failed to query available provider packages then run this command: 

terraform init -upgrade


4

provider "docker" {

#   host    = "npipe:////.//pipe//docker_engine"

}


5

docker.tf file

resource "docker_container" "web" {}



6

docker ps



7

terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)




terraform show




<5> 컨피그 만들기


1

terraform plan


2

terraform show -no-color > docker.tf


3

terraform plan



4

Remove all of these attributes, keeping only the required attributes: 

image

name

, and 

ports


resource "docker_container" "web" {

    image = "sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02"

    name  = "hashicorp-learn"

    ports {

        external = 8080

        internal = 80

        ip       = "0.0.0.0"

        protocol = "tcp"

    }

}



5

terraform plan


6

terraform apply




<6> 이미지 리소스 만들기


1

replacing 

<IMAGE-ID>

 with the image ID from 

docker.tf


docker image inspect <IMAGE-ID> -f {{.RepoTags}}



2

Add

docker.tf



resource "docker_image" "nginx" {

  name         = "nginx:latest"

}



3

terraform apply



4

Change

docker_container.web

resource "docker_container" "web" {

    image = docker_image.nginx.latest

    name  = "hashicorp-learn"

    ports {

        external = 8080

        internal = 80

        ip       = "0.0.0.0"

        protocol = "tcp"

    }

}




5

terraform apply




<7> 테라폼 파일로 관리하기


1

docker.tf

8080 to 8081:


resource "docker_container" "web" {

  name  = "hashicorp-learn"

  image = docker_image.nginx.latest

  ports {

    external = 8081

    internal = 80

    ip       = "0.0.0.0"

    protocol = "tcp"

  }

}



2


terraform apply



3


docker ps




<8> 파괴하기


1

terraform destroy



2

docker ps --filter "name=hashicorp-learn"




<9> 참고 자료


1

What is Mutable vs. Immutable Infrastructure?



https://www.hashicorp.com/resources/what-is-mutable-vs-immutable-infrastructure



2

테라포머

https://github.com/GoogleCloudPlatform/terraformer


3

커뮤니티

https://www.terraform.io/community


4

모듈 샘플

https://github.com/GoogleCloudPlatform/terraform-google-examples


5

튜트리얼

https://developer.hashicorp.com/terraform/tutorials


6

마켓 플레이스

https://console.cloud.google.com/marketplace/browse?q=Hashicorp&utm_source=Hashicorp&utm_medium=qwiklabs&utm_campaign=Qwiklabs%20to%20Marketplace






https://brunch.co.kr/@topasvga/2419





감사합니다.


매거진의 이전글 5. GCP-테라폼 상태 관리하기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari