목표
테라폼 클라우드 환경설정하기
기본 네트워크 만들기
테라폼 블럭,프로바이더 이해하기
테라폼 init,plan,apply 이해하기
리소스 추가 이해하기
리소스 변경 이해하기
리소스 교체 이해하기
리소스 삭제 이해하기
리소스 종속성 이해하기
프로비저너로 파일 업로드,쉘 스크립트 실행, 소프트웨어 설치하기
1
구글클라우드 로그인
2
오른쪽위 Cloud Shell 실행
Cloud Shell에서 작업한다.
3
gcloud auth list
인증
4
gcloud config list project
프로젝트 ID 확인
프로젝트 ID를 복사해 놓는다.
1
vi main.tf
terraform {
required_providers {
google = {
source = "hashicorp/google"
}
}
}
provider "google" {
version = "3.5.0"
project = "<PROJECT_ID>"
region = "us-central1"
zone = "us-central1-c"
}
resource "google_compute_network" "vpc_network" {
name = "terraform-network"
}
// <PROJECT_ID> 에 위에서 확인한 PROJECT_ID를 입력한다.
2
terraform init
// 테라폼 구성을 초기화 .
// 테라폼을 이용해 리소스를 만들수 있도록 라이블러리 등을 받아온다.
3
terraform plan
테라폼 코드와 실제 리소스간 비교하여 변경되는 부분을 보여준다.
실제 생성되지는 않는다.
4
terraform apply
실제 리소스를 생성 또는 삭제시킨다.
5
콘솔에서 만들어진 리소스를 확인한다.
vpc 가서 확인하자.
1
vm.tf 를만들어 가상서버를 추가해보자.
vi vm.tf
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance"
machine_type = "e2-micro"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = google_compute_network.vpc_network.name
access_config {
}
}
}
terraform plan
terraform apply
콘솔에서 생성 확인
1
tags 추가하기
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance"
machine_type = "e2-micro"
tags = ["web", "dev"]
# ...
}
2
terraform plan
terraform apply
1
가상서버의 부팅 디스크를 변경해보자.
서버를 제거하고 다시 만들어진다.
boot_disk {
initialize_params {
image = "cos-cloud/cos-stable"
}
}
2
terraform plan
terraform apply
3
리소스 모두 삭제하기
terraform destroy
1
terraform apply
다시 네트워크와 서버 만들기
2
static ip 할당 하기
resource "google_compute_address" "vm_static_ip" {
name = "terraform-static-ip"
}
3
terraform plan
4
네트워크 인터페이스 업데이트하기
vi vm.tf 에 아래 내용 추가.
network_interface {
network = google_compute_network.vpc_network.self_link
access_config {
nat_ip = google_compute_address.vm_static_ip.address
}
}
5
terraform plan -out static_ip
6
terraform apply "static_ip"
# New resource for the storage bucket our application will use.
resource "google_storage_bucket" "example_bucket" {
name = "<UNIQUE-BUCKET-NAME>"
location = "US"
website {
main_page_suffix = "index.html"
not_found_page = "404.html"
}
}
# Create a new instance that uses the bucket
resource "google_compute_instance" "another_instance" {
# Tells Terraform that this VM instance must be created only after the
# storage bucket has been created.
depends_on = [google_storage_bucket.example_bucket]
name = "terraform-instance-2"
machine_type = "e2-micro"
boot_disk {
initialize_params {
image = "cos-cloud/cos-stable"
}
}
network_interface {
network = google_compute_network.vpc_network.self_link
access_config {
}
}
}
terraform plan
terraform apply
1
vm
resource "google_compute_instance" "vm_instance" {
name = "terraform-instance"
machine_type = "e2-micro"
tags = ["web", "dev"]
provisioner "local-exec" {
command = "echo ${google_compute_instance.vm_instance.name}: ${google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip} >> ip_address.txt"
}
# ...
}
// provisioner내에 블록이 추가됩니다
resource. 여러 프로비저닝 단계를 정의하기 위해 여러 provisioner블록을 추가할 수 있습니다
2
terraform apply
3
terraform taint google_compute_instance.vm_instance
taint = 인스턴스를 다시 생성하도록 Terraform에 알리는 데 사용합니다
4
terraform apply
5
Verify everything worked by looking at the contents of the ip_address.txt file.
It contains the IP address, just as you asked.
다음 자료
https://brunch.co.kr/@topasvga/3388
https://brunch.co.kr/@topasvga/2419
감사합니다.