Terraform Windows 및 Terraform EC2 시작하기

인프라스트럭처 코드(IaC) 공간에서, 지난 몇 년 동안 가장 유용한 도구 중 하나는 HashiCorp의 Terraform Windows입니다. 인프라스트럭처의 버전 관리, 리소스 프로비저닝 자동화, 다른 클라우드 공급업체에서 실행하는 기능은 어떤 DevOps 및 자동화 워크플로에도 큰 도움이 됩니다.

Terraform의 한 가지 사용 사례는 CI/CD에서입니다. Terraform을 사용하면 다음과 같은 작업을 수행할 수 있습니다:

최신 동영상

  • 테스트 환경 생성
  • 응용 프로그램 배포
  • 통합 테스트 실행
  • 테스트 환경 삭제

모든 단계는 자동으로 수행됩니다. 또한 데이터 센터가 필요하지 않습니다!

사전 요구 사항

이 문서는 Terraform Windows를 설치하고 실행하는 방법에 대한 안내입니다. 따라하려면 다음 사전 요구 사항이 충족되어 있는지 확인하십시오.

  • A Windows 10 device
  • AWS 계정
  • 해당 장치에 설치되어 구성된 AWS CLI. 여기에서 설치하는 방법을 확인할 수 있으며, 여기에서 구성하는 방법을 확인할 수 있습니다.
  • (선택 사항) Terraform 확장 기능이 있는 Visual Studio Code

Terraform Windows 애플리케이션 설치

Terraform의 기능을 최대한 활용하려면 먼저 선택한 운영 체제에 Terraform을 설치해야 합니다. 이 문서에서는 Windows에 초점을 맞출 것입니다. 하지만 Terraform은 다른 운영 체제에서도 실행될 수 있습니다. Windows가 아닌 경우 설치 문서를 확인해보세요.

어려운 방법

패키지 관리자를 사용할 수 없거나 설치 과정을 이해하려는 경우 수동으로 Terraform을 설치할 수 있습니다. Terraform을 다운로드하고 이진 파일을 시스템 경로 환경 변수에 추가하여 설치할 수 있습니다. 이 작업이 복잡해 보일 수 있지만 다음 섹션에서 알려드릴 간단한 방법이 있습니다.

  1. HashiCorp의 다운로드 페이지에서 적절한 버전의 Terraform을 다운로드하세요. 저는 Windows 64비트 버전을 사용합니다.
  2. C:\ 드라이브에 Terraform 실행 파일을 넣을 폴더를 만드세요. 저는 설치 파일을 이진 파일을 넣을 서브폴더 (예: C:\tools)에 두는 것을 선호합니다.
  3. 다운로드가 완료되면 파일 탐색기에서 해당 파일을 찾으세요. 압축 파일을 2단계에서 만든 폴더에 해제하세요.
  4. 시작 메뉴를 열고 “환경”이라고 입력하면 시스템 환경 변수 편집 옵션이 첫 번째로 나오는데, 이를 클릭하면 다음 창이 나타납니다.
System Properties

5. 아래에서 환경 변수…를 클릭하면 다음을 볼 수 있습니다:

Windows environment variables

6. 시스템 변수라고 쓰여진 하단 섹션에서 Path라는 변수를 찾아 편집을 클릭하세요. 그럼 Windows가 필요한 경우에 사용할 이진 파일의 위치 목록을 볼 수 있습니다.

7. 새로 만들기를 클릭하고 terraform.exe가 있는 폴더 경로를 목록의 하단에 추가하세요. 작업이 완료되면 다음과 같아야 합니다.

Editing the system path

8. 열어 둔 각 메뉴에서 확인을 클릭하세요. 더 이상 열려 있는 메뉴가 없을 때까지 반복하세요.

9. 새로운 경로가 Windows에서 인식되는지 확인하기 위해 새로운 CMD/PowerShell 창을 열고 refreshenv를 입력하세요.

10. terraform --version을 입력하여 설치가 성공적인지 확인하세요. 버전이 표시되면 사용할 수 있습니다.

간편한 방법

