관리 메뉴

피터의 개발이야기

[Terraform] Terraform을 mac에 설치하고 nginx 생성 본문

DevOps/Terraform

[Terraform] Terraform을 mac에 설치하고 nginx 생성

기록하는 백앤드개발자 2024. 5. 19. 10:10
반응형

ㅁ 들어가며

ㅇ Terraform를 로컬에서 사용해 보기 위해 docker로 설치하는 과정이다.

 

ㅁ Terraform 설치

# 패키지 저장소 HashiCorp 탭을 설치
$ brew tap hashicorp/tap

# terraform 설치
$ brew install hashicorp/tap/terraform

# 설치확인
$ terraform --help
Usage: terraform [global options] <subcommand> [args]

The available commands for execution are listed below.
The primary workflow commands are given first, followed by
less common or more advanced commands.
~~~~~

# 개별 명령어 상세 설명
$ terraform --help plan
Usage: terraform [global options] plan [options]

  Generates a speculative execution plan, showing what actions Terraform
  would take to apply the current configuration. This command will not
  actually perform the planned actions.
~~~~~~~~~

 

ㅁ Terraform 탭 자동완성 기능

# 자동완성기능 설치
$ terraform -install-autocomplete

# 재실행
$ zsh

# 자동완성기능 테스트
# -help 이후 탭 클릭 시 하위 사용가능한 명령어를 확인할 수 있다.
$  terraform -help import
apply         env           get           init          metadata      providers     show          test          version
console       fmt           graph         login         output        push          state         untaint       workspace
destroy       force-unlock  import        logout        plan          refresh       taint         validate

ㅁ 설치 Dir 생성

$ mkdir learn-terraform-docker-container; cd learn-terraform-docker-container

ㅇ 디렉터리에는 Terraform에서 생성하고 관리할 인프라를 설명하기 위해 작성하는 구성 파일을 저장한다. 여기에서 구성을 초기화하고 적용하면 Terraform은 이 디렉터리를 사용하여 필요한 플러그인, 모듈(미리 작성된 구성) 및 생성된 실제 인프라에 대한 정보를 저장한다.

 

ㅁ Nginx 기동해보기

terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.1"
    }
  }
}
 
provider "docker" {}
 
resource "docker_image" "nginx" {
  name         = "nginx"
  keep_locally = false
}
 
resource "docker_container" "nginx" {
  image = docker_image.nginx.image_id
  name  = "tutorial"
 
  ports {
    internal = 80
    external = 8000
  }
}

ㅇ main.tf 작성

ㅇ Terraform이 Docker와 상호 작용할 수 있도록 required_provider에 공급자 플러그인을 설정한다.

 

ㅁ Terraform의 구성 요소

  • provider
    - Terraform으로 관리할 인프라의 종류를 의미 (ex) AWS, GCP, Azure ...) 
  • resource 
    - Terraform으로 관리할 인프라 자원을 의미 (ex) EC2, IAM, S3, RDS ...)
  • state
    - Terraform을 통해 생성된 리소스들의 상태를 의미. (= terraform apply 명령어를 실행한 결과물)
  • output
    - Terraform으로 만든 리소스를 변수 형태로 state에 저장하는 것을 의미
  • module
    - 공통적으로 활용할 수 있는 모듈을 정의하는 것을 의미
  • remote
    - 다른 경로의 state를 참조하는 것을 의미하며, output 변수를 불러올 때 주로 사용

 

ㅁ Terraform 실행

# 초기화
$ terraform init

Initializing the backend...

Initializing provider plugins...
- Finding kreuzwerker/docker versions matching "~> 3.0.1"...
- Installing kreuzwerker/docker v3.0.2...
- Installed kreuzwerker/docker v3.0.2 (self-signed, key ID BD080C4571C6104C)

Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://www.terraform.io/docs/cli/plugins/signing.html

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

# 실행
$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # docker_container.nginx will be created
  
  ~~~~~~~~~~~~~~~~~~~~~~~~

docker_image.nginx: Creating...
docker_image.nginx: Creation complete after 0s [id=sha256:eeb9db34b33190cac170b27d857e9b23511d396a2609c1a54e93025634afed0anginx]
docker_container.nginx: Creating...
docker_container.nginx: Creation complete after 0s [id=e8a8f7b59cabb526ce2228303ae727ea4872864b14bf21d639013551700e4f6e]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

ㅇ 초기화와 실행 모습

 

ㅇ 맥미니의 주소로 접속 테스트

 

ㅁ 작업 정리

# 기동된 자원 정리
$ terraform destroy
docker_image.nginx: Refreshing state... [id=sha256:eeb9db34b33190cac170b27d857e9b23511d396a2609c1a54e93025634afed0anginx]
docker_container.nginx: Refreshing state... [id=e8a8f7b59cabb526ce2228303ae727ea4872864b14bf21d639013551700e4f6e]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy

Terraform will perform the following actions:

  # docker_container.nginx will be destroyed
  - resource "docker_container" "nginx" {
  ~~~~~~~~~~~~~~~~

 

ㅁ 함께 보면 좋은 사이트

Terraform Doc - Quick start tutorial

반응형

'DevOps > Terraform' 카테고리의 다른 글

[Terraform] kubernetes, minikube 구축  (0) 2024.05.26
Comments