कोड (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
__ __
अब आप GitLab इंटरफ़ेस से Infrastructure > Terraform पर नेविगेट कर सकते हैं और अपनी स्थिति देख सकते हैं:
__ __
मैंने देखा कि मेरे पास एस 3 से कुछ राज्य फाइलें थीं जो माइग्रेट-स्टेट कमांड का उपयोग करने के बाद भी खाली होंगी, इस मामले में, आप इसे चला सकते हैं:
terraform state pull > aws-buckets.json
सामग्री को s3 स्थिति से कॉपी और पेस्ट करें और एक पुश चलाएँ:
terraform state push -lock=true aws-buckets.json
GitLab आपकी Terraform स्टेट फ़ाइल के लिए वर्जनिंग का समर्थन करता है लेकिन WebUI के माध्यम से पुराने संस्करणों को देखने/पुनर्स्थापित करने के लिए आपको एक का उपयोग करने की आवश्यकता होगी
CI पाइपलाइन के माध्यम से अपने IaC को चलाने के लिए GitLab कैसे प्राप्त करें
गिटलैब प्रदान करता है
एक बार टेराफॉर्म अप्लाई जॉब चलने के बाद, आप यह देख पाएंगे कि राज्य का उपयोग कब और किस पाइपलाइन के साथ किया गया था।
__ __
इस बारे में अधिक जानें कि हमारा gitlab-ci.yml कैसा दिखता है
__ __
बोनस टिप: इंफ्राकॉस्ट
जैसा कि आपने देखा होगा, हमारे gitlab-ci.yaml को देखते हुए हमने जोड़ा
निष्कर्ष
अपने Terraform राज्य और CI को Gitlab पर चलाना, GitOps की सर्वोत्तम प्रथाओं का पालन करने का एक शानदार तरीका है। वे दोनों IaC को विकसित और परिनियोजित करने के लिए एक बेहतरीन संयोजन बनाते हैं। चूँकि आप में से अधिकांश पहले से ही अपने रिपॉजिटरी के लिए GitLab का उपयोग कर रहे होंगे, इसलिए आपके IaC को एक ही छत के नीचे रखना बहुत आसान हो जाता है और GitLab को ट्रांज़िट और आराम के दौरान एन्क्रिप्शन का समर्थन करके, साथ ही वर्ज़निंग, लॉकिंग और अनलॉक करके अपनी टेराफ़ॉर्म स्थिति का प्रबंधन करने दें। राज्य।
यहाँ भी प्रकाशित हुआ।