레코드 관리

Cloud DNS API의 DNS 레코드 관리를 위해서는 API에 대한 change 요청 전송이 포함됩니다. 이 페이지에서는 리소스 레코드 모음 컬렉션의 항목 추가 및 삭제로 구성되는 항목 변경 방법을 설명합니다. 또한 import, export, transaction 명령어를 사용하여 API에 원하는 변경사항을 전송하는 방법도 설명합니다.

시작하기 전에

관리형 영역을 만들고 해당 작업의 기본 요건을 완료해야 합니다.

레코드 추가 또는 삭제

레코드를 추가할 때는 동일한 DNS 이름으로 설정된 레코드에 두 가지 값 또는 문자열을 추가할 수 있습니다. 레코드 모음을 추가할 때는 첫 번째 값과 두 번째 값 사이에 공백을 추가해야 합니다.

수행하려는 작업을 지정하는 트랜잭션을 만들고 실행하여 레코드 모음에서 DNS 레코드를 추가하거나 삭제할 수 있습니다. 트랜잭션은 함께 전파되어야 하는 하나 이상의 레코드 변경사항 그룹입니다. 전체 트랜잭션이 성공하거나 실패하므로, 데이터가 중간 상태로 남지 않습니다.

Console

Cloud Console에서 레코드 모음을 만들려면 다음 안내를 따르세요.

  1. Cloud DNS 페이지로 이동합니다.
  2. 레코드를 추가할 관리형 영역의 이름을 클릭합니다.
  3. 영역 세부정보 화면에서 레코드 모음 추가를 클릭합니다.
  4. 레코드 모음 만들기 화면의 DNS 이름 필드에 DNS 영역의 하위 도메인을 입력합니다. 예를 들면 mail입니다. 후행 점은 끝에 자동으로 추가됩니다.

    와일드 카드 DNS 레코드를 만들려면 별표를 입력합니다. 예를 들면 *.example.com입니다.

  5. 리소스 레코드 유형을 선택합니다. 예를 들면 MX입니다.

  6. TTL 필드에 리소스 레코드가 캐시될 수 있는 기간을 나타내는 TTL 숫자 값을 입력합니다. 값은 반드시 양의 정수여야 합니다. TTL 단위 드롭다운 메뉴에서 시간 단위를 선택합니다. 예를 들면 30 minutes입니다.

  7. 선택한 리소스 레코드 유형에 따라 표에 설명된 대로 남은 필드를 채웁니다.

  8. 항목 추가를 클릭하여 추가 정보를 입력할 수 있습니다.

  9. 만들기를 클릭합니다.

gcloud

a. 트랜잭션을 시작하려면 gcloud dns record-sets transaction start 명령어를 사용합니다.

gcloud dns record-sets transaction start --zone="my-zone-name"
  

각 항목의 의미는 다음과 같습니다.

  • --zone은 레코드 모음을 관리하려는 관리형 영역의 이름입니다.

b. 트랜잭션의 일부로 레코드 모음을 추가하려면 gcloud dns record-sets transaction add 명령어를 사용합니다.

gcloud dns record-sets transaction add 10.2.3.4 --name="test.example.com" \
  --ttl="30" \
  --type="A" \
  --zone="my-zone-name"
  

각 항목의 의미는 다음과 같습니다.

  • --name은 추가할 레코드 모음의 DNS 또는 도메인 이름입니다.
  • --ttl은 레코드 모음의 초 단위 TTL(수명)입니다.
  • --type에 설명된 레코드 유형입니다.
  • --zone은 레코드 모음을 관리하려는 관리형 영역의 이름입니다.

c. 트랜잭션을 실행하려면 gcloud dns record-sets transaction execute 명령어를 사용합니다.

gcloud dns record-sets transaction execute --zone="my-zone-name"

와일드 카드 트랜잭션을 추가하려면 다음 안내를 따르세요.

