Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[Terraform] 자격증 공부 본문

카테고리 없음

[Terraform] 자격증 공부

Study_note 2022. 10. 13. 11:23

Terraform apply/plan -refresh-only

 

Terraform은 리소스를 변경하기 위한 실행 계획을 생성하기 위해 작업 공간의 상태 파일 내용에 의존합니다. 
제안된 변경 사항의 정확성을 보장하려면 상태 파일이 최신 상태여야 합니다.

 

Terraform plan및 apply은 기능의 일부로 암시적 메모리 내 새로 고침을 실행하여 인프라 변경을 제안하기 전에 상태 파일의 드리프트를 조정 가능. -refresh-only를 사용하여 인프라를 수정하지 않고 상태 파일을 업데이트할 수도 있다

 

------------------------------------------------------------

 

공식 모듈(Terraform Module Registry)

Terraform 모듈 기능을 이용한 다양한 모듈을 Terraform 공식 웹사이트에 배포하여 간단하게 사용할 수 있습니다.

 

Module Registry 사용 시 자동으로 필수 입력 변수(Required input variables), 선택적 입력 변수 및 기본값(Optional inputs variables and default values), 출력 변수(Outputs)를 자동으로 노출한다.

 

------------------------------------------------------------

 

Terraform Import

Terraform은 기존 인프라 리소스를 가져올 수 있습니다. 

이 기능을 사용하면 다른 방법으로 생성한 리소스를 Terraform 관리 하에 명시적 호출에 의해 가져올 수 있습니다.

 

------------------------------------------------------------

 

Terraform Taint

 

특정 개체가 저하되거나 손상되었음을 알려 Terraform은 개체를 Terraform 상태에서 "오염됨"으로 표시하여 이를 나타내며 Terraform은 다음 생성 계획에서 개체를 교체할 것을 제안합니다.

( 이 명령은 더 이상 사용되지 않고 -replace옵션을 사용 권장 )

 

terraform apply -replace

교체할 Terraform 관리 리소스를 수동으로 표시하여 적용 실행 시 강제로 제거하고 다시 생성합니다.

 

------------------------------------------------------------

 

State Locking

 

Terraform은 상태를 쓸 수 있는 모든 작업에 대해 자동으로 상태를 잠급니다. 

이것은 다른 사람들이 잠금을 획득하고 잠재적으로 상태를 손상시키는 것을 방지한다.

 

Force Unlock

다른 사람이 잠금을 잡고 있을 때 상태를 잠금 해제하면 여러 작성자가 발생할 수 있습니다. 

강제 잠금 해제는 자동 잠금 해제에 실패한 상황에서 자신의 잠금을 해제하는 데만 사용해야 합니다.

 

------------------------------------------------------------

 

Terraform Fmt

Terraform 구성 파일을 표준 형식 및 스타일로 다시 작성하는 데 사용됩니다.

Terraform Fmt에 의해 부과된 스타일을 준수하는 구성 파일을 생성 하므로 고유한 파일에서 이 스타일을 사용하면 일관성이 보장됩니다.

 

( 각 중첩 수준에 대해 두 개의 공백을 들여씁니다. )

 

------------------------------------------------------------

 

Terraform Validate

제공된 변수 또는 기존 상태에 관계없이 구성이 구문적으로 유효하고 내부적으로 일관성이 있는지 확인하는 검사 실행

따라서 속성 이름 및 값 유형의 정확성을 포함하여 재사용 가능한 모듈의 일반적인 확인에 주로 유용합니다.

 

이 명령은 형식(예: 탭 대 공백, 줄 바꿈, 주석 등)을 확인하지 않습니다.

다음이 보고될 수 있습니다

(예: 후행 따옴표 또는 등호 누락, 존재하지 않는 변수 이름 또는 속성 구문 등)

 

------------------------------------------------------------

 

Terraform tf_log (Debugging)

tf_log 환경 변수를 임의의 값으로 설정하여 활성화할 수 있는 자세한 로그가 있습니다.

이 설정을 활성화하면 자세한 로그가 에 나타납니다

로깅된 출력을 유지하려면  tf_log_path 로깅이 활성화 된 경우 로그가 항상 특정 파일에 추가되도록 설정할 수 있습니다.

tf_log_path가 설정된 경우 tf_log에도 로깅을 활성화 해줘야 합니다.

Terraform은 자세한 로깅 수준을 설정하기 위한 환경 변수를 노출하며 5가지 레벨이 있다.

 

trace

Terraform이 취한 모든 단계를 보여주고 내부 로그와 함께 엄펑난 출력을 생성하므로 가장 정교하고 장황함

 

debug

trace에 비해 내부적으로 발생한는 일을 보다 간결하게 설명

 

error

Terraform이 계속되지 못하게 하는 오류를 표시

 

warn

잘못된 구성이나 실수를 나타낼 수 있지만 실행에 중요하지 않은 경고를 기록

 

info

실행 프로세스에 대한 일반적이고 높은 수준의 메시지를 표시

 

------------------------------------------------------------

 

Terraform Refresh

terraform 새로 고침 명령은 모든 관리되는 원격 개체에서 현재 설정을 읽고 일치하도록 Terraform 상태를 업데이트합니다. 경고: 이 명령은 더 이상 사용되지 않습니다. 공급자에 대해 자격 증명을 잘못 구성한 경우 기본 동작이 안전하지 않기 때문입니다

 

손상된 상태 파일 탐지X, 상태 파일 업데이트

 

