Terraform 0.11 - Module Sources

मॉड्यूल के स्रोत




terraform

मॉड्यूल के स्रोत

उपयोग अनुभाग में प्रलेखित के रूप में, मॉड्यूल का उपयोग करते समय एकमात्र आवश्यक पैरामीटर source

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

Terraform निम्नलिखित स्रोतों का समर्थन करता है:

प्रत्येक को नीचे और नीचे प्रलेखित किया गया है।

स्थानीय फ़ाइल पथ

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

module "consul" {
  source = "./consul"
}

फ़ाइल पथ के लिए अपडेट स्वचालित हैं: जब गेट कमांड का उपयोग करके मॉड्यूल को "डाउनलोड" किया जाता है, तो Terraform मूल निर्देशिका का एक प्रतीकात्मक लिंक बनाएगा। इसलिए, कोई भी परिवर्तन स्वचालित रूप से उपलब्ध हैं।

टेराफॉर्म रजिस्ट्री

टेराफॉर्म रजिस्ट्री टेराफॉर्म बिरादरी द्वारा लिखित मॉड्यूल का एक सूचकांक है। टेराफॉर्म रजिस्ट्री, टेराफॉर्म के साथ आरंभ करने और मॉड्यूल खोजने का सबसे आसान तरीका है।

रजिस्ट्री को सीधे Terraform में एकीकृत किया गया है। आप किसी भी रजिस्ट्री मॉड्यूल को <NAMESPACE>/<NAME>/<PROVIDER> स्रोत स्ट्रिंग के साथ संदर्भित कर सकते हैं। रजिस्ट्री पर प्रत्येक मॉड्यूल की जानकारी पृष्ठ में इसका स्रोत स्ट्रिंग शामिल है।

module "consul" {
  source = "hashicorp/consul/aws"
  version = "0.1.0"
}

उपरोक्त उदाहरण सार्वजनिक रजिस्ट्री से AWS के लिए कौंसल मॉड्यूल का उपयोग करेगा।

रजिस्ट्री मॉड्यूल संस्करण का समर्थन करते हैं। आप एक विशिष्ट संस्करण प्रदान कर सकते हैं, या लचीले संस्करण बाधाओं का उपयोग कर सकते हैं।

आप टेराफ़ॉर्म रजिस्ट्री दस्तावेज़ में रजिस्ट्री के बारे में अधिक जान सकते हैं।

निजी रजिस्ट्रियां

टेराफॉर्म एंटरप्राइज एक निजी मॉड्यूल रजिस्ट्री प्रदान करता है, जिससे आपको अपने संगठन के भीतर कोड साझा करने में मदद मिलती है। अन्य सेवाएं भी टेराफ़ॉर्म की रजिस्ट्री एपीआई को लागू करके निजी रजिस्ट्रियां प्रदान कर सकती हैं।

निजी रजिस्ट्री मॉड्यूल के लिए स्रोत तार सार्वजनिक मॉड्यूल के समान हैं, लेकिन एक होस्टनाम भी शामिल है। उन्हें <HOSTNAME>/<NAMESPACE>/<NAME>/<PROVIDER> प्रारूप का पालन करना चाहिए।

module "vpc" {
  source = "app.terraform.io/example_corp/vpc/aws"
  version = "0.9.3"
}

निजी रजिस्ट्रियों के मॉड्यूल सार्वजनिक टेराफ़ॉर्म रजिस्ट्री से मॉड्यूल की तरह, संस्करण बनाने का समर्थन करते हैं।

GitHub

Terraform स्वचालित रूप से GitHub URL को पहचान कर उन्हें विशिष्ट Git रिपॉजिटरी के लिंक में बदल देगा। वाक्य रचना सरल है:

module "consul" {
  source = "github.com/hashicorp/example"
}

भंडार के भीतर उपनिर्देशिका भी संदर्भित की जा सकती है:

module "consul" {
  source = "github.com/hashicorp/example//subdir"
}

ये HTTPS का उपयोग करके मॉड्यूल लाएंगे। यदि आप इसके बजाय SSH का उपयोग करना चाहते हैं:

module "consul" {
  source = "[email protected]:hashicorp/example.git//subdir"
}

नोट: डबल-स्लैश, // , महत्वपूर्ण है। यह वह है जो टेराफॉर्म को बताता है कि वह एक उपनिर्देशिका के लिए विभाजक है, और स्वयं भंडार का हिस्सा नहीं है।

GitHub स्रोत URL के लिए आवश्यक है कि आपके सिस्टम पर Git इंस्टॉल हो और आपके पास रिपॉजिटरी तक पहुंच हो।

आप GitHub रिपॉजिटरी में समान मापदंडों का उपयोग कर सकते हैं क्योंकि आप Git रिपॉजिटरी (जैसे टैग या शाखाएं) जेनरिक कर सकते हैं। अधिक जानकारी के लिए सामान्य Git रिपॉजिटरी के लिए दस्तावेज़ देखें।

प्राइवेट गिटहब रिपोज