gcloud dns record-sets transaction add --zone="my-zone-name" \
    --name="*.example.com." \
    --type=CNAME \
    --ttl=300 "sinkhole.example.com"
 

각 항목의 의미는 다음과 같습니다.

  • --name은 추가할 레코드 모음의 DNS 또는 도메인 이름입니다.
  • --ttl은 레코드 모음의 초 단위 수명입니다.
  • --type에 설명된 레코드 유형입니다.
  • --zone은 레코드 모음을 관리하려는 관리형 영역의 이름입니다.

트랜잭션을 삭제하려면 gcloud dns record-sets transaction remove 명령어를 사용합니다.

gcloud dns record-sets transaction remove 10.2.3.4 --name="test.example.com" \
    --ttl="number of seconds" \
    --type="record type" \
    --zone="zone name"
  

각 항목의 의미는 다음과 같습니다.

  • --name은 삭제할 레코드 모음의 DNS 또는 도메인 이름입니다.
  • --ttl은 레코드 모음의 초 단위 수명입니다.
  • --type에 설명된 레코드 유형입니다.

기존 레코드를 바꾸려면 add 명령어 다음에 remove 명령어를 실행합니다.

API

POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/managedZone/changes

{
  "deletions": [
    {
      "name": "test.example.com.",
      "type": "A",
      "ttl": "30",
      "rrdatas": [
        "198.51.100.5"
      ]
    }
  ]
  "additions": [
    {
      "name": "test.example.com.",
      "type": "A",
      "ttl": "30",
      "rrdatas": [
        "203.0.113.1"
      ]
    }
  ]
}

여기서 PROJECT_ID는 프로젝트 ID이고 managedZone은 관리형 영역 이름 또는 ID입니다.

지원되는 DNS 레코드 유형 목록

API Explorer에서 시도해 보려면 여기를 클릭하세요.

리소스 레코드 유형 선택 세부정보

레코드 유형 입력
A

점십진 표기법 형식으로 된 호스트의 숫자 IP 주소입니다.

AAAA

IPv6 16진수 표기법 형식으로 된 호스트의 숫자 IP 주소입니다.

CAA

이 도메인에 대해 인증서를 발급하도록 승인된 인증기관입니다.

CNAME

DNS 이름이 별칭인 표준 이름입니다.

DNSKEY

보안 전송을 위한 다른 연산자의 DNSSEC 키입니다. 이 레코드 모음 유형은 전송 상태에서 DNSSEC가 사용 설정된 영역에만 추가할 수 있습니다

DS

보안이 위임된 영역에 사용될 DNSSEC 키 지문입니다. 이 레코드 모음 유형은 사용자가 이 영역에 대해 DNSSEC를 사용 설정(및 활성화)하지 않는 한 위임된 영역에 대해 DNSSEC를 활성화하지 않습니다.

IPSECVPNKEY

IPSec 공개 VPN 키입니다. 이 레코드 모음 유형을 사용할 때는 DNSSEC가 권장되지만, 이 영역에 사용 설정되어 있지 않습니다.

MX

서버 우선순위를 나타내는 메일 교환 서버의 번호 및 DNS 이름입니다. 번호가 가장 낮은 서버부터 시도합니다. 번호와 DNS 이름 사이에 공백이 있는지 확인합니다.

NAPTR

URN(Uniform Resource Name)을 매핑하는 데 사용되는 이름 권한 포인터 규칙입니다.

NS

권한 있는 네임서버의 DNS 이름입니다. NS 레코드가 영역의 네임서버와 일치해야 합니다.

PTR

보통 역조회에 사용되는 리소스 표준 이름입니다.

SPF

SPF 레코드 모음 유형은 지원 중단되었습니다. 'v=spf1'로 시작하는 TXT 레코드를 사용하세요. 최신 이메일 소프트웨어에서는 SPF 유형의 레코드를 사용하지 않습니다.

SRV

위치 즉 특정 서비스에 대한 서비스의 호스트 이름 및 포트 이름을 지정하는 데이터입니다. 자세한 내용은 RFC 2782를 참조하세요.