휴, 이 작업은 정말 많은 작업이었습니다! 기기에 새 소프트웨어를 설치할 때마다 이렇게 해야 한다면 정말 귀찮을 것입니다. 그 대신 패키지 매니저를 사용합시다. Windows에서는 몇 가지 패키지 매니저를 사용하여 Terraform을 설치할 수 있습니다. Windows용으로는 Chocolatey가 제일 좋습니다. 이것은 설치, 제거 및 업데이트를 한 줄의 명령으로 간단하게 할 수 있으며, Terraform도 예외는 아닙니다.

Chocolatey를 사용하여 Terraform을 설치하려면 다음 단계를 수행하세요:

  1. 관리자 권한으로 CMD/PowerShell 프롬프트를 열고 설치 페이지의 명령을 사용하여 Chocolatey를 설치합니다.
  2. 설치가 완료되면 choco install terraform를 실행합니다. 원한다면, 기기에 자동으로 설치 동의하기 위해 끝에 -y를 추가할 수도 있습니다.

해당 명령을 실행한 후 다음과 같은 결과를 얻게 됩니다:

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3.   설치가 성공적으로 이루어졌는지 확인하기 위해 terraform --version을 입력합니다.

리눅스 방식

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

네, 리눅스는 여전히 사용 가능합니다. 그러나 Windows 10에는 Windows용 리눅스 하위 시스템 또는 WSL이라는 기능이 있습니다. 이를 사용하면 Windows에서 리눅스 명령을 실행할 수 있습니다.

  1. WSL을 설치합니다. 여기에서 WSL을 설치하고 설정하는 방법에 대해 자세히 설명하지는 않겠지만, 따라하고자 하는 경우 이미 설정되어 있지 않은 경우 아래에서 해당 주제에 대한 TechSnips snip을 찾을 수 있습니다.

2.   WSL 셸에서 apt-get install unzip을 실행합니다. 나중에 Terraform 이진 파일을 추출하기 위해 이것이 필요합니다.

3.   다음 명령을 실행하여 Terraform을 다운로드합니다: wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip. 버전과 아키텍처를 기기에 가장 잘 맞는 것으로 대체하는 것을 잊지 마십시오. Terraform 릴리스의 전체 목록은 여기에서 찾을 수 있습니다.

4. unzip terraform_0.12.6_linux_amd64.zip terraform 명령을 실행하여 zip 파일의 내용을 terraform이라는 폴더에 압축 해제합니다.

5. 압축이 해제된 ZIP 파일을 시스템 경로에서 접근 가능한 곳으로 이동해야 합니다. 다행히도 Linux에는 사용자가 바이너리를 기본적으로 추가할 수 있는 폴더가 있습니다. mv terraform /usr/local/bin/ 명령을 실행하여 Terraform 이진 파일을 해당 폴더로 이동합니다. /usr/local/bin 폴더는 시스템 경로에 이미 설정되어 있습니다.

6. 설치가 성공적으로 이루어졌는지 확인하기 위해 terraform --version 명령을 실행합니다.

AWS Terraform EC2 인스턴스 자동화

Terraform을 설치했으므로 이제 사용할 수 있습니다. 이 글에서는 간단한 AWS Terraform EC2 인스턴스를 빌드하는 방법을 보여줍니다. 그러나 Terraform은 수백 가지 다른 유형의 인프라를 프로비저닝할 수 있습니다.

시작하기 전에, Terraform EC2 스크립트를 실행할 디렉토리가 필요합니다. 각 환경마다 별도의 디렉토리를 가지는 것이 중요합니다. 현재 작성하는 시점에서 Terraform은 실행할 스크립트를 필터링하는 방법이 없습니다. 현재 작업 디렉토리의 모든 스크립트를 실행합니다.

TF 스크립트 설정

  1. 관리자 권한으로 실행되는 cmd 또는 PowerShell 콘솔에서 mkdir hello-terraform 명령을 실행한 다음 cd ./hello-terraform 명령을 실행합니다.
  2. 디렉토리를 생성한 후에는 테라폼 스크립트가 필요합니다. 아래에 사용할 수 있는 예시가 있습니다. 이는 AWS 프로바이더를 사용하여 AWS 인스턴스 리소스를 생성하는 일반적인 테라폼 스크립트입니다.

