arrow_back

Terraform 기초

가입 로그인
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Terraform 기초

Lab 35분 universal_currency_alt 크레딧 1개 show_chart 입문
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP156

Google Cloud 사용자 주도형 실습

개요

Terraform을 사용하면 인프라를 안전하고 예측 가능한 방식으로 생성, 변경, 개선할 수 있습니다. Terraform은 API를 선언적 구성 파일로 코드화하는 오픈소스 도구로, 동료들과 공유하고 코드로 처리할 수 있으며 편집, 검토, 버전 관리가 가능합니다.

목표

이 실습에서는 다음 작업을 실행하는 방법을 알아봅니다.

  • Google Cloud에서 Terraform 시작하기
  • 설치 바이너리에서 Terraform 설치하기
  • Terraform을 사용해 VM 인스턴스 인프라 만들기

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머에는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지 표시됩니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 직접 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간---실습을 시작하고 나면 일시중지할 수 없습니다.
참고: 계정에 추가 요금이 발생하지 않도록 하려면 개인용 Google Cloud 계정이나 프로젝트가 이미 있어도 이 실습에서는 사용하지 마세요.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 팝업이 열립니다. 왼쪽에는 다음과 같은 항목이 포함된 실습 세부정보 패널이 있습니다.

    • Google 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google 콘솔 열기를 클릭합니다. 실습에서 리소스가 가동된 후 로그인 페이지가 표시된 다른 탭이 열립니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 실습 세부정보 패널에서 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다. 다음을 클릭합니다.

  4. 실습 세부정보 패널에서 비밀번호를 복사하여 시작 대화상자에 붙여넣습니다. 다음을 클릭합니다.

    중요: 왼쪽 패널에 표시된 사용자 인증 정보를 사용해야 합니다. Google Cloud Skills Boost 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  5. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의합니다.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 않습니다.
    • 무료 평가판을 신청하지 않습니다.

잠시 후 Cloud 콘솔이 이 탭에서 열립니다.

참고: 왼쪽 상단에 있는 탐색 메뉴를 클릭하면 Google Cloud 제품 및 서비스 목록이 있는 메뉴를 볼 수 있습니다. 탐색 메뉴 아이콘

Cloud Shell 활성화

Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Google Cloud 콘솔 상단에서 Cloud Shell 활성화 Cloud Shell 활성화 아이콘를 클릭합니다.

