{"id":2400,"date":"2023-07-31T01:22:01","date_gmt":"2023-07-30T16:22:01","guid":{"rendered":"https:\/\/manvscloud.com\/?p=2400"},"modified":"2023-08-02T05:01:31","modified_gmt":"2023-08-01T20:01:31","slug":"ncloud-api%eb%a1%9c-global-dns-%eb%a0%88%ec%bd%94%eb%93%9c-%ec%b6%94%ea%b0%80-%ec%9e%90%eb%8f%99%ed%99%94%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/manvscloud.com\/?p=2400","title":{"rendered":"[NCLOUD] API\ub85c Global DNS \ub808\ucf54\ub4dc \ucd94\uac00 \uc790\ub3d9\ud654\ud558\uae30"},"content":{"rendered":"\n<p>\uc548\ub155\ud558\uc138\uc694. MANVSCLOUD \uae40\uc218\ud604\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc624\ub298\uc740 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 Global DNS \uc11c\ube44\uc2a4\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud558\ub824\uace0 \ud569\ub2c8\ub2e4. <br>\ud2b9\ud788 \ub300\ub7c9\uc758 \ub3c4\uba54\uc778\uc744 \ucf58\uc194\uc5d0\uc11c \uc9c1\uc811 \ucd94\uac00\ud558\ub294\ub370 \uc0c1\ub2f9\ud55c \uc2dc\uac04\uc774 \uc18c\uc694\ub418\ub294 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 API\ub97c \ud65c\uc6a9\ud558\uc5ec DNS \ub808\ucf54\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\ub824 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 Global DNS \uc11c\ube44\uc2a4\ub294 \uace0\uac1d\uc774 \ub530\ub85c DNS \uc11c\ubc84\ub97c \uad6c\ucd95\ud558\uc5ec \uad00\ub9ac\ud558\uc9c0 \uc54a\uc544\ub3c4 \ucf58\uc194\uc744 \ud1b5\ud574 \ub3c4\uba54\uc778 \ubc0f \ub808\ucf54\ub4dc \ub4f1\ub85d\uc73c\ub85c \uc27d\uac8c \uad00\ub9ac\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc11c\ube44\uc2a4\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub300\ub7c9\uc758 \ub3c4\uba54\uc778\uc744 \uad00\ub9ac\ud558\uac70\ub098 \uc774\uc804\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uac01 \ub3c4\uba54\uc778\uc744 \ud558\ub098\uc529 \uc218\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \ube44\ud6a8\uc728\uc801\uc774\uba70 \uc2dc\uac04\uc774 \ub9ce\uc774 \uc18c\uc694\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc774 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 API\ub97c \ud65c\uc6a9\ud558\uc5ec Global DNS \ub808\ucf54\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \ubc29\ubc95\uc744 \uc18c\uac1c\ud558\ub824\uace0 \ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\uc774 \ubc29\ubc95\uc744 \ud1b5\ud574 \ub300\ub7c9\uc758 \ub3c4\uba54\uc778\uc744 \ud6e8\uc52c \ube60\ub974\uace0 \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-vivid-green-cyan-background-color has-text-color has-background\"> Global DNS<\/h3>\n\n\n\n<p>\ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 Global DNS\ub294 \ub3c4\uba54\uc778 \uad00\ub9ac\uc5d0 \ud544\uc694\ud55c \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \uc11c\ube44\uc2a4\uc785\ub2c8\ub2e4. \ubcc4\ub3c4\uc758 DNS \uc778\ud504\ub77c \uad6c\ucd95\uc774\ub098 \uc6b4\uc601 \uad00\ub9ac\uac00 \ud544\uc694 \uc5c6\uc774 \uc6f9 \uae30\ubc18 \ucf58\uc194\uc5d0\uc11c \ub3c4\uba54\uc778\uc744 \ucd94\uac00\ud558\uc5ec DNS\ub97c \uad6c\ucd95\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec \ub300\uc758 DNS \uc11c\ubc84\ub97c \uc6b4\uc601\ud558\uc5ec \uc11c\ube44\uc2a4 \uc5f0\uc18d\uc131\uc744 \ubcf4\uc7a5\ud558\uba70 \ub2e4\uc591\ud55c \ub9ac\uc18c\uc2a4 \ub808\ucf54\ub4dc \uc124\uc815\uacfc \ub300\ub7c9 \ub370\uc774\ud130 \uc5c5\ub85c\ub4dc\uac00 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub610\ud55c DNSSEC\ub97c \uc9c0\uc6d0\ud558\uc5ec \ubcf4\uc548\uc744 \uac15\ud654\ud558\uace0 \ucd5c\uc801\uc758 \uae00\ub85c\ubc8c \ub77c\uc6b0\ud305 \ubc29\uc2dd\uc744 \uc81c\uacf5\ud558\uc5ec \ube60\ub978 \uc751\ub2f5\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4. \ubcc4\uce6d(Alias) \ub808\ucf54\ub4dc \ub9e4\ud551, \uc874 \ud30c\uc77c \uac00\uc838\uc624\uae30, \ub3c4\uba54\uc778\ubcc4 \uc9c8\uc758 \ud1b5\uacc4 \uc81c\uacf5 \ub4f1\uc758 \uae30\ub2a5\ub3c4 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\ub294 \ud6a8\uc728\uc801\uc778 \ub3c4\uba54\uc778 \uad00\ub9ac\uc640 \ucd5c\uc801\ud654\ub41c \uc11c\ube44\uc2a4 \uc811\uc18d \ud658\uacbd\uc744 \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>Global DNS\ub294 \uc5c5\ub85c\ub4dc \ubc0f \ub2e4\uc6b4\ub85c\ub4dc \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294\ub370 \uc774 \uae30\ub2a5\uc774 &#8220;\uc874 \ud30c\uc77c \uac00\uc838\uc624\uae30&#8221;\ub97c \uac00\ub9ac\ud0a4\ub294 \uac83\uc73c\ub85c \ubcf4\uc785\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub7ec\ud55c \uae30\ub2a5\uc740 \uc5d1\uc140 \ud30c\uc77c \ud615\uc2dd\uc73c\ub85c \uc81c\uacf5\ub418\ub294 \ubc18\uba74 bind\ub97c \ud1b5\ud574 \ub124\uc784\uc11c\ubc84\ub97c \uad6c\ucd95\ud55c \uacbd\uc6b0 \uc874 \ud30c\uc77c\uc740 \uc544\ub798\uc640 \uac19\uc774 \ud14d\uc2a4\ud2b8 \ud615\uc2dd\uc73c\ub85c \uc5bb\uc744 \uc218 \uc788\uc5b4 \ucd94\uac00\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">;\n; primary name server hosts file\n;\n$TTL 43200\n@       IN      SOA     ns.test.com.   root.ns.test.com. (\n                        2022041801 ; Serial\n                        10800 ; Refresh\n                        3800 ; Retry\n                        3600000 ; Expire\n                        86400 ) ; Minimum\n;\n        IN      NS      ns.test.com.\n;\n@                       IN      MX      1  ASPMX.L.GOOGLE.COM.\n@                       IN      MX      5  ALT1.ASPMX.L.GOOGLE.COM.\n@                       IN      A       1.1.1.1\nwww                     IN      A       2.2.2.2\ndevapi                  IN      A       2.2.2.2\ndev                     IN      A       4.3.2.1<\/pre>\n\n\n\n<p>\ubb3c\ub860 \ud15c\ud50c\ub9bf \ub2e4\uc6b4\ub85c\ub4dc\uac00 \uac00\ub2a5\ud558\uae30\ub54c\ubb38\uc5d0 \uc544\ub798 \uc591\uc2dd\uc5d0 \ub9de\uac8c \uc791\uc131\ud558\uc5ec \uc5c5\ub85c\ub4dc\ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"594\" height=\"187\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/29144932\/image-26.png\" alt=\"\" class=\"wp-image-2414\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/29144932\/image-26.png 594w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/29144932\/image-26-300x94.png 300w\" sizes=\"(max-width: 594px) 100vw, 594px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-vivid-green-cyan-background-color has-text-color has-background\"> Automatic Record Registration<\/h3>\n\n\n\n<p>\uc774\uc81c Global DNS\uc5d0 \ub808\ucf54\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud560 \uc218 \uc788\ub3c4\ub85d \ud574\ubd05\uc2dc\ub2e4.<br>\uc774\ubc88 \uacfc\uc815\uc5d0\uc11c\ub294 Cloud Functions\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. (zip \ud30c\uc77c \uc6a9\ub7c9\uc774 51MB \ub77c\uc11c&#8230;)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"496\" height=\"204\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28021359\/image-19.png\" alt=\"\" class=\"wp-image-2401\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28021359\/image-19.png 496w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28021359\/image-19-300x123.png 300w\" sizes=\"(max-width: 496px) 100vw, 496px\" \/><\/figure>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong>[\ucc38\uace0]<\/strong> \uc704\uc640 \uac19\uc774 zip \ud30c\uc77c \uc6a9\ub7c9\uc774 38MB \uc774\uc0c1\uc774 \ub118\uc5b4\uac00\ub294 \uacbd\uc6b0\uc5d0 \uc99d\uac00 \uc694\uccad\uc740 \ubd88\uac00\ub2a5\ud558\uc9c0\ub9cc \ub7f0\ud0c0\uc784\uc744 custom image\ub85c \uc120\ud0dd\ud558\uace0 Container Registry \uc774\ubbf8\uc9c0\ub97c \uc120\ud0dd\ud558\uc5ec \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uace0\ub824\ud574\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc740 \ucd94\ud6c4 \ud3ec\uc2a4\ud305\uc5d0\uc11c \uc54c\uc544\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em># VPC, Server \uc0dd\uc131\uc5d0 \ub300\ud55c \uac00\uc774\ub4dc\ub294 \uc0dd\ub7b5\ud569\ub2c8\ub2e4.<br># Python\uc740 3.7 \ubc84\uc804\uc774 \uc0ac\uc6a9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/29165143\/image-27.png\" alt=\"\" class=\"wp-image-2416\" width=\"425\" height=\"316\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/29165143\/image-27.png 522w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/29165143\/image-27-300x223.png 300w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/figure>\n\n\n\n<p>\ucc98\uc74c\uc5d0\ub294 Cloud Functions\uacfc Object Storage\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud558\ub824 \ud588\uc73c\ub098, \uc555\ucd95\ub41c .zip \ud30c\uc77c\uc758 \uc6a9\ub7c9\uc774 \ud06c\ub2e4\ub294 \uac83\uc744 \ubc1c\uacac\ud558\uace0 \uc774\ub97c \uc11c\ubc84\ub85c \ub300\uccb4\ud558\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c, Object Storage\ub97c \uc0ac\uc6a9\ud560 \ud544\uc694\uc131\uc774 \uc904\uc5b4\ub4e4\uc5c8\uc9c0\ub9cc \ub2e4\uc2dc \ucf54\ub4dc\ub97c \ubcc0\uacbd\ud558\ub294 \uc791\uc5c5\uc5d0 \uc2dc\uac04\uc744 \ubc84\ub9ac\uace0 \uc2f6\uc9c0 \uc54a\uc544 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud574\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"137\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022347\/image-24.png\" alt=\"\" class=\"wp-image-2406\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022347\/image-24.png 629w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022347\/image-24-300x65.png 300w\" sizes=\"(max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n\n\n<p>\uc704 \uc774\ubbf8\uc9c0\ub294 \ucd5c\uc885\uc801\uc73c\ub85c Zone \ud30c\uc77c\uc744 CSV \ud30c\uc77c\ub85c \ubcc0\ud658\ud588\uc744 \ub54c\uc758 \uc608\uc2dc\uc785\ub2c8\ub2e4.<br>Zone \ud30c\uc77c\uc744 \uc704\uc640 \uac19\uc774 \uc815\ub82c\ud558\uae30 \uc704\ud574\uc11c\ub294 \ucd94\uac00\uc801\uc778 \uc791\uc5c5\uc774 \ud544\uc694\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import csv\nimport re\n\ndomain = 'newreka.co.kr'\n\nwith open( domain + '.zone', 'r') as f:\n    lines = f.readlines()\n\n\ncsv_data = []\n\npattern = re.compile(r'(@|\\w+)\\s+IN\\s+(\\w+)\\s+(.+)')\n\nfor line in lines:\n    match = pattern.search(line)\n    if match and match.group(2) != 'SOA':  # Ignore 'SOA' records\n        subdomain = match.group(1)\n        record_type = match.group(2)\n        value = match.group(3)\n\n        csv_data.append([domain, subdomain, record_type, value])\n\nwith open( domain + '.csv', 'w', newline='') as f:\n    writer = csv.writer(f)\n    # Writing column headers\n    writer.writerow(['domain', 'host', 'type', 'content'])\n    # Writing data rows\n    for row in csv_data:\n        writer.writerow(row)\n<\/pre>\n\n\n\n<p>\uc704 \ucf54\ub4dc\ub294 Zone \ud30c\uc77c\uc744 CSV \ud30c\uc77c\ub85c \ubcc0\ud658\ud558\ub294 \uc608\uc2dc \ucf54\ub4dc\uc785\ub2c8\ub2e4. <br>\uc2e4\uc81c \uc791\uc5c5 \ud658\uacbd\uc5d0\uc11c\ub294 \uc0c1\ud669\uc5d0 \ub530\ub77c \ucf54\ub4dc \uc218\uc815\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <br>\uc608\ub97c \ub4e4\uc5b4 \ud558\uc774\ud508(-)\uc774 \ud3ec\ud568\ub418\uc5b4 \uc788\uac70\ub098 \uc5ec\ub7ec MX \ub808\ucf54\ub4dc\uac00 \uc788\ub294 \uacbd\uc6b0 \ud55c \uc904\ub85c \ubaa8\uc544\uc8fc\ub294 \ub4f1\uc758 \uc791\uc5c5\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\uc774\ub7f0 \ubd80\ubd84\ub4e4\uc740 \uc0c1\ud669\uc5d0 \ub530\ub77c \ucd94\uac00\uc801\uc778 \uc218\uc815\uc774 \ud544\uc694\ud558\ub2e4\ub294 \uac83\uc744 \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"205\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022044\/image-21.png\" alt=\"\" class=\"wp-image-2403\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022044\/image-21.png 725w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022044\/image-21-300x85.png 300w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><\/figure>\n\n\n\n<p>\uc0dd\uc131\ub41c CSV \ud30c\uc77c\uc774 \uc704 \uc774\ubbf8\uc9c0\uc640 \uac19\uc774 Object Storage\uc5d0 \uc5c5\ub85c\ub4dc\ub418\uc5b4 \uc788\ub2e4\uace0 \uac00\uc815\ud574\ubd05\uc2dc\ub2e4. \uc774\uc81c \uc774 CSV \ud30c\uc77c\uc744 \uc77d\uc5b4\uc640 Global DNS\uc5d0 \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\uace0 \ud574\ub2f9 \uc791\uc5c5\uc5d0 \ub300\ud55c \ub85c\uadf8\ub97c Object Storage\uc5d0 \uc800\uc7a5\ud558\ub294 \uacfc\uc815\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip install pandas\npip install boto3\npip install requests<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import requests\nimport base64\nimport hashlib\nimport hmac\nimport time\nimport io\nimport boto3\nimport pandas as pd\nimport os\nfrom botocore.client import Config\nfrom datetime import datetime\n\nACCESS_KEY = os.getenv('NCLOUD_ACCESS_KEY')\nSECRET_KEY = os.getenv('NCLOUD_SECRET_KEY')\nAWS_REGION = 'kr-standard'\nENDPOINT_URL = 'https:\/\/kr.object.ncloudstorage.com'\nAPI_SERVER = 'https:\/\/globaldns.apigw.ntruss.com'\nDNS_BUCKET = 'manvscloud-globaldns'   # CSV \ud30c\uc77c\uc774 \uc800\uc7a5\ub41c \ubc84\ud0b7\uba85\nLOG_BUCKET = 'manvscloud-log'    # LOG \ud30c\uc77c\uc744 \uc800\uc7a5\ud560 \ubc84\ud0b7\uba85\nDOMAIN = 'newreka.co.kr'  # \ub300\ub7c9\uc758 \ub808\ucf54\ub4dc \ubcc0\uacbd\uc774 \ud544\uc694\ud55c \ub3c4\uba54\uc778\nCSV_FILE = DOMAIN + '.csv'\n\n\ndef read_csv_from_object_storage(bucket_name, file_name):\n    s3 = boto3.resource('s3',\n                        region_name=AWS_REGION,\n                        endpoint_url=ENDPOINT_URL,\n                        aws_access_key_id=ACCESS_KEY,\n                        aws_secret_access_key=SECRET_KEY,\n                        config=Config(signature_version='s3v4'))\n    obj = s3.Object(bucket_name, file_name)\n    csv_content = obj.get()['Body'].read().decode('utf-8')\n    return pd.read_csv(io.StringIO(csv_content))\n\n\ndef ncp_request(uri, method, payload=None):\n    timestamp = str(int(time.time() * 1000))\n    message = method + \" \" + uri + \"\\n\" + timestamp + \"\\n\" + ACCESS_KEY\n    signature = base64.b64encode(hmac.new(bytes(SECRET_KEY, 'UTF-8'), bytes(message, 'UTF-8'),\n                                          digestmod=hashlib.sha256).digest())\n    headers = {\n        'x-ncp-apigw-signature-v2': signature,\n        'x-ncp-apigw-timestamp': timestamp,\n        'x-ncp-iam-access-key': ACCESS_KEY\n    }\n    if method == 'GET':\n        response = requests.get(API_SERVER + uri, headers=headers)\n    else:\n        response = requests.post(API_SERVER + uri, headers=headers, json=payload)\n    return response\n\n\ndef get_domain_id(domain):\n    uri = \"\/dns\/v1\/ncpdns\/domain?responseFormatType=json&amp;page=0&amp;size=20&amp;domainName=\" + domain\n    response = ncp_request(uri, 'GET')\n    return response.json()[\"content\"][0][\"id\"]\n\n\ndef add_dns_record(record, domain_id):\n    uri = f\"\/dns\/v1\/ncpdns\/record\/{domain_id}?responseFormatType=json\"\n    payload = [{\n        \"host\": record[\"host\"],\n        \"type\": record[\"type\"],\n        \"content\": record[\"content\"],\n        \"ttl\": record[\"ttl\"]\n    }]\n    response = ncp_request(uri, 'POST', payload)\n    status_code = f\"Response Status Code: {response.status_code}\\n\"\n    response_text = f\"Response Text: {response.text}\\n\"\n    log_data = status_code + response_text\n    if response.text:\n        log_data += f\"Response: {response.json()}\\n\"\n    return log_data\n\n\ndef write_log_to_object_storage(log_data):\n    timestamp = datetime.now().strftime('%Y%m%d%H%M')\n    filename = f'globalDNS-{timestamp}.log'\n    s3 = boto3.resource('s3',\n                        region_name=AWS_REGION,\n                        endpoint_url=ENDPOINT_URL,\n                        aws_access_key_id=ACCESS_KEY,\n                        aws_secret_access_key=SECRET_KEY,\n                        config=Config(signature_version='s3v4'))\n    s3.Object(LOG_BUCKET, f'dns\/{filename}').put(Body=log_data)\n\n\ndef main():\n    data = read_csv_from_object_storage(DNS_BUCKET, CSV_FILE)\n    domain_id = get_domain_id(DOMAIN)\n    log_data = \"\"\n    for index, row in data.iterrows():\n        log_entry = add_dns_record(row, domain_id)\n        log_data += log_entry\n    write_log_to_object_storage(log_data)\n\n\nif __name__ == \"__main__\":\n    main()<\/pre>\n\n\n\n<p>\uc704 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\uba74 \uc544\ub798\uc640 \uac19\uc774 Global DNS\uc5d0 \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"967\" height=\"402\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022523\/image-25.png\" alt=\"\" class=\"wp-image-2407\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022523\/image-25.png 967w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022523\/image-25-300x125.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022523\/image-25-768x319.png 768w\" sizes=\"(max-width: 967px) 100vw, 967px\" \/><\/figure>\n\n\n\n<p>\ub808\ucf54\ub4dc \ubcc0\uacbd\uc744 \uc801\uc6a9\uc2dc\ud0a4\ub294 API\ub3c4 \uc874\uc7ac\ud558\uc9c0\ub9cc \uc774 \ubd80\ubd84\uc740 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<br>\uc9c1\uc811 Global DNS\uc5d0\uc11c \ub4f1\ub85d\uc774 \uc798 \ub418\uc5c8\ub294\uc9c0 \uac80\ud1a0\ud558\uace0 [\uc124\uc815 \uc801\uc6a9]\uc744 \uc9c4\ud589\ud558\uae30 \uc704\ud568\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"871\" height=\"348\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022103\/image-22.png\" alt=\"\" class=\"wp-image-2404\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022103\/image-22.png 871w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022103\/image-22-300x120.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/06\/28022103\/image-22-768x307.png 768w\" sizes=\"(max-width: 871px) 100vw, 871px\" \/><\/figure>\n\n\n\n<p>Object Storage\uc5d0\uc11c \uc704\uc640 \uac19\uc774 \ub85c\uadf8 \ud30c\uc77c\ub85c \ub0a8\uaca8\uc838\uc788\uc5b4 \uc815\uc0c1\uc801\uc73c\ub85c \ub808\ucf54\ub4dc\uac00 \ub4f1\ub85d\ub418\uc5c8\ub294\uc9c0 \uc5b4\ub290 \ubd80\ubd84\uc5d0\uc11c \uc2e4\ud328\ud588\ub294\uc9c0\ub3c4 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>.zip \ud30c\uc77c\uc758 \uc6a9\ub7c9\uc774 \uc0dd\uac01\ubcf4\ub2e4 \ud06c\ub2e4\ub294 \uac78 \uc77c\ucc0d \uc54c\uc558\ub2e4\uba74 \uad73\uc774 \uc704\uc640 \uac19\uc774 \ubc88\uac70\ub85c\uc6b4 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub410\uc5c8\ub294\ub370 \uc544\uc26c\uc6c0\uc774 \ub0a8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-cyan-bluish-gray-background-color has-text-color has-background\"> Personal Comments<\/h3>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 Global DNS\uc758 API\ub97c \uc774\uc6a9\ud55c\ub2e4\uba74 \uc27d\uace0 \ube60\ub974\uac8c \ub808\ucf54\ub4dc \ub4f1\ub85d\uc774 \uac00\ub2a5\ud558\ub2e4\ub294 \uc810\uc744 \uc54c \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc800 \uc5ed\uc2dc \ud604\uc5c5\uc5d0\uc11c \uc704 \ucf54\ub4dc\ub97c \uc218\uc815\ud558\uc5ec Global DNS\uc5d0 \ub2e4\uc218\uc758 \ub3c4\uba54\uc778 \ubc0f \uc218\ubc31\uac1c\uc758 \uc11c\ube0c\ub3c4\uba54\uc778 \uc9e7\uc740 \uc2dc\uac04 \ub0b4\uc5d0 \ucd94\uac00\ud55c \uacbd\ud5d8\uc774 \uc788\uace0 \ucd5c\uadfc\uc5d0\ub3c4 \uc774\ub7ec\ud55c \ubc29\ubc95\uc73c\ub85c DNS \uc774\uc804\uc744 \uc9c4\ud589\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ucf54\ub4dc\ub97c \uc6d0\ud558\ub294 \ubc29\ud5a5\uc73c\ub85c \uc218\uc815\ud558\uc5ec \uc0ac\uc6a9\ud574\ubcf4\uc2dc\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uae34 \uae00 \uc77d\uc5b4\uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"137\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/25143135\/ncloud-master-1.png\" alt=\"\" class=\"wp-image-1265\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/25143135\/ncloud-master-1.png 800w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/25143135\/ncloud-master-1-300x51.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/25143135\/ncloud-master-1-768x132.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub155\ud558\uc138\uc694. MANVSCLOUD \uae40\uc218\ud604\uc785\ub2c8\ub2e4. \uc624\ub298\uc740 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 Global DNS \uc11c\ube44\uc2a4\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud558\ub824\uace0 \ud569\ub2c8\ub2e4. \ud2b9\ud788 \ub300\ub7c9\uc758 \ub3c4\uba54\uc778\uc744 \ucf58\uc194\uc5d0\uc11c \uc9c1\uc811 \ucd94\uac00\ud558\ub294\ub370 \uc0c1\ub2f9\ud55c \uc2dc\uac04\uc774 \uc18c\uc694\ub418\ub294 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 API\ub97c \ud65c\uc6a9\ud558\uc5ec DNS \ub808\ucf54\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\ub824 \ud569\ub2c8\ub2e4. \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 Global DNS \uc11c\ube44\uc2a4\ub294 \uace0\uac1d\uc774 \ub530\ub85c DNS \uc11c\ubc84\ub97c \uad6c\ucd95\ud558\uc5ec \uad00\ub9ac\ud558\uc9c0 \uc54a\uc544\ub3c4 \ucf58\uc194\uc744 \ud1b5\ud574 \ub3c4\uba54\uc778 \ubc0f \ub808\ucf54\ub4dc \ub4f1\ub85d\uc73c\ub85c \uc27d\uac8c \uad00\ub9ac\ud558\uace0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc11c\ube44\uc2a4\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub300\ub7c9\uc758 \ub3c4\uba54\uc778\uc744 \uad00\ub9ac\ud558\uac70\ub098 \uc774\uc804\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 \uac01 \ub3c4\uba54\uc778\uc744 \ud558\ub098\uc529 \uc218\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \uac83\uc740 \ub9e4\uc6b0 \ube44\ud6a8\uc728\uc801\uc774\uba70 \uc2dc\uac04\uc774 \ub9ce\uc774 \uc18c\uc694\ub429\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uae30 \uc704\ud574 \uc774 \ud3ec\uc2a4\ud2b8\uc5d0\uc11c\ub294 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 API\ub97c \ud65c\uc6a9\ud558\uc5ec Global DNS \ub808\ucf54\ub4dc\ub97c \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \ubc29\ubc95\uc744 \uc18c\uac1c\ud558\ub824\uace0 \ud569\ub2c8\ub2e4. \uc774 \ubc29\ubc95\uc744 \ud1b5\ud574 \ub300\ub7c9\uc758 \ub3c4\uba54\uc778\uc744 \ud6e8\uc52c \ube60\ub974\uace0 \ud6a8\uc728\uc801\uc73c\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Global DNS \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \ud50c\ub7ab\ud3fc\uc758 Global DNS\ub294 \ub3c4\uba54\uc778 \uad00\ub9ac\uc5d0 \ud544\uc694\ud55c \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \uc11c\ube44\uc2a4\uc785\ub2c8\ub2e4. \ubcc4\ub3c4\uc758 DNS \uc778\ud504\ub77c \uad6c\ucd95\uc774\ub098 \uc6b4\uc601 \uad00\ub9ac\uac00 \ud544\uc694 \uc5c6\uc774 \uc6f9 \uae30\ubc18 \ucf58\uc194\uc5d0\uc11c \ub3c4\uba54\uc778\uc744 \ucd94\uac00\ud558\uc5ec DNS\ub97c \uad6c\ucd95\ud558\uace0 \uad00\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5ec\ub7ec \ub300\uc758 DNS \uc11c\ubc84\ub97c \uc6b4\uc601\ud558\uc5ec \uc11c\ube44\uc2a4 \uc5f0\uc18d\uc131\uc744 \ubcf4\uc7a5\ud558\uba70 \ub2e4\uc591\ud55c \ub9ac\uc18c\uc2a4 \ub808\ucf54\ub4dc \uc124\uc815\uacfc \ub300\ub7c9 \ub370\uc774\ud130 \uc5c5\ub85c\ub4dc\uac00 \uac00\ub2a5\ud569\ub2c8\ub2e4. \ub610\ud55c DNSSEC\ub97c \uc9c0\uc6d0\ud558\uc5ec \ubcf4\uc548\uc744 \uac15\ud654\ud558\uace0 \ucd5c\uc801\uc758 \uae00\ub85c\ubc8c \ub77c\uc6b0\ud305 \ubc29\uc2dd\uc744 \uc81c\uacf5\ud558\uc5ec \ube60\ub978 \uc751\ub2f5\uc744 \uac00\ub2a5\ud558\uac8c \ud569\ub2c8\ub2e4. \ubcc4\uce6d(Alias) \ub808\ucf54\ub4dc \ub9e4\ud551, \uc874 \ud30c\uc77c \uac00\uc838\uc624\uae30, \ub3c4\uba54\uc778\ubcc4 \uc9c8\uc758 \ud1b5\uacc4 \uc81c\uacf5 \ub4f1\uc758 \uae30\ub2a5\ub3c4 \ud3ec\ud568\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\ub294 \ud6a8\uc728\uc801\uc778 \ub3c4\uba54\uc778 \uad00\ub9ac\uc640 \ucd5c\uc801\ud654\ub41c \uc11c\ube44\uc2a4 \uc811\uc18d \ud658\uacbd\uc744 \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Global DNS\ub294 \uc5c5\ub85c\ub4dc \ubc0f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"Global DNS\uc758 API\ub97c \ud65c\uc6a9\ud558\uc5ec \ub300\ub7c9\uc758 \ub3c4\uba54\uc778 \ubc0f \uc11c\ube0c\ub3c4\uba54\uc778\uc744 \uc790\ub3d9\uc73c\ub85c \ub4f1\ub85d\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694. \uc874 \ud30c\uc77c\uc744 CSV\ub85c \ubcc0\ud658\ud558\uc5ec DNS \uad00\ub9ac\ub97c \ub354\uc6b1 \ud6a8\uc728\uc801\uc774\uace0 \ube60\ub974\uac8c \ud574\ubcf4\uc138\uc694.","jetpack_seo_html_title":"Global DNS: \ub3c4\uba54\uc778 \ubc0f \uc11c\ube0c\ub3c4\uba54\uc778 \ub300\ub7c9 \uc790\ub3d9 \ub4f1\ub85d \uac00\uc774\ub4dc","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[129,891,889,494,32,87,91,17,90,16,890,89,202,398,745,892,893],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2400"}],"collection":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2400"}],"version-history":[{"count":10,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2400\/revisions"}],"predecessor-version":[{"id":2425,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2400\/revisions\/2425"}],"wp:attachment":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}