Terraformer - መሠረተ ልማት ወደ ኮድ

Terraformer - መሠረተ ልማት ወደ ኮድ
የድሮ ችግርን ለመፍታት ስለጻፍኩት አዲሱ የ CLI መሳሪያ ልነግርዎ እፈልጋለሁ።

ችግር

ቴራፎርም በDevops/Cloud/IT ማህበረሰብ ውስጥ የረዥም ጊዜ መስፈርት ሆኖ ቆይቷል። ነገሩ በጣም ምቹ እና እንደ ኮድ ከመሠረተ ልማት ጋር ለመገናኘት ጠቃሚ ነው. በቴራፎርም ውስጥ ብዙ ደስታዎች እንዲሁም ብዙ ሹካዎች፣ ስለታም ቢላዎች እና ራኮች አሉ።
በ Terraform አዳዲስ ነገሮችን ለመፍጠር እና ከዚያ ለማስተዳደር, ለመለወጥ ወይም ለመሰረዝ በጣም ምቹ ነው. በደመና ውስጥ ትልቅ መሠረተ ልማት ያላቸው እና በቴራፎርም ያልተፈጠሩ ምን ማድረግ አለባቸው? መላውን ደመና እንደገና መጻፍ እና እንደገና መፍጠር እንደምንም ውድ እና ደህንነቱ ያልተጠበቀ ነው።
ይህንን ችግር በ 2 ስራዎች አጋጥሞኛል, ቀላሉ ምሳሌ ሁሉም ነገር በጊት ውስጥ በቴራፎርም ፋይሎች ውስጥ እንዲሆን ሲፈልጉ ነው, ነገር ግን 250+ ባልዲዎች አሉዎት እና በቴራፎርም ውስጥ በእጅ መጻፍ በጣም ብዙ ነው.
አሉ ርዕሰ ጉዳይ ከ 2014 ጀምሮ በ 2016 በተዘጋው terrafom ውስጥ ከውጭ እንደሚመጣ ተስፋ በማድረግ ።

በአጠቃላይ ሁሉም ነገር በሥዕሉ ላይ እንደሚታየው ከቀኝ ወደ ግራ ብቻ ነው

ማስጠንቀቂያዎች: ደራሲው በሩስያ ውስጥ በግማሽ ህይወቱ ውስጥ አይኖርም እና በሩሲያኛ ትንሽ ይጽፋል. የፊደል ስህተቶች ይጠንቀቁ.

መፍትሔዎች

1. ለ AWS ዝግጁ የሆነ እና አሮጌ መፍትሄ አለ terraforming. 250+ ባልዲዎቼን ለማግኘት ስሞክር ሁሉም ነገር እዚያ መጥፎ እንደሆነ ተረዳሁ። AWS ከረዥም ጊዜ ጀምሮ ብዙ አዳዲስ አማራጮችን እያስተዋወቀ ነው, ነገር ግን ቴራፎርሜሽን ስለእነሱ አያውቅም እና በአጠቃላይ ይህ ሩቢ ነው. አብነቱ ትንሽ ይመስላል. ከምሽቱ 2 ሰዓት በኋላ ላከኝ። ጥያቄን ይጎትቱ እዚያ ተጨማሪ ባህሪያትን ለመጨመር እና እንዲህ ዓይነቱ መፍትሄ በጭራሽ ተስማሚ እንዳልሆነ ተገነዘበ.
ቴራፎርሚንግ እንዴት እንደሚሰራ፡ ከAWS ኤስዲኬ መረጃን ይወስዳል እና tf እና tfstateን በአብነት ያመነጫል።
እዚህ 3 ችግሮች አሉ:
1. ሁልጊዜ የዝማኔዎች መዘግየት ይኖራል
2. tf ፋይሎች አንዳንድ ጊዜ ተሰባብረው ይወጣሉ
3. tfstate ከ tf ተለይቶ ይሰበሰባል እና ሁልጊዜ አይሰበሰብም።
በአጠቃላይ `terraform plan` ምንም አይነት ለውጦች የሉም የሚል ውጤት ለማግኘት አስቸጋሪ ነው።

2. `terraform import` በቴራፎርም ውስጥ አብሮ የተሰራ ትእዛዝ ነው። እንዴት ነው የሚሰራው?
ባዶ የቲኤፍ ፋይል በንብረት ስም እና ዓይነት ይጽፋሉ፣ከዚያ `terraform import`ን ያስኪዱ እና የንብረት መታወቂያውን ያልፉ። ቴራፎርም አቅራቢውን ያነጋግራል፣ መረጃውን ይቀበላል እና tfstate ፋይል ያደርጋል።
እዚህ 3 ችግሮች አሉ:
1. እኛ የምናገኘው tfstate ፋይል ብቻ ነው, እና tf ባዶ ነው, እራስዎ መጻፍ ወይም ከ tfstate መለወጥ ያስፈልግዎታል.
2. በአንድ ጊዜ ከአንድ ምንጭ ጋር ብቻ መስራት ይችላል እና ሁሉንም ሀብቶች አይደግፍም. እና በ 250+ ባልዲዎች እንደገና ምን ማድረግ አለብኝ?
3. የሀብቱን መታወቂያ ማወቅ አለብህ - ማለትም የሀብቱን ዝርዝር በሚያገኝ ኮድ መጠቅለል አለብህ።
በአጠቃላይ ውጤቱ ከፊል ነው እና በደንብ አይለካም