यदि आपको निजी GitHub repos से मॉड्यूल लाने के लिए Terraform की आवश्यकता है, तो आपको उन Repos के रीड रीड एक्सेस वाले उपयोगकर्ता के रूप में प्रमाणित करने के लिए क्रेडेंशियल्स के साथ Terraform प्रदान करना होगा।

  • यदि आप Terraform को केवल अपनी स्थानीय मशीन पर चलाते हैं, तो आप मॉड्यूल स्रोत को SSH URI (जैसे [email protected]:hashicorp/example.git ) के रूप में निर्दिष्ट कर सकते हैं और Terraform प्रमाणित करने के लिए आपकी डिफ़ॉल्ट SSH कुंजी का उपयोग करेगा।
  • यदि आप टेराफ़ॉर्म एंटरप्राइज का उपयोग करते हैं, तो निजी मॉड्यूल रजिस्ट्री का उपयोग करने पर विचार करें। यह क्रेडेंशियल्स को संभालना आसान बनाता है, और पूर्ण संस्करण समर्थन प्रदान करता है। (अधिक जानकारी के लिए ऊपर निजी रजिस्ट्रियां देखें।)

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

  • यदि आपको एक सीआई मशीन की तरह रिमोट मशीन पर टेराफॉर्म को चलाने की आवश्यकता है, तो आपको या तो SSH कुंजी को डिस्क पर लिखना होगा और कार्यकर्ता की प्रक्रिया प्रक्रिया के दौरान उचित रूप से GIT_SSH_COMMAND वातावरण चर सेट करना GIT_SSH_COMMAND , या GIT_SSH_COMMAND तक पहुंच के साथ एक GitHub मशीन उपयोगकर्ता बनाएं। सवाल में और मॉड्यूल के source मापदंडों में अपनी साख एम्बेड करें:

    module "private-infra" {
      source = "git::https://MACHINE-USER:[email protected]/org/privatemodules//modules/foo"
    }
    

    ध्यान दें कि Terraform किसी मॉड्यूल के source पैरामीटर में प्रक्षेपों का समर्थन नहीं करता है, इसलिए आपको इस विधि का उपयोग करने पर मशीन उपयोगकर्ता नाम और पासवर्ड को हार्डकोड करना होगा।

बिट बकेट

Terraform स्वचालित रूप से सार्वजनिक Bitbucket URL को पहचान लेगा और उन्हें विशिष्ट Git या Mercurial रिपॉजिटरी के लिंक में बदल देगा, उदाहरण के लिए:

module "consul" {
  source = "bitbucket.org/hashicorp/consul"
}

भंडार के भीतर उपनिर्देशिका भी संदर्भित की जा सकती है:

module "consul" {
  source = "bitbucket.org/hashicorp/consul//subdir"
}

नोट: डबल-स्लैश, // , महत्वपूर्ण है। यह टेराफ़ॉर्म बताता है कि यह एक उपनिर्देशिका के लिए विभाजक है, और स्वयं भंडार का हिस्सा नहीं है।

Bitbucket URL के लिए आवश्यक होगा कि आपके सिस्टम पर Git या Mercurial स्थापित हो, जो रिपॉजिटरी के प्रकार पर निर्भर करता है।

निजी Bitbucket प्रस्ताव

निजी बिटबकेट रिपॉजिटरी को Git सेक्शन के समान निर्दिष्ट किया जाना चाहिए।

module "consul" {
  source = "git::https://bitbucket.org/foocompany/module_name.git"
}

आप क्वेरी के साथ शाखाएँ और संस्करण भी निर्दिष्ट कर सकते हैं, और HTTPS या SSH का उपयोग कर सकते हैं:

module "consul" {
  source = "git::https://bitbucket.org/foocompany/module_name.git?ref=hotfix"
}
module "consul" {
  source = "git::ssh://[email protected]/foocompany/module_name.git"
}

यदि आप नवीनतम संस्करणों को खींचना चाहते हैं, तो आपको एक terraform get -update=true चलाना होगा। यह तब आसान हो सकता है जब आप विकास में एक मॉड्यूल पर तेजी से पुनरावृत्ति कर रहे हों।

जेनेरिक गिट रिपोजिटरी

जेनेरिक गिट रिपॉजिटरी भी समर्थित हैं। इस मामले में source का मान पूर्ण Git- संगत URL होना चाहिए। सामान्य Git रिपॉजिटरी का उपयोग करने के लिए आवश्यक है कि Git आपके सिस्टम पर स्थापित हो।

module "consul" {
  source = "git://hashicorp.com/consul.git"
}

आप किसी मॉड्यूल को संदर्भित करने के लिए HTTP या SSH जैसे प्रोटोकॉल का भी उपयोग कर सकते हैं, लेकिन आपने Terraform को निर्दिष्ट किया होगा कि यह git मॉड्यूल है, URL को git:: साथ प्रीफ़िक्स करके git:: जैसे:

module "consul" {
  source = "git::https://hashicorp.com/consul.git"
}

module "ami" {
  source = "git::ssh://[email protected]/owner/repo.git"
}

