බොහෝ අය ඔවුන්ගේ දෛනික වැඩවලදී Terraform දන්නා සහ භාවිතා කරයි, නමුත් ඒ සඳහා හොඳම භාවිතයන් තවමත් පිහිටුවා නොමැත. සෑම කණ්ඩායමක්ම තමන්ගේම ප්රවේශයන් සහ ක්රම නිර්මාණය කළ යුතුය.
ඔබේ යටිතල පහසුකම් නිසැකවම සරලව ආරම්භ වේ: සම්පත් කිහිපයක් + සංවර්ධකයින් කිහිප දෙනෙක්. කාලයත් සමඟම, එය සෑම ආකාරයකම දිශාවන් ඔස්සේ වර්ධනය වේ. ඔබ Terraform මොඩියුලවලට සම්පත් සමූහගත කිරීමට, ෆෝල්ඩරවලට කේතය සංවිධානය කිරීමට සහ තවත් වැරදි විය හැක්කේ කුමක්ද? (ප්රසිද්ධ අවසන් වදන්)
කාලය ගෙවී යන අතර ඔබේ යටිතල පහසුකම් ඔබේ නව සුරතල් බව ඔබට හැඟේ, නමුත් ඇයි? යටිතල ව්යුහයේ පැහැදිලි කළ නොහැකි වෙනස්කම් ගැන ඔබ කනස්සල්ලට පත්ව සිටී, යටිතල පහසුකම් සහ කේතය ස්පර්ශ කිරීමට ඔබ බිය වේ - එහි ප්රතිඵලයක් ලෙස, ඔබ නව ක්රියාකාරිත්වය ප්රමාද කරයි හෝ ගුණාත්මකභාවය අඩු කරයි...
Github හි AWS සඳහා Terraform ප්රජා මොඩියුල එකතුවක් කළමනාකරණය කිරීමෙන් වසර තුනකට පසුව සහ නිෂ්පාදනයේ Terraform දිගුකාලීන නඩත්තු කිරීමෙන් පසු, Anton Babenko ඔහුගේ අත්දැකීම් බෙදා ගැනීමට සූදානම් වේ: අනාගතයේදී හානියක් නොවන පරිදි TF මොඩියුල ලියන්නේ කෙසේද.
කතාව අවසන් වන විට, සහභාගිවන්නන් Terraform හි සම්පත් කළමනාකරණ මූලධර්ම, Terraform හි මොඩියුල හා සම්බන්ධ හොඳම භාවිතයන් සහ යටිතල පහසුකම් කළමනාකරණය හා සම්බන්ධ සමහර අඛණ්ඩ ඒකාබද්ධතා මූලධර්ම පිළිබඳව වඩාත් හුරුපුරුදු වනු ඇත.
වගකීමෙන් යුතුව ඔබ එවන: මෙම වාර්තාව නොවැම්බර් 2018 දිනැති බව මම සටහන් කරමි - දැනටමත් වසර 2 ක් ගතවී ඇත. වාර්තාවේ සාකච්ඡා කර ඇති Terraform 0.11 අනුවාදය තවදුරටත් සහාය නොදක්වයි. පසුගිය වසර 2 තුළ, නව නිකුතු 2 ක් නිකුත් කර ඇති අතර, නවෝත්පාදන, වැඩිදියුණු කිරීම් සහ වෙනස්කම් රාශියක් අඩංගු වේ. කරුණාකර මේ පිළිබඳව අවධානය යොමු කර ලේඛන පරීක්ෂා කරන්න.
ආශ්රිත:
ටෙරාෆෝම්-ප්රජා-මොඩියුල +terraform-aws-modules antonbabenko/pre-commit-terraform - ස්වයංක්රීය හැඩතල ගැන්වීමේ කේතය සහ ලියකියවිලිantonbabenko/terrapin - ටෙරාෆෝම් මොඩියුල උත්පාදක යන්ත්රය (WIP)antonbabenko/modules.tf-lambda - දෘශ්ය රූප සටහන් වලින් ටෙරාෆෝම් කේත උත්පාදක යන්ත්රය (WIP)- www.terraform-best-practices.com
media.com/@anton.babenko (නව සටහන් මගේ පුද්ගලික වෙබ් අඩවිය වන www.antonbabenko.com/ හි ඇත)- @antonbabenko - Twitter, සහ විවිධ Slacks සමූහයක්
මගේ නම ඇන්ටන් බබෙන්කෝ. ඔබගෙන් සමහරෙක් මා ලියූ කේතය භාවිතා කළ හැකිය. මට සංඛ්යාලේඛනවලට ප්රවේශය ඇති නිසා මම දැන් මේ ගැන වෙන කවරදාටත් වඩා විශ්වාසයෙන් කතා කරමි.
මම Terraform හි වැඩ කරන අතර 2015 සිට Terraform සහ Amazon සම්බන්ධ විවෘත මූලාශ්ර ව්යාපෘති විශාල සංඛ්යාවකට ක්රියාකාරී සහභාගිවන්නෙකු සහ දායකයෙකු වී ඇත.
එතැන් සිට මම එය රසවත් ආකාරයෙන් තැබීමට තරම් කේතයක් ලියා ඇත. ඒ වගේම මම දැන් ඔබට මේ ගැන කියන්න උත්සාහ කරන්නම්.
මම Terraform සමඟ වැඩ කිරීමේ සංකීර්ණතා සහ විශේෂතා ගැන කතා කරමි. නමුත් එය ඇත්තටම HighLoad විෂය නොවේ. ඒ ඇයි කියලා දැන් ඔබට වැටහෙනු ඇත.
කාලයත් සමඟ මම ටෙරාෆෝම් මොඩියුල ලිවීමට පටන් ගතිමි. පරිශීලකයින් ප්රශ්න ලිව්වා, මම ඒවා නැවත ලිව්වා. ඊට පස්සේ මම කලින් කොක්කක් භාවිතා කර කේතය සංයුති කිරීමට විවිධ උපයෝගිතා ලිව්වෙමි.
බොහෝ රසවත් ව්යාපෘති තිබුණා. මම කේත උත්පාදනයට කැමතියි, මන්ද පරිගණකය මට සහ ක්රමලේඛකයාට වැඩි වැඩියෙන් වැඩ කිරීමට කැමතියි, එබැවින් මම දැනට දෘශ්ය රූප සටහන් වලින් ටෙරාෆෝම් කේත උත්පාදක යන්ත්රයක් මත වැඩ කරමින් සිටිමි. සමහර විට ඔබගෙන් සමහරෙක් ඒවා දැක ඇති. මේවා ඊතල සහිත ලස්සන පෙට්ටි. ඔබට "අපනයන" බොත්තම ක්ලික් කර ඒ සියල්ල කේතයක් ලෙස ලබා ගත හැකි නම් එය ඉතා හොඳ යැයි මම සිතමි.
මම යුක්රේනයෙන්. මම අවුරුදු ගණනාවක් නෝර්වේවල ජීවත් වෙනවා.
ඒ වගේම මේ වාර්තාවට තොරතුරු එකතු කළේ මගේ නම දන්න, සමාජ ජාලවල මාව හොයාගෙන එන අයගෙනුයි. මට සෑම විටම පාහේ එකම අන්වර්ථ නාමයක් ඇත.
මා සඳහන් කළ පරිදි, මම ටෙරාෆෝම් ඒඩබ්ලිව්එස් මොඩියුලවල ප්රධාන නඩත්තුකරු වෙමි, එය GitHub හි විශාලතම නිධි වලින් එකක් වන අතර එහිදී අපි වඩාත් පොදු කාර්යයන් සඳහා මොඩියුල සත්කාරකත්වය සපයන්නෙමු: VPC, Autoscaling, RDS.
ඔබ දැන් අසා ඇති දේ වඩාත් මූලික ය. ටෙරාෆෝම් යනු කුමක්දැයි ඔබට වැටහෙන්නේ යැයි ඔබ සැක කරන්නේ නම්, ඔබේ කාලය වෙනත් ස්ථානයක ගත කිරීම වඩා හොඳය. මෙහි තාක්ෂණික පද ගොඩක් වනු ඇත. තවද වාර්තාවේ මට්ටම ඉහළම බව ප්රකාශ කිරීමට මම පසුබට නොවෙමි. මෙයින් අදහස් කරන්නේ මට වැඩි පැහැදිලි කිරීමකින් තොරව හැකි සියලුම නියමයන් භාවිතා කළ හැකි බවයි.
ටෙරාෆෝම් 2014 දී දර්ශනය වූයේ ඔබට කේතයක් ලෙස යටිතල පහසුකම් ලිවීමට, සැලසුම් කිරීමට සහ කළමනාකරණය කිරීමට ඉඩ සලසන උපයෝගීතාවයක් ලෙසිනි. මෙහි ප්රධාන සංකල්පය වන්නේ "කේතය ලෙස යටිතල පහසුකම්" යන්නයි.
සියලුම ලියකියවිලි, මා කී පරිදි, ලියා ඇත
සාමාන්ය Terraform වින්යාස ගොනුවක් පෙනෙන්නේ මෙයයි, එහිදී අපි මුලින්ම විචල්යයන් නිර්වචනය කරමු.
මෙම අවස්ථාවේදී අපි "aws_region" නිර්වචනය කරමු.
ඉන්පසුව අපි නිර්මාණය කිරීමට අවශ්ය සම්පත් මොනවාදැයි අපි විස්තර කරමු.
පරායත්තතා සහ සපයන්නන් පූරණය කිරීම සඳහා අපි විශේෂයෙන් “terraform init” විධාන කිහිපයක් ක්රියාත්මක කරමු.
තවද නිශ්චිත වින්යාසය අප විසින් නිර්මාණය කරන ලද සම්පත් වලට ගැලපේදැයි පරීක්ෂා කිරීම සඳහා අපි "terraform apply" විධානය ක්රියාත්මක කරමු. අපි මීට පෙර කිසිවක් නිර්මාණය කර නොමැති බැවින්, මෙම සම්පත් නිර්මාණය කිරීමට Terraform අපෙන් පොළඹවයි.
අපි මෙය තහවුරු කරමු. මේ අනුව අපි seasnail නමින් බාල්දියක් නිර්මාණය කරමු.
සමාන උපයෝගිතා කිහිපයක් ද ඇත. Amazon භාවිතා කරන ඔබ බොහෝ දෙනෙක් දන්නවා AWS CloudFormation හෝ Google Cloud Deployment Manager හෝ Azure Resource Manager. මෙම එක් එක් පොදු වලාකුළු සපයන්නන් තුළ සම්පත් කළමනාකරණය කිරීම සඳහා ඒ සෑම එකක්ම තමන්ගේම ක්රියාත්මක කිරීමක් ඇත. Terraform විශේෂයෙන් ප්රයෝජනවත් වන්නේ එය ඔබට සපයන්නන් 100 කට වඩා කළමනාකරණය කිරීමට ඉඩ සලසන බැවිනි. (වැඩිපුර විස්තර
Terraform ආරම්භයේ සිටම අනුගමනය කර ඇති ඉලක්ක:
- Terraform සම්පත් පිළිබඳ තනි දර්ශනයක් සපයයි.
- සියලුම නවීන වේදිකා සඳහා සහය දැක්වීමට ඔබට ඉඩ සලසයි.
- ටෙරාෆෝම් ආරම්භයේ සිටම නිර්මාණය කර ඇත්තේ යටිතල පහසුකම් ආරක්ෂිතව සහ පුරෝකථනය කළ හැකි ලෙස වෙනස් කිරීමට ඔබට ඉඩ සලසන උපයෝගීතාවයක් ලෙස ය.
2014 දී, "පුරෝකථනය කළ හැකි" යන වචනය මෙම සන්දර්භය තුළ ඉතා අසාමාන්ය විය.
Terraform යනු විශ්වීය උපයෝගීතාවයකි. ඔබට API එකක් තිබේ නම්, ඔබට සියල්ල පාලනය කළ හැකිය:
- ඔබට අවශ්ය සියල්ල කළමනාකරණය කිරීමට ඔබට සපයන්නන් 120කට වඩා භාවිතා කළ හැක.
- උදාහරණයක් ලෙස, ඔබට GitHub ගබඩා වෙත ප්රවේශය විස්තර කිරීමට Terraform භාවිතා කළ හැක.
- ඔබට ජිරා හි දෝෂ නිර්මාණය කර වසා දැමීමට පවා හැකිය.
- ඔබට නව ධාතු ප්රමිතික කළමනාකරණය කළ හැකිය.
- ඔබට ඇත්තටම අවශ්ය නම් dropbox තුළ ගොනු පවා සාදාගත හැක.
Go හි විස්තර කළ හැකි විවෘත API එකක් ඇති Terraform සපයන්නන් භාවිතයෙන් මේ සියල්ල සාක්ෂාත් කරගනු ලැබේ.
අපි හිතමු අපි කලින් Slides වල පෙන්නපු විදියට Terraform භාවිතා කරන්න පටන් අරන්, site එකේ documentation ටිකක් කියවල, video ටිකක් බලලා, main.tf ලියන්න පටන් ගත්තා.
සෑම දෙයක්ම විශිෂ්ටයි, ඔබට VPC නිර්මාණය කරන ගොනුවක් තිබේ.
ඔබට VPC නිර්මාණය කිරීමට අවශ්ය නම්, ඔබ මෙම පේළි 12 ආසන්න වශයෙන් සඳහන් කරන්න. ඔබට නිර්මාණය කිරීමට අවශ්ය ප්රදේශය විස්තර කරන්න, කුමන cidr_block IP ලිපින භාවිතා කළ යුතුද යන්න විස්තර කරන්න. එච්චරයි.
ස්වාභාවිකවම, ව්යාපෘතිය ක්රමයෙන් වර්ධනය වනු ඇත.
තවද ඔබ එහි නව දේවල් පොකුරක් එකතු කරනු ඇත: සම්පත්, දත්ත මූලාශ්ර, ඔබ නව සපයන්නන් සමඟ ඒකාබද්ධ වනු ඇත, හදිසියේම ඔබට ඔබේ GitHub ගිණුමේ පරිශීලකයින් කළමනාකරණය කිරීමට Terraform භාවිතා කිරීමට අවශ්ය වනු ඇත. ඔබට විවිධ භාවිත කිරීමට අවශ්ය විය හැක. DNS සපයන්නන්, සියල්ල හරස් කරන්න. ටෙරාෆෝම් මෙය පහසු කරයි.
පහත උදාහරණය දෙස බලමු.
ඔබට අන්තර්ජාල ප්රවේශය ලබා ගැනීමට ඔබගේ VPC වෙතින් සම්පත් අවශ්ය බැවින් ඔබ ක්රමයෙන් internet_gateway එක් කරයි. මේක හොඳ අදහසක්.
එහි ප්රතිඵලය මේ main.tf:
මෙය main.tf හි ඉහළ කොටසයි.
මෙය main.tf හි පහළ කොටසයි.
එවිට ඔබ උපජාල එකතු කරන්න. ඔබට NAT ද්වාර, මාර්ග, මාර්ගගත කිරීමේ වගු සහ වෙනත් උපජාල එකතු කිරීමට අවශ්ය වන විට, ඔබට පේළි 38ක් නොව, ආසන්න වශයෙන් රේඛා 200-300ක් පමණ ඇත.
එනම්, ඔබේ main.tf ගොනුව ක්රමයෙන් වර්ධනය වේ. බොහෝ විට මිනිසුන් සෑම දෙයක්ම එක ගොනුවක තබයි. main.tf හි 10-20 Kb දිස්වේ. 10-20 Kb යනු පෙළ අන්තර්ගතයක් යැයි සිතන්න. තවද සෑම දෙයක්ම සෑම දෙයකටම සම්බන්ධ වේ. මෙය ක්රමක්රමයෙන් වැඩ කිරීමට අපහසු වෙමින් පවතී. 10-20 Kb හොඳ පරිශීලක නඩුවක්, සමහර විට තවත්. තවද මෙය නරක යැයි මිනිසුන් නිතරම සිතන්නේ නැත.
සාමාන්ය ක්රමලේඛනයේ දී මෙන්, එනම් යටිතල පහසුකම් කේතය ලෙස නොවේ, අපි විවිධ පන්ති, පැකේජ, මොඩියුල, කණ්ඩායම් සමූහයක් භාවිතා කිරීමට පුරුදු වී සිටිමු. Terraform ඔබට එකම දේ කිරීමට ඉඩ සලසයි.
- කේතය වර්ධනය වෙමින් පවතී.
- සම්පත් අතර යැපීම් ද වර්ධනය වේ.
ඒ වගේම අපිට ලොකු අවශ්යතාවක් තියෙනවා. අපිට තව දුරටත් මෙහෙම ජීවත් වෙන්න බැරි බව තේරෙනවා. අපගේ කේතය විශාල වෙමින් පවතී. 10-20 Kb, ඇත්ත වශයෙන්ම, ඉතා විශාල නොවේ, නමුත් අපි කතා කරන්නේ ජාල තොගය ගැන පමණි, එනම් ඔබට එකතු කර ඇත්තේ ජාල සම්පත් පමණි. අපි කතා කරන්නේ 100 Kb පහසුවෙන් වියන්න පුළුවන් Application Load Balancer, deployment ES cluster, Kubernetes යනාදිය ගැන නොවේ. ඔබ මේ සියල්ල ලියා ඇත්නම්, ටෙරාෆෝම් ටෙරාෆෝම් මොඩියුල ලබා දෙන බව ඔබ ඉතා ඉක්මනින් ඉගෙන ගනු ඇත.
Terraform මොඩියුල යනු කණ්ඩායමක් ලෙස කළමනාකරණය කරන ස්වයං අන්තර්ගත Terraform වින්යාසයකි. Terraform මොඩියුල ගැන ඔබ දැනගත යුත්තේ එපමණයි. ඔවුන් කිසිසේත් දක්ෂ නැත, යමක් මත පදනම්ව සංකීර්ණ සම්බන්ධතා ඇති කර ගැනීමට ඔවුන් ඔබට ඉඩ නොදේ. මේ සියල්ල සංවර්ධකයින්ගේ උරහිස් මත වැටේ. එනම්, මෙය ඔබ දැනටමත් ලියා ඇති ටෙරාෆෝම් වින්යාසයක් පමණි. ඔබට එය කණ්ඩායමක් ලෙස සරලව හැඳින්විය හැක.
එබැවින් අපි අපගේ 10-20-30 Kb කේතය ප්රශස්ත කරන්නේ කෙසේද යන්න තේරුම් ගැනීමට උත්සාහ කරමු. සමහර මොඩියුල භාවිතා කිරීමට අවශ්ය බව අපි ක්රමයෙන් අවබෝධ කර ගනිමු.
ඔබ හමුවන පළමු වර්ගයේ මොඩියුල සම්පත් මොඩියුල වේ. ඔබේ යටිතල ව්යුහය කුමක් ගැනද, ඔබේ ව්යාපාරය කුමක් ගැනද, කොහිද සහ කොන්දේසි මොනවාද යන්න ඔවුන්ට වැටහෙන්නේ නැත. මේවා හරියටම මා, විවෘත මූලාශ්ර ප්රජාව සමඟ එක්ව පරිපාලනය කරන මොඩියුලයන් වන අතර ඔබේ යටිතල පහසුකම් සඳහා මූලික ගොඩනැඟිලි කොටස් ලෙස අපි ඉදිරිපත් කරමු.
සම්පත් මොඩියුලයක උදාහරණයක්.
අපි සම්පත් මොඩියුලයක් ඇමතූ විට, අපි එහි අන්තර්ගතය පැටවිය යුත්තේ කුමන මාර්ගයෙන්ද යන්න සඳහන් කරමු.
අපට බාගත කිරීමට අවශ්ය අනුවාදය අපි දක්වන්නෙමු.
අපි එහි තර්ක ගොන්නක් සම්මත කරමු. එච්චරයි. අපි මේ මොඩියුලය භාවිතා කරන විට අපට දැනගත යුත්තේ එපමණයි.
ගොඩක් අය හිතන්නේ අලුත්ම වර්ශන් එක පාවිච්චි කලොත් හැමදේම ස්ටේබල් වෙයි කියලා. නමුත් නැහැ. යටිතල පහසුකම් අනුවාද කළ යුතුය; මෙම හෝ එම සංරචකය යෙදවූයේ කුමන අනුවාදයටද යන්න අපි පැහැදිලිව පිළිතුරු දිය යුතුය.
මෙන්න මේ module එක ඇතුලේ තියෙන code එක. ආරක්ෂක කණ්ඩායම් මොඩියුලය. මෙහි අනුචලනය 640 වන පේළියට යයි. හැකි සෑම වින්යාසයකම Amazon හි ආරක්ෂක කණ්ඩායම් සම්පතක් නිර්මාණය කිරීම ඉතා සුළු නොවන කාර්යයකි. ආරක්ෂක කණ්ඩායමක් නිර්මාණය කර එයට සම්මත කළ යුතු නීති මොනවාදැයි පැවසීම පමණක් ප්රමාණවත් නොවේ. එය ඉතා සරල වනු ඇත. Amazon හි විවිධ සීමා කිරීම් මිලියන ගණනක් ඇත. උදාහරණයක් ලෙස, ඔබ භාවිතා කරන්නේ නම් VPC අන්ත ලක්ෂ්යය, උපසර්ග ලැයිස්තුව, විවිධ API සහ මේ සියල්ල අනෙක් සියල්ල සමඟ ඒකාබද්ධ කිරීමට උත්සාහ කරයි, එවිට Terraform ඔබට මෙය කිරීමට ඉඩ නොදේ. තවද Amazon API මෙයට ඉඩ නොදේ. ඒ නිසා මේ භයානක ලොජික් ඔක්කොම මොඩියුල් එකක හංගලා මේ වගේ යූසර් කෝඩ් එක දෙන්න ඕනේ.
එය ඇතුළත සාදන ආකාරය පරිශීලකයාට දැන ගැනීමට අවශ්ය නැත.
සම්පත් මොඩියුල වලින් සමන්විත වන දෙවන වර්ගයේ මොඩියුල ඔබේ ව්යාපාරයට වඩාත් අදාළ වන ගැටළු දැනටමත් විසඳයි. බොහෝ විට මෙය ටෙරාෆෝම් සඳහා දිගුවක් වන අතර සමාගම් ප්රමිතීන් සඳහා ටැග් සඳහා දෘඩ අගයන් සකසයි. Terraform ඔබට දැනට භාවිතා කිරීමට ඉඩ නොදෙන ක්රියාකාරීත්වයද ඔබට එක් කළ හැක. මේ දැන් හරි. දැන් 0.11 අනුවාදය, එය අතීතයේ දෙයක් බවට පත්වේ. එහෙත් තවමත්, පූර්ව සකසනයන්, jsonnet, cookiecutter සහ වෙනත් දේවල් සමූහයක් සම්පූර්ණ වැඩ සඳහා භාවිතා කළ යුතු සහායක යාන්ත්රණය වේ.
මීළඟට මම මේ සඳහා උදාහරණ කිහිපයක් පෙන්වන්නම්.
යටිතල පහසුකම් මොඩියුලය හරියටම එකම ආකාරයකින් හැඳින්වේ.
අන්තර්ගතය බාගත කළ යුතු මූලාශ්රය දක්වා ඇත.
අගයන් පොකුරක් මෙම මොඩියුලය තුළට ගෙන ගොස් ඇත.
මීළඟට, මෙම මොඩියුලය තුළ, VPC හෝ යෙදුම් පැටවුම් සමතුලිතයක් සෑදීමට හෝ ආරක්ෂක කණ්ඩායමක් සෑදීමට හෝ ඉලාස්ටික් බහාලුම් සේවා පොකුරක් සඳහා සම්පත් මොඩියුල සමූහයක් කැඳවනු ලැබේ.
මොඩියුල වර්ග දෙකක් තිබේ. මෙම වාර්තාවේ මා විසින් කාණ්ඩගත කර ඇති බොහෝ තොරතුරු ලේඛනවල ලියා නොමැති නිසා මෙය තේරුම් ගැනීම වැදගත්ය.
දැන් ටෙරාෆෝම් හි ලේඛනගත කිරීම තරමක් ගැටළු සහගත ය, මන්ද එහි මෙම විශේෂාංග ඇති බව පවසන බැවින් ඔබට ඒවා භාවිතා කළ හැකිය. නමුත් මෙම විශේෂාංග භාවිතා කරන්නේ කෙසේදැයි ඇය පවසන්නේ නැත, ඒවා භාවිතා කිරීමට වඩා හොඳ ඇයි. එමනිසා, ඉතා විශාල පිරිසක් තමන්ට ජීවත් විය නොහැකි දෙයක් ලියයි.
මෙම මොඩියුල ලියන්නේ කෙසේදැයි අපි ඊළඟට බලමු. ඊට පස්සේ අපි බලමු කොහොමද එයාලට කෝල් කරන්නේ කොහොමද කියලා සහ code එකෙන් වැඩ කරන්නේ කොහොමද කියලා.
Terraform Registry -
ඉඟිය #0 යනු සම්පත් මොඩියුල ලිවීම නොකිරීමයි. මෙම මොඩියුල බොහොමයක් දැනටමත් ඔබ වෙනුවෙන් ලියා ඇත. මම කී පරිදි, ඒවා විවෘත මූලාශ්ර වේ, ඒවායේ ඔබේ ව්යාපාර තර්ක කිසිවක් අඩංගු නොවේ, ඒවාට IP ලිපින, මුරපද ආදිය සඳහා දෘඪ කේත අගයන් නොමැත. මොඩියුලය ඉතා නම්යශීලී වේ. තවද එය බොහෝ විට දැනටමත් ලියා ඇත. Amazon වෙතින් සම්පත් සඳහා බොහෝ මොඩියුල තිබේ. 650 ක් පමණ. ඒවගේම ඒවායින් බොහොමයක් ගුණාත්මක බවින් යුක්තයි.
මෙම උදාහරණයේ දී, යමෙකු ඔබ වෙත පැමිණ, “මට දත්ත සමුදායක් කළමනාකරණය කිරීමට හැකි වීමට අවශ්යයි. මොඩියුලයක් සාදන්න එවිට මට දත්ත සමුදායක් සෑදිය හැකිය." පුද්ගලයා Amazon හෝ Terraform ක්රියාත්මක කිරීමේ විස්තර නොදනී. ඔහු සරලව පවසන්නේ: "මට MSSQL කළමනාකරණය කිරීමට අවශ්යයි." එනම්, අපි අදහස් කරන්නේ එය අපගේ මොඩියුලය අමතා එහි එන්ජිමේ වර්ගය පසුකර කාල කලාපය දක්වන බවයි.
තවද අපි මෙම මොඩියුලය තුළ විවිධ සම්පත් දෙකක් නිර්මාණය කරන බව පුද්ගලයෙකු නොදැන සිටිය යුතුය: එකක් MSSQL සඳහා, දෙවැන්න අනෙක් සියල්ල සඳහා, Terraform 0.11 හි ඔබට විකල්ප ලෙස කාල කලාප අගයන් නියම කළ නොහැකි නිසා පමණි.
තවද මෙම මොඩියුලයෙන් පිටවීමේදී පුද්ගලයෙකුට සරලව ලිපිනයක් ලබා ගැනීමට හැකි වනු ඇත. අපි මේ සියල්ල අභ්යන්තරව නිර්මාණය කරන්නේ කුමන දත්ත ගබඩාවෙන්ද, කුමන සම්පතකින්ද යන්න ඔහු නොදනී. මෙය සැඟවීමේ ඉතා වැදගත් අංගයකි. මෙය විවෘත මූලාශ්රවල පොදු මොඩියුල සඳහා පමණක් නොව, ඔබේ ව්යාපෘති සහ කණ්ඩායම් තුළ ඔබ ලියන මොඩියුල සඳහාද අදාළ වේ.
මෙය දෙවන තර්කයයි, ඔබ කාලයක් Terraform භාවිතා කරන්නේ නම් එය ඉතා වැදගත් වේ. ඔබේ සමාගම සඳහා ඔබේ ටෙරාෆෝම් මොඩියුල සියල්ලම තබන ගබඩාවක් ඔබ සතුව ඇත. කාලයත් සමඟ මෙම ව්යාපෘතිය මෙගාබයිට් එකක් හෝ දෙකක් දක්වා වර්ධනය වීම සාමාන්ය දෙයකි. මේක හොඳයි.
නමුත් ගැටළුව වන්නේ Terraform මෙම මොඩියුලයන් ලෙස හඳුන්වන්නේ කෙසේද යන්නයි. උදාහරණයක් ලෙස, ඔබ එක් එක් පරිශීලකයා සෑදීමට මොඩියුලයක් අමතන්නේ නම්, Terraform විසින් මුලින්ම සම්පූර්ණ ගබඩාව පූරණය කර පසුව එම විශේෂිත මොඩියුලය පිහිටා ඇති ෆෝල්ඩරය වෙත සංචාලනය කරයි. මේ ආකාරයෙන් ඔබ සෑම අවස්ථාවකම මෙගාබයිට් එකක් බාගත කරනු ඇත. ඔබ පරිශීලකයින් 100 ක් හෝ 200 ක් කළමනාකරණය කරන්නේ නම්, ඔබ මෙගාබයිට් 100 ක් හෝ 200 ක් බාගත කර, එම ෆෝල්ඩරයට යන්න. එබැවින් ස්වභාවිකවම ඔබ "Terraform init" පහර දෙන සෑම අවස්ථාවකම දේවල් පොකුරක් බාගත කිරීමට අවශ්ය නොවේ.
මෙම ගැටලුවට විසඳුම් දෙකක් තිබේ. පළමුවැන්න සාපේක්ෂ මාර්ග භාවිතා කිරීමයි. මේ ආකාරයෙන් ඔබ ෆෝල්ඩරය දේශීය (./) බව කේතයේ සඳහන් කරයි. ඔබ ඕනෑම දෙයක් දියත් කිරීමට පෙර, ඔබ දේශීයව මෙම ගබඩාවේ Git ක්ලෝනයක් කරන්න. මේ ආකාරයෙන් ඔබ එය වරක් කරන්න.
ඇත්ත වශයෙන්ම, බොහෝ අවාසි ඇත. උදාහරණයක් ලෙස, ඔබට අනුවාද භාවිතා කළ නොහැක. තවද මෙය සමහර විට ජීවත් වීමට අපහසුය.
දෙවන විසඳුම. ඔබට උප මොඩියුල රාශියක් තිබේ නම් සහ ඔබට දැනටමත් යම් ආකාරයක ස්ථාපිත නල මාර්ගයක් තිබේ නම්, MBT ව්යාපෘතිය තිබේ, එමඟින් ඔබට මොනොපොසිටරියකින් විවිධ පැකේජ එකතු කර ඒවා S3 වෙත උඩුගත කිරීමට ඉඩ සලසයි. මෙය ඉතා හොඳ මාර්ගයකි. මේ අනුව, iam-user-1.0.0.zip ගොනුව 1 Kb පමණක් බර වනු ඇත, මන්ද මෙම සම්පත නිර්මාණය කිරීමට කේතය ඉතා කුඩා වේ. තවද එය වඩා වේගයෙන් වැඩ කරනු ඇත.
මොඩියුලවල භාවිතා කළ නොහැකි දේ ගැන කතා කරමු.
මොඩියුලවල මෙය නරක වන්නේ ඇයි? නරකම දෙය නම් පරිශීලකයා උපකල්පනය කිරීමයි. පරිශීලකයා යනු විවිධ පුද්ගලයන් විසින් භාවිතා කළ හැකි සැපයුම්කරු සත්යාපන විකල්පයක් යැයි උපකල්පනය කරන්න. උදාහරණයක් ලෙස, අපි සියල්ලෝම භූමිකාව උකහා ගනිමු. මෙයින් අදහස් කරන්නේ Terraform මෙම භූමිකාව භාර ගන්නා බවයි. ඉන්පසු මෙම භූමිකාව සමඟ එය වෙනත් ක්රියාවන් සිදු කරනු ඇත.
නරකම දෙය නම්, වාස්යා එක් ආකාරයකින් ඇමේසන් වෙත සම්බන්ධ වීමට කැමති නම්, උදාහරණයක් ලෙස, පෙරනිමි පරිසර විචල්යය භාවිතා කරමින්, සහ පෙටියා රහසිගත ස්ථානයක ඇති ඔහුගේ හවුල් යතුර භාවිතා කිරීමට කැමති නම්, ඔබට දෙකම සඳහන් කළ නොහැක. ටෙරාෆෝම්. ඔවුන් දුක් විඳීමට නොහැකි වන පරිදි, මොඩියුලයේ මෙම අවහිර කිරීම දැක්වීමට අවශ්ය නොවේ. මෙය ඉහළ මට්ටමකින් දැක්විය යුතුය. එනම්, අපට සම්පත් මොඩියුලයක්, යටිතල පහසුකම් මොඩියුලයක් සහ ඉහළින් සංයුතියක් ඇත. තවද මෙය ඉහළ තැනක සඳහන් කළ යුතුය.
දෙවන අකුසලය ප්රතිපාදකයා ය. මෙතන නපුර එච්චර සුලුපටු නෑ මොකද ඔයා කෝඩ් ලිව්වොත් ඒක ඔයාට වැඩ කරනවා නම් ඒක වැඩ කරනවනම් මොකටද ඒක වෙනස් කරන්නේ කියලා හිතෙන්න පුළුවන්.
නරක දෙය නම්, මෙම ප්රතිපාදකයා දියත් කරන්නේ කවදාද යන්න ඔබ සැමවිටම පාලනය නොකිරීමයි. දෙවනුව, ඔබ aws ec2 යන්නෙන් අදහස් කරන්නේ කුමක්ද යන්න පාලනය නොකරයි, එනම් අපි දැන් Linux හෝ Windows ගැන කතා කරමු. එබැවින් ඔබට විවිධ මෙහෙයුම් පද්ධතිවල හෝ විවිධ පරිශීලක අවස්ථා සඳහා එකම ලෙස ක්රියා කරන දෙයක් ලිවිය නොහැක.
නිල ලේඛනවල ද දක්වා ඇති වඩාත් පොදු උදාහරණය නම්, ඔබ aws_instance ලියා තර්ක සමූහයක් සඳහන් කරන්නේ නම්, ඔබ එහි “දේශීය-විධායක” ප්රතිපාදකයා සඳහන් කර ඔබේ ඇන්සිබල් ධාවනය කරන්නේ නම් එහි වරදක් නැත. ක්රීඩා පොත .
ඇත්ත වශයෙන්ම, ඔව්, එහි වරදක් නැත. නමුත් මෙම ප්රාදේශීය විධායක දේ නොපවතින බව ඉක්මනින් ඔබට වැටහෙනු ඇත, උදාහරණයක් ලෙස, launch_configuration හි.
තවද ඔබ launch_configuration භාවිතා කරන විට සහ ඔබට එක් අවස්ථාවකින් ස්වයංක්රීය පරිමාණය කිරීමේ කණ්ඩායමක් සෑදීමට අවශ්ය වූ විට, launch_configuration හි “ප්රතිපාදන” පිළිබඳ සංකල්පයක් නොමැත. "පරිශීලක දත්ත" යන සංකල්පය පවතී.
එබැවින්, වඩාත් විශ්වීය විසඳුමක් වන්නේ පරිශීලක දත්ත භාවිතා කිරීමයි. තවද එය එම අවස්ථාව සක්රිය කර ඇති අවස්ථාවේදීම හෝ එම පරිශීලක දත්ත තුළම, ස්වයංක්රීය පරිමාණය කිරීමේ කණ්ඩායම මෙම launch_configuration භාවිතා කරන විට දියත් කෙරේ.
ඔබට තවමත් ප්රොවිශනර් ක්රියාත්මක කිරීමට අවශ්ය නම්, එය ඇලවුම් සංරචකයක් වන බැවින්, එක් සම්පතක් නිර්මාණය වූ විට, එම මොහොතේ ඔබ ඔබේ ප්රතිපාදන, ඔබේ විධානය ක්රියාත්මක කළ යුතුය. එවැනි තත්වයන් බොහොමයක් තිබේ.
තවද මේ සඳහා වඩාත්ම නිවැරදි සම්පත null_resource ලෙස හැඳින්වේ. Null_resource යනු කිසි විටෙක සැබවින්ම නිර්මාණය නොකළ ව්යාජ සම්පතකි. එය කිසිවක් ස්පර්ශ නොකරයි, API නැත, ස්වයංක්රීය පරිමාණය නැත. නමුත් විධානය ක්රියාත්මක කළ යුත්තේ කවදාද යන්න පාලනය කිරීමට එය ඔබට ඉඩ සලසයි. මෙම අවස්ථාවේදී, විධානය නිර්මාණය කිරීමේදී ක්රියාත්මක වේ.
ලින්ක්
සංඥා කිහිපයක් තිබේ. මම සියලු සංඥා ඉතා විස්තරාත්මකව නොයමි. මේ ගැන ලිපියක් තියෙනවා. නමුත් ඔබ Terraform සමඟ වැඩ කර ඇත්නම් හෝ වෙනත් පුද්ගලයින්ගේ මොඩියුල භාවිතා කර ඇත්නම්, බොහෝ මොඩියුලයන් විවෘත කේතවල ඇති බොහෝ කේතයන් මෙන් මිනිසුන් විසින් ඔවුන්ගේ අවශ්යතා සඳහා ලියා ඇති බව ඔබ බොහෝ විට දැක ඇත. මිනිසෙක් එය ලියා ඔහුගේ ගැටලුව විසඳා ගත්තේය. මම එය GitHub හි ඇලවූවෙමි, එයට ජීවත් වීමට ඉඩ දෙන්න. එය ජීවත් වනු ඇත, නමුත් එහි ලියකියවිලි සහ උදාහරණ නොමැති නම්, කිසිවෙකු එය භාවිතා නොකරනු ඇත. එහි නිශ්චිත කාර්යයට වඩා ටිකක් වැඩි යමක් විසඳීමට ඔබට ඉඩ සලසන ක්රියාකාරීත්වයක් නොමැති නම්, කිසිවෙකු එය භාවිතා නොකරනු ඇත. පරිශීලකයන් අහිමි කිරීමට බොහෝ ක්රම තිබේ.
ඔබට යමක් ලිවීමට අවශ්ය නම්, මිනිසුන් එය භාවිතා කරනු ඇත, එවිට මම මෙම සලකුණු අනුගමනය කිරීමට නිර්දේශ කරමි.
මෙය:
- ලේඛන සහ උදාහරණ.
- සම්පූර්ණ ක්රියාකාරිත්වය.
- සාධාරණ පෙරනිමි.
- කේතය පිරිසිදු කරන්න.
- පරීක්ෂණ.
පරීක්ෂණ ලිවීම තරමක් අපහසු නිසා වෙනස් තත්වයක්. මම වැඩිපුර විශ්වාස කරන්නේ ලියකියවිලි සහ උදාහරණ.
ඉතින්, අපි මොඩියුල ලියන ආකාරය දෙස බැලුවා. තර්ක දෙකක් තිබේ. පළමු, වැදගත්ම දෙය නම්, ඔබට හැකි නම් ලිවීමට නොවේ, මන්ද මිනිසුන් සමූහයක් දැනටමත් ඔබට පෙර මෙම කාර්යයන් කර ඇත. දෙවනුව, ඔබ තවමත් තීරණය කරන්නේ නම්, මොඩියුල සහ සැපයුම්කරුවන් තුළ සැපයුම්කරුවන් භාවිතා නොකිරීමට උත්සාහ කරන්න.
ලේඛනයේ අළු කොටස මෙයයි. ඔබ දැන් සිතනවා විය හැකිය: "යමක් අපැහැදිලි ය. ඒත්තු ගැන්වී නැත." ඒත් තව මාස හයකින් බලමු.
දැන් අපි මෙම මොඩියුල හඳුන්වන්නේ කෙසේද යන්න ගැන කතා කරමු.
කාලයත් සමඟ අපගේ කේතය වර්ධනය වන බව අපි තේරුම් ගනිමු. අපට තවදුරටත් එක් ගොනුවක් නොමැත, අපට දැනටමත් ගොනු 20 ක් ඇත. ඒවා සියල්ලම එකම ෆෝල්ඩරයක ඇත. නැත්නම් ෆෝල්ඩර පහකින්. සමහර විට අපි ඒවා කෙසේ හෝ කලාපය අනුව, සමහර සංරචක මගින් බිඳ දැමීමට පටන් ගනිමු. දැන් අපට සමමුහුර්තකරණය සහ වාද්ය වෘන්දය පිළිබඳ මූලික කරුණු කිහිපයක් ඇති බව අපට වැටහෙනවා. එනම්, අපි ජාල සම්පත් වෙනස් කළහොත් අප කළ යුත්තේ කුමක්ද, අපගේ ඉතිරි සම්පත් සමඟ අප කළ යුත්තේ කුමක්ද, මෙම පරායත්තතා ඇති කරන්නේ කෙසේද යනාදිය තේරුම් ගත යුතුය.
අන්ත දෙකක් තිබේ. පළමු අන්තය සියල්ල එකකි. අප සතුව එක් ප්රධාන ගොනුවක් තිබේ. දැනට, මෙය Terraform වෙබ් අඩවියේ නිල හොඳම භාවිතය විය.
ඒත් දැන් ඒක deprecated කියල ලියල අයින් කරල. කාලයාගේ ඇවෑමෙන්, ටෙරාෆෝම් ප්රජාව මෙය හොඳම භාවිතයට වඩා බොහෝ දුරස් බව වටහා ගත්තේ මිනිසුන් විවිධ ආකාරවලින් ව්යාපෘතිය භාවිතා කිරීමට පටන් ගත් බැවිනි. ඒ වගේම ගැටලු තියෙනවා. උදාහරණයක් ලෙස, අපි සියලු පරායත්තතා එක තැනක ලැයිස්තුගත කරන විට. අපි "Terraform සැලැස්ම" ක්ලික් කරන විට තත්වයන් ඇති අතර Terraform සියලු සම්පත් වල තත්වයන් යාවත්කාලීන කරන තුරු, බොහෝ කාලයක් ගත විය හැකිය.
බොහෝ කාලයක්, උදාහරණයක් ලෙස, විනාඩි 5 කි. සමහරුන්ට මේක ගොඩක් වෙලාවක්. විනාඩි 15ක් යන අවස්ථා මම දැකලා තියෙනවා. AWS API මිනිත්තු 15ක් ගත කළේ එක් එක් සම්පතෙහි තත්වය සමඟ සිදුවන්නේ කුමක්දැයි සොයා බැලීමට උත්සාහ කිරීමයි. මෙය ඉතා විශාල ප්රදේශයකි.
තවද, ස්වාභාවිකවම, ඔබට එක් ස්ථානයක යමක් වෙනස් කිරීමට අවශ්ය වූ විට අදාළ ගැටළුවක් දිස්වනු ඇත, පසුව ඔබ විනාඩි 15 ක් රැඳී සිටින අතර, එය ඔබට යම් වෙනස්කම් වල කැන්වසයක් ලබා දෙයි. ඔබ කෙළ ගසා, "ඔව්" ලිව්වා, යමක් වැරදී ඇත. මෙය ඉතා සැබෑ උදාහරණයකි. Terraform ඔබව ගැටළු වලින් ආරක්ෂා කිරීමට උත්සාහ නොකරයි. එනම්, ඔබට අවශ්ය දේ ලියන්න. ගැටළු ඇති වේ - ඔබේ ගැටළු. Terraform 0.11 ඔබට කිසිම ආකාරයකින් උදව් කිරීමට උත්සාහ නොකරයි. 0.12 හි ඔබට පැවසීමට ඉඩ සලසන ඇතැම් රසවත් ස්ථාන තිබේ: "වාස්යා, ඔබට ඇත්තටම මෙය අවශ්යයි, ඔබට ඔබේ සිහිය එන්න පුළුවන්ද?"
දෙවන ක්රමය නම් මෙම ප්රදේශය අඩු කිරීමයි, එනම් එක් ස්ථානයක සිට ඇමතුම් වෙනත් ස්ථානයක සිට අඩුවෙන් සම්බන්ධ කළ හැකිය.
එකම අවුල තමයි වැඩිපුර code ලියන්න ඕනේ, ඒ කියන්නේ files විශාල ප්රමාණයක variables විස්තර කරලා මේක update කරන්න ඕනේ. සමහර අය ඒකට කැමති නැහැ. මේක මට සාමාන්ය දෙයක්. සමහර අය සිතන්නේ: “මෙය විවිධ ස්ථානවල ලියන්නේ ඇයි, මම ඒ සියල්ල එක තැනක තබමි.” මෙය හැකි ය, නමුත් මෙය දෙවන අන්තයයි.
මේ සියල්ල එක තැනක ජීවත් වන්නේ කවුද? එක්කෙනෙක්, දෙන්නෙක්, තුන්දෙනෙක්, ඒ කියන්නේ කවුරුහරි ඒක පාවිච්චි කරනවා.
සහ එක් විශේෂිත සංරචකයක්, එක් බ්ලොක් එකක් හෝ එක් යටිතල පහසුකම් මොඩියුලයක් ලෙස හඳුන්වන්නේ කවුද? මිනිසුන් පහක් හතක්. මේක නම් මරු.
වඩාත්ම පොදු පිළිතුර වන්නේ මැද කොහේ හරි ය. ව්යාපෘතිය විශාල නම්, එවිට ඔබට බොහෝ විට විසඳුමක් සුදුසු නොවන අතර සෑම දෙයක්ම ක්රියාත්මක නොවන තත්වයක් ඇති වනු ඇත, එබැවින් ඔබ මිශ්රණයකින් අවසන් වේ. දෙකටම වාසි ඇති බව ඔබ තේරුම් ගන්නා තාක් කල් මෙහි වරදක් නැත.
ස්ටැක් VPC හි යමක් වෙනස් වී ඔබට මෙම වෙනස්කම් EC2 වෙත යෙදීමට අවශ්ය නම්, එනම් ඔබට නව උපජාලයක් තිබූ නිසා ඔබට ස්වයංක්රීය පරිමාණය කිරීමේ කණ්ඩායම යාවත්කාලීන කිරීමට අවශ්ය නම්, මම මේ ආකාරයේ පරායත්ත වාද්ය වෘන්දයක් ලෙස හඳුන්වමි. විසඳුම් කිහිපයක් තිබේ: කවුද භාවිතා කරන්නේ?
මට යෝජනා කරන්න පුළුවන් විසඳුම් මොනවද කියලා. ඔබට මැජික් කිරීමට Terraform භාවිතා කළ හැකිය, නැතහොත් ඔබට Terraform භාවිතා කිරීමට Makefiles භාවිතා කළ හැකිය. එහි යමක් වෙනස් වී ඇත්දැයි බලන්න, ඔබට එය මෙහි දියත් කළ හැකිය.
ඔබ මෙම තීරණයට කැමති වන්නේ කෙසේද? මෙය සිසිල් විසඳුමක් යැයි කිසිවෙකු විශ්වාස කරනවාද? මම සිනහවක් දකිනවා, පෙනෙන විදිහට සැකයන් තුළට රිංගා ඇත.
ඇත්ත වශයෙන්ම, මෙය නිවසේදී උත්සාහ නොකරන්න. Terraform කිසි විටෙකත් Terraform වෙතින් ධාවනය කිරීමට නිර්මාණය කර නැත.
එක් වාර්තාවක ඔවුන් මට කිව්වා: "නැහැ, මේක වැඩ කරන්නේ නැහැ." කාරණය වන්නේ එය වැඩ නොකළ යුතු බවයි. ඔබට Terraform වෙතින් Terraform දියත් කළ හැකි විට එය ඉතා ආකර්ෂණීය පෙනුමක් ඇති නමුත්, පසුව Terraform, ඔබ එය නොකළ යුතුය. Terraform සෑම විටම ඉතා පහසුවෙන් ආරම්භ කළ යුතුය.
එක තැනක යමක් වෙනස් වූ විට ඔබට ඇමතුම් වාද්ය වෘන්දය අවශ්ය නම්, එවිට Terragrunt ඇත.
Terragrunt යනු ඔබට යටිතල පහසුකම් මොඩියුල වෙත ඇමතුම් සම්බන්ධීකරණය කිරීමට සහ සංවිධානය කිරීමට ඉඩ සලසන උපයෝගිතාවකි, Terraform වෙත ඇඩෝනයකි.
සාමාන්ය Terraform වින්යාස ගොනුවක් මේ වගේ.
ඔබට ඇමතීමට අවශ්ය විශේෂිත මොඩියුලය ඔබ සඳහන් කරයි.
මොඩියුලයට ඇති පරායත්තතා මොනවාද?
තවද මෙම මොඩියුලය පිළිගන්නා තර්ක මොනවාද. Terragrunt ගැන දැනගන්න තියෙන්නේ එච්චරයි.
ප්රලේඛනය එහි ඇති අතර GitHub හි තරු 1 ක් ඇත. නමුත් බොහෝ අවස්ථාවලදී ඔබ දැනගත යුතු දේ මෙයයි. ටෙරාෆෝම් සමඟ වැඩ කිරීමට පටන් ගන්නා සමාගම්වල මෙය ක්රියාත්මක කිරීම ඉතා පහසුය.
එබැවින් වාද්ය වෘන්දය Terragrunt වේ. වෙනත් විකල්ප තිබේ.
දැන් අපි කේතය සමඟ වැඩ කරන්නේ කෙසේද යන්න ගැන කතා කරමු.
ඔබට ඔබගේ කේතයට නව විශේෂාංග එකතු කිරීමට අවශ්ය නම්, බොහෝ අවස්ථාවලදී මෙය පහසු වේ. ඔබ නව සම්පතක් ලියනවා, සියල්ල සරලයි.
ඔබ කලින් නිර්මාණය කළ යම් සම්පතක් ඔබ සතුව තිබේ නම්, උදාහරණයක් ලෙස, ඔබ AWS ගිණුමක් විවෘත කිරීමෙන් පසුව සහ ඔබට දැනටමත් ඇති සම්පත් භාවිතා කිරීමට අවශ්ය වූ පසු ඔබ Terraform ගැන ඉගෙන ගත්තේ නම්, ඔබේ මොඩියුලය මේ ආකාරයෙන් දීර්ඝ කිරීම සුදුසු වනු ඇත. එය පවතින සම්පත් භාවිතයට සහාය වේ.
බ්ලොක් සම්පත භාවිතා කරමින් නව සම්පත් නිර්මාණය කිරීමට සහය විය.
ප්රතිදානයේදී අපි සෑම විටම භාවිත කළ දේ අනුව ප්රතිදාන හැඳුනුම්පත ලබා දෙන්නෙමු.
Terraform 0.11 හි දෙවන ඉතා වැදගත් ගැටළුව වන්නේ ලැයිස්තු සමඟ වැඩ කිරීමයි.
දුෂ්කරතාවය වන්නේ එවැනි පරිශීලකයින්ගේ ලැයිස්තුවක් අප සතුව තිබේ නම්.
අපි බ්ලොක් සම්පත් භාවිතයෙන් මෙම පරිශීලකයින් නිර්මාණය කළ විට, සියල්ල හොඳින් සිදු වේ. අපි සම්පූර්ණ ලැයිස්තුව හරහා ගොස්, එක් එක් සඳහා ගොනුවක් සාදන්න. හැම දෙයක්ම හොඳයි. ඊට පස්සේ, උදාහරණයක් ලෙස, මැද සිටින user3 මෙතැනින් ඉවත් කළ යුතුය, එවිට ඔහුට පසුව නිර්මාණය වූ සියලු සම්පත් නැවත නිර්මාණය වනු ඇත, මන්ද දර්ශකය වෙනස් වේ.
රාජ්ය පරිසරයක් තුළ ලැයිස්තු සමඟ වැඩ කිරීම. රාජ්ය පරිසරයක් යනු කුමක්ද? මෙම සම්පත නිර්මාණය කිරීමේදී නව අගයක් නිර්මාණය වන තත්ත්වය මෙයයි. උදාහරණයක් ලෙස, AWS ප්රවේශ යතුර හෝ AWS රහස් යතුර, එනම් අපි පරිශීලකයෙකු නිර්මාණය කරන විට, අපට නව ප්රවේශ හෝ රහස් යතුරක් ලැබේ. තවද අපි පරිශීලකයෙකු මකා දමන සෑම අවස්ථාවකම, මෙම පරිශීලකයාට නව යතුරක් ඇත. නමුත් මෙය ෆෙංෂුයි නොවේ, මන්ද යමෙකු කණ්ඩායමෙන් ඉවත් වන සෑම අවස්ථාවකම අපි ඔහුට නව පරිශීලකයෙකු නිර්මාණය කළහොත් පරිශීලකයා අප සමඟ මිතුරු වීමට කැමති නොවනු ඇත.
විසඳුම මෙයයි. මෙය Jsonnet හි ලියා ඇති කේතයකි. Jsonnet යනු Google වෙතින් සැකසෙන භාෂාවකි.
මෙම විධානය මඟින් ඔබට මෙම අච්චුව පිළිගැනීමට ඉඩ ලබා දෙන අතර ප්රතිදානය ලෙස එය ඔබගේ අච්චුවට අනුව සාදන ලද json ගොනුවක් ලබා දෙයි.
සැකිල්ල මේ වගේ.
Terraform මඟින් ඔබට HCL සහ Json යන දෙකම සමඟ එකම ආකාරයෙන් වැඩ කිරීමට ඉඩ සලසයි, එබැවින් ඔබට Json ජනනය කිරීමේ හැකියාව තිබේ නම්, ඔබට එය Terraform වෙත ලිස්සා යා හැක. .tf.json දිගුව සහිත ගොනුව සාර්ථකව බාගනු ඇත.
ඉන්පසු අපි සුපුරුදු පරිදි එය සමඟ වැඩ කරන්නෙමු: terraform init, terramorm අදාළ වේ. අපි පරිශීලකයින් දෙදෙනෙකු නිර්මාණය කරමු.
දැන් අපි බය නැහැ කවුරු හරි කණ්ඩායමෙන් අයින් වුණොත්. අපි json ගොනුව සංස්කරණය කරන්නෙමු. Vasya Pupkin පිටව ගියේය, Petya Pyatochkin රැඳී සිටියේය. Petya Pyatochkin නව යතුරක් නොලැබෙනු ඇත.
Terraform වෙනත් මෙවලම් සමඟ ඒකාබද්ධ කිරීම ඇත්තටම Terraform ගේ කාර්යය නොවේ. සම්පත් නිර්මාණය කිරීමේ වේදිකාවක් ලෙස ටෙරාෆෝම් නිර්මාණය කර ඇති අතර එය එයයි. පසුව එන සෑම දෙයක්ම Terraform ගේ සැලකිල්ල නොවේ. ඒවගේම ඒක ඇතුළට වියන්න අවශ්ය නැහැ. ඔබට අවශ්ය සියල්ල කරන ඇන්සිබල් ඇත.
නමුත් යම් දෙයක් සම්පූර්ණ වූ පසු අපට Terraform දිගු කර යම් විධානයක් ඇමතීමට අවශ්ය වූ විට තත්වයන් පැන නගී.
පළමු මාර්ගය. අපි මෙම විධානය ලියන ස්ථානයේ ප්රතිදානයක් නිර්මාණය කරමු.
ඊට පස්සේ අපි මේ command එක shell terraform output එකෙන් කතා කරලා අපිට අවශ්ය අගය සඳහන් කරනවා. මේ අනුව, විධානය සියලුම ආදේශක අගයන් සමඟ ක්රියාත්මක වේ. එය ඉතා සුවපහසුයි.
දෙවන මාර්ගය. මෙය අපගේ යටිතල ව්යුහයේ වෙනස්කම් මත පදනම්ව null_resource භාවිතයයි. සමහර සම්පත් වල හැඳුනුම්පත වෙනස් වූ වහාම අපට එම දේශීය-exe ඇමතීමට හැකිය.
ස්වාභාවිකවම, මේ සියල්ල කඩදාසි මත සුමට වේ, මන්ද ඇමේසන්, අනෙකුත් සියලුම පොදු සැපයුම්කරුවන් මෙන්, තමන්ගේම මායිම් නඩු රාශියක් ඇති බැවිනි.
වඩාත්ම සුලභ අවස්ථාව නම්, ඔබ AWS ගිණුමක් විවෘත කරන විට, ඔබ භාවිතා කරන කලාප මොනවාද යන්න වැදගත් වේ; මෙම විශේෂාංගය එහි සක්රීය කර තිබේද; සමහර විට ඔබ එය විවෘත කළේ 2013 දෙසැම්බර් මාසයෙන් පසුව විය හැකියි. සමහර විට ඔබ VPC ආදියෙහි පෙරනිමිය භාවිතා කරයි. බොහෝ සීමාවන් තිබේ. ඇමේසන් ඒවා ලේඛනගත කිරීම පුරා විසිරී ගියේය.
මම වැළකී සිටීමට නිර්දේශ කරන කරුණු කිහිපයක් තිබේ.
ආරම්භ කිරීමට, Terraform සැලැස්ම හෝ Terraform CLI තුළ ඇති සියලුම රහස් නොවන තර්ක වළක්වා ගන්න. මේ සියල්ල tfvars ගොනුවකට හෝ පරිසර විචල්යයකට දැමිය හැකිය.
නමුත් ඔබට මෙම සම්පූර්ණ මැජික් විධානය මතක තබා ගැනීමට අවශ්ය නොවේ. Terraform සැලැස්ම - var සහ අපි යනවා. පළමු විචල්යය var වේ, දෙවන විචල්යය var වේ, තුන්වන, හතරවන. මම බොහෝ විට භාවිතා කරන කේතයක් ලෙස යටිතල පහසුකම්වල වැදගත්ම මූලධර්මය නම්, කේතය දෙස බැලීමෙන්, එහි යොදවා ඇති දේ, කුමන තත්වයක සහ කුමන අගයන් සමඟද යන්න පිළිබඳව මට පැහැදිලි අවබෝධයක් තිබිය යුතුය. එබැවින් මට ලේඛන කියවීමට හෝ අපගේ පොකුර නිර්මාණය කිරීමට ඔහු භාවිතා කළ පරාමිතීන් මොනවාදැයි වාස්යාගෙන් ඇසීමට අවශ්ය නැත. මට අවශ්ය වන්නේ බොහෝ විට පරිසරයට ගැලපෙන tfvars දිගුව සහිත ගොනුවක් විවෘත කර එහි ඇති සියල්ල දෙස බැලීමයි.
ඒ වගේම විෂය පථය අඩු කිරීමට ඉලක්ක තර්ක භාවිතා නොකරන්න. මේ සඳහා කුඩා යටිතල පහසුකම් මොඩියුල භාවිතා කිරීම වඩාත් පහසු වේ.
එසේම, සමාන්තරකරණය සීමා කිරීම හා වැඩි කිරීම අවශ්ය නොවේ. මට සම්පත් 150 ක් තිබේ නම් සහ මට පෙරනිමි 10 සිට 100 දක්වා Amazon සමාන්තරකරණය වැඩි කිරීමට අවශ්ය නම්, බොහෝ විට යමක් වැරදී යනු ඇත. නැත්තම් දැන් වැඩේ හරි යයි, නමුත් Amazon කිව්වම ඔයා ගොඩක් call ගන්නවා කියලා, ඔයාට කරදරයක් වෙයි.
Terraform මෙම ගැටළු බොහොමයක් නැවත ආරම්භ කිරීමට උත්සාහ කරනු ඇත, නමුත් ඔබට කිසිවක් අත් කර ගැනීමට නොහැකි වනු ඇත. Parallelism=1 ඔබ AWS API තුළ හෝ Terraform සපයන්නා තුළ යම් දෝෂයක් මත පැටලෙන්නේ නම් භාවිතා කිරීමට වැදගත් දෙයකි. ඉන්පසු ඔබට නියම කිරීමට අවශ්ය වේ: parallelism=1 සහ Terraform එක ඇමතුමක් අවසන් කරන තෙක් රැඳී සිටින්න, ඉන්පසු දෙවන, පසුව තුන්වන. ඔහු ඒවා එකින් එක දියත් කරයි.
මිනිසුන් බොහෝ විට මගෙන් අසන්නේ, "ටෙරාෆෝම් වැඩබිම් නරක යැයි මා සිතන්නේ ඇයි?" යටිතල ව්යූහයේ මූලධර්මය කේතයක් ලෙස මම විශ්වාස කරන්නේ කුමන යටිතල පහසුකම් නිර්මාණය කර ඇත්ද සහ කුමන අගයන් සමඟද යන්නයි.
වැඩබිම් පරිශීලකයන් විසින් නිර්මාණය කර නැත. මෙයින් අදහස් කරන්නේ පරිශීලකයින් අපට Terraform වැඩ අවකාශය නොමැතිව ජීවත් විය නොහැකි බව GitHub ගැටළු වල ලියා ඇති බව නොවේ. නෑ මේ වගේ නෙවෙයි. Terraform Enterprise යනු වාණිජ විසඳුමකි. HashiCorp වෙතින් Terraform අපට වැඩබිම් අවශ්ය බව තීරණය කළ නිසා අපි එය ගොනු කළෙමු. එය වෙනම ෆෝල්ඩරයක තැබීම වඩාත් පහසු බව මට පෙනේ. එතකොට තව ටිකක් ෆයිල් තිබ්බත් පැහැදිලි වෙයි.
කේතය සමඟ වැඩ කරන්නේ කෙසේද? ඇත්ත වශයෙන්ම, ලැයිස්තු සමඟ වැඩ කිරීම එකම වේදනාවයි. සහ Terraform පහසුව ගන්න. මෙය ඔබ වෙනුවෙන් සෑම දෙයක්ම විශිෂ්ට දෙයක් කරන දෙයක් නොවේ. ලියකියවිලිවල ලියා ඇති සියල්ල එහි තල්ලු කිරීමට අවශ්ය නැත.
වාර්තාවේ මාතෘකාව "අනාගතය සඳහා" ලියා ඇත. මම මේ ගැන ඉතා කෙටියෙන් කතා කරන්නම්. අනාගතය සඳහා, මෙයින් අදහස් කරන්නේ 0.12 ඉක්මනින් නිකුත් කරන බවයි.
0.12 යනු නව දේවල් ටොන් එකකි. ඔබ සාමාන්ය ක්රමලේඛනයෙන් පැමිණෙන්නේ නම්, ඔබට සියලු ආකාරයේ ගතික බ්ලොක්, ලූප, නිවැරදි සහ කොන්දේසි සහිත සංසන්දනාත්මක මෙහෙයුම් මග හැරේ, එහිදී වම් සහ දකුණු පැති එකවර ගණනය නොකෙරේ, නමුත් තත්වය අනුව. ඔබට එය බොහෝ සෙයින් මග හැරී ඇත, එබැවින් 0.12 ඔබට එය විසඳනු ඇත.
එහෙත්! ඔබ සූදානම් කළ මොඩියුල සහ තෙවන පාර්ශවීය විසඳුම් භාවිතා කරමින් අඩුවෙන් හා සරලව ලියන්නේ නම්, එවිට ඔබට බලා සිටීමට සිදු නොවනු ඇත 0.12 පැමිණ ඔබ වෙනුවෙන් සියල්ල නිවැරදි කරනු ඇත.
වාර්තාවට ස්තූතියි! ඔබ කේතය ලෙස යටිතල පහසුකම් ගැන කතා කළ අතර වචනාර්ථයෙන් පරීක්ෂණ ගැන එක වචනයක් කීවේය. මොඩියුලවල පරීක්ෂණ අවශ්යද? මෙය කාගේ වගකීමක්ද? මම එය තනිවම ලිවිය යුතුද නැතහොත් එය මොඩියුලවල වගකීමද?
අපි සෑම දෙයක්ම පරීක්ෂා කිරීමට තීරණය කර ඇති බවට ඊළඟ වසරේ වාර්තා පිරී යනු ඇත. පරීක්ෂා කරන්නේ කුමක්ද යන්න විශාලතම ප්රශ්නයයි. විවිධ සැපයුම්කරුවන්ගෙන් බොහෝ යැපීම්, සීමා කිරීම් ගොඩක් තිබේ. ඔබ සහ මම කතා කරන විට සහ "මට පරීක්ෂණ අවශ්යයි" යැයි පවසන විට මම අසමි: "ඔබ පරීක්ෂා කරන්නේ කුමක්ද?" ඔබ පවසන්නේ ඔබ ඔබේ කලාපයේ පරීක්ෂා කරන බවයි. එතකොට මම කියනවා මේක මගේ පළාතේ වැඩ කරන්නේ නැහැ කියලා. එනම්, අපට මේ සම්බන්ධයෙන් එකඟ වීමට පවා නොහැකි වනු ඇත. තාක්ෂණික ගැටළු ගොඩක් ඇති බව නොකියයි. එනම්, මෙම පරීක්ෂණ ප්රමාණවත් වන පරිදි ලියන්නේ කෙසේද යන්නයි.
මම මෙම මාතෘකාව ක්රියාකාරීව පර්යේෂණ කරමින් සිටිමි, එනම් ඔබ ලියා ඇති යටිතල පහසුකම් මත පදනම්ව ස්වයංක්රීයව පරීක්ෂණ උත්පාදනය කරන්නේ කෙසේද යන්නයි. එනම්, ඔබ මෙම කේතය ලිව්වේ නම්, මට එය ක්රියාත්මක කිරීමට අවශ්යයි, මේ මත පදනම්ව මට පරීක්ෂණ නිර්මාණය කළ හැකිය.
ඇන්ටන්, වාර්තාවට ස්තූතියි! මගේ නම වැලරි. මට පොඩි දාර්ශනික ප්රශ්නයක් අහන්න දෙන්න. කොන්දේසි සහිතව, ප්රතිපාදන ඇත, යෙදවීම ඇත. ප්රතිපාදන මගේ යටිතල ව්යුහය නිර්මාණය කරයි, යෙදවීමේදී අපි එය ප්රයෝජනවත් දෙයකින් පුරවන්නෙමු, උදාහරණයක් ලෙස, සේවාදායකයන්, යෙදුම් යනාදිය. තවද ටෙරාෆෝම් ප්රතිපාදන සඳහා වැඩි බවත්, යෙදවීමට ඇන්සිබල් වැඩි බවත් මගේ ඔළුවේ ඇත, මන්ද ඇන්සිබල් භෞතික යටිතල පහසුකම් සඳහා ද වේ. nginx, Postgres ස්ථාපනය කිරීමට ඔබට ඉඩ සලසයි. නමුත් ඒ සමඟම, ඇන්සිබල් ඇමේසන් හෝ ගූගල් සම්පත් සැපයීමට ඉඩ දෙන බව පෙනේ. නමුත් Terraform ඔබට එහි මොඩියුල භාවිතා කරමින් සමහර මෘදුකාංග යෙදවීමටද ඉඩ සලසයි. ඔබේ දෘෂ්ටි කෝණයෙන්, Terraform සහ Ansible අතර දිවෙන යම් ආකාරයක මායිමක් තිබේද, කොහෙද සහ භාවිතා කිරීමට වඩා හොඳ කුමක්ද? නැතහොත්, උදාහරණයක් ලෙස, ඇන්සිබල් දැනටමත් කසළ බව ඔබ සිතන්නේ, ඔබ සෑම දෙයක් සඳහාම Terraform භාවිතා කිරීමට උත්සාහ කළ යුතුද?
හොඳ ප්රශ්නයක්, වැලරි. 2014 සිට අරමුණ අනුව Terraform වෙනස් වී නැති බව මම විශ්වාස කරමි. එය යටිතල පහසුකම් සඳහා නිර්මාණය වූ අතර යටිතල පහසුකම් සඳහා මිය ගියේය. අපට තවමත් වින්යාස කළමණාකරණ ඇන්සිබල් අවශ්යතාවයක් තිබුණි. අභියෝගය වන්නේ launch_configuration තුළ පරිශීලක දත්ත තිබීමයි. සහ එතනදී ඔබ ඇන්සිබල්, ආදිය අදින්න. මම වඩාත් කැමති සම්මත වෙනස මෙයයි.
අපි ලස්සන යටිතල පහසුකම් ගැන කතා කරන්නේ නම්, මෙම රූපය එකතු කරන පැකර් වැනි උපයෝගිතා තිබේ. ඉන්පසු Terraform මෙම රූපය සොයා ගැනීමට සහ එහි launch_configuration යාවත්කාලීන කිරීමට දත්ත මූලාශ්රය භාවිතා කරයි. එනම්, මේ ආකාරයෙන් නල මාර්ගය අපි මුලින්ම Tracker අදින්න, පසුව Terraform අදින්න. තවද ගොඩනැගීම සිදු වුවහොත්, නව වෙනසක් සිදු වේ.
ආයුබෝවන්! වාර්තාවට ස්තූතියි! මගේ නම මීෂා, RBS සමාගම. ඔබට සම්පතක් නිර්මාණය කිරීමේදී ප්රතිපාදක හරහා Ansible ඇමතිය හැක. Ansible වලට dynamic inventory කියලා මාතෘකාවකුත් තියෙනවා. ඔබට මුලින්ම Terraform අමතන්න, ඉන්පසු Ansible අමතන්න, එය රාජ්යයෙන් සම්පත් ලබාගෙන එය ක්රියාත්මක කරයි. වඩා හොඳ කුමක්ද?
මිනිසුන් දෙකම එක හා සමාන සාර්ථකත්වයකින් භාවිතා කරයි. අපි ස්වයංක්රීය පරිමාණය කිරීමේ කණ්ඩායම ගැන කතා නොකරන්නේ නම්, ඇන්සිබල් හි ගතික ඉන්වෙන්ටරි පහසු දෙයක් බව මට පෙනේ. මක්නිසාද යත් ස්වයංක්රීය පරිමාණය කිරීමේ කණ්ඩායම තුළ අපට දැනටමත් අපගේම මෙවලම් කට්ටලයක් ඇත, එය launch_configuration ලෙස හැඳින්වේ. Launch_configration හි අපි නව සම්පතක් සාදන විට දියත් කිරීමට අවශ්ය සියල්ල සටහන් කරමු. එබැවින්, Amazon සමඟ ගතික ඉන්වෙන්ටරි භාවිතා කිරීම සහ Terraform ts ගොනුව කියවීම, මගේ මතය අනුව, අතිශයෝක්තියකි. ඔබ “ස්වයං පරිමාණ සමූහය” පිළිබඳ සංකල්පයක් නොමැති වෙනත් මෙවලම් භාවිතා කරන්නේ නම්, උදාහරණයක් ලෙස, ඔබ ස්වයංක්රීය පරිමාණ සමූහයක් නොමැති ඩිජිටල් ඕෂන් හෝ වෙනත් සැපයුම්කරුවෙකු භාවිතා කරන්නේ නම්, එහිදී ඔබට API අතින් ඇද ගැනීමට, IP ලිපින සොයා ගැනීමට, නිර්මාණය කිරීමට සිදුවේ. ගතික ඉන්වෙන්ටරි ගොනුවක් , සහ Ansible දැනටමත් එය හරහා සැරිසරනු ඇත. එනම්, Amazon සඳහා launch_configuration ඇති අතර අනෙක් සියල්ල සඳහා ගතික ඉන්වෙන්ටරි ඇත.
මූලාශ්රය: www.habr.com