주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
프라이빗 DNS 영역, 뷰 및 분석기를 구성하여 Terraform을 통해 OCI Architect Professional 인증 가속화
소개
Oracle Cloud Infrastructure(OCI) Architect Professional 인증을 획득하려면 Oracle Cloud 및 실습 경험을 깊이 이해해야 합니다. 이 자습서 시리즈는 Terraform 및 Ansible과 함께 코드형 인프라(IaC)를 활용하여 여정을 가속화합니다.
그림 1은 OCI Architect Professional Certification Lab 2: Oracle Cloud Infrastructure Architect Professional(Oracle University Lab - 6h 14m)용으로 배포할 아키텍처를 보여줍니다.
그림 1: 전용 DNS 도메인 이름을 만들 로컬 피어링 게이트웨이(LPG) 끝점
프라이빗 DNS의 주요 이점
프라이빗 DNS는 OCI 리소스 관리 및 보안에 여러 가지 이점을 제공합니다. 다음을 포함하지만 이에 국한되지는 않습니다.
- 조직: 직관적이고 체계적인 환경을 위해 선호 도메인 이름을 사용합니다.
- 보안: 특정 도메인에 대한 액세스를 필터링하고 차단하여 중요한 리소스를 보호합니다.
- 로드 밸런싱: 여러 서버에 트래픽을 분산하여 성능과 안정성을 향상시킵니다.
- 하이브리드 환경 및 연결성: 온프레미스 네트워크와 OCI 리소스 간뿐만 아니라 VCN 내부 및 여러 클라우드에서 원활한 통신을 지원합니다.
OCI의 프라이빗 DNS를 활용하여 커스터마이징 도메인을 관리하고 네트워크 전반에서 리소스를 연결하는 방법에 대해 자세히 알아봅니다. 프라이빗 영역을 생성하고, 레코드를 정의하고, 내부용으로 분석기를 구성하여 OCI 내에서 리소스 액세스를 세부적으로 제어하는 방법을 배웁니다.
7가지 작업에서 반자동화된 접근 방식
사용지침서에서는 프라이빗 DNS 확인을 통해 OCI에서 확장 가능한 다중 VCN 환경을 자동화하는 방법을 안내합니다. OCI 콘솔, Terraform 및 Ansible을 사용하여 2개의 VCN을 생성하고, VCN 분석기를 설정하기 전후에 LPG(로컬 피어링 게이트웨이)를 설정하고, VM(가상 머신) 인스턴스를 실행하고, 사용자정의 프라이빗 DNS 영역을 구성하고, VCN 분석기를 설정하기 전후에 DNS 분석을 철저히 테스트할 수 있습니다. 결국 전체 네트워크에서 전용 DNS 기능을 갖춘 완전한 기능을 갖춘 다중 VCN 환경을 사용할 수 있게 됩니다.
목표
자습서 1: Lab 1: Accelerate Oracle Cloud Infrastructure Architect Professional Certification with Terraform을 통해 OCI Architect Professional Certification(2024) 준비를 가속화하는 시리즈의 두 번째 자습서입니다. Terraform 및 Ansible과 함께 IaC 원칙을 활용하여 시험과 관련된 핵심 DNS 개념을 중점적으로 다룹니다. 인증 실습 랩: Lab 2: Oracle Cloud Infrastructure Architect Professional(Oracle University Lab - 6h 14m)은 종합적이지만 실습 2는 수작업으로 완료하는 데 30분 이상 소요되는 시간이 소요됩니다. VCN, 퍼블릭 및 프라이빗 서브넷, LPG, VM 생성과 같은 일상적인 작업을 자동화하면 자습서 1: Accelerate Oracle Cloud Infrastructure Architect Professional Certification with Terraform에 설명된 대로 완료 시간이 80% 이상 단축되므로 핵심 OCI DNS 개념 마스터링에 집중할 수 있습니다.
필요 조건
-
IaC 원칙, Terraform, Ansible 및 Oracle Cloud Infrastructure OCI Command Line Interface(OCI CLI)에 대한 기본적인 이해
-
OCI 인프라 프로비저닝을 위한 Terraform 모듈 사용에 대한 이해. 자세한 내용은 모듈을 사용하여 구성 재사용을 참조하십시오.
-
OCI Cloud Shell, Oracle Resource Manager(ORM) 또는 IDE(예: Visual Studio)를 사용합니다.
-
마지막 실습인 OCI Architect Professional 인증을 완료하고 ORM을 사용하여 VCN Terraform 구성을 생성하는 방법을 알아봅니다.
작업 1: 두 개의 가상 클라우드 네트워크 생성
수동 옵션:
OCI 콘솔을 사용하여 VCN을 수동으로 생성할 수 있습니다. 이 수동 생성을 나타내려면 is_vcn1_created
및 is_vcn2_created
플래그를 false
로 초기화해야 합니다.
VCN, 인터넷 게이트웨이, 라우팅 테이블, 보안 목록, 공용 및 전용 서브넷과 같은 핵심 네트워킹 리소스를 생성하려면 가상 네트워킹 빠른 시작을 참조하십시오.
그림 2: VCN-01/VCN-02 OCID 및 VCN-01 공용 서브넷 OCID를 수집하기 위한 콘솔 뷰
OCI 콘솔로 이동하여 네트워킹, 가상 클라우드 네트워크로 이동하고 VCN-01의 세부정보를 확인하고 해당 퍼블릭 서브넷의 OCID 및 OCID를 기록합니다. VCN-02에 대해서도 동일한 작업을 수행하고, OCID를 기록하고, 수집된 OCID를 Terraform 구성 파일(input.auto.tfvars
또는 variables.tf
)에 추가합니다.
# Create VCN-01 and VCN-02 with OCI VCN Wizard (set is_vcn1_created and is_vcn2_created to false)
is_vcn1_created = false
is_vcn2_created = false
# Update VCN-01 OCID and its Public Subnet OCID, as well as VCN-02 OCID
vcn1_id = "REPLACE_CREATED_VCN1_OCID_HERE"
public_subnet1_id = "REPLACE_CREATED_PUBLIC_SUBNET1_OCID_HERE"
vcn2_id = "REPLACE_CREATED_VCN2_OCID_HERE"
자동 옵션:
또한 VCN(VCN-01
및 VCN-02
)을 생성하기 위한 두 가지 자동화 옵션인 루트 모듈 접근 방식과 하위 모듈 접근 방식을 제공합니다. 첫 번째는 개발 및 테스트 또는 일회성 VCN 배포에 더 간단하고 적합합니다. 두 번째는 더 크고 복잡한 배포를 위해 더 나은 조직 및 확장성을 제공하고 코드 재사용성과 유지 관리 용이성을 촉진하여 운영 환경에 이상적입니다.
Terraform에 VCN을 생성하도록 지시하려면 먼저 input.auto.tfvars
에서 is_vcn1_created
및 is_vcn2_created
플래그를 모두 true
로 설정하거나 variables.tf
에서 기본값으로 설정해야 합니다. 그런 다음 VCN CIDR 블록(vcn?_cidr_block
), 공용 서브넷 CIDR 블록(public_subnet?_cidr_block
), 전용 서브넷 CIDR 블록(private_subnet?_cidr_block
) 및 호스트 이름 접두어(host_name?_prefix
)를 지정합니다. 변수 이름은 물음표(?
)를 위치 표시자로 사용하여 추상화됩니다. ?
를 1 또는 2로 바꾸면 VCN-01 및 VCN-02에 대해 각각 별도의 구성을 정의합니다.
또한 oci_regions
(영역 식별자를 키에 매핑), network_deployment_option
(TF-ROOT-MODULE
또는 TF-CHILD-MODULE
) 및 dipslay_name_prefix
(예: AP-Lab-02-1
) 변수에 대한 값을 정의해야 합니다. 최종 VCN 표시 이름에는 포괄적인 이름(예: PHX-AP-LAB02-1-TF-ROOT-MODULE-VCN-01
)을 생성하는 network_deployment_option
값이 포함됩니다.
-
접근 방식 1: Terraform 루트 모듈
이 접근 방식을 위해 Terraform 구성을 간소화했습니다. 자습서 1: Accelerate Oracle Cloud Infrastructure Architect Professional Certification with Terraform의
network.tf
파일을 루트 모듈 내의lab02-demo-flat/
하위 디렉토리로 복제했습니다. 이 디렉토리는 VCN-01 및 VCN-02 생성을 자동화하기 위해network1.tf
및network2.tf
라는 두 개의 별도 파일을 사용합니다.# Network Deployment Methods (Root Module) network_deployment_option = "TF-ROOT-MODULE" # For testing and PoC only # Turn flags on to instruct Terraform to create VCN-02 and VCN-02 is_vcn1_created = true is_vcn2_created = true # Networking parameters: CIDR Blocks and Host Name prefix vcn1_cidr_block = "10.0.0.0/16" vcn2_cidr_block = "172.0.0.0/16" public_subnet1_cidr_block = "10.0.0.0/24" public_subnet2_cidr_block = "172.0.0.0/24" private_subnet1_cidr_block = "10.0.1.0/24" private_subnet2_cidr_block = "172.0.1.0/24" host_name_prefix = "<RegionKey>apl2" # Same prefix VCN-01/02
-
접근 방식 2: Terraform 하위 모듈
또한 루트 모듈의
network.tf
파일을 IaC 모범 사례를 준수하는 하위 모듈로 변환하는lab02-demo-module/
디렉토리의 사전 구축된 Terraform 모듈을 사용할 수 있습니다. 또는 Oracle Cloud Infrastructure Provider, OCI GitHub(terraform-provider-OCI)와 같은 공용 저장소에서 사전 구축된 Terraform 모듈을 사용하거나 OCI Live Labs에서 제공하는 모듈과 같은 내부 Oracle 모듈을 사용할 수도 있습니다.하위 모듈 접근 방식의 사용을 반영하도록
network_deployment_option
값을 설정합니다.network_deployment_option = "TF-CHILD-MODULE" # IaC Best Practice for Production.
# Module Call to Create VCN-01 module "vcn-01" { source = "./modules/network" region = var.region compartment_id = var.compartment_id display_name_prefix = "${var.display_name_prefix}-${var.network_deployment_option}-VCN-01" network_deployment_type = var.network_deployment_option vcn_cidr_block = var.vcn1_cidr_block public_subnet_cidr_block = var.public_subnet1_cidr_block private_subnet_cidr_block = var.private_subnet1_cidr_block host_name_prefix = "${try(var.regions_keys_map[var.region], "OCI")}${var.host_name_prefix}1" } # Module Call to Create VCN-02 module "vcn-02" { source = "./modules/network" region = var.region compartment_id = var.compartment_id display_name_prefix = "${var.display_name_prefix}-${var.network_deployment_option}-VCN-02" network_deployment_type = var.network_deployment_option vcn_cidr_block = var.vcn2_cidr_block public_subnet_cidr_block = var.public_subnet2_cidr_block private_subnet_cidr_block = var.private_subnet2_cidr_block host_name_prefix = "${try(var.regions_keys_map[var.region], "OCI")}${var.host_name_prefix}2" }
작업 2: 두 개의 로컬 피어링 게이트웨이 생성
수동 옵션:
OCI에서 LPG를 수동으로 생성하려면 로컬 피어링 게이트웨이 생성을 참조하십시오. 이 경우 구성 파일(input.auto.tfvars
또는 variables.tf
)에서 is_lpg1_created
및 is_lpg2_created
플래그를 false
로 설정합니다.
자동 옵션:
Terraform을 사용하여 작업을 자동화하려면 이러한 플래그를 true
으로 설정합니다. 그러면 Terraform이 LPG-01 및 LPG-02를 만들도록 지시합니다.
# Create 2 Local Peering Gateways (LPG-01 and LPG-02) then peer them.
is_lpg1_created = true
is_lpg2_created = true
다음 Terraform 코드 조각은 LPG-01 및 LPG-02를 모두 생성하고 이들 간에 피어링 관계를 설정하여 VCN 간 프라이빗 접속을 가능하게 합니다.
# LPG-01 Creation
resource "oci_core_local_peering_gateway" "lpg-01" {
count = (var.is_vcn1_created && var.is_lpg1_created) ? 1 : 0
# Required
compartment_id = var.compartment_id
display_name = var.is_vcn1_created ? "${try(var.regions_keys_map[var.region], "OCI")}-${var.display_name_prefix}-${var.network_deployment_option}-LPG-01" : "${try(var.regions_keys_map[var.region], "OCI")}-${var.display_name_prefix}-LPG-01"
vcn_id = var.is_vcn1_created ? module.vcn-01.vcn_ocid : var.vcn1_id
}
# LPG-02 Creation
resource "oci_core_local_peering_gateway" "lpg-02" {
depends_on = [oci_core_local_peering_gateway.lpg_01]
count = (var.is_vcn2_created && var.is_lpg2_created) ? 1 : 0
# Required
compartment_id = var.compartment_id
display_name = var.is_vcn1_created ? "${try(var.regions_keys_map[var.region], "OCI")}-${var.display_name_prefix}-${var.network_deployment_option}-LPG-02" : "${try(var.regions_keys_map[var.region], "OCI")}-${var.display_name_prefix}-LPG-02"
vcn_id = var.is_vcn2_created ? module.vcn-02.vcn_ocid : var.vcn2_id
# Peering lpg-02 with lpg-01
peer_id = oci_core_local_peering_gateway.lpg_01[count.index].id
}
작업 3: 가상 시스템 인스턴스 실행
수동 옵션:
OCI 콘솔을 통해 수동으로 VM 인스턴스를 실행하려면 인스턴스 생성을 참조하십시오.
자동 옵션:
자습서 1: Accelerate Oracle Cloud Infrastructure Architect Professional Certification with Terraform의 단순화된 Terraform 코드 버전을 사용하여 VM 프로비저닝을 자동화합니다. 가상 머신 VM-01을 생성하도록 Terraform에 지시하려면 is_instance_created
플래그를 true
로 설정합니다. VM의 표시 이름에는 Terraform을 사용하여 VCN을 생성한 경우 network_deployment_option
설정(예: PHX-AP-LAB02-1-TF-ROOT-MODULE-VM-01
또는 PHX-AP-LAB02-1-TF-CHILD-MODULE-VM-01
)이 포함됩니다.
# Task 3: Launch a VM(VM-01) in the Public Subnet of VCN-01.
is_instance_created = true
다음 Terraform 코드는 VCN-01 퍼블릭 서브넷의 그림 1과 같이 VM-01 생성을 자동화합니다.
resource "oci_core_instance" "this" {
count = (var.is_instance_created) ? 1 : 0
availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0].name
compartment_id = var.compartment_id
create_vnic_details {
assign_private_dns_record = "true"
assign_public_ip = "true"
subnet_id = var.is_vcn1_created ? module.vcn-01.public_subnet_ocid : var.public_subnet1_id
}
display_name = var.is_vcn1_created ? "${try(var.regions_keys_map[var.region], "OCI")}-${var.display_name_prefix}-${var.network_deployment_option}-VM-0${count.index + 1}" : "${try(var.regions_keys_map[var.region], "OCI")}-${var.display_name_prefix}-VM-0${count.index + 1}"
instance_options {
are_legacy_imds_endpoints_disabled = "false"
}
metadata = {
"ssh_authorized_keys" = "${file(var.ssh_public_key)}"
}
shape = var.shape_name
shape_config {
memory_in_gbs = var.shape_memory_in_gbs
ocpus = var.shape_numberof_ocpus
}
source_details {
source_id = var.image_ids[var.region]
source_type = "image"
}
}
작업 4: VCN-01 및 VCN-02에 대한 사용자정의 프라이빗 영역 생성
OCI의 프라이빗 DNS 영역은 VCN 내에서만 액세스할 수 있는 내부 DNS 레코드를 저장합니다. DNS 개념을 이해하기 위해 먼저 두 개의 사용자정의 프라이빗 영역을 수동으로 생성하는 방법을 보여줍니다. 그림 3에서는 VCN-01(PHX-AP-LAB02-1-VCN-01
)에서 개인 DNS 영역 zone-a.local
를 만들고 여기에 record
를 추가하는 방법을 보여줍니다.
그림 3: 전용 DNS 영역을 만들어 VCN-01과 연결한 다음 영역에 새 레코드 추가
수동 옵션:
-
VCN-01(
zone-a.local
)에 대한 개인 DNS 영역을 만들고 구성합니다.-
OCI 콘솔로 이동하여 네트워킹, DNS 관리, 영역으로 이동하고 프라이빗 영역을 누릅니다.
-
영역 생성을 누르고 영역 이름(
zone-a.local
)을 입력한 다음 기존 DNS 프라이빗 뷰 선택,PHX-AP-LAB02-1-VCN-01
을 연관된 VCN으로 선택하고 생성을 누릅니다. -
영역이 생성된 후 자동으로 생성된 NS 및 SOA 레코드를 확인합니다.
-
레코드 관리를 누르고 레코드 추가를 선택합니다.
-
다음 정보를 입력하고 레코드 추가를 누릅니다.
- 이름:
server01
을 입력합니다. - 유형:
A - IPv4 Address
을 선택합니다. - TTL:
30 seconds
를 입력합니다(필요한 경우 필드 잠금을 해제). - 주소:
10.0.0.2
를 입력합니다.
- 이름:
-
변경 사항 게시 및 변경 사항 게시 확인을 누릅니다.
참고: 작업이 성공적으로 완료될 때까지 기다립니다(상태가 UPDATING에서 ACTIVE로 변경됨).
-
-
VCN-02(
zone-b.local
)에 대한 개인 DNS 영역을 만들고 구성합니다. 그림 3과 동일한 단계에 따라 VCN-02(PHX-AP-LAB02-1-VCN-02
)에 대한 개인 영역을 만듭니다.-
영역, 개인 영역으로 이동하고 영역 생성을 누릅니다.
-
이름을
zone-b.local
으로 입력하고 기존 DNS 프라이빗 뷰 선택을 선택하고 연관된 VCN으로PHX-AP-LAB02-1-VCN-02
을 선택한 다음 생성을 누릅니다. -
레코드 관리를 누르고 레코드 추가를 선택합니다.
-
다음 정보를 입력하고 레코드 추가를 누릅니다.
- 이름:
server01
을 입력합니다. - 유형:
A - IPv4 Address
을 선택합니다. - TTL:
60 seconds
를 입력합니다(필요한 경우 필드 잠금을 해제). - 주소:
172.16.0.123
를 입력합니다.
- 이름:
-
변경 사항 게시 및 변경 사항 게시 확인을 누릅니다.
참고: 수동 생성 단계를 건너뛰면
zone not found: 3 (NXDOMAIN)
과 같은 오류가 발생합니다.
-
자동 옵션:
이 자습서에서는 Ansible을 사용하는 고급 자동 접근 방식도 제공합니다. Ansible은 인프라 구성을 관리하는 오픈 소스 자동화 도구입니다.Ansible is an open-source automation tool that manage configurations for your infrastructure. 이 맥락에서 Ansible 플레이북은 개인 DNS 영역 만들기를 자동화하는 작업 모음입니다. 자세한 내용은 Ansible Playbook Keywords를 참조하십시오.
is_task4_automated
을 input.auto.tfvars
또는 variabes.tf
에서 true
로 설정하여 playbooks.sh
에서 Ansible playbook
실행을 트리거하고, 단일 실행에서 프라이빗 DNS 영역 생성과 레코드 추가를 모두 자동화합니다.
# Task 4: Create and Configure two DNS zones (zone-a and zone-b).
is_task4_automated = true
Terraform의 local-exec
프로비저닝을 사용하여 Ansible 플레이북을 실행하여 VCN-01의 zone-a.local
및 VCN-02의 zone-b.local
영역을 해당 records
와 함께 자동으로 생성할 수 있습니다. 자세한 내용은 Source Code: oci-ansible-collection을 참조하십시오.
# Create 2 Custom Private Zones and Associated Records in OCI
resource "null_resource" "ansible-create-zones-playbook" {
count = (var.is_task4_automated) ? 1 : 0
# Create inventory
provisioner "local-exec" {
command = "sh ~/terraform-ws/lab2-demos/playbooks.sh"
}
}
작업 5: 연관된 영역 A에 대한 인스턴스 테스트
수동 옵션:
VM 인스턴스에 수동으로 SSH를 사용하여 VM 인스턴스가 zone-a.local
와 연관되어 있는지 확인합니다.
-
공용 IP 주소를 사용하여 인스턴스에 SSH로 접속합니다.
ssh -i <private_ssh_key> <public_ip_address>
-
server01.zone-a.local
에 대한 DNS 레코드를 조회합니다.host server01.zone-a.local
예상 출력:
server01.zone-a.local has address 10.0.0.2
-
시스템에서 생성된 영역 항목을 확인합니다.
host -t NS zone-a.local
예상 출력:
zone-a.local has NS record vcn-dns.oraclevcn.com.
-
영역에 대한 권한 레코드를 확인합니다.
host -t SOA zone-a.local
예상 출력:
zone-a.local has SOA record ven-dns.oraclevcn.com. hostmaster.oracle.com. 2 3600 3600 3600 10
-
연관된 VCN 뷰를 기반으로 DNS 확인의 차이를 확인합니다.
host server01.zone-b.local
예상 출력:
server01.zone-b.local not found: 3 (NXDOMAIN)
출력은
zone-b.local
가 VCN의 뷰와 연관되지 않았음을 나타냅니다.
자동 옵션:
zone-a.local
와 VM-01
연관을 테스트하도록 Terraform에 지시하려면 is_test_instance_associated_zone_a
플래그를 true
로 설정합니다.
# Test Instance for Associated Zone (zone-a.local)
is_test_instance_associated_zone_a = true
다음 Terraform 코드는 remote-exec
프로비저닝을 사용하여 VM-01 영역 연관 테스트를 자동화합니다.
resource "null_resource" "dns_test_1" {
depends_on = [oci_core_instance.this[0]]
count = (var.is_test_instance_associated_zone_a) ? 1 : 0
connection {
agent = false
timeout = "30m"
host = oci_core_instance.this[0].public_ip
user = "opc"
private_key = file(var.ssh_private_key) # Avoid exposing SSH keys directly
}
provisioner "remote-exec" {
inline = [
"echo \"Begin Test 1 - Instance Associated Zone-A\"",
"echo \"1. Successful SSH to the instance using public ip address: ${oci_core_instance.this[0].public_ip}\"",
"echo \"2. Look up DNS records for server01.zone-a.local.\"",
"host server01.zone-a.local",
"echo \"3. Verify the system-generated zone entry.\"",
"host -t NS zone-a.local",
"echo \"4. Verify the authority record for the zone.\"",
"host -t SOA zone-a.local",
"echo \"5. Observe the difference in DNS resolution based on the associated VCN views.\"",
"host server01.zone-b.local",
"echo \"End Test 1 - Instance Associated Zone-A\"", ]
}
}
작업 6: VCN 분석기 구성 및 기타 프라이빗 뷰 추가
수동 옵션:
VCN 분석기를 수동으로 구성하려면 OCI 콘솔에서 VCN-01 세부정보 페이지로 이동하여 VCN 분석기 및 전용 뷰를 선택합니다.
드롭다운 메뉴에서 VCN-02를 선택하고 저장을 눌러 변경사항을 저장합니다. 프라이빗 분석기 세부정보 페이지 상태가 UPDATING에서 ACTIVE로 변경될 때까지 기다립니다.
자동 옵션:
VCN 분석기 구성을 자동화하기 위해 Terraform의 local-exec
프로비저닝을 활용하여 OCI CLI, Ansible 플레이북 또는 Terraform 모듈을 실행합니다.
Terraform에 알리기 위해 is_task6_automated
플래그를 true
로 설정합니다.
is_task6_automated = true
제공된 bash 스크립트 update_resolver.sh
는 VCN-01에 대한 개인 분석기를 업데이트하고 VCN-02를 DNS 개인 뷰로 연결하는 단계를 강조 표시합니다. 또한 OCI에 대한 하이브리드 Terraform DNS 구성 예는 terraform-OCI-hybrid-dns에서 확인할 수 있습니다.
# Task 6: Configure the VCN Resolver, adding the Other Private View
resource "null_resource" "run-get-resolver" {
count = (var.is_task6_automated) ? 1 : 0
# Create inventory
provisioner "local-exec" {
command = "sh ~/terraform-ws/lab2-demos/update_resolver.sh"
}
}
작업 7: 연관된 영역 B에 대한 인스턴스 테스트
수동 옵션:
VCN 분석기를 구성한 후 서버가 제대로 해결되는지 확인합니다.
-
공용 IP 주소를 사용하여 인스턴스에 SSH로 접속합니다.
ssh -i <private_ssh_key> <public_ip_address>
-
server01.zone-a.local
에 대한 DNS 레코드를 조회합니다.host server01.zone-b.local
예상 출력:
server01.zone-b.local has address 172.16.0.123
주: DNS 확인을 실패할 경우 변경사항이 적용되려면 몇 분 정도 기다리십시오. 필요한 경우 인스턴스를 재부팅합니다.
자동 옵션:
두번째 VCN(VCN-02)에서 VM-01과 두번째 영역(zone-b.local
)의 연관을 테스트하도록 Terraform에 지시하려면 is_test_instance_associated_zone_b
플래그를 true
로 설정합니다.
# Test Instance for Assoicated Zone B
is_test_instance_associated_zone_b = true
다음 코드는 Terraform의 remote-exec
프로비저닝을 사용하여 테스트를 자동화하고 VM 인스턴스가 zone-b.local
와 연관되어 있는지 확인합니다.
resource "null_resource" "dns_test_2" {
depends_on = [oci_core_instance.this[0]]
count = (var.is_test_instance_associated_zone_a) ? 1 : 0
connection {
agent = false
timeout = "30m"
host = oci_core_instance.this[0].public_ip
user = "opc"
private_key = file(var.ssh_private_key)
}
provisioner "remote-exec" {
inline = [
"echo \"Begin Test 2 - Instance Associated Zone-B\"",
"echo \"1. Successfull SSH into the instance using its public ip address: ${oci_core_instance.this[0].public_ip}\"",
"echo \"2. Look up DNS records for server01.zone-b.local.\"",
"host server01.zone-b.local",
"echo \"End Test 2 - Instance Associated Zone-B\"" ]
}
}
배치 옵션
다음 두 가지 배치 옵션을 살펴봅니다.
-
안내식 워크플로우가 포함된 사용자에게 친숙한 인터페이스를 제공하는 ORM(Oracle Resource Manager)입니다.
-
Terraform CLI(Community Edition)는 선언적 구성 파일을 통해 Lab 2 리소스를 유연하고 확장 가능한 방식으로 관리합니다.
To provision Lab 2 resources (VCN-01/VCN-02, LPG-01/LPG-02, and VM-01) and trigger the required tests, you need to provide default values for: image OCIDs map for each used region (image_ids
), compartment OCID (compartment_id
), display name prefix (display_name_prefix
), networking (is_vcn1_created
, is_vcn2_created
, is lpg1_created
, is_lpg2_created
, vcn_1_id
, vcn_2_id
, and public_subnet1_id
), compute instance (is_instance_created
, shape_name
), and testing flags for instance and zone associations (is_test_instance_associated_zone_a
and is_test_instance_associated_zone_b
).
옵션 1: ORM(Oracle Resource Manager) 사용
그림 4는 Lab 2 리소스 생성을 위한 ORM 스택 생성을 보여줍니다.
그림 4: Oracle Resource Manager - Lab2 스택 생성(VCN-01, VCN-02, LPG-01 및 LPG-02, VM-01)
Terraform은 그림 5와 같이 7단계로 인프라 프로비저닝을 자동화합니다. 소스 구성 분석, Terraform 템플릿 패키지 구축, 기본 변수 값 제공, ORM 스택 생성, 변경 계획, OCI의 리소스 프로비저닝에 이러한 변경 사항 적용, 리소스 삭제 등이 여기에 해당됩니다. Jenkins 또는 OCI DevOps와 같은 DevOps CI/CD 도구를 통합하면 전체 프로세스가 자동화되어 한 번의 클릭 솔루션 근처에서 편리하게 사용할 수 있습니다.
그림 5: Oracle Resource Manager 스택 워크플로우(생성, 계획, 적용 및 삭제)
옵션 2: Terraform CLI(명령행 인터페이스) 사용(Community Edition)
Terraform CLI는 선언적 구성 파일을 통해 클라우드 리소스를 유연하고 확장 가능한 방식으로 관리할 수 있도록 지원하는 강력한 코드형 인프라 툴입니다. OCI-blog-fast-tracking-apcertif-part2.zip의 Terraform 코드를 다운로드하고 OCI 세부정보(compartment_id
, image_ids
)로 input.auto.tfvars
파일을 사용자정의하고, README.md
의 지침에 따라 환경을 설정하고, terraform init
, terraform plan
및 terraform apply
명령을 실행하여 Lab 2를 완료합니다.
필요한 Terraform 플래그를 미리 설정하여 클릭 및 완료 시간을 줄이는 각 태스크에 대한 bash 스크립트를 포함했습니다. 이 스크립트는 다음과 같은 여러 레벨의 유연성을 제공합니다.
-
순차적 실행: 작업 1-3(
run_task1-3.sh
및run_task4.sh
)부터 시작하여 작업 7(run_task6-7.sh
)까지 진행합니다. -
사용자정의 주문: 태스크 1부터 3까지 일시 중지하고, 태스크 4를 수동으로 완료하고, Terraform을 사용하여 태스크 5로 재개하고, 태스크 6을 수동으로 실행하고, 후속 스크립트를 사용하여 태스크 7을 완료할 수 있습니다.
-
하이브리드 실행: 작업 1-5(
run_task1-3.sh
,run_task4.sh
,run_task5.sh
)를 자동으로 실행하고run_taks6-7.sh
의 상호 작용을 활용하여 작업 7의 자동 완료를 위해 스크립트를 재개하기 전에 OCI 콘솔에서 작업 6이 수동으로 완료될 때까지 일시 중지합니다. -
완전히 자동화됨: DevOps 운영 환경에서 원클릭 실행을 위해 이러한 태스크를 CI/CD 파이프라인에 통합할 수 있습니다.
본질적으로 이 패키지는 프라이빗 DNS를 구성하고, Lab 2를 간소화하고, OCI DNS를 통해 원활한 학습 경험을 보장하기 위한 가이드 및 모범 사례를 제공합니다.
##########################################################################
# Terraform module: Configuring Private DNS Zones, Views, and Resolvers. #
# File Name: input.auto.tfvars #
# Copyright (c) 2024 Oracle Author: Mahamat H. Guiagoussou. #
##########################################################################
# Working Compartment
compartment_id = "REPLACE_WITH_YOUR_WORKING_COMPARTMENT_OCID_HERE"
# Region based display name prefix
display_name_prefix = "AP-LAB02-1" # Replace with your prefix
# TASK 1 - Create 2 VCNs (VCN-01 and VCN-02) manually using the OCI
# VCN Wizard (semi automated option) or Terraform (Root or Child)
# Turn flags off to indicate VCN-01 and VCN-02 are not created with TF
#is_vcn1_created = false # Set to 'false' to create VCN-01
#is_vcn2_created = false # Set to 'false' to create VCN-02
# After Creating VCN-01 & VCN-02 with VCN Wizard, updae OCIDs
vcn_id = "REPLACE_VCN1_OCID_HERE"
vcn_id = "REPLACE_VCN2_OCID_HERE"
public_subnet_id = "REPLACE_PUBLIC_VCN1_SUBNET_OCID_HERE"
# Create VCN-01 and VCN-02 with Terraform. Use only one of 2 options:
# (1) Root Module - Dupplicated code ("network1.tf" & "network2.tf")
# (2) Child Module - Use an existing Terraform Network Module.
# Network Deployment Options (Root Module)
network_deployment_option = "TF-ROOT-MODULE" # "TF-CHILD-MODULE"
# Turn flags on to instruct Terraform to create VCN-02 and VCN-02
is_vcn1_created = true # Set to 'true' to create VCN-01
is_vcn2_created = true # Set to 'true' to create VCN-02
# Networking parameters: CIDR Blocks and Host Name prefix
vcn1_cidr_block = "10.0.0.0/16"
vcn2_cidr_block = "172.0.0.0/16"
public_subnet1_cidr_block = "10.0.0.0/24"
public_subnet2_cidr_block = "172.0.0.0/24"
private_subnet1_cidr_block = "10.0.1.0/24"
private_subnet2_cidr_block = "172.0.1.0/24"
host_name_prefix = "<region-key>apl1"
# Task 2: Create two(2) Local Peering Gateways (LPG-01 & LPG-02)
is_lpg1_created = false
is_lpg2_created = false
# Task 3: Launch a VM (VM-01) in the public subnet
is_instance_created = false
# Shape Definition
shape_name = "VM.Standard.A1.Flex"
shape_memory_in_gbs = "6"
shape_numberof_ocpus = "1"
# SSH keys
ssh_public_key = "REPLACE_SSH_PUBLIC_KEY_PATH"
ssh_private_key = "REPLACE_SSH_PRIVATE_KEY_PATH"
# Task 4: Create and Configure OCI Private Zones (zone-a/b.local)
is_task4_automated = false
# Task 5: Test your instance for Associated Zone A.
is_test_instance_associated_zone_a = false
# Task 6: Configure the VCN Resolver, adding the Other Private View.
is_task6_automated = false
# Task 7: Test your Instance for Associated Zone B.
is_test_instance_assoracle = false
이 사용지침서에서는 OCI(Oracle Cloud Infrastructure)에서 프라이빗 DNS 영역, 뷰 및 분석기를 구성하는 포괄적인 접근 방식을 제공했습니다. 이러한 구성 요소를 생성, 구성 및 테스트하는 수동 및 자동화된 방법을 모두 제공했습니다. 이 실습, 반자동화된 접근 방식을 통해 OCI의 여러 VCN에서 DNS 분석을 확실하게 이해할 수 있습니다.
7개의 작업을 통해 첫 번째 VCN의 DNS 분석기에 연결된 프라이빗 뷰로 두 번째 VCN을 추가하기 전후에 두 개의 VCN을 생성하고, LPG를 설정하고, VM을 실행하고, 두 개의 커스터마이징 DNS 영역을 구성하고, VM DNS 연결을 확인했습니다.
다음 단계
이 자습서에서는 Infrastructure as Code IaC(예: Terraform, Ansible, Oracle Resource Manager ORM, OCI CLI bash 셸 스크립팅)를 사용하여 OCI 인프라 프로비저닝을 자동화함으로써 OCI Architect Professional Certification(2024) 후보자가 30분에서 단 5분으로 Lab 2 DNS 구성의 후보자와 같은 복잡한 작업을 가속화할 수 있도록 지원합니다. 이 시간 효율성을 높여 인적 오류를 줄이고 리소스 관리 비용을 낮추며 대규모 성공률을 높입니다.
Terraform 및 Ansible에 대해 알아보고 ORM, OCI CLI 및 Bash 스크립팅을 활용하여 효과적인 OCI 인프라 관리를 위한 최고의 IaC 관행을 살펴보세요.
관련 링크
확인
- 작성자 - Mahamat H. Guiagoussou(마스터 수석 클라우드 아키텍트)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Configure Private DNS Zones, Views, and Resolvers to Accelerate OCI Architect Professional Certification with Terraform
G19550-01
November 2024