로드 중...
검색 결과가 없습니다.

Google Cloud 콘솔에서 기술 적용

Google Cloud Fundamentals for AWS Professionals

700개 이상의 실습 및 과정 이용하기

Terraform을 사용하여 인프라 배포 자동화

실습 1시간 universal_currency_alt 크레딧 5개 show_chart 입문
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
700개 이상의 실습 및 과정 이용하기

개요

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

이 실습에서는 Google Cloud 인프라 배포를 자동화하는 모듈로 Terraform 구성을 만듭니다. 다음 다이어그램과 같이 하나의 방화벽 규칙과 2개의 VM 인스턴스를 가진 자동 모드 네트워크 1개를 배포합니다.

목표

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

  • 자동 모드 네트워크 구성
  • 방화벽 규칙 구성
  • VM 인스턴스 모듈 생성
  • 구성 만들기 및 배포
  • 구성 배포 확인

설정

각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.

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

    • Google Cloud 콘솔 열기 버튼
    • 남은 시간
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보
    • 필요한 경우 실습 진행을 위한 기타 정보
  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

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

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

    {{{user_0.username | "Username"}}}

    실습 세부정보 패널에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 세부정보 패널에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

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

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

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

참고: Google Cloud 제품 및 서비스 목록이 있는 메뉴를 보려면 왼쪽 상단의 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다.

작업 1. Terraform 및 Cloud Shell 설정

이 작업에서는 Terraform을 사용하도록 Cloud Shell 환경을 구성합니다.

Terraform 설치

이제 Terraform이 Cloud Shell에 통합되었습니다. 설치된 버전을 확인합니다.

  1. Googlel Cloud 콘솔에서 Cloud Shell 활성화()를 클릭합니다.
  2. 메시지가 표시되면 계속을 클릭합니다.
  3. Terraform이 설치되었는지 확인하려면 다음 명령어를 실행합니다.
terraform --version

출력은 다음과 같습니다.

Terraform v1.5.7

참고: Terraform 버전이 최신 버전이 아니라는 경고가 표시되더라도 걱정하지 마세요. 이 실습 안내는 Terraform v1.5.7 이상의 버전에서 작동됩니다. Terraform 웹사이트에서 최신 버전의 Terraform을 다운로드할 수 있습니다. Terraform은 지원되는 모든 플랫폼 및 아키텍처에서 바이너리 패키지로 배포되며 Cloud Shell은 Linux 64비트를 사용합니다.

  1. Terraform 구성의 디렉터리를 만들려면 다음 명령어를 실행하세요.
mkdir tfinfra
  1. Cloud Shell에서 편집기 열기()를 클릭합니다.

참고: '서드 파티 쿠키가 차단되어 코드 편집기를 로드할 수 없습니다'라는 메시지가 표시되면 새 창에서 열기를 클릭합니다. 코드 편집기가 새 탭에서 열립니다. 원래 탭으로 돌아가서 터미널 열기를 클릭한 다음 코드 편집기 탭으로 다시 전환합니다. 이 실습에서는 주기적으로 Cloud Shell 터미널로 전환해야 합니다.

  1. 코드 편집기의 왼쪽 창에서 tfinfra 폴더를 펼칩니다.

Terraform 초기화

Terraform은 플러그인 기반 아키텍처를 사용하여 이용 가능한 수많은 인프라와 서비스 제공업체를 지원합니다. 각 '제공업체'는 Terraform 자체와 별도로 배포되는 자체 캡슐화된 바이너리입니다. Google을 제공업체로 설정하여 Terraform을 초기화합니다.

  1. tfinfra 폴더 안에 새 파일을 만들려면 tfinfra 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 새 파일을 클릭합니다.
  2. 새 파일의 이름을 provider.tf로 지정하고 엽니다.
  3. 코드를 provider.tf에 복사합니다.
provider "google" {}
  1. provider.tf를 저장하려면 파일 > 저장을 클릭합니다.

  2. Terraform을 초기화하려면 다음 명령어를 실행합니다.

cd tfinfra terraform init

이제 Cloud Shell에서 Terraform으로 작업할 준비가 되었습니다.

작업 2. mynetwork 및 리소스 생성

이 작업에서는 방화벽 규칙 및 VM 인스턴스 2개(mynet_vm_1mynet_vm_2)와 함께 자동 모드 네트워크인 mynetwork를 만듭니다.

mynetwork 구성

새 구성을 만들고 mynetwork를 정의합니다.

  1. tfinfra 안에 새 파일을 만들려면 tfinfra 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 새 파일을 클릭합니다.
  2. 새 파일의 이름을 mynetwork.tf로 지정하고 엽니다.
  3. 다음 기본 코드를 mynetwork.tf에 복사합니다.
