IT Knowledge/IaC

Terraform CLI & Configuration File

Seok. 2024. 10. 7. 22:34
반응형

Terraform CLI(Command)의 사용법은 아래와 같습니다. 

 

# Terraform [global Options] <subcommand> [args]

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.

Main commands:
  init          Prepare your working directory for other commands
  validate      Check whether the configuration is valid
  plan          Show changes required by the current configuration
  apply         Create or update infrastructure
  destroy       Destroy previously-created infrastructure

All other commands:
  console       Try Terraform expressions at an interactive command prompt
  fmt           Reformat your configuration in the standard style
  force-unlock  Release a stuck lock on the current workspace
  get           Install or upgrade remote Terraform modules
  graph         Generate a Graphviz graph of the steps in an operation
  import        Associate existing infrastructure with a Terraform resource
  login         Obtain and save credentials for a remote host
  logout        Remove locally-stored credentials for a remote host
  metadata      Metadata related commands
  output        Show output values from your root module
  providers     Show the providers required for this configuration
  refresh       Update the state to match remote systems
  show          Show the current state or a saved plan
  state         Advanced state management
  taint         Mark a resource instance as not fully functional
  untaint       Remove the 'tainted' state from a resource instance
  version       Show the current Terraform version
  workspace     Workspace management

Global options (use these before the subcommand, if any):
  -chdir=DIR    Switch to a different working directory before executing the
                given subcommand.
  -help         Show this help output, or the help for a specified subcommand.
  -version      An alias for the "version" subcommand.

 

주로 많이 사용하는 Command는?

init / plan / apply / destroy / refresh / validate / show 정도?

 


 

CLI명령시에, Log를 더 자세히 보고 싶다면?

아래와 같이 Terraform Log를 tace로 변경하면 됩니다. 

$ export TF_LOG=trace

$ terraform init
2024-08-19T15:38:11.849+0900 [INFO]  Terraform version: 1.9.2
2024-08-19T15:38:11.899+0900 [DEBUG] using github.com/hashicorp/go-tfe v1.51.0
2024-08-19T15:38:11.899+0900 [DEBUG] using github.com/hashicorp/hcl/v2 v2.20.0
2024-08-19T15:38:11.900+0900 [DEBUG] using github.com/hashicorp/terraform-svchost v0.1.1
2024-08-19T15:38:11.900+0900 [DEBUG] using github.com/zclconf/go-cty v1.14.4
2024-08-19T15:38:11.900+0900 [INFO]  Go runtime version: go1.22.4
2024-08-19T15:38:11.900+0900 [INFO]  CLI args: []string{"C:\\terraform\\terraform.exe", "init"}
2024-08-19T15:38:11.905+0900 [DEBUG] Attempting to open CLI config file: C:\Users\user\AppData\Roaming\terraform.rc
2024-08-19T15:38:11.906+0900 [INFO]  Loading CLI configuration from C:\Users\user\AppData\Roaming\terraform.rc
2024-08-19T15:38:11.907+0900 [DEBUG] Explicit provider installation configuration is set
2024-08-19T15:38:11.907+0900 [INFO]  Checkpoint disabled. Not running.
api/terraform/terraform-remote-registry/providers/registry.terraform.io/hashicorp/aws/index.json
- Using previously-installed hashicorp/aws v5.63.0

 

 


Terraform의 구성파일(configuration)

모든 Terraform 작업 디렉토리에 적용되는 CLI동작에 대한 사용자별 설정을 구성합니다.

 

Terraform 구성파일 : .terraformrc 또는 terraform.rc

 

[위치]

Linux : ~/.terraformrc

Windows : $env:APPDATA/terraform.rc

(C:\Users\<Username>\AppData\Roaming)

ex) Terraform Provider 설치를 위한 설정파일 Settings
~/.terraform.rc
provider_installation {
    direct {
        exclude = ["registry.terraform.io/*/*"]
    }
    network_mirror {
        url = "https://<private.repository>/artifactory/api/terraform/providers/"
    }
}

 

 

추가 팁!

매번 다운받는 Provider Plugin의 용량이 신경쓰인다면??

 

[Provider Plugin Cache]

기본적으로 Terraform init 하면 Provider Plugin 현재 작업 디렉토리의 하위 디렉토리에 자체적으로 생성하게 됩니다.

그러면, 여러구성이 있는경우? 구성별로 Provider 동일한데, 각자의 작업 디렉토리 밑에 Provider 모두 다운로드하게 됩니다.

 

Provider 크기가 상당히 크기 때문에, 구성이 많을수록 용량을 많이 차지하거나 기본동작이 느릴 있습니다. 따라서, Terraform 에서는 선택적으로 로컬 디렉토리를 공유 Plugin Cache 폴더로 허용하여 사용할 있습니다.

 

Plugin Cache 활성화 하려면, Plugin_cache_dir 설정을 사용합니다.

plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"

(위의 디렉토리는 이미 존재해야 합니다. Terraform 스스로 디렉토리를 만들지 않습니다. )

(terraform.rc 파일에 설정을 작성하는 것은 영구적인 설정 방법입니다. )

 

Linux에서는 Plugin-cache 있는 실행 파일에 대한 심볼릭링크를 생성하여, 실행파일이 중복되지 않고 사용할 있게 해주지만,

Windows에서는 불행히도… 심볼릭링크가 없으므로, 실행파일을 Plugin-Cache 폴더에서 복제해와서. 실행파일을 중복되게 생성합니다.

 

 

임시적인 세팅방법은?

export TF_PLUGIN_CACHE_DIR="$HOME/.terraform.d/plugin-cache"

 

 

반응형