------------------------------------------------------------

 

terraform plan -out=FILE

선택 사항인 -out=FILE 옵션을 사용하여 생성된 계획을 디스크의 파일에 저장할 수 있으며, 나중에 추가 인수로 terraform apply에 파일을 전달하여 실행할 수 있습니다.

 

------------------------------------------------------------

 

자격 증명 및 민감한 데이터

환경 변수를 사용하여 자격 증명 및 기타 민감한 데이터를 제공하는 것이 좋습니다. 

이러한 값을 구성에서  하드코딩하는 경우 Terraform은 이러한 값을 .terraform하위 디렉토리와 계획 파일 모두에 포함되어 민감한 자격 증명이 누출될 수 있습니다.

 

------------------------------------------------------------

 

.terraform

Terraform이 캐시된 공급자 플러그인 및 모듈을 관리하는 데 사용 하는 숨겨진 디렉토리는 현재 활성화된 작업 공간을 기록하고 다음 실행 시 상태를 마이그레이션해야 하는 경우에 대비하여 마지막으로 알려진 백엔드 구성을 기록합니다.

 

------------------------------------------------------------

 

terraform state rm

Terraform이 개체가 원격 시스템에 계속 존재하는 동안 개체를 효과적으로 "잊게" 만들 수 있습니다.

Terraform은 주어진 리소스 주소와 일치하는 모든 인스턴스의 상태를 검색하고 Terraform이 더 이상 해당 원격 개체를 추적하지 않도록 각 인스턴스의 레코드를 제거합니다. (리소스 or state 삭제는 아니다)

 

terraform state list

terraform state show

 

------------------------------------------------------------

 

리소스 종속성

Terraform은 지정된 구성을 기반으로 리소스 간의 종속성을 유추하므로 리소스가 올바른 순서로 생성 및 소멸됩니다. 그러나 때때로 Terraform은 인프라의 다른 부분 간의 종속성을 유추할 수 없으며 depends_on인수를 사용하여 명시적 종속성을 생성해야 합니다.

 

------------------------------------------------------------

 

연결블록 (한번더 읽기)

원격 리소스에 액세스하는 방법을 설명하는 하나 이상의 connection블록을 생성할 수 있습니다. 다중 연결을 제공하는 한 가지 사용 사례는 초기 제공자가 root사용자 계정을 설정하기 위해 사용자로 연결한 다음 후속 제공자가 더 제한된 권한을 가진 사용자로 연결하도록 하는 것입니다.

 

------------------------------------------------------------

 

local-exec / remote-exec

local-exec  : 로컬에서 실행하는 프로비저너로 여기서 로컬은 terraform apply를 실행하는 현재 머신을 의미한다.

아래와 같이 local-exec 값이 실행 된다.

주로 로컬에 스크립트나 프로그램을 실행하거나 할때 사용한다.

resource "aws_instance" "web" {
  # ...

  provisioner "local-exec" {
    command = "echo ${self.private_ip} >> private_ips.txt"
  }
}

 

remote-exec : 원격 리소스가 생성 된 스크립트를 호출합니다.

 

다음 인수가 지원됩니다.

  • inline- 이것은 명령 문자열의 목록입니다. 셸을 첫 번째 명령으로 지정하지 않는 한 제공자는 기본 셸을 사용합니다  #!/bin/bash. script또는 와 함께 제공할 수 없습니다 
  • script- 이것은 원격 리소스에 복사된 다음 실행될 로컬 스크립트에 대한 경로(상대 또는 절대)입니다. 
  • scripts - 이것은 원격 리소스에 복사된 다음 실행될 로컬 스크립트에 대한 경로(상대 또는 절대) 목록입니다. 
resource "aws_instance" "web" {
  # ...

  # Establishes connection to be used by all
  # generic remote provisioners (i.e. file/remote-exec)
  connection {
    type     = "ssh"
    user     = "root"
    password = var.root_password
    host     = self.public_ip
  }

  provisioner "remote-exec" {
    inline = [
      "puppet apply",
      "consul join ${aws_instance.web.private_ip}",
    ]
  }
}

위와 같이 원격에 접속해서 실행하려면 connection을 지정해야 한다. 

connection은 resource 아래 선언할 수 도있고, provisioner 아래 선언할 수도 있는데 resource 아래 선언하면 해당 리솟스의 모든 프로비저너가 선언한 커넥션을 사용하게 된다.

 

(이러한 프로비정닝 도구들은 최후싀 수단으로 사용하는것을 권장한다.)

------------------------------------------------------------

 

terraform console

식 을 평가하고 실험하기 위한 대화형 명령줄 콘솔을 제공합니다 . 

 

------------------------------------------------------------

 

terraform.tfvars

변수 할당을 체계적으로 관리할 수 있을 뿐만 아니라 다른 사람과 공유하고 싶지 않은 환경의 비밀번호나 IP 주소와 같은 민감한 데이터가 포함될 수 있습니다.

 

------------------------------------------------------------

 

vault

비밀 정보 즉, 공개되면 안 되는 비밀번호, api 키, 토큰 등을 저장하고 관리하는 도구이다.

Terraform과 Vault가 상호 작용하면 읽고 쓰는 모든 비밀 정보들이 Terraform의 상태 파일 및 다른 파일 모두에 유지된다. 

Terraform 모듈의 경우 이러한 파일은 민감한 것으로 취급되고 그에 따라 보호되어야 합니다. (이게 단점으로 될 수 있음)

 

 

 

 

 

Comments