ටෙරාෆෝමර් - යටිතල පහසුකම් කේතයට

ටෙරාෆෝමර් - යටිතල පහසුකම් කේතයට
මම පරණ ප්‍රශ්නයක් විසඳන්න ලියපු අලුත් CLI tool එක ගැන කියන්න කැමතියි.

ප්රශ්නය

Terraform දිගු කාලයක් Devops/Cloud/IT ප්‍රජාව තුළ ප්‍රමිතියක් වී ඇත. කේතය ලෙස යටිතල පහසුකම් සමඟ කටයුතු කිරීම සඳහා දෙය ඉතා පහසු සහ ප්රයෝජනවත් වේ. ටෙරාෆෝම්වල බොහෝ රසකැවිලි මෙන්ම ගෑරුප්පු, තියුණු පිහි සහ රේක් තිබේ.
Terraform සමඟ නව දේවල් නිර්මාණය කිරීම සහ ඒවා කළමනාකරණය කිරීම, වෙනස් කිරීම හෝ මකා දැමීම ඉතා පහසු වේ. වලාකුළු තුළ දැවැන්ත යටිතල පහසුකම් ඇති සහ Terraform හරහා නිර්මාණය නොකළ අය කුමක් කළ යුතුද? සම්පූර්ණ වලාකුළ නැවත ලිවීම සහ නැවත නිර්මාණය කිරීම කෙසේ හෝ මිල අධික සහ අනාරක්ෂිත ය.
මම රැකියා 2 කදී මෙම ගැටලුවට මුහුණ පෑවෙමි, සරලම උදාහරණය නම් ඔබට ටෙරාෆෝම් ගොනු ආකාරයෙන් සෑම දෙයක්ම Git හි තිබීමට අවශ්‍ය වූ විට, නමුත් ඔබට බාල්දි 250+ ඇති අතර ඒවා අතින් ටෙරාෆෝම් වලින් ලිවීමට බොහෝ දේ ඇත.
ඇත නිකුත් කිරීම 2014 සිට ටෙරාෆෝම් හි 2016 දී වසා දමන ලද්දේ ආනයනය කරනු ඇතැයි යන බලාපොරොත්තුව ඇතිවය.

පොදුවේ ගත් කල, සෑම දෙයක්ම පින්තූරයේ මෙන් දකුණේ සිට වමට පමණි

අවවාදයයි: කතුවරයා තම ජීවිතයෙන් අඩක් රුසියාවේ ජීවත් නොවන අතර රුසියානු භාෂාවෙන් ටිකක් ලියයි. අක්ෂර වින්‍යාස දෝෂ වලින් පරිස්සම් වන්න.

විසඳුම්

