paint-brush
Terraform State को GitLab CI/CD में माइग्रेट करने के लिए एक हैंडी गाइडद्वारा@bluelightconsulting
1,878 रीडिंग
1,878 रीडिंग

Terraform State को GitLab CI/CD में माइग्रेट करने के लिए एक हैंडी गाइड

द्वारा Bluelight Consulting6m2023/02/21
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

टेराफॉर्म इंफ्रास्ट्रक्चर के लिए कोड (IaC) के रूप में एक सॉफ्टवेयर टूल है, यह एक राज्य फ़ाइल के माध्यम से आपके कोड में परिभाषित बुनियादी ढांचे के बारे में किसी भी जानकारी को रिकॉर्ड करता है। GitLab ने हाल ही में टेराफॉर्म राज्य को स्टोर और प्रबंधित करने का एक तरीका प्रदान करके, साथ ही इसके चारों ओर एक सीआई स्थापित करने का एक आसान तरीका प्रदान करके टेराफॉर्म को एकीकृत करने के लिए प्रवेश बाधा को कम किया।
featured image - Terraform State को GitLab CI/CD में माइग्रेट करने के लिए एक हैंडी गाइड
Bluelight Consulting HackerNoon profile picture


कोड (IaC) के रूप में इन्फ्रास्ट्रक्चर को संभालने वाले एक सॉफ्टवेयर पेशेवर के रूप में, संभावना है कि आप बहुत काम करते हैं terraform . नए ग्राहकों को IaC का उपयोग करने में मदद करते समय, चीजों को सरल बनाना आम बात है, लेकिन टेराफॉर्म स्टेट फाइल को प्रबंधित करना आपके सामने आने वाली पहली चुनौती है। अनिवार्य रूप से, टेराफॉर्म राज्य में संवेदनशील जानकारी होती है जिसे स्रोत नियंत्रण द्वारा संग्रहीत नहीं किया जाना चाहिए, लेकिन साथ ही, यदि आपके पास एक ही टेराफॉर्म स्थिति पर काम करने वाले एकाधिक उपयोगकर्ता हैं तो स्केल नहीं किया जाएगा। इसका उत्तर? बैकएंड।


यह नोट करना महत्वपूर्ण है कि आप उस स्टेट फाइल को S3 बकेट पर स्टोर कर सकते हैं और लॉकिंग स्टेट को प्रबंधित करने के लिए DynamoDB का उपयोग कर सकते हैं। हालाँकि, यह दृष्टिकोण आपको अतिरिक्त संसाधन बनाने के लिए मजबूर करेगा जो इसे एक जटिल विकल्प बनाता है, खासकर यदि क्लाइंट GitLab का उपयोग कर रहा है। GitLab ने हाल ही में Terraform स्थिति को संग्रहीत और प्रबंधित करने का एक तरीका प्रदान करके, साथ ही इसके चारों ओर एक CI स्थापित करने का एक आसान तरीका प्रदान करके टेराफॉर्म को एकीकृत करने के लिए प्रवेश बाधा को कम किया।


इस ब्लॉग पोस्ट में, हम बताएंगे कि टेराफॉर्म स्टेट फाइल क्या है, इसे GitLab में कैसे माइग्रेट करें और इसके लिए CI पाइपलाइन कैसे सेट करें। आप हमारे भंडार पर जा सकते हैं यहाँ .

विषयसूची

  • टेराफॉर्म स्टेट क्या है?
  • टेराफॉर्म स्थिति को प्रबंधित करने के लिए GitLab कैसे प्राप्त करें
  • CI पाइपलाइन के माध्यम से अपने IaC को चलाने के लिए GitLab कैसे प्राप्त करें
  • बोनस टिप: इंफ्राकॉस्ट
  • निष्कर्ष

टेराफॉर्म स्टेट क्या है?

टेराफॉर्म एक राज्य फ़ाइल के माध्यम से आपके कोड में परिभाषित बुनियादी ढांचे के बारे में किसी भी जानकारी को रिकॉर्ड करता है। JSON में लिखा गया है, यह अनिवार्य रूप से बनाए गए वास्तविक संसाधनों के लिए टेराफॉर्म कोड से मैपिंग रिकॉर्ड करता है। नीचे एक उदाहरण दिया गया है कि terraform.tfstate कैसा दिखेगा।


मुख्य रूप से, हर बार जब आप टेराफॉर्म चलाते हैं तो यह अपने ईसी2 इंस्टेंस के लिए नवीनतम स्थिति प्राप्त करेगा और इसकी तुलना आपके टेराफॉर्म कॉन्फ़िगरेशन से करेगा ताकि यह निर्धारित किया जा सके कि किन परिवर्तनों को लागू करने की आवश्यकता है।


 { "version": 4, "terraform_version": "0.12.0", "serial": 1, "lineage": "1f2087f9-4b3c-1b66-65db-8b78faafc6fb", "outputs": {}, "resources": [ { "mode": "managed", "type": "aws_instance", "name": "example", "provider": "provider.aws", "instances": [ { "schema_version": 1, "attributes": { "ami": "ami-0c55b159cbfafe1f0", "availability_zone": "us-west-2a", "id": "i-00a123a0accffffff", "instance_state": "running", "instance_type": "t2.micro", "(...)": "(truncated)" } } ] } ] }