የእኔ ውሳኔ

መስፈርቶች
1. tf እና tfstate ፋይሎችን ለሃብቶች የመፍጠር ችሎታ። ለምሳሌ፣ ሁሉንም ባልዲ/የደህንነት ቡድን/የጭነት ሚዛኑን ያውርዱ እና “የቴራፎርም እቅድ” ምንም ለውጦች እንዳልነበሩ ተመልሷል።
2. 2 GCP + AWS ደመና ያስፈልግዎታል
3. አለም አቀፍ መፍትሄ በእያንዳንዱ ጊዜ ለማዘመን ቀላል እና በእያንዳንዱ ሃብት ላይ ለ 3 ቀናት የስራ ጊዜ አያጠፋም
4. ክፍት ምንጭ ያድርጉት - ሁሉም ሰው ተመሳሳይ ችግር አለበት

የ Go ቋንቋ ለምን እንደወደድኩት ነው፣ እና በቴራፎርም ውስጥ ጥቅም ላይ የሚውሉ የHCL ፋይሎችን ለመፍጠር ቤተ-መጽሐፍት አለው + ብዙ ኮድ በ terraform ጠቃሚ ሊሆን ይችላል

መንገድ

የመጀመሪያ ሙከራ
በቀላል ስሪት ጀመርኩ። የሚፈለገውን ግብአት ለማግኘት ደመናውን በኤስዲኬ በኩል በማነጋገር እና ለቴራፎርም ወደ መስኮች መለወጥ። ሙከራው ወዲያውኑ በደህንነት ቡድኑ ላይ ሞተ ምክንያቱም የደህንነት ቡድኑን ብቻ ለመለወጥ 1.5 ቀናትን ስላልወደድኩ (እና ብዙ ሀብቶች አሉ)። ለረጅም ጊዜ እና ከዚያም መስኮች ሊለወጡ / ሊጨመሩ ይችላሉ

ሁለተኛ ሙከራ
በተገለጸው ሀሳብ ላይ በመመስረት እዚህ. ልክ ወስደህ tfstate ወደ tf ቀይር። ሁሉም መረጃዎች እዚያ አሉ እና መስኮቹ ተመሳሳይ ናቸው. ለብዙ ሀብቶች ሙሉ tfstate እንዴት ማግኘት ይቻላል ?? የ'terraform refresh' ትዕዛዝ ለማዳን የመጣው እዚህ ላይ ነው። ቴራፎርም በ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. መታወቂያ - ሕብረቁምፊ
2. ሜታዳታ - የመጠን 1 ድርድር እና በውስጡ ከዚህ በታች የተገለፀው መስኮች ያሉት ነገር
3. spec - መጠን 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 መሳሪያ አግኝተናል እና በቀላሉ አዲስ ማከል ይችላሉ። እንዲሁም ሀብቶችን ማከል ትንሽ ኮድ ይወስዳል። በተጨማሪም እንደ ሀብቶች መካከል ያሉ ግንኙነቶችን የመሳሰሉ ሁሉንም አይነት ጥሩ ነገሮች. እርግጥ ነው, ሁሉንም ሊገለጹ የማይችሉ ብዙ የተለያዩ ችግሮች ነበሩ.
እንስሳውን ቴራፎመር ብዬ ጠራሁት።

የመጨረሻ

ቴራፎመርን በመጠቀም 500-700 ሺህ መስመሮችን tf + tfstate ኮድ ከሁለት ደመናዎች አመጣን. የቆዩ ነገሮችን ወስደን መንካት የጀመርነው በቴራፎርም ብቻ ነው፣ እንደ ምርጥ መሠረተ ልማት እንደ ኮድ ሃሳቦች። አንድ ትልቅ ደመና ወስደህ በቴራፎርም ሰራተኛ ፋይሎች መልክ በቡድን ስትቀበል አስማት ብቻ ነው። እና ከዚያ grep / ተካ / git እና ወዘተ.

ማበጠርና በቅደም ተከተል አስቀምጬለት ፈቃድ አገኘሁ። ሐሙስ (02.05.19/XNUMX/XNUMX) በ GitHub ላይ ለሁሉም የተለቀቀ። github.com/GoogleCloudPlatform/terraformer
ቀድሞውንም 600 ኮከቦችን ተቀብሏል፣ 2 ለክፍት ስታክ እና ለኩበርኔትስ ድጋፍ ለመጨመር XNUMX የመሳብ ጥያቄዎችን ተቀብሏል። ጥሩ አስተያየት። በአጠቃላይ ፕሮጀክቱ ለሰዎች ጠቃሚ ነው
ከቴራፎርም ጋር መስራት ለመጀመር ለሚፈልጉ ሁሉ እመክራቸዋለሁ እና ለዚህ ሁሉንም ነገር እንደገና አይጻፉ.
ጥያቄዎችን፣ ጉዳዮችን፣ ኮከቦችን በመጎተት ደስተኛ ነኝ።

Demo
Terraformer - መሠረተ ልማት ወደ ኮድ

ምንጭ: hab.com

አስተያየት ያክሉ