1. AWS සඳහා සූදානම් කළ සහ පැරණි විසඳුම් තිබේ භූමි සැකසීම. මම මගේ බාල්දි 250+ ඒ හරහා ලබා ගැනීමට උත්සාහ කළ විට, එහි සියල්ල නරක බව මට වැටහුණි. AWS දිගු කලක් තිස්සේ නව විකල්ප රාශියක් හඳුන්වා දී ඇත, නමුත් ටෙරාෆෝමිං ඒවා ගැන නොදන්නා අතර පොදුවේ එය රූබි ය. අච්චුව විරල ලෙස පෙනේ. හවස 2න් පස්සේ මම යැව්වා අදින්න ඉල්ලීම එහි තවත් විශේෂාංග එකතු කිරීමට සහ එවැනි විසඳුමක් කිසිසේත්ම සුදුසු නොවන බව අවබෝධ විය.
Terraforming ක්‍රියා කරන ආකාරය: එය AWS SDK වෙතින් දත්ත ලබාගෙන අච්චුවක් හරහා tf සහ tfstate ජනනය කරයි.
මෙහි ගැටළු 3 ක් ඇත:
1. යාවත්කාලීන කිරීම් වල ප්‍රමාදයක් සැමවිටම පවතිනු ඇත
2. tf files සමහර වෙලාවට කැඩිලා එලියට එනවා
3. tfstate tf වෙතින් වෙන වෙනම එකතු කරන අතර සෑම විටම අභිසාරී නොවේ
පොදුවේ ගත් කල, වෙනස්කම් නොමැති බව පවසන `ටෙරාෆෝම් සැලැස්ම' ප්‍රතිඵලයක් ලබා ගැනීම අපහසුය

2. `ටෙරාෆෝම් ආනයනය` යනු ටෙරාෆෝම් තුළ ගොඩනඟන ලද විධානයකි. එය ක්රියා කරන්නේ කෙසේද?
ඔබ සම්පතේ නම සහ වර්ගය සමඟ හිස් TF ගොනුවක් ලියා, පසුව `terraform import` ධාවනය කර සම්පත් හැඳුනුම්පත ලබා දෙන්න. terraform සපයන්නා සම්බන්ධ කර, දත්ත ලබාගෙන tfstate ගොනුවක් සාදයි.
මෙහි ගැටළු 3 ක් ඇත:
1. අපට ලැබෙන්නේ tfstate ගොනුවක් පමණක් වන අතර tf හිස් ය, ඔබ එය අතින් ලිවීමට හෝ tfstate වෙතින් පරිවර්තනය කිරීමට අවශ්‍ය වේ.
2. වරකට එක් සම්පතක් සමඟ පමණක් වැඩ කළ හැකි අතර සියලු සම්පත් සඳහා සහය නොදක්වයි. සහ 250+ බාල්දි සමඟ මා නැවත කුමක් කළ යුතුද?
3. ඔබ සම්පත් වල හැඳුනුම්පත දැන සිටිය යුතුය - එනම්, ඔබ එය සම්පත් ලැයිස්තුව ලබා ගන්නා කේතයකින් ඔතා ගත යුතුය.
පොදුවේ ගත් කල, ප්රතිඵලය අර්ධ වන අතර හොඳින් පරිමාණය නොවේ

මගේ තීරණය

අවශ්‍යතා:
1. සම්පත් සඳහා tf සහ tfstate ගොනු නිර්මාණය කිරීමේ හැකියාව. උදාහරණයක් ලෙස, සියලුම බාල්දි/ආරක්ෂක කණ්ඩායම්/භාරණ සමතුලිතකය බාගත කර එම 'ටෙරාෆෝම් සැලැස්ම' කිසිදු වෙනසක් නොමැති බවට ආපසු ලබා දුන්නේය.
2. ඔබට GCP + AWS වලාකුළු 2ක් අවශ්‍ය වේ
3. සෑම විටම යාවත්කාලීන කිරීමට පහසු සහ දින 3 ක වැඩ සඳහා එක් එක් සම්පත් සඳහා කාලය නාස්ති නොකරන ගෝලීය විසඳුම
4. Open Source කරන්න - හැමෝටම තියෙන්නේ එකම ප්‍රශ්නයක්

Go භාෂාව මම එයට ප්‍රිය කරන්නේ ඇයිද යන්නයි, සහ ටෙරාෆෝම් වල භාවිතා කරන HCL ගොනු සෑදීම සඳහා පුස්තකාලයක් ඇත + ටෙරාෆෝම් වල බොහෝ කේත ප්‍රයෝජනවත් වේ

මාර්ගය

පළමු උත්සාහය
මම සරල අනුවාදයකින් පටන් ගත්තා. අවශ්‍ය සම්පත සඳහා SDK හරහා වලාකුළ සම්බන්ධ කර එය ටෙරාෆෝම් සඳහා ක්ෂේත්‍ර බවට පරිවර්තනය කිරීම. ආරක්ෂක කණ්ඩායම පමණක් පරිවර්තනය කිරීමට දින 1.5 ට මා අකමැති වූ නිසා උත්සාහය ආරක්ෂක කණ්ඩායම මත වහාම මිය ගියේය (සහ සම්පත් ගොඩක් තිබේ). දිගු කාලයක් සහ පසුව ක්ෂේත්ර වෙනස් කිරීමට / එකතු කිරීමට හැකිය

දෙවන උත්සාහය
විස්තර කර ඇති අදහස මත පදනම්ව මෙහි. ගෙන tfstate tf බවට පරිවර්තනය කරන්න. සියලුම දත්ත එහි ඇති අතර ක්ෂේත්ර සමාන වේ. බොහෝ සම්පත් සඳහා සම්පූර්ණ tfstate ලබා ගන්නේ කෙසේද ?? මෙහිදී තමයි 'terraform refresh' විධානය ගලවා ගත්තේ. terraform tfstate හි ඇති සියලුම සම්පත් ලබා ගන්නා අතර, ID මගින්, ඒවායේ දත්ත ලබාගෙන, tfstate වෙත සියල්ල ලියයි. එනම්, නම් සහ හැඳුනුම්පත් පමණක් සහිත හිස් tfstate එකක් සාදා, `terraform refresh` ධාවනය කරන්න, එවිට අපට සම්පූර්ණ tfstates ලැබේ. හුරේ!
දැන් අපි tfstate සඳහා tf සඳහා පරිවර්තකයක් ලිවීමේ පුනරාවර්තන කාමුක දර්ශන කරමු. කවදාවත් tfstate කියවා නැති අයට, එය JSON, නමුත් විශේෂයි.
මෙන්න එහි වැදගත් කොටස් ගුණාංග

 "attributes": {
                            "id": "default/backend-logging-load-deployment",
                            "metadata.#": "1",
                            "metadata.0.annotations.%": "0",
                            "metadata.0.generate_name": "",
                            "metadata.0.generation": "24",
                            "metadata.0.labels.%": "1",
                            "metadata.0.labels.app": "backend-logging",
                            "metadata.0.name": "backend-logging-load-deployment",
                            "metadata.0.namespace": "default",
                            "metadata.0.resource_version": "109317427",
                            "metadata.0.self_link": "/apis/apps/v1/namespaces/default/deployments/backend-logging-load-deployment",
                            "metadata.0.uid": "300ecda1-4138-11e9-9d5d-42010a8400b5",
                            "spec.#": "1",
                            "spec.0.min_ready_seconds": "0",
                            "spec.0.paused": "false",
                            "spec.0.progress_deadline_seconds": "600",
                            "spec.0.replicas": "1",
                            "spec.0.revision_history_limit": "10",
                            "spec.0.selector.#": "1",

අර තියෙන්නේ:
1. id - string
2. පාරදත්ත - 1 ප්‍රමාණයේ අරාවක් සහ එහි පහත විස්තර කර ඇති ක්ෂේත්‍ර සහිත වස්තුවකි
3. පිරිවිතර - 1 ප්‍රමාණයේ හැෂ් සහ යතුර, එහි අගය
කෙටියෙන් කිවහොත්, විනෝද ආකෘතියක්, සෑම දෙයක්ම මට්ටම් කිහිපයක් ගැඹුරු විය හැකිය

                   "spec.#": "1",
                            "spec.0.min_ready_seconds": "0",
                            "spec.0.paused": "false",
                            "spec.0.progress_deadline_seconds": "600",
                            "spec.0.replicas": "1",
                            "spec.0.revision_history_limit": "10",
                            "spec.0.selector.#": "1",
                            "spec.0.selector.0.match_expressions.#": "0",
                            "spec.0.selector.0.match_labels.%": "1",
                            "spec.0.selector.0.match_labels.app": "backend-logging-load",
                            "spec.0.strategy.#": "0",
                            "spec.0.template.#": "1",
                            "spec.0.template.0.metadata.#": "1",
                            "spec.0.template.0.metadata.0.annotations.%": "0",
                            "spec.0.template.0.metadata.0.generate_name": "",
                            "spec.0.template.0.metadata.0.generation": "0",
                            "spec.0.template.0.metadata.0.labels.%": "1",
                            "spec.0.template.0.metadata.0.labels.app": "backend-logging-load",
                            "spec.0.template.0.metadata.0.name": "",
                            "spec.0.template.0.metadata.0.namespace": "",
                            "spec.0.template.0.metadata.0.resource_version": "",
                            "spec.0.template.0.metadata.0.self_link": "",
                            "spec.0.template.0.metadata.0.uid": "",
                            "spec.0.template.0.spec.#": "1",
                            "spec.0.template.0.spec.0.active_deadline_seconds": "0",
                            "spec.0.template.0.spec.0.container.#": "1",
                            "spec.0.template.0.spec.0.container.0.args.#": "3",

සාමාන්‍යයෙන්, යමෙකුට සම්මුඛ පරීක්ෂණයක් සඳහා ක්‍රමලේඛන ගැටළුවක් අවශ්‍ය නම්, මෙම කාර්යය සඳහා විග්‍රහයක් ලිවීමට ඔවුන්ගෙන් ඉල්ලා සිටින්න :)
දෝෂ නොමැතිව විග්‍රහයක් ලිවීමට බොහෝ උත්සාහයන්ගෙන් පසුව, මම එහි කොටසක් ටෙරාෆෝම් කේතයෙන් සහ වඩාත්ම වැදගත් කොටස සොයා ගතිමි. තවද සෑම දෙයක්ම හොඳින් ක්‍රියාත්මක වන බවක් පෙනෙන්නට තිබුණි

උත්සාහ තුන
ටෙරාෆෝම් සපයන්නන් යනු ක්ලවුඩ් ඒපීඅයි සමඟ වැඩ කිරීම සඳහා සියලු සම්පත් සහ තර්කනය සහිත කේත අඩංගු ද්විමය වේ. සෑම වලාකුළකටම තමන්ගේම සැපයුම්කරුවෙකු සිටින අතර ටෙරාෆෝම් විසින්ම ඒවා ක්‍රියාවලි දෙකක් අතර එහි RPC ප්‍රොටෝකෝලය හරහා පමණක් අමතන්න.
දැන් මම RPC ඇමතුම් හරහා ටෙරාෆෝම් සපයන්නන් සම්බන්ධ කර ගැනීමට තීරණය කළෙමි. එය ලස්සනට හැරී ටෙරාෆෝම් සපයන්නන් නව ඒවාට වෙනස් කිරීමට සහ කේතය වෙනස් නොකර නව විශේෂාංග ලබා ගැනීමට හැකි විය. tfstate හි ඇති සියලුම ක්ෂේත්‍ර tf හි නොවිය යුතු බව ද පෙනේ, නමුත් ඔබට සොයා ගත හැක්කේ කෙසේද? මේ ගැන ඔබේ සැපයුම්කරුගෙන් විමසන්න. ඉන්පසුව සාමාන්‍ය ප්‍රකාශන එක්රැස් කිරීමේ තවත් පුනරාවර්තන කාමුක දර්ශන ආරම්භ විය, tfstate තුළ ක්ෂේත්‍ර ගැඹුරින් සෑම මට්ටමකින්ම සෙවීම.

අවසානයේදී, සියලුම ටෙරාෆෝම් සපයන්නන් සඳහා පොදු යටිතල පහසුකම් ඇති ප්‍රයෝජනවත් CLI මෙවලමක් අපට ලැබී ඇති අතර ඔබට පහසුවෙන් අලුත් එකක් එක් කළ හැකිය. එසේම, සම්පත් එකතු කිරීම සඳහා කුඩා කේතයක් ගත වේ. ඊට අමතරව සම්පත් අතර සම්බන්ධතා වැනි සියලු වර්ගවල හොඳ දේවල්. ඇත්ත වශයෙන්ම, සියල්ල විස්තර කළ නොහැකි විවිධ ගැටළු රාශියක් තිබුණි.
මම සතාට Terrafomer කියලා නම දැම්මා.

අවසාන

Terrafomer භාවිතා කරමින්, අපි වලාකුළු දෙකකින් tf + tfstate කේත රේඛා 500-700 දහසක් ජනනය කළෙමු. අපට පැරණි දේවල් ගෙන ඒවා ස්පර්ශ කිරීමට පටන් ගත්තේ ටෙරාෆෝම් හරහා පමණි, හොඳම යටිතල ව්‍යුහය තුළ කේත අදහස් ලෙස. ඔබ විශාල වලාකුළක් ගෙන එය ටෙරාෆෝම් සේවක ලිපිගොනු ආකාරයෙන් කණ්ඩායමක් හරහා ලබා ගන්නා විට එය මායාවක් පමණි. ඉන්පසු grep/replace/git සහ යනාදිය.

මම ඒක පීරලා පිළිවෙලට දාලා අවසර ගත්තා. බ්‍රහස්පතින්දා (02.05.19/XNUMX/XNUMX) සැමට GitHub මත නිකුත් කරන ලදී. github.com/GoogleCloudPlatform/terraformer
දැනටමත් තරු 600ක් ලැබී ඇත, openstack සහ kubernetes සඳහා සහය එක් කිරීම සඳහා පුල් ඉල්ලීම් 2ක් ලැබී ඇත. හොඳ ප්රතිචාර. පොදුවේ ගත් කල, මෙම ව්යාපෘතිය මිනිසුන්ට ප්රයෝජනවත් වේ
මම ටෙරාෆෝම් සමඟ වැඩ කිරීමට කැමති සෑම කෙනෙකුටම උපදෙස් දෙන අතර මේ සඳහා සියල්ල නැවත ලියන්න එපා.
ඉල්ලීම්, ගැටළු, තරු ඇද ගැනීමට මම සතුටු වෙමි.

නිරූපණය
ටෙරාෆෝමර් - යටිතල පහසුකම් කේතයට

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න