연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 PROJECT_ID로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  1. (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
  1. 승인을 클릭합니다.

  2. 다음과 비슷한 결과가 출력됩니다.

출력:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project

출력:

[core] project = <project_ID>

출력 예시:

[core] project = qwiklabs-gcp-44776a13dea667a6 참고: gcloud 전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참조하세요.

Terraform이란 무엇인가요?

Terraform은 인프라를 효율적으로 안전하게 빌드, 변경, 버전 관리할 수 있는 도구입니다. Terraform으로 기존의 인기 있는 서비스 제공업체 솔루션과 커스텀 사내 솔루션을 모두 관리할 수 있습니다.

구성 파일은 단일 애플리케이션 또는 전체 데이터 센터를 실행하는 데 필요한 구성요소를 Terraform에 설명하는 역할을 합니다. Terraform은 원하는 상태에 도달하기 위해 수행할 작업을 설명하는 실행 계획을 생성한 다음, 이를 실행해 설명한 인프라를 빌드합니다. 구성이 변경되면 Terraform에서 변경된 내용을 파악하고, 그에 맞춰 적용 가능한 점진적 실행 계획을 생성할 수 있습니다.

Terraform으로 관리할 수 있는 인프라에는 컴퓨팅 인스턴스, 스토리지, 네트워킹 같은 하위 수준의 구성요소와 DNS 항목 및 SaaS 기능 같은 상위 수준의 구성요소가 모두 포함됩니다.

주요 기능

코드형 인프라

인프라에 관한 설명은 상위 수준의 구성 문법을 사용합니다. 따라서 다른 코드와 마찬가지 방식으로 데이터 센터의 청사진을 버전 관리하고 처리할 수 있습니다. 인프라를 공유하고 재사용하는 것도 가능합니다.

실행 계획

Terraform은 계획 단계를 거쳐 실행 계획을 생성합니다. 실행 계획은 사용자가 apply 명령어를 실행할 때 Terraform에서 수행할 작업을 알려줍니다. 따라서 Terraform이 인프라를 어떻게 조작할지 미리 알 수 있습니다.

리소스 그래프

Terraform은 모든 리소스의 그래프를 빌드하고 종속되지 않은 리소스의 생성과 수정을 병렬 처리합니다. 이로 인해 Terraform은 최대한 효율적으로 인프라를 빌드하고 작업자는 인프라의 종속 항목을 파악할 수 있습니다.

변경 자동화

인적 개입을 최소화하면서도 복잡한 변경사항 집합을 인프라에 적용할 수 있습니다. 앞서 언급한 실행 계획과 리소스 그래프를 통해 Terraform이 무엇을 어떤 순서로 변경하는지 정확하게 알 수 있어 사람의 실수로 인한 오류를 최대한 피하는 데 도움이 됩니다.

작업 1. Terraform 설치 확인하기

Terraform은 Cloud Shell에 사전 설치된 상태로 제공됩니다.

  • 새로운 Cloud Shell 탭을 열고 Terraform이 사용 가능한지 확인합니다.
terraform

다음과 유사한 도움말 출력이 결과로 표시됩니다.

Usage: terraform [--version] [--help] [args] The available commands for execution are listed below. The most common, useful commands are shown first, followed by less common or more advanced commands. If you're just getting started with Terraform, stick with the common commands. For the other commands, please read the help and docs before usage. Common commands: apply Builds or changes infrastructure console Interactive console for Terraform interpolations destroy Destroy Terraform-managed infrastructure env Workspace management fmt Rewrites config files to canonical format get Download and install modules for the configuration graph Create a visual graph of Terraform resources import Import existing infrastructure into Terraform init Initialize a Terraform working directory output Read an output from a state file plan Generate and show an execution plan providers Prints a tree of the providers used in the configuration push Upload this Terraform module to Atlas to run refresh Update local state file against real resources show Inspect Terraform state or plan taint Manually mark a resource for recreation untaint Manually unmark a resource as tainted validate Validates the Terraform files version Prints the Terraform version workspace Workspace management All other commands: debug Debug output management (experimental) force-unlock Manually unlock the terraform state state Advanced state management

작업 2. 인프라 빌드하기

Terraform이 설치되어 있다면 일부 인프라는 즉시 생성을 시작할 수 있습니다.

구성

Terraform에서 인프라를 설명하는 데 사용되는 파일 집합을 간단히 Terraform configuration이라고 합니다. 이 섹션에서는 단일 VM 인스턴스를 시작하기 위한 첫 번째 구성을 작성해 보겠습니다. 구성 파일의 형식은 Terraform 언어 문서에서 확인할 수 있습니다. 구성 파일 생성에는 JSON을 사용하는 것이 좋습니다.

  1. Cloud Shell에서 다음 명령어를 사용해 instance.tf라는 빈 구성 파일을 생성합니다.
touch instance.tf
  1. Cloud Shell 툴바에서 편집기 열기를 클릭합니다.
    Cloud Shell과 코드 편집기 사이를 전환하려면 필요에 따라 편집기 열기 또는 터미널 열기를 클릭하거나, 새 창에서 열기를 클릭해 편집기를 별도의 탭에 열어 둡니다.

  2. instance.tf 파일을 클릭하고 그 안에 다음 내용을 추가하여 <PROJECT_ID>를 Google Cloud 프로젝트 ID로 바꿉니다.

resource "google_compute_instance" "terraform" { project = "{{{project_0.project_id}}}" name = "terraform" machine_type = "e2-medium" zone = "{{{project_0.default_zone}}}" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = "default" access_config { } } }

이렇게 하면 Terraform에서 바로 적용할 수 있는 완전한 구성이 마련됩니다. 전반적인 구조는 직관적이고 단순해야 합니다.

instance.tf 파일의 'resource' 블록은 인프라 안에 존재하는 리소스를 정의합니다. 리소스는 VM 인스턴스 같은 물리적 구성요소일 수 있습니다.

블록을 열기 전에 리소스 블록에 나오는 두 개의 문자열이 있는데, 이는 리소스 유형리소스 이름입니다. 이 실습에서 리소스 유형은 google_compute_instance이고 이름은 terraform입니다. 유형의 프리픽스는 제공업체와 매핑됩니다. 따라서 google_compute_instance는 이 리소스가 Google 제공업체에 의해 관리된다는 사실을 Terraform에 자동으로 알려줍니다.

리소스 블록 안에는 리소스에 필요한 구성이 나와 있습니다.

  1. Cloud Shell에서 새 파일이 추가되었는지, 디렉터리에 다른 *.tf 파일이 없는지 확인하세요. Terraform에서 이 형식의 파일을 모두 로드하기 때문입니다.
