የድሮ ችግርን ለመፍታት ስለጻፍኩት አዲሱ የ CLI መሳሪያ ልነግርዎ እፈልጋለሁ።
ችግር
ቴራፎርም በDevops/Cloud/IT ማህበረሰብ ውስጥ የረዥም ጊዜ መስፈርት ሆኖ ቆይቷል። ነገሩ በጣም ምቹ እና እንደ ኮድ ከመሠረተ ልማት ጋር ለመገናኘት ጠቃሚ ነው. በቴራፎርም ውስጥ ብዙ ደስታዎች እንዲሁም ብዙ ሹካዎች፣ ስለታም ቢላዎች እና ራኮች አሉ።
በ Terraform አዳዲስ ነገሮችን ለመፍጠር እና ከዚያ ለማስተዳደር, ለመለወጥ ወይም ለመሰረዝ በጣም ምቹ ነው. በደመና ውስጥ ትልቅ መሠረተ ልማት ያላቸው እና በቴራፎርም ያልተፈጠሩ ምን ማድረግ አለባቸው? መላውን ደመና እንደገና መጻፍ እና እንደገና መፍጠር እንደምንም ውድ እና ደህንነቱ ያልተጠበቀ ነው።
ይህንን ችግር በ 2 ስራዎች አጋጥሞኛል, ቀላሉ ምሳሌ ሁሉም ነገር በጊት ውስጥ በቴራፎርም ፋይሎች ውስጥ እንዲሆን ሲፈልጉ ነው, ነገር ግን 250+ ባልዲዎች አሉዎት እና በቴራፎርም ውስጥ በእጅ መጻፍ በጣም ብዙ ነው.
አሉ
በአጠቃላይ ሁሉም ነገር በሥዕሉ ላይ እንደሚታየው ከቀኝ ወደ ግራ ብቻ ነው
ማስጠንቀቂያዎች: ደራሲው በሩስያ ውስጥ በግማሽ ህይወቱ ውስጥ አይኖርም እና በሩሲያኛ ትንሽ ይጽፋል. የፊደል ስህተቶች ይጠንቀቁ.
መፍትሔዎች
1. ለ AWS ዝግጁ የሆነ እና አሮጌ መፍትሄ አለ
ቴራፎርሚንግ እንዴት እንደሚሰራ፡ ከ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 አንብበው ለማያውቁ፣ 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 ላይ ለሁሉም የተለቀቀ።
ቀድሞውንም 600 ኮከቦችን ተቀብሏል፣ 2 ለክፍት ስታክ እና ለኩበርኔትስ ድጋፍ ለመጨመር XNUMX የመሳብ ጥያቄዎችን ተቀብሏል። ጥሩ አስተያየት። በአጠቃላይ ፕሮጀክቱ ለሰዎች ጠቃሚ ነው
ከቴራፎርም ጋር መስራት ለመጀመር ለሚፈልጉ ሁሉ እመክራቸዋለሁ እና ለዚህ ሁሉንም ነገር እንደገና አይጻፉ.
ጥያቄዎችን፣ ጉዳዮችን፣ ኮከቦችን በመጎተት ደስተኛ ነኝ።
Demo
ምንጭ: hab.com