टेराफॉर्म इंटरव्यू में स्टेट पर सबसे ज़्यादा फोकस होता है, क्योंकि असली दिक्कतें ज़्यादातर स्टेट से ही आती हैं: इसे कौन रखता है, एक ही समय में कौन इसे बदल सकता है, और जब असल दुनिया इससे हटने लगती है तो क्या होता है। उसके बाद मॉड्यूल, एनवायरनमेंट, सुरक्षित बदलाव, और टीम में टेराफॉर्म कैसे चलाएँगे, ये आते हैं।
नीचे 25 सवाल उनके जवाबों के साथ दिए गए हैं। HashiCorp ने 2023 में टेराफॉर्म का लाइसेंस बदल दिया था, और कम्युनिटी फोर्क OpenTofu भी मौजूद है, तो अगर यह बात उठे तो बता दें कि टीम कौन-सा इस्तेमाल करती है। दोनों के मूल विचार और कमांड एक जैसे ही हैं।
बेसिक्स
1. टेराफॉर्म क्या है, और इन्फ्रास्ट्रक्चर ऐज़ कोड क्या है?
टेराफॉर्म एक टूल है जिससे हम कॉन्फ़िगरेशन फ़ाइलों में इन्फ्रास्ट्रक्चर define करते हैं और प्रोवाइडर APIs के ज़रिए उसे लागू करते हैं। इन्फ्रास्ट्रक्चर ऐज़ कोड का मतलब है कि सेटअप लिखा हुआ, वर्ज़न किया हुआ, रिव्यू किया हुआ और दोबारा दोहराया जा सकने वाला हो, न कि कंसोल में क्लिक-क्लिक करके बनाया गया हो।
2. डिक्लेरेटिव और इम्पेरेटिव में क्या फ़र्क है?
टेराफॉर्म डिक्लेरेटिव है: आप बताते हैं कि आपको आख़िर में क्या चाहिए, और टेराफॉर्म ख़ुद तय करता है कि कदम क्या होंगे। इम्पेरेटिव स्क्रिप्ट में आप ख़ुद कदम लिखते हैं, और उसे दो बार चलाने पर चीज़ें बिगड़ सकती हैं।
3. टेराफॉर्म के मुख्य कमांड कौन-से हैं?
| कमांड | यह क्या करता है |
|---|---|
| terraform init | प्रोवाइडर और मॉड्यूल डाउनलोड करता है, बैकएंड सेट करता है |
| terraform validate | जाँचता है कि कॉन्फ़िगरेशन सही है |
| terraform fmt | फ़ाइलों को फ़ॉर्मेट करता है |
| terraform plan | दिखाता है कि क्या-क्या बदलेगा |
| terraform apply | बदलाव लागू करता है |
| terraform destroy | मैनेज किए गए रिसोर्स हटा देता है |
| terraform import | किसी मौजूदा रिसोर्स को मैनेजमेंट के दायरे में लाता है |
| terraform state | स्टेट को देखता और एडिट करता है |
4. प्रोवाइडर, रिसोर्स और डेटा सोर्स क्या होते हैं?
प्रोवाइडर एक प्लगइन है जो AWS, Azure या Kubernetes जैसे API से बात करता है। रिसोर्स वह चीज़ है जिसे टेराफॉर्म बनाता और मैनेज करता है। डेटा सोर्स किसी ऐसी चीज़ की जानकारी पढ़ता है जो पहले से मौजूद है, जैसे कोई मौजूदा VPC या सबसे नया AMI।
5. वेरिएबल, आउटपुट और लोकल्स क्या हैं?
इनपुट वेरिएबल किसी कॉन्फ़िगरेशन को पैरामीटराइज़ करते हैं। आउटपुट वैल्यू बाहर दिखाते हैं, ताकि उन्हें कमांड लाइन पर या दूसरे मॉड्यूल में इस्तेमाल किया जा सके। लोकल्स किसी मॉड्यूल के अंदर नाम दिए हुए एक्सप्रेशन होते हैं, जो बार-बार लिखने से बचाते हैं।
स्टेट
6. टेराफॉर्म स्टेट फ़ाइल क्या है, और यह क्यों ज़रूरी है?
स्टेट आपके कॉन्फ़िगरेशन को असली रिसोर्स से जोड़ता है और उनके एट्रिब्यूट स्टोर करता है। टेराफॉर्म कॉन्फ़िगरेशन, स्टेट और असल दुनिया की तुलना करके बदलावों की योजना बनाता है। स्टेट खो गया तो टेराफॉर्म ऐसी चीज़ें दोबारा बनाने की कोशिश कर सकता है जो पहले से मौजूद हैं। इसमें सीक्रेट्स भी हो सकते हैं, इसलिए इसे संवेदनशील मानकर संभालें।
7. स्टेट कहाँ रखना चाहिए?
किसी रिमोट बैकएंड में, किसी एक व्यक्ति के लैपटॉप पर नहीं, जैसे S3 के साथ DynamoDB टेबल या नया नेटिव S3 लॉक, Azure Storage, Google Cloud Storage, या Terraform Cloud। बकेट पर वर्ज़निंग, एन्क्रिप्शन और सीमित एक्सेस चालू रखें।
8. स्टेट लॉकिंग क्या है?
यह रोकता है कि दो लोग या पाइपलाइनें एक ही समय पर apply करें और स्टेट ख़राब कर दें। ज़्यादातर रिमोट बैकएंड इसे सपोर्ट करते हैं। अगर कोई रन क्रैश हो जाए, तो यह पक्का करने के बाद कि कोई और अब भी apply नहीं कर रहा, आपको terraform force-unlock से पुराना लॉक हटाना पड़ सकता है।
9. ड्रिफ़्ट क्या है, और इसे कैसे संभालते हैं?
ड्रिफ़्ट तब होता है जब असली इन्फ्रास्ट्रक्चर स्टेट से अलग हो जाता है, आम तौर पर इसलिए कि किसी ने हाथ से उसमें बदलाव कर दिया। terraform plan (या plan -refresh-only) इसे दिखा देता है। फिर तय करें कि apply करके बदलाव वापस पुरानी हालत में लाना है, या कोड को उस बदलाव के हिसाब से अपडेट करना है।
10. किसी मौजूदा रिसोर्स को टेराफॉर्म के दायरे में कैसे लाते हैं?
रिसोर्स ब्लॉक लिखें, फिर terraform import <address> <id> चलाएँ, या नए वर्ज़न में import ब्लॉक इस्तेमाल करें। उसके बाद plan चलाएँ और कोड में तब तक बदलाव करें जब तक वह कोई बदलाव न दिखाए।
11. एनवायरनमेंट या टीमों के बीच स्टेट कैसे बाँटते हैं?
हर एनवायरनमेंट और कंपोनेंट के लिए अलग स्टेट रखें, जैसे नेटवर्किंग के लिए एक, हर ऐप के लिए एक, और हर एनवायरनमेंट के लिए एक। इससे नुकसान का दायरा सीमित रहता है और plan तेज़ चलते हैं। वैल्यू शेयर करने के लिए आउटपुट और डेटा सोर्स या रिमोट स्टेट इस्तेमाल करें।
मॉड्यूल और संरचना
12. मॉड्यूल क्या है, और आप इसे कब लिखते हैं?
मॉड्यूल इनपुट और आउटपुट वाले संसाधनों का एक पुनः प्रयोग करने योग्य समूह है। इसे तब लिखें जब आप एक ही पैटर्न दोहराते हैं, जैसे कोई VPC या कोई सेवा, और आप उसका एक ही समीक्षित संस्करण चाहते हैं। मॉड्यूल को छोटा और केंद्रित रखें, उचित डिफ़ॉल्ट के साथ, और उन्हें वर्शन करें।
13. आप dev, staging, और production को कैसे प्रबंधित करते हैं?
सामान्य विकल्प हैं अलग-अलग डायरेक्टरी या रेपो जिनका अपना स्टेट और वेरिएबल फ़ाइलें हों, या वर्कस्पेस। कई टीमें हर एनवायरनमेंट के लिए अलग स्टेट पसंद करती हैं, क्योंकि वर्कस्पेस एक ही कोड साझा करते हैं और गलत एनवायरनमेंट पर लागू करना आसान बना देते हैं। एक ही मॉड्यूल को अलग-अलग वेरिएबल मानों के साथ इस्तेमाल करें।
14. वर्कस्पेस क्या हैं?
एक ही बैकएंड और कॉन्फ़िगरेशन के भीतर नामित स्टेट। ये एक ही सेटअप की अस्थायी प्रतियों के लिए उपयोगी हैं, जैसे प्रति-ब्रांच टेस्ट एनवायरनमेंट, लेकिन production के लिए मज़बूत अलगाव नहीं हैं।
15. count और for_each में क्या अंतर है?
count स्थिति के आधार पर कई प्रतियाँ बनाता है। for_each किसी मैप या सेट में हर आइटम के लिए एक बनाता है, जिसकी कुंजी नाम होती है। for_each को प्राथमिकता दें, क्योंकि count सूची के बीच से कोई आइटम हटाने पर इंडेक्स खिसक जाते हैं और संसाधन नष्ट होकर फिर से बन सकते हैं।
16. depends_on क्या करता है?
यह एक स्पष्ट निर्भरता जोड़ता है जब Terraform इसे रेफ़रेंस से नहीं देख पाता। इसका इस्तेमाल कम करें, क्योंकि ज़्यादातर निर्भरताएँ किसी अन्य संसाधन की विशेषताओं को रेफ़र करने से आती हैं।
सुरक्षित बदलाव और संचालन
17. lifecycle नियम क्या हैं?
create_before_destroy पहले एक रिप्लेसमेंट बनाता है, prevent_destroy डिलीशन रोकता है, ignore_changes उन विशेषताओं को छोड़ देता है जो Terraform के बाहर बदली गईं, और replace_triggered_by किसी अन्य संसाधन के बदलने पर रिप्लेसमेंट को बाध्य करता है।
18. Terraform में सीक्रेट्स को कैसे संभालते हैं?
उन्हें हार्ड-कोड न करें। किसी सीक्रेट्स मैनेजर या एनवायरनमेंट वेरिएबल का इस्तेमाल करें, वेरिएबल और आउटपुट को sensitive चिह्नित करें, और याद रखें कि मान फिर भी स्टेट में आ सकते हैं, इसलिए स्टेट की सुरक्षा करें। वर्शन कंट्रोल में सादी वेरिएबल फ़ाइलों के ज़रिए सीक्रेट्स पास करने से बचें।
19. बदलावों की समीक्षा और सुरक्षित तरीके से उन्हें लागू कैसे करते हैं?
पुल रिक्वेस्ट में plan चलाएँ, प्लान आउटपुट की समीक्षा करें, स्वीकृति अनिवार्य करें, और सेव किए गए प्लान का उपयोग करते हुए किसी पाइपलाइन से लागू करें ताकि जो समीक्षित हुआ वही चले। प्लान में destroy या replace लाइनों पर ध्यान दें।
20. कोई प्लान दिखाता है कि यह एक डेटाबेस को नष्ट और फिर से बनाएगा। आप क्या करते हैं?
रुकें और पता लगाएँ कि ऐसा क्यों हो रहा है। सामान्य कारण हैं कोई बदली हुई अपरिवर्तनीय विशेषता, कोई नाम बदला हुआ संसाधन, या कोई स्थानांतरित मॉड्यूल। पता बदलावों को ठीक करने के लिए moved ब्लॉक या terraform state mv का इस्तेमाल करें, उचित हो तो ignore_changes या prevent_destroy का इस्तेमाल करें, और किसी भी जोखिम भरे apply से पहले बैकअप लें।
21. किसी संसाधन को नष्ट किए बिना उसका नाम या स्थान कैसे बदलते हैं?
कोड में moved ब्लॉक का इस्तेमाल करें, या स्टेट में उसका पता बदलने के लिए terraform state mv का। फिर plan चलाएँ और पुष्टि करें कि कोई destroy नहीं है।
22. वर्शन कैसे पिन करते हैं?
Terraform के लिए required_version और वर्शन कंस्ट्रेंट के साथ required_providers का इस्तेमाल करें, और .terraform.lock.hcl फ़ाइल कमिट करें ताकि सभी एक ही प्रोवाइडर बिल्ड इस्तेमाल करें। अपग्रेड जानबूझकर करें और चेंजलॉग पढ़ें।
व्यावहारिक और परिदृश्य प्रश्न
23. provisioners क्या हैं, और क्या आपको इनका इस्तेमाल करना चाहिए?
Provisioners निर्माण के बाद किसी संसाधन पर स्क्रिप्ट चलाते हैं। ये अंतिम उपाय हैं, क्योंकि ये स्टेट में ट्रैक नहीं होते और विफलताओं को संभालना कठिन होता है। cloud-init, Packer जैसे किसी टूल से बनी इमेज, या कॉन्फ़िगरेशन मैनेजमेंट को प्राथमिकता दें।
24. कई एनवायरनमेंट वाली टीम के लिए आप Terraform को कैसे संरचित करेंगे?
"वर्शन्ड रिलीज़ के साथ साझा मॉड्यूल के लिए एक रेपो, और हर एनवायरनमेंट और कंपोनेंट के लिए एक डायरेक्टरी वाला एक live रेपो। हर एक का अपना रिमोट स्टेट होता है जिसमें लॉकिंग होती है। एक पाइपलाइन पुल रिक्वेस्ट पर fmt, validate, और plan चलाती है, स्वीकृति माँगती है, और मर्ज पर लागू करती है। एक्सेस शॉर्ट-लिव्ड क्रेडेंशियल्स के ज़रिए होता है, और पॉलिसी जाँचें जोखिम भरे बदलावों को पकड़ लेती हैं।"
25. किसी ने कंसोल में एक संसाधन बदल दिया और अब Terraform उसे वापस पलटना चाहता है। आप क्या करते हैं?
पता लगाएँ कि उन्होंने इसे क्यों बदला। अगर यह कोई ज़रूरी फ़िक्स था, तो कोड को उससे मेल खाने के लिए अपडेट करें और लागू करें, ताकि बदलाव बना रहे। अगर यह कोई गलती थी, तो इसे वापस पलटने के लिए लागू करें। फिर नियंत्रण जोड़ें, जैसे कंसोल राइट एक्सेस को प्रतिबंधित करना, ताकि ऐसा दोबारा न हो।
तैयारी कैसे करें
एक छोटा प्रोजेक्ट बनाएँ जिसमें एक रिमोट बैकएंड, एक मॉड्यूल, और दो एनवायरनमेंट हों। moved ब्लॉक के साथ नाम बदलने का, एक import का, और एक drift फ़िक्स का अभ्यास करें। यह समझाने के लिए तैयार रहें कि कब कोई प्लान आपको चौंका दिया और आपने क्या किया। संबंधित क्लाउड विषयों के लिए, हमारी AWS इंटरव्यू गाइड और Kubernetes गाइड देखें।
अपने जवाब ज़ोर से बोलें, खासकर स्टेट वाले प्रश्न, जहाँ स्पष्टीकरण उलझ जाते हैं। एक मॉक इंटरव्यू ट्रांसक्रिप्ट दिखाता है कि आप कहाँ हिचके। किसी भी लाइव इंटरव्यू में AI टूल्स पर नियोक्ता के नियमों का पालन करें।
YesToTheOffer के साथ टेराफॉर्म इंटरव्यू उत्तरों का अभ्यास करें
एक मॉक तकनीकी इंटरव्यू चलाएँ, स्टेट और मॉड्यूल को ज़ोर से समझाएँ, और बाद में अपने ट्रांसक्रिप्ट की समीक्षा करें। 30 मुफ्त मिनट, कोई सदस्यता नहीं।



