कोड (IaC) के रूप में इन्फ्रास्ट्रक्चर को संभालने वाले एक सॉफ्टवेयर पेशेवर के रूप में, संभावना है कि आप बहुत काम करते हैं
यह नोट करना महत्वपूर्ण है कि आप उस स्टेट फाइल को S3 बकेट पर स्टोर कर सकते हैं और लॉकिंग स्टेट को प्रबंधित करने के लिए DynamoDB का उपयोग कर सकते हैं। हालाँकि, यह दृष्टिकोण आपको अतिरिक्त संसाधन बनाने के लिए मजबूर करेगा जो इसे एक जटिल विकल्प बनाता है, खासकर यदि क्लाइंट GitLab का उपयोग कर रहा है। GitLab ने हाल ही में Terraform स्थिति को संग्रहीत और प्रबंधित करने का एक तरीका प्रदान करके, साथ ही इसके चारों ओर एक CI स्थापित करने का एक आसान तरीका प्रदान करके टेराफॉर्म को एकीकृत करने के लिए प्रवेश बाधा को कम किया।
इस ब्लॉग पोस्ट में, हम बताएंगे कि टेराफॉर्म स्टेट फाइल क्या है, इसे GitLab में कैसे माइग्रेट करें और इसके लिए CI पाइपलाइन कैसे सेट करें। आप हमारे भंडार पर जा सकते हैं
टेराफॉर्म एक राज्य फ़ाइल के माध्यम से आपके कोड में परिभाषित बुनियादी ढांचे के बारे में किसी भी जानकारी को रिकॉर्ड करता है। 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 स्थानीय रूप से संग्रहीत होता है जहां आपके पास अपनी टेराफॉर्म फ़ाइलें होती हैं, योजना बनाते हैं और अपने परिवर्तन लागू करते हैं। एक व्यक्तिगत परियोजना के लिए जहां आप केवल कुछ परीक्षण चला रहे हैं, यह ठीक है लेकिन अनुशंसित तरीका नहीं है, इसकी वजह यहां दी गई है:
टेराफॉर्म को क्लाउड इन्फ्रास्ट्रक्चर प्रोविजनिंग में मानक माना जाता है, एक साल या उससे अधिक समय हो गया है जब से गिटलैब ने आपके टेराफॉर्म स्टेट को स्टोर और प्रबंधित करने का एक तरीका पेश करना शुरू किया है। इस कारण से, हम आपके साथ माइग्रेशन प्रक्रिया साझा करना चाहते थे क्योंकि हमने हाल ही में अपने IaC को प्रबंधित करने के लिए GitLab का उपयोग करना शुरू किया था।
इस लेख के लिए, हम मानते हैं कि आप एक स्थानीय राज्य का उपयोग कर रहे हैं, और अपने राज्य को AWS S3 बकेट या अन्य बैकएंड समाधान के साथ प्रबंधित किया है।
HTTP का उपयोग करने के लिए सबसे पहले आपको अपने backend.tf को बदलना होगा।
terraform { backend "http" {} }
अगला, आपको अपने टर्मिनल में 4 चर सेट करने होंगे:
__ __
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 के माध्यम से पुराने संस्करणों को देखने/पुनर्स्थापित करने के लिए आपको एक का उपयोग करने की आवश्यकता होगी
गिटलैब प्रदान करता है
एक बार टेराफॉर्म अप्लाई जॉब चलने के बाद, आप यह देख पाएंगे कि राज्य का उपयोग कब और किस पाइपलाइन के साथ किया गया था।
__ __
इस बारे में अधिक जानें कि हमारा gitlab-ci.yml कैसा दिखता है
__ __
जैसा कि आपने देखा होगा, हमारे gitlab-ci.yaml को देखते हुए हमने जोड़ा
अपने Terraform राज्य और CI को Gitlab पर चलाना, GitOps की सर्वोत्तम प्रथाओं का पालन करने का एक शानदार तरीका है। वे दोनों IaC को विकसित और परिनियोजित करने के लिए एक बेहतरीन संयोजन बनाते हैं। चूँकि आप में से अधिकांश पहले से ही अपने रिपॉजिटरी के लिए GitLab का उपयोग कर रहे होंगे, इसलिए आपके IaC को एक ही छत के नीचे रखना बहुत आसान हो जाता है और GitLab को ट्रांज़िट और आराम के दौरान एन्क्रिप्शन का समर्थन करके, साथ ही वर्ज़निंग, लॉकिंग और अनलॉक करके अपनी टेराफ़ॉर्म स्थिति का प्रबंधन करने दें। राज्य।
यहाँ भी प्रकाशित हुआ।