# Create the mynetwork network resource [RESOURCE_TYPE] "mynetwork" { name = [RESOURCE_NAME] # RESOURCE properties go here }

어떤 Google Cloud 리소스든 이 기본 템플릿으로 시작하면 좋습니다. name 필드에는 리소스의 이름을 지정하고 type 필드에는 생성할 Google Cloud 리소스를 지정할 수 있습니다. 속성도 정의할 수 있으나 일부 리소스의 경우에는 선택사항입니다.

  1. mynetwork.tf에서 [RESOURCE_TYPE]"google_compute_network"(따옴표 포함)로 변경합니다.

참고: google_compute_network 리소스는 VPC 네트워크입니다. 사용할 수 있는 리소스는 Google Cloud 제공업체 문서에서 확인할 수 있습니다. Terraform 문서에서 이 특정 리소스에 대해 자세히 알아보세요.

  1. mynetwork.tf에서 [RESOURCE_NAME]"mynetwork"(따옴표 포함)로 변경합니다.
  2. mynetwork.tf에 다음 속성을 추가합니다.
auto_create_subnetworks = "true"

자동 모드 네트워크는 말 그대로 자동으로 각 리전에 서브네트워크를 만듭니다. 따라서 auto_create_subnetworkstrue로 설정합니다.

  1. mynetwork.tf 파일이 다음과 같은 형태인지 확인합니다.
# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" }
  1. mynetwork.tf를 저장하려면 파일 > 저장을 클릭합니다.

방화벽 규칙 구성

mynetwork에서 HTTP, SSH, RDP, ICMP 트래픽을 허용하는 방화벽 규칙을 정의합니다.

  1. mynetwork.tf에 다음 기본 코드를 추가합니다.
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" { name = [RESOURCE_NAME] # RESOURCE properties go here }
  1. mynetwork.tf에서 [RESOURCE_TYPE]"google_compute_firewall"(따옴표 포함)로 변경합니다.

참고: google_compute_firewall 리소스는 방화벽 규칙입니다. Terraform 문서에서 이 특정 리소스에 대해 자세히 알아보세요.

  1. mynetwork.tf에서 [RESOURCE_NAME]"mynetwork-allow-http-ssh-rdp-icmp"(따옴표 포함)로 변경합니다.
  2. mynetwork.tf에 다음 속성을 추가합니다.
network = google_compute_network.mynetwork.self_link

참고: 이 방화벽 규칙은 네트워크에 종속되므로 google_compute_network.mynetwork.self_link 참조를 사용하여 Terraform이 이러한 리소스를 종속된 순서로 해결하도록 지시합니다. 여기에서는 네트워크가 방화벽 규칙보다 먼저 생성됩니다.

  1. mynetwork.tf에 다음 속성을 추가합니다.
allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"]

허용 규칙 목록은 허용되는 프로토콜과 포트를 지정합니다.

  1. mynetwork.tf 파일이 다음과 같은지 확인합니다.
# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" } # Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # RESOURCE properties go here network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] }
  1. mynetwork.tf를 저장하려면 파일 > 저장을 클릭합니다.

VM 인스턴스 구성

VM 인스턴스 모듈을 만들어 VM 인스턴스를 정의합니다. 모듈은 폴더 내에서 재사용 가능한 구성입니다. 이 모듈을 이 실습의 두 VM 인스턴스 모두에 사용합니다.

  1. tfinfra 안에 새 폴더를 만들려면 tfinfra 폴더를 선택한 다음 파일 > 새 폴더를 클릭합니다.
  2. 새 폴더의 이름을 instance로 지정합니다.
  3. instance 안에 새 파일을 만들려면 instance 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 새 파일을 클릭합니다.
  4. 새 파일의 이름을 main.tf로 지정하고 엽니다.

Cloud Shell에 다음과 같은 폴더 구조가 만들어졌을 것입니다.

  1. 다음 기본 코드를 main.tf에 복사합니다.