전체 스크립트가 필요하다면 아래에 복사하세요. 이 스크립트가 하는 일을 이해하려면 아래를 읽으세요.

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3. 위의 스크립트를 main.tf로 작업 디렉토리에 저장하세요.

TF 스크립트 이해하기

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

더 나아가기 전에 아래 블록과 그 내용을 살펴보세요.

# Terraform HCL

이 블록은 테라폼 EC2에게 어떤 프로바이더를 사용해야 하는지 알려줍니다. 주요 클라우드 업체뿐만 아니라 온프레미스 업체용 프로바이더도 제공됩니다. 더 고급 사용자이고 Golang을 작성하는 방법을 알고 있다면 자체 프로바이더를 작성할 수도 있습니다.

이 블록은 테라폼이 AWS 프로바이더를 사용하고 ~/.aws/credentials 파일에 있는 default 프로파일 이름의 액세스 키를 사용하도록 지시합니다. 이 파일은 사전 준비 사항에서 aws config 명령으로 AWS CLI를 설정할 때 생성됩니다.

또한, ~/은 현재 사용자의 디렉토리를 나타냅니다. Windows 배경에서 온 것이라면 이는 $env:USERPROFILE 또는 %USERPROFILE%와 동일합니다. 하지만 테라폼은 이 표기법을 지원하지 않습니다(작성 시점 기준).

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

다음 아래 블록은 Terraform EC2 인스턴스를 설명하고 구축하는 방법을 설명합니다. aws_instance에 대한 Terraform 문서를 확인하면 일부 매개변수가 필수이고 일부는 선택 사항임을 알 수 있습니다. 이 경우 필수 매개변수는 Ubuntu 18.04 LTS용 AMI ID (ami-07d0cf3af28718ef8)와 인스턴스 유형으로 t2.micro입니다.

Name이라는 키와 값이 있는 태그 블록을 전달하면 생성된 인스턴스에도 이 태그가 할당됩니다. 이는 선택 사항입니다.

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

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

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  AWS Terraform EC2 인스턴스 구축: 테스트
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

Plan: 1 to add, 0 to change, 0 to destroy.

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

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

스크립트가 설정되었으므로 작업 디렉토리에서 terraform init을 실행하여 호출하십시오. 이렇게 하면 모든 종속성 및 공급자가 .terraform이라는 폴더에 다운로드됩니다. 모든 것이 잘 진행되면 다음과 같은 결과가 나타납니다.

어떤 변경도 수행하기 전에 terraform plan을 실행하여 생성될 내용을 확인할 수 있습니다. 다음은 그 결과입니다.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# aws_instance.ubuntu가 생성됩니다.

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

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

AWS EC2 인스턴스 구축: 생성

이제 변경 사항을 적용하려면 terraform apply를 실행할 준비가 되었습니다. 아래에서 terraform plan과 유사한 출력을 확인할 수 있지만 이러한 변경 사항을 실제로 적용할지 확인하는 추가 프롬프트가 추가되었습니다.

‘예’를 입력하면, Terraform EC2는 자격증명 파일에서 액세스 키와 함께 AWS API를 호출하여 Terraform EC2 인스턴스를 프로비저닝하기 시작합니다. 이 작업은 시간이 소요될 수 있습니다. 완료되면 아래와 같은 내용이 표시됩니다:

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

AWS EC2 인스턴스 파괴

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

테스트 환경 사용을 마치면 인스턴스를 파괴할 수 있습니다.

cmd/PowerShell 콘솔에서 terraform destroy를 입력하세요. apply 명령어와 마찬가지로, Terraform이 파괴할 자원 목록과 실제 파괴하기 전에 확인 메시지가 표시됩니다.

‘예’를 입력하면, Terraform EC2는 인스턴스 파괴를 시작하고 완료시 확인 메시지를 표시합니다.

Source:
https://adamtheautomator.com/terraform-windows/