SSHFP

SSH 서버 알고리즘 번호, 지문 유형 번호, 키 지문입니다. 이 영역에 대해 DNSSEC를 사용 설정했으면 이 레코드 유형을 사용합니다.

TLSA

Named Entities(DANE) TLSA Certificate Association 정보의 DNS 기반 인증입니다.

TXT

텍스트 데이터입니다. 임의 텍스트가 포함될 수 있으며 보안 또는 악용 방지 정보와 같은 머신이 읽을 수 있는 데이터를 정의하는 데 사용됩니다. TXT 레코드는 하나 이상의 텍스트 문자열을 포함할 수 있으며, 각 문자열의 최대 길이는 255자(영문 기준)입니다. 메일 에이전트와 기타 소프트웨어 에이전트는 여러 문자열을 연결합니다. 각 문자열을 따옴표로 묶습니다. 예를 들면 다음과 같습니다.


"Hello world" "Bye world"

레코드 모음 가져오기 및 내보내기

importexport를 사용하여 레코드 모음을 관리형 영역으로 또는 외부로 복사할 수 있습니다. 가져오거나 내보낼 수 있는 형식은 BIND 영역 파일 형식 또는 YAML 레코드 형식입니다.

레코드 모음을 가져오려면 dns record-sets import 명령어를 사용합니다. --zone-file-format 플래그는 import에 BIND 영역 형식의 파일을 받아들이도록 지정합니다. 이 플래그를 생략하면 import가 YAML 형식의 레코드 파일을 받아들입니다.

gcloud dns record-sets import -z=examplezonename \
   --zone-file-format path-to-example-zone-file

레코드 모음을 내보내려면 dns record-sets export 명령어를 사용합니다. --zone-file-format 플래그를 사용하여 레코드 모음을 BIND 영역 형식의 파일로 내보내도록 export에 지시합니다. 예를 들면 다음과 같습니다.

example.com. 21600 IN NS ns-gcp-private.googledomains.com.
example.com. 21600 IN SOA ns-gcp-private.googledomains.com.
cloud-dns-hostmaster.google.com. 1 21600 3600 259200 300
host1.example.com. 300 IN A 192.0.2.91

이 플래그를 생략하면 export가 레코드 모음을 YAML 형식의 레코드 모음으로 내보냅니다.

gcloud dns record-sets export example.zone -z=examplezonename \
   --zone-file-format
   

예를 들면 다음과 같습니다.

---
kind: dns#resourceRecordSet
name: example.com.
rrdatas:
- ns-gcp-private.googledomains.com.
ttl: 21600
type: NS
---
kind: dns#resourceRecordSet
name: example.com.
rrdatas:
- ns-gcp-private.googledomains.com. cloud-dns-hostmaster.google.com. 1 21600 3600
  259200 300
ttl: 21600
type: SOA
---
kind: dns#resourceRecordSet
name: host1.example.com.
rrdatas:
- 192.0.2.91
ttl: 300
type: A

현재 레코드 모음 표시

영역의 현재 DNS 레코드를 표시하려면 다음과 같이 하세요.

gcloud

gcloud dns record-sets list --zone="myzonename"
이 명령어는 처음 100개 레코드의 리소스 레코드 모음에 대해 JSON 응답을 출력합니다. 다음과 같은 추가 매개변수를 지정할 수 있습니다.
  • limit: 나열할 최대 레코드 모음 수입니다.
  • name: 이 정확한 도메인 이름을 가진 레코드 모음만 나열합니다.
  • type: 이 유형의 레코드만 나열합니다. 있는 경우, --name 매개변수도 있어야 합니다.

Python

def list_resource_records(project_id, zone_name):
    client = dns.Client(project=project_id)
    zone = client.zone(zone_name)

    records = zone.list_resource_record_sets()

    return [(record.name, record.record_type, record.ttl, record.rrdatas)
            for record in records]

다음 단계