यदि आप source के प्रकार को निर्दिष्ट नहीं करते हैं तो टेराफॉर्म निकटतम मैच का उपयोग करने का प्रयास करेगा, उदाहरण के लिए https://hashicorp.com/consul.git एक HTTP URL है।

Terraform स्थानीय रूप से डिफ़ॉल्ट terraform get द्वारा मॉड्यूल को चलाए जाने को कैश कर देगा, इसलिए मास्टर या एक निर्दिष्ट शाखा के लिए लगातार अपडेट को भविष्य की योजनाओं में शामिल नहीं किया जाएगा। terraform get -update=true चलाएं terraform get -update=true शाखा का नवीनतम संस्करण प्राप्त करने के लिए terraform get -update=true । यह विकास में आसान है, लेकिन यदि आपके पास रिपॉजिटरी का नियंत्रण नहीं है तो संभावित रूप से उत्पादन में परेशान है।

पैरामीटर

Git रिपॉजिटरी के लिए URL निम्नलिखित क्वेरी मापदंडों का समर्थन करते हैं:

  • ref - चेकआउट के लिए रेफरी। यह एक शाखा, टैग, कमिट आदि हो सकता है।
module "consul" {
  source = "git::https://hashicorp.com/consul.git?ref=master"
}

जेनेरिक मर्क्यूरियल रिपॉजिटरी

जेनेरिक मर्क्यूरियल रिपॉजिटरी समर्थित हैं। इस मामले में source का मान पूर्ण रूप से मर्क्यूरियल-संगत URL होना चाहिए। जेनेरिक मर्क्यूरियल रिपॉजिटरी का उपयोग करने के लिए आवश्यक है कि मर्क्यूरियल आपके सिस्टम पर स्थापित हो। टेराफ़ॉर्म को आपको यह बताना होगा कि आपका source hg:: साथ उपसर्ग करके एक मरकरी रिपॉजिटरी है।

module "consul" {
  source = "hg::http://hashicorp.com/consul.hg"
}

मर्क्यूरियल रिपॉजिटरी के लिए URL निम्नलिखित क्वेरी मापदंडों का समर्थन करते हैं:

  • rev - चेकआउट करने के लिए संशोधन। यह एक शाखा, टैग, कमिट आदि हो सकता है।
module "consul" {
  source = "hg::http://hashicorp.com/consul.hg?rev=default"
}

HTTP URL

किसी अन्य स्रोत से मॉड्यूल स्रोत प्राप्त करने के लिए Terraform को पुनर्निर्देशित करने के लिए एक HTTP या HTTPS URL का उपयोग किया जा सकता है। HTTP URL के लिए, Terraform दिए गए URL पर GET अनुरोध करेगा। एक अतिरिक्त GET पैरामीटर, terraform-get=1 GET terraform-get=1 को जोड़ा जाएगा, जिससे आप पृष्ठ को वैकल्पिक रूप से रेंडर कर सकते हैं जब टेराफॉर्म यह अनुरोध कर रहा है।

Terraform तब निम्न क्रम में परिणामी मॉड्यूल URL की तलाश करता है:

  1. टेराफॉर्म यह देखने के लिए दिखेगा कि क्या हेडर X-Terraform-Get मौजूद है। शीर्ष लेख में वास्तविक मॉड्यूल का स्रोत URL होना चाहिए।

  2. टेराफॉर्म एक <meta> टैग के लिए terraform-get के नाम के साथ दिखेगा, उदाहरण के लिए:

<meta name="terraform-get" content="github.com/hashicorp/example" />

S3 बाल्टी

टेराफॉर्म भी S3 बाल्टी में मॉड्यूल स्टोर कर सकता है। बाल्टी तक पहुंचने के लिए आपके पास अपने कॉन्फ़िगरेशन में उपयुक्त AWS क्रेडेंशियल होना चाहिए या साझा क्रेडेंशियल या पर्यावरण चर के माध्यम से उपलब्ध होना चाहिए।

S3 बाल्टी संबोधन योजनाओं की एक किस्म है, अधिकांश S3 कॉन्फ़िगरेशन में प्रलेखित हैं। यहां कुछ उदाहरण दिए गए हैं।

s3 प्रोटोकॉल का उपयोग करना।

module "consul" {
  source = "s3::https://s3-eu-west-1.amazonaws.com/consulbucket/consul.zip"
}

या सीधे बाल्टी के URL का उपयोग कर रहे हैं।

module "consul" {
  source = "consulbucket.s3-eu-west-1.amazonaws.com/consul.zip"
}

गैर अभिलेख

टेराफ़ॉर्म स्वचालित रूप से अनुरोधित की जा रही फ़ाइल (किसी भी प्रोटोकॉल पर) के विस्तार के आधार पर अनारक्षित फ़ाइलें होगी। यह निम्नलिखित पुरालेख स्वरूपों का समर्थन करता है:

  • tar.gz और tgz
  • tar.bz2 और tbz2
  • ज़िप
  • GZ
  • BZ2