resource [RESOURCE_TYPE] "vm_instance" { name = [RESOURCE_NAME] # RESOURCE properties go here }
  1. main.tf에서 [RESOURCE_TYPE]"google_compute_instance"(따옴표 포함)로 변경합니다.

참고: google_compute_instance 리소스는 Compute Engine 인스턴스입니다. Terraform 문서에서 이 특정 리소스에 대해 자세히 알아보세요.

  1. main.tf에서 [RESOURCE_NAME]"${var.instance_name}"(따옴표 포함)으로 변경합니다.

두 VM 인스턴스 모두에 이 모듈을 사용할 것이므로 인스턴스 이름을 입력 변수로 정의합니다. 그러면 mynetwork.tf에서 변수 이름을 제어할 수 있습니다. Terraform: 입력 변수 정의하기 가이드에서 입력 변수에 대해 자세히 알아보세요.

  1. main.tf에 다음 속성을 추가합니다.
zone = "${var.instance_zone}" machine_type = "${var.instance_type}"

이러한 속성은 인스턴스의 영역 및 머신 유형을 입력 변수로 정의합니다.

  1. main.tf에 다음 속성을 추가합니다.
boot_disk { initialize_params { image = "debian-cloud/debian-11" } }

이 속성은 부팅 디스크가 Debian 11 OS 이미지를 사용하도록 정의합니다. 두 VM 인스턴스 모두 동일한 이미지를 사용하므로 모듈에 이 속성을 하드 코딩할 수 있습니다.

  1. main.tf에 다음 속성을 추가합니다.
network_interface { network = "${var.instance_network}" access_config { # Allocate a one-to-one NAT IP to the instance } }

이 속성은 네트워크 이름을 입력 변수로 제공하고 액세스 구성을 지정하여 네트워크 인터페이스를 정의합니다. 액세스 구성을 비워 두면 임시 외부 IP 주소(이 실습에 필요함)가 생성됩니다. 내부 IP 주소만으로 인스턴스를 만들려면 access_config 섹션을 삭제하세요. 자세한 내용은 Terraform 문서를 참고하세요.

  1. main.tf가 괄호({})를 포함하여 다음과 같은지 확인합니다.
resource "google_compute_instance" "vm_instance" { name = "${var.instance_name}" zone = "${var.instance_zone}" machine_type = "${var.instance_type}" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = "${var.instance_network}" access_config { # Allocate a one-to-one NAT IP to the instance } } }
  1. main.tf를 저장하려면 파일 > 저장을 클릭합니다.
  2. instance 안에 새 파일을 만들려면 instance 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 새 파일을 클릭합니다.
  3. 새 파일의 이름을 variables.tf로 지정하고 엽니다.
  4. variables.tf에 입력 변수 4개를 정의합니다.
variable "instance_name" {} variable "instance_zone" {} variable "instance_type" { default = "e2-micro" } variable "instance_network" {}

instance_type에 기본값을 지정하여 변수를 선택사항으로 만듭니다. instance_name, instance_zone, instance_network는 필수이며 mynetwork.tf에서 정의합니다.

  1. variables.tf를 저장하려면 파일 > 저장을 클릭합니다.
  2. mynetwork.tf에 다음 VM 인스턴스를 추가합니다.
# Create the mynet-vm-1 instance module "mynet-vm-1" { source = "./instance" instance_name = "mynet-vm-1" instance_zone = "{{{project_0.default_zone|Zone}}}" instance_network = google_compute_network.mynetwork.self_link } # Create the mynet-vm-2" instance module "mynet-vm-2" { source = "./instance" instance_name = "mynet-vm-2" instance_zone = "{{{project_0.default_zone_2|Zone 2}}}" instance_network = google_compute_network.mynetwork.self_link }

이러한 리소스는 instance 폴더의 모듈을 활용하고 이름, 영역, 네트워크를 입력으로 제공합니다. 이러한 인스턴스는 VPC 네트워크에 종속되므로 google_compute_network.mynetwork.self_link 참조를 사용하여 Terraform이 이러한 리소스를 종속된 순서로 해결하도록 지시합니다. 여기에서는 네트워크가 인스턴스보다 먼저 생성됩니다.

참고: Terraform 모듈을 작성하면 여러 구성에서 재사용할 수 있다는 이점이 있습니다. 직접 모듈을 작성하는 대신 Terraform 모듈 레지스트리에 있는 기존 모듈을 활용할 수도 있습니다.

  1. mynetwork.tf를 저장하려면 파일 > 저장을 클릭합니다.

  2. mynetwork.tf가 괄호({})를 포함하여 다음과 같은지 확인합니다.

# Create the mynetwork network resource "google_compute_network" "mynetwork" { name = "mynetwork" # RESOURCE properties go here auto_create_subnetworks = "true" } # Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" { name = "mynetwork-allow-http-ssh-rdp-icmp" # RESOURCE properties go here network = google_compute_network.mynetwork.self_link allow { protocol = "tcp" ports = ["22", "80", "3389"] } allow { protocol = "icmp" } source_ranges = ["0.0.0.0/0"] } # Create the mynet-vm-1 instance module "mynet-vm-1" { source = "./instance" instance_name = "mynet-vm-1" instance_zone = "{{{project_0.default_zone|Zone}}}" instance_network = google_compute_network.mynetwork.self_link } # Create the mynet-vm-2" instance module "mynet-vm-2" { source = "./instance" instance_name = "mynet-vm-2" instance_zone = "{{{project_0.default_zone_2|Zone 2}}}" instance_network = google_compute_network.mynetwork.self_link }

mynetwork 및 리소스 생성

이제 mynetwork 구성을 적용할 차례입니다.

  1. Terraform 구성 파일을 표준 형식 및 스타일로 재작성하려면 다음 명령어를 실행합니다.
terraform fmt

출력은 다음과 같습니다.

mynetwork.tf

참고: 오류가 발생하면 이전 단계를 다시 살펴보고 구성이 실습 안내와 일치하는지 확인하세요. 구성 관련 문제를 해결할 수 없으면 다음의 완성된 구성을 다운로드한 다음 참고하세요.

  1. Terraform을 초기화하려면 다음 명령어를 실행합니다.
terraform init

출력은 다음과 같습니다.

Initializing modules... - mynet-vm-2 in instance - mynet-vm-2 in instance ... Terraform has been successfully initialized!

참고: 오류가 발생하면 이전 단계를 다시 실행하여 폴더/파일 구조가 정확한지 확인하세요. 구성 관련 문제를 해결할 수 없으면 위 링크의 완성된 구성을 참고하세요. 문제를 해결했으면 이전 명령어를 다시 실행합니다.

  1. 실행 계획을 만들려면 다음 명령어를 실행합니다.
terraform plan

출력은 다음과 같습니다.

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

Terraform은 다음 리소스 4개를 추가해야 한다고 판단했습니다.

이름 설명
mynetwork VPC 네트워크
mynetwork-allow-http-ssh-rdp-icmp HTTP, SSH, RDP, ICMP를 허용하는 방화벽 규칙
mynet-vm-2 의 VM 인스턴스
mynet-vm-2 의 VM 인스턴스
  1. 다음 명령어를 실행하여 원하는 변경사항을 적용합니다.
terraform apply
  1. 계획된 작업을 확인하려면 다음을 입력합니다.
yes

출력은 다음과 같습니다.

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

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. mynetwork 및 리소스 생성

참고: 실행 중에 오류가 발생하면 이전 단계를 다시 실행하여 폴더/파일 구조가 정확한지 확인하세요. 구성 관련 문제를 해결할 수 없으면 위 링크의 완성된 구성을 참고하세요. 문제를 해결했으면 이전 명령어를 다시 실행합니다.

작업 3. 배포 확인

Google Cloud 콘솔에서 리소스가 생성되었는지 확인합니다.

Cloud 콘솔에서 네트워크 확인

  1. Google Cloud 콘솔의 탐색 메뉴()에서 VPC 네트워크 > VPC 네트워크를 클릭합니다.
  2. mynetwork VPC 네트워크와 모든 리전의 서브네트워크를 확인합니다.
  3. 탐색 메뉴에서 VPC 네트워크 > 방화벽을 클릭합니다.
  4. 네트워크를 기준으로 방화벽 규칙을 정렬합니다.
  5. mynetwork에 대한 mynetwork-allow-http-ssh-rdp-icmp 방화벽 규칙을 확인합니다.

Cloud Console에서 VM 인스턴스 확인

  1. 탐색 메뉴()에서 Compute Engine > VM 인스턴스를 클릭합니다.
  2. mynet-vm-1mynet-vm-2 인스턴스를 확인합니다.
  3. mynet-vm-2의 내부 IP 주소를 확인합니다.
  4. mynet-vm-1에서 SSH를 클릭하여 터미널 및 연결을 실행합니다.
  5. mynet-vm-2의 내부 IP 주소에 대한 연결을 테스트하려면 SSH 터미널에서 mynet-vm-2의 내부 IP 주소를 앞서 언급한 값으로 변경하여 다음 명령어를 실행합니다.
ping -c 3 <Enter mynet-vm-2's internal IP here> 참고: 두 VM 인스턴스가 동일한 네트워크에 있고 방화벽 규칙이 ICMP 트래픽을 허용하므로 잘 작동합니다.

작업 4. 검토

이 실습에서는 Google Cloud 인프라 배포를 자동화하는 모듈로 Terraform 구성을 만들었습니다. Terraform은 구성 변화에 맞춰 실행 계획을 만들어 가기 때문에 전체 구성을 단계별로 구축할 수 있습니다.

인스턴스 모듈을 사용하여 속성을 입력 변수로 제공하면서 동일한 리소스 구성을 여러 리소스에 재사용할 수 있었습니다. 만든 구성 및 모듈을 시작점으로 삼아 향후 배포에 활용할 수 있습니다.

실습 종료하기

실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.

실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.

별점의 의미는 다음과 같습니다.

  • 별표 1개 = 매우 불만족
  • 별표 2개 = 불만족
  • 별표 3개 = 중간
  • 별표 4개 = 만족
  • 별표 5개 = 매우 만족

의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.

의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.

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

이전 다음

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
미리보기