ls

초기화

구성을 새로 만들거나 버전 제어에서 기존 구성을 확인한 후 실행할 첫 번째 명령어는 terraform init입니다. 이 명령어는 후속 명령어에서 사용할 다양한 로컬 설정과 데이터를 초기화합니다.

Terraform은 플러그인 기반 아키텍처를 사용하여 이용 가능한 수많은 인프라와 서비스 제공업체를 지원합니다. 각 '제공업체'는 Terraform 자체와 별도로 배포되는 자체 캡슐화된 바이너리입니다. terraform init 명령어는 제공업체가 구성 내에서 사용할 제공업체 바이너리를 자동으로 다운로드하고 설치합니다. 이 경우에는 Google 제공업체입니다.

  1. 다음 명령어를 통해 제공업체 바이너리를 다운로드하고 설치합니다.
terraform init

Google 제공업체 플러그인이 다운로드되어 현재 작업 중인 디렉터리의 하위 디렉터리에 각종 관리 파일과 함께 설치됩니다. 이 과정에서 '제공업체 플러그인 초기화 중'이라는 메시지가 표시됩니다. Terraform은 실행이 Google 프로젝트에서 이루어지고 있음을 알고 Google 리소스를 활용합니다.

Installing hashicorp/google v4.77.0... 참고: 더 높은 버전 번호가 표시될 수 있습니다.

출력은 설치 중인 플러그인 버전을 명시하면서, terraform init가 호환되는 버전을 설치할 수 있도록 향후 구성 파일에 이 버전을 지정할 것을 사용자에게 제안합니다.

  1. 다음 명령어를 통해 실행 계획을 생성합니다.
terraform plan

Terraform은 명시적으로 비활성화되지 않는 한 새로고침을 실행한 다음, 구성 파일에 지정된 원하는 상태를 달성하기 위해 어떤 작업이 필요한지 결정합니다. 이 명령어는 실제 리소스나 상태를 변경하지 않고도 변경사항 세트의 실행 계획이 예상과 일치하는지 확인해 볼 수 있는 편리한 방법입니다. 예를 들어 버전 제어에 변경사항을 커밋하기 전에 이 명령어를 실행하여 예상대로 작동되는지 확인할 수 있습니다.

참고: 선택적으로 -out 인수를 사용하면 생성된 계획을 파일에 저장했다가 나중에 terraform apply를 사용해 실행할 수 있습니다.

변경사항 적용

  1. 생성한 instance.tf 파일과 동일한 디렉터리에서 다음 명령어를 실행합니다.
terraform apply

이 출력에서는 실제 인프라를 구성에 맞게 변경하기 위해 Terraform으로 수행할 작업을 설명하는 실행 계획을 확인할 수 있습니다. 출력 형식은 Git와 같은 도구로 생성되는 diff 형식과 유사합니다.

google_compute_instance.terraform 옆의 +는 Terraform에서 이 리소스를 생성한다는 의미입니다. 이어서 설정될 속성이 표시됩니다. 표시되는 값이 <computed>이면 리소스가 생성될 때까지 값을 알 수 없다는 의미입니다.

출력 예:

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: # google_compute_instance.default will be created + resource "google_compute_instance" "default" { + can_ip_forward = false + cpu_platform = (known after apply) + deletion_protection = false + guest_accelerator = (known after apply) + id = (known after apply) + instance_id = (known after apply) + label_fingerprint = (known after apply) + machine_type = "e2-medium" + metadata_fingerprint = (known after apply) + name = "terraform" + project = "qwiklabs-gcp-42390cc9da8a4c4b" + self_link = (known after apply) + tags_fingerprint = (known after apply) + zone = "us-west1-c" + boot_disk { + auto_delete = true + device_name = (known after apply) + disk_encryption_key_sha256 = (known after apply) + kms_key_self_link = (known after apply) + source = (known after apply) + initialize_params { + image = "debian-cloud/debian-11" + labels = (known after apply) + size = (known after apply) + type = (known after apply) } } + network_interface { + address = (known after apply) + name = (known after apply) + network = "default" + network_ip = (known after apply) + subnetwork = (known after apply) + subnetwork_project = (known after apply) + access_config { + assigned_nat_ip = (known after apply) + nat_ip = (known after apply) + network_tier = (known after apply) } } + scheduling { + automatic_restart = (known after apply) + on_host_maintenance = (known after apply) + preemptible = (known after apply) + node_affinities { + key = (known after apply) + operator = (known after apply) + values = (known after apply) } } } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value:

