# AWS Route53 API 指令集 ###### tags: `AWS 功能` ## 指令 * 設定紀錄 (change-resource-record-sets) ``` # aws route53 change-resource-record-sets --hosted-zone-id <HOSTED-ZONE-ID> --change-batch file://<FILENAME.JSON> ``` * 查看紀錄 (list-resource-record-sets) ``` # aws route53 list-resource-record-sets --hosted-zone-id <HOSTED-ZONE-ID> # aws route53 list-resource-record-sets --hosted-zone-id Z06088691BAIDOYIIIQL4 { "ResourceRecordSets": [ { "Name": "unique-cdn.com.", "Type": "NS", "TTL": 60, "ResourceRecords": [ { "Value": "ns1.unique-cdn.com." }, { "Value": "ns2.unique-cdn.com." }, { "Value": "ns3.unique-cdn.com." }, { "Value": "ns4.unique-cdn.com" } ] }, { "Name": "unique-cdn.com.", "Type": "SOA", "TTL": 60, "ResourceRecords": [ { "Value": "ns1.unique-cdn.com. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400" } ] }, { "Name": "ns1.unique-cdn.com.", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "205.251.199.235" } ] }, { "Name": "ns1.unique-cdn.com.", "Type": "AAAA", "TTL": 300, "ResourceRecords": [ { "Value": "2600:9000:5307:eb00::1" } ] }, { "Name": "ns2.unique-cdn.com.", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "205.251.195.236" } ] }, { "Name": "ns2.unique-cdn.com.", "Type": "AAAA", "TTL": 300, "ResourceRecords": [ { "Value": "2600:9000:5303:ec00::1" } ] }, { "Name": "ns3.unique-cdn.com.", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "205.251.197.85" } ] }, { "Name": "ns3.unique-cdn.com.", "Type": "AAAA", "TTL": 300, "ResourceRecords": [ { "Value": "2600:9000:5305:5500::1" } ] }, { "Name": "ns4.unique-cdn.com.", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "205.251.192.211" } ] }, { "Name": "ns4.unique-cdn.com.", "Type": "AAAA", "TTL": 300, "ResourceRecords": [ { "Value": "2600:9000:5300:d300::1" } ] } ] } # aws route53 list-resource-record-sets --hosted-zone-id Z0921207JOM59RW2BXM7 | jq -r '.ResourceRecordSets[].Name' | sed -n '3,100p' ns1.witty-cdn.com. ns1.witty-cdn.com. ns2.witty-cdn.com. ns2.witty-cdn.com. ns3.witty-cdn.com. ns3.witty-cdn.com. ns4.witty-cdn.com. ns4.witty-cdn.com. ``` * 查看紀錄 (list-resource-record-sets) <查詢機器組IP> * 查詢萬用取代方式 `*.example.com` -> `\\052.example.com` ``` # aws route53 list-resource-record-sets --hosted-zone-id <HOSTED-ZONE-ID> | jq -r '.ResourceRecordSets[].ResourceRecords[].Value' | grep -v "ns" | sort -ru # aws route53 list-resource-record-sets --hosted-zone-id Z02539672GP6JHGHU4HZT | jq -r '.ResourceRecordSets[].ResourceRecords[].Value' | grep -v "ns" | sort -ru 47.242.112.100 137.220.183.81 ``` ``` # aws route53 list-resource-record-sets --hosted-zone-id <HOSTED-ZONE-ID> | grep -v "ns" # aws route53 list-resource-record-sets --hosted-zone-id Z02539672GP6JHGHU4HZT | grep -v "ns" ``` * 新增託管 (create-hosted-zone) ``` # aws route53 create-hosted-zone --name <DOMAIN-NAME> --caller-reference <CALLER-REFERENCE> # aws route53 create-hosted-zone --name yichien-test.com --caller-reference 20230116 { "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z0618504TQGNZLAPRBIY", "HostedZone": { "Id": "/hostedzone/Z0618504TQGNZLAPRBIY", "Name": "yichien-test.com.", "CallerReference": "20230116", "Config": { "PrivateZone": false }, "ResourceRecordSetCount": 2 }, "ChangeInfo": { "Id": "/change/C08367662TOO88TZPBQ2M", "Status": "PENDING", "SubmittedAt": "2023-01-16T09:34:50.850Z" }, "DelegationSet": { "NameServers": [ "ns-448.awsdns-56.com", "ns-1865.awsdns-41.co.uk", "ns-1210.awsdns-23.org", "ns-760.awsdns-31.net" ] } } # aws route53 create-hosted-zone --name yichien-test.com --caller-reference yichien-test | jq -r '.HostedZone.Id' | cut -d "/" -f 3 Z06185346Z014DQXONLY ``` * 查詢全部託管區域 (list-hosted-zones) ``` # aws route53 list-hosted-zones # aws route53 list-hosted-zones { "HostedZones": [ { "Id": "/hostedzone/Z06088691BAIDOYIIIQL4", "Name": "unique-cdn.com.", "CallerReference": "unique", "Config": { "PrivateZone": false }, "ResourceRecordSetCount": 10 }, { "Id": "/hostedzone/Z0921207JOM59RW2BXM7", "Name": "witty-cdn.com.", "CallerReference": "witty", "Config": { "PrivateZone": false }, "ResourceRecordSetCount": 14 } ] } # aws route53 list-hosted-zones | jq -r '.HostedZones[].Name' unique-cdn.com. witty-cdn.com. # aws route53 list-hosted-zones | jq -r '.HostedZones[].Id' | cut -d "/" -f 3 Z06088691BAIDOYIIIQL4 Z0921207JOM59RW2BXM7 ``` * 查詢單一託管區域 (get-hosted-zone) ``` # aws route53 get-hosted-zone --id <HOSTED-ZONE-ID> # aws route53 get-hosted-zone --id Z06088691BAIDOYIIIQL4 { "HostedZone": { "Id": "/hostedzone/Z06088691BAIDOYIIIQL4", "Name": "unique-cdn.com.", "CallerReference": "unique", "Config": { "PrivateZone": false }, "ResourceRecordSetCount": 10 }, "DelegationSet": { "Id": "/delegationset/N01679382462526Z9CG5T", "CallerReference": "unique", "NameServers": [ "ns-2027.awsdns-61.co.uk", "ns-1004.awsdns-61.net", "ns-1365.awsdns-42.org", "ns-211.awsdns-26.com" ] } } ``` * 刪除託管 (delete-hosted-zone) ``` # aws route53 delete-hosted-zone --id <HOSTED-ZONE-ID> # aws route53 delete-hosted-zone --id Z0618504TQGNZLAPRBIY { "ChangeInfo": { "Id": "/change/C00292182L6HEBBC4YC9Q", "Status": "PENDING", "SubmittedAt": "2023-01-16T09:36:16.072Z" } } ``` * 查詢全部運作狀態 (list-health-checks) ``` # aws route53 list-health-checks # aws route53 list-health-checks { "HealthChecks": [ { "Id": "71019adf-9b56-4329-849c-a5ee10f3bb4c", "CallerReference": "221228_07:47:42", "HealthCheckConfig": { "IPAddress": "192.169.0.106", "Port": 80, "Type": "HTTP", "ResourcePath": "/index.html", "FullyQualifiedDomainName": "192.169.0.106", "RequestInterval": 30, "FailureThreshold": 10, "MeasureLatency": false, "Inverted": false, "Disabled": false, "EnableSNI": false }, "HealthCheckVersion": 1 } ] } # aws route53 list-health-checks | jq -r '.HealthChecks[].Id' e4dbb08f-8e39-4d3f-940a-75d219608897 ``` * 查詢單一運作狀態 (get-health-check) ``` # aws route53 get-health-check --health-check-id <HEALTH-CHECK-ID> # aws route53 get-health-check --health-check-id 71019adf-9b56-4329-849c-a5ee10f3bb4c { "HealthCheck": { "Id": "71019adf-9b56-4329-849c-a5ee10f3bb4c", "CallerReference": "221228_07:47:42", "HealthCheckConfig": { "IPAddress": "192.169.0.106", "Port": 80, "Type": "HTTP", "ResourcePath": "/index.html", "FullyQualifiedDomainName": "192.169.0.106", "RequestInterval": 30, "FailureThreshold": 10, "MeasureLatency": false, "Inverted": false, "Disabled": false, "EnableSNI": false }, "HealthCheckVersion": 1 } } ``` ## SHELL 腳本 ### 簡單路由 (Simple) ``` #!/bin/bash zone_id="Z0921207JOM59RW2BXM7" action="CREATE" name="test.witty-cdn.com" record_type="A" ttl="300" value="127.0.0.1" echo " { \"Changes\": [ { \"Action\": \""$action"\", \"ResourceRecordSet\": { \"Name\": \""$name"\", \"Type\": \""$record_type"\", \"TTL\": "$ttl", \"ResourceRecords\": [{\"Value\": \""$value"\"}] } } ] }" > test_shell.json chmod +x test_shell.json aws route53 change-resource-record-sets --hosted-zone-id "$zone_id" --change-batch file://test_shell.json ``` ### 地理位置路由 (GeoLocation) ``` #!/bin/bash zone_id="Z0921207JOM59RW2BXM7" action="CREATE" name="test.witty-cdn.com" record_type="A" setid="test" country="TW" ttl="300" value="127.0.0.1" echo " { \"Changes\": [ { \"Action\": \""$action"\", \"ResourceRecordSet\": { \"Name\": \""$name"\", \"Type\": \""$record_type"\", \"SetIdentifier\": \""$setid"\", \"GeoLocation\": {\"CountryCode\": \""$country"\"}, \"TTL\": "$ttl", \"ResourceRecords\": [{\"Value\": \""$value"\"}] } } ] }" > test_shell.json chmod +x test_shell.json aws route53 change-resource-record-sets --hosted-zone-id "$zone_id" --change-batch file://test_shell.json ``` ### 延遲路由 (Latency) ``` #!/bin/bash zone_id="Z0921207JOM59RW2BXM7" action="CREATE" name="test.witty-cdn.com" record_type="A" setid="test" region="ap-northeast-1" ttl="300" value="127.0.0.1" health_check=$(aws route53 list-health-checks | jq -r '.HealthChecks[].Id') echo " { \"Changes\": [ { \"Action\": \""$action"\", \"ResourceRecordSet\": { \"Name\": \""$name"\", \"Type\": \""$record_type"\", \"SetIdentifier\": \""$setid"\", \"Region\": \""$region"\", \"TTL\": "$ttl", \"HealthCheckId\": \""$health_check"\", \"ResourceRecords\": [{\"Value\": \""$value"\"}] } } ] }" > test_shell.json chmod +x test_shell.json aws route53 change-resource-record-sets --hosted-zone-id "$zone_id" --change-batch file://test_shell.json ``` ### 容錯路由 (Failover) ``` #!/bin/bash zone_id="Z0921207JOM59RW2BXM7" action="CREATE" name="test.witty-cdn.com" record_type="A" setid="test" failover="PRIMARY" ttl="300" value="127.0.0.1" health_check=$(aws route53 list-health-checks | jq -r '.HealthChecks[].Id') echo " { \"Changes\": [ { \"Action\": \""$action"\", \"ResourceRecordSet\": { \"Name\": \""$name"\", \"Type\": \""$record_type"\", \"SetIdentifier\": \""$setid"\", \"Failover\": \""$failover"\", \"TTL\": "$ttl", \"HealthCheckId\": \""$health_check"\", \"ResourceRecords\": [{\"Value\": \""$value"\"}] } } ] }" > test_shell.json chmod +x test_shell.json aws route53 change-resource-record-sets --hosted-zone-id "$zone_id" --change-batch file://test_shell.json ``` ## Health-Check 設定 ``` { "IPAddress": "192.169.0.106", "Port": 80, "Type": "HTTP", "ResourcePath": "index.html", #可以不用 "FullyQualifiedDomainName": "192.169.0.106", "EnableSNI": false, #可以不用 "RequestInterval": 30, "FailureThreshold": 10 } ``` ``` aws route53 create-health-check --caller-reference 12280257 --health-check-config file://create-health-check.json | jq -r '.HealthCheck.Id' 7d5825c9-fd0b-47ae-9964-dbf0cae746cd ``` * shell ``` #!/bin/bash ip="192.169.0.106" the_type="HTTP" path="index.html" name="192.169.0.106" reference=$(date +"%y%m%d_%T") echo " { \"IPAddress\": \""$ip"\", \"Port\": 80, \"Type\": \""$the_type"\", \"ResourcePath\": \""$path"\", \"FullyQualifiedDomainName\": \""$name"\", \"EnableSNI\": false, \"RequestInterval\": 30, \"FailureThreshold\": 10 }" > create-health-check.json aws route53 create-health-check --caller-reference "$reference" --health-check-config file://create-health-check.json | jq -r '.HealthCheck.Id' ```