डिफ़ॉल्ट रूप से, यह terraform.tfstate स्थानीय रूप से संग्रहीत होता है जहां आपके पास अपनी टेराफॉर्म फ़ाइलें होती हैं, योजना बनाते हैं और अपने परिवर्तन लागू करते हैं। एक व्यक्तिगत परियोजना के लिए जहां आप केवल कुछ परीक्षण चला रहे हैं, यह ठीक है लेकिन अनुशंसित तरीका नहीं है, इसकी वजह यहां दी गई है:

  • एक साझा स्थान में संग्रहीत: यदि आप इस राज्य फ़ाइल को अपने स्थानीय वर्कस्टेशन पर होस्ट कर रहे थे और किसी अन्य इंजीनियर के साथ काम करना पड़ा, तो चीजें जटिल हो जाएंगी। आप दोनों को यह सुनिश्चित करना होगा कि आप राज्य के नवीनतम संस्करण का उपयोग कर रहे हैं और यदि आप टेराफॉर्म योजना चलाते हैं या उसी समय आवेदन करते हैं तो आप दौड़ की स्थिति में आ सकते हैं।
  • संवेदनशील जानकारी को सुरक्षित रखें: जनरेट की गई स्टेट फ़ाइल में एन्क्रिप्शन कुंजियाँ और इन्फ्रास्ट्रक्चर पासवर्ड हो सकते हैं। हालाँकि, राज्य फ़ाइलों को डिफ़ॉल्ट रूप से एन्क्रिप्ट नहीं किया जाता है, और संवेदनशील जानकारी को सादे पाठ में संग्रहीत करना एक बुरा विचार है।
  • लॉकिंग: अधिकांश वर्जन कंट्रोल सिस्टम लॉकिंग के किसी भी रूप का समर्थन नहीं करते हैं जो टीम के दो सदस्यों को एक ही राज्य फ़ाइल पर एक साथ टेराफॉर्म लागू करने से रोकता है। यह एक और कारण है कि हम स्रोत नियंत्रण द्वारा प्रबंधित राज्य फ़ाइल क्यों नहीं देखेंगे।

टेराफॉर्म स्टेट को प्रबंधित करने के लिए GitLab कैसे प्राप्त करें

टेराफॉर्म को क्लाउड इन्फ्रास्ट्रक्चर प्रोविजनिंग में मानक माना जाता है, एक साल या उससे अधिक समय हो गया है जब से गिटलैब ने आपके टेराफॉर्म स्टेट को स्टोर और प्रबंधित करने का एक तरीका पेश करना शुरू किया है। इस कारण से, हम आपके साथ माइग्रेशन प्रक्रिया साझा करना चाहते थे क्योंकि हमने हाल ही में अपने IaC को प्रबंधित करने के लिए GitLab का उपयोग करना शुरू किया था।


इस लेख के लिए, हम मानते हैं कि आप एक स्थानीय राज्य का उपयोग कर रहे हैं, और अपने राज्य को AWS S3 बकेट या अन्य बैकएंड समाधान के साथ प्रबंधित किया है।

HTTP का उपयोग करने के लिए सबसे पहले आपको अपने backend.tf को बदलना होगा।


 terraform { backend "http" {} }


अगला, आपको अपने टर्मिनल में 4 चर सेट करने होंगे:

  • PROJECT_ID: आप इसे प्रोजेक्ट ओवरव्यू पेज पर अपने रेपो में नेविगेट करके आसानी से पा सकते हैं

__ टेराफॉर्म प्रोजेक्ट बैकएंड __

  • TF_USERNAME: Gitlab उपयोगकर्ता नाम जिसके पास उस रेपो तक पहुंच है जिस पर आप काम कर रहे हैं।
  • TF_PASSWORD: आपके GitLab उपयोगकर्ता द्वारा उत्पन्न एक्सेस टोकन।
  • TF_ADDRESS: दूरस्थ राज्य बैकएंड का URL


 PROJECT_ID="28450092" TF_USERNAME="florianpialoux" TF_PASSWORD="123456789" TF_ADDRESS="https://gitlab.com/api/v4/projects/${PROJECT_ID}/terraform/state/aws-buckets"


अब आप माइग्रेशन कमांड चला सकते हैं जो आपके टेराफॉर्म स्टेट को उसके पिछले स्थान से GitLab में निम्न कमांड के साथ ले जाएगा:


 terraform init \ -migrate-state \ -backend-config=address=${TF_ADDRESS} \ -backend-config=lock_address=${TF_ADDRESS}/lock \ -backend-config=unlock_address=${TF_ADDRESS}/lock \ -backend-config=username=${TF_USERNAME} \ -backend-config=password=${TF_PASSWORD} \ -backend-config=lock_method=POST \ -backend-config=unlock_method=DELETE \ -backend-config=retry_wait_min=5