계획이 성공적으로 생성되었다면 Terraform이 일시 중지되고 계속 진행하기 전 사용자 승인을 받기 위해 기다립니다. 프로덕션 환경에서 실행 계획에 잘못되거나 위험한 부분이 있는 것 같다면 이 단계에서 취소하는 편이 안전합니다. 인프라에 아무런 변경사항도 적용되지 않은 상태이기 때문입니다.

  1. 이 경우에는 계획에 이상이 없어 보이므로 확인 프롬프트에 yes를 입력해 계속 진행합니다.
    VM 인스턴스가 사용 가능한 상태가 될 때까지 Terraform이 대기하기 때문에 계획을 실행하는 데 몇 분 정도 걸립니다.

이후에 Terraform 작업이 모두 완료됩니다.

완료된 작업 테스트하기

진행 상황 확인하기를 클릭하여 실행한 작업을 확인합니다. 작업이 완료되면 평가 점수가 부여됩니다.

Terraform으로 영역에서 VM 인스턴스를 생성합니다.
  1. Google Cloud 콘솔의 탐색 메뉴에서 Compute Engine > VM 인스턴스를 클릭합니다. VM 인스턴스 페이지가 열리고 방금 생성한 VM 인스턴스를 VM 인스턴스 목록에서 확인할 수 있습니다.

Terraform에서 일부 데이터를 terraform.tfstate 파일에 작성했습니다. 이 상태 파일은 생성된 리소스의 ID를 추적하여 Terraform에 관리 중인 대상을 알려주는 매우 중요한 역할을 합니다.

  1. Cloud Shell에서 현재 상태를 확인합니다.
terraform show

출력 예:

# google_compute_instance.default: resource "google_compute_instance" "default" { can_ip_forward = false cpu_platform = "Intel Haswell" deletion_protection = false guest_accelerator = [] id = "terraform" instance_id = "3408292216444307052" label_fingerprint = "42WmSpB8rSM=" machine_type = "e2-medium" metadata_fingerprint = "s6I5s2tjfKw=" name = "terraform" project = "qwiklabs-gcp-42390cc9da8a4c4b" self_link = "https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-42390cc9da8a4c4b/zones/{{{project_0.default_zone}}}/instances/terraform" tags_fingerprint = "42WmSpB8rSM=" zone = "{{{project_0.default_zone}}}" boot_disk { auto_delete = true device_name = "persistent-disk-0" source = "https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-42390cc9da8a4c4b/zones/{{{project_0.default_zone}}}/disks/terraform" ....

이 리소스를 생성함으로써 리소스에 대한 많은 정보를 수집했음을 알 수 있습니다. 이러한 값은 추가 리소스나 출력을 구성하는 데 참조할 수 있습니다.

수고하셨습니다. Terraform을 활용해 첫 번째 인프라를 빌드하셨습니다. 구성 문법과 기본적인 실행 계획의 예시를 확인하고 상태 파일에 대해 알아보았습니다.

작업 3. 배운 내용 테스트하기

다음은 이 실습에서 배운 내용을 복습하기 위한 객관식 문제입니다. 최선을 다해 풀어보세요.

수고하셨습니다

이 실습을 완료하셨습니다. 지금까지 Terraform을 사용하여 Google Cloud에서 인프라를 생성하고 관리하는 방법을 알아보았습니다.

퀘스트 완료하기

이 사용자 주도형 실습은 Managing Cloud Infrastructure with TerraformAutomating Infrastructure on Google Cloud with Terraform 퀘스트에 포함되어 제공됩니다. 퀘스트는 연관성이 있는 여러 실습을 하나의 학습 과정으로 구성한 것입니다. 퀘스트를 완료하면 배지를 얻고 수료를 인증할 수 있습니다. 배지를 공개하고 온라인 이력서 또는 소셜 미디어 계정에 연결할 수 있습니다. 이 실습을 포함한 퀘스트에 등록하여 즉시 수료 크레딧을 받으세요. Google Cloud Skills Boost 카탈로그에서 참여할 수 있는 모든 퀘스트를 확인하세요.

다음 실습 참여하기

계속해서 Infrastructure as Code with Terraform 퀘스트를 수행하세요. 다음과 같은 Google Cloud Skills 실습도 살펴볼 수 있습니다.

다음 단계/더 학습하기

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2024년 1월 26일

실습 최종 테스트: 2023년 8월 10일

Copyright 2024 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.