आपको "हाँ" द्वारा एक पुष्टि प्रदान करने की आवश्यकता होगी ताकि GitLab आपकी राज्य फ़ाइल का प्रबंधन शुरू कर सके। यहाँ स्थानीय राज्य से GitLab का एक उदाहरण दिया गया है:

__ टेराफॉर्म स्थानीय राज्य उदाहरण __

GitLab के लिए उदाहरण s3

__ S3 से Gitlab माइग्रेट स्टेट का उदाहरण __

अब आप GitLab इंटरफ़ेस से Infrastructure > Terraform पर नेविगेट कर सकते हैं और अपनी स्थिति देख सकते हैं:

__ Gitlab इन्फ्रास्ट्रक्चर इंटरफ़ेस __

मैंने देखा कि मेरे पास एस 3 से कुछ राज्य फाइलें थीं जो माइग्रेट-स्टेट कमांड का उपयोग करने के बाद भी खाली होंगी, इस मामले में, आप इसे चला सकते हैं:


 terraform state pull > aws-buckets.json


सामग्री को s3 स्थिति से कॉपी और पेस्ट करें और एक पुश चलाएँ:


 terraform state push -lock=true aws-buckets.json


GitLab आपकी Terraform स्टेट फ़ाइल के लिए वर्जनिंग का समर्थन करता है लेकिन WebUI के माध्यम से पुराने संस्करणों को देखने/पुनर्स्थापित करने के लिए आपको एक का उपयोग करने की आवश्यकता होगी GitLab प्रीमियम योजना . यदि नहीं, तो आपको एक ग्राफक्यूएल एपीआई बनाना होगा अनुरोध .

CI पाइपलाइन के माध्यम से अपने IaC को चलाने के लिए GitLab कैसे प्राप्त करें

गिटलैब प्रदान करता है एक डॉकटर छवि जिसमें GitLab-Terraform शामिल है, जो आधिकारिक Terraform बाइनरी के चारों ओर एक पतली आवरण वाली स्क्रिप्ट है। वैकल्पिक रूप से, आप का उपयोग कर सकते हैं आधिकारिक डॉकटर छवि हैशिकॉर्प द्वारा। आप GitLab Terraform Image के बारे में अधिक जानकारी प्राप्त कर सकते हैं यहाँ .

एक बार टेराफॉर्म अप्लाई जॉब चलने के बाद, आप यह देख पाएंगे कि राज्य का उपयोग कब और किस पाइपलाइन के साथ किया गया था।

__ टेराफॉर्म गिटलैब इंटरफ़ेस में नौकरी लागू करता है __

इस बारे में अधिक जानें कि हमारा gitlab-ci.yml कैसा दिखता है यहाँ . नीचे वे चर हैं जिन्हें परियोजना स्तर पर परिभाषित करने की आवश्यकता होगी:

__ GitLab-ci.yml प्रोजेक्ट चर __

बोनस टिप: इंफ्राकॉस्ट

जैसा कि आपने देखा होगा, हमारे gitlab-ci.yaml को देखते हुए हमने जोड़ा इंफ्राकॉस्ट जो हमें हमारे क्लाउड बिलिंग पर अधिक नियंत्रण रखने की अनुमति देता है क्योंकि जब भी आप अपने IaC के लिए एक नया संसाधन परिभाषित करते हैं तो यह आपको एक लागत अनुमान देता है। इन्फ्राकॉस्ट के बारे में अधिक जानने के लिए, आप हमारी गहराई से जाँच कर सकते हैं लेख इसके बारे में क्या है, और हमारे कदम-दर-कदम मार्गदर्शक टेराफॉर्म के साथ इसे कैसे एकीकृत किया जाए।

निष्कर्ष

अपने Terraform राज्य और CI को Gitlab पर चलाना, GitOps की सर्वोत्तम प्रथाओं का पालन करने का एक शानदार तरीका है। वे दोनों IaC को विकसित और परिनियोजित करने के लिए एक बेहतरीन संयोजन बनाते हैं। चूँकि आप में से अधिकांश पहले से ही अपने रिपॉजिटरी के लिए GitLab का उपयोग कर रहे होंगे, इसलिए आपके IaC को एक ही छत के नीचे रखना बहुत आसान हो जाता है और GitLab को ट्रांज़िट और आराम के दौरान एन्क्रिप्शन का समर्थन करके, साथ ही वर्ज़निंग, लॉकिंग और अनलॉक करके अपनी टेराफ़ॉर्म स्थिति का प्रबंधन करने दें। राज्य।


यहाँ भी प्रकाशित हुआ।