Terraform 0.11 - Resource Configuration

संसाधन विन्यास




terraform

संसाधन विन्यास

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

यह पृष्ठ मानता है कि आप पहले से ही विन्यास वाक्य रचना से परिचित हैं।

उदाहरण

संसाधन कॉन्फ़िगरेशन निम्न की तरह दिखता है:

resource "aws_instance" "web" {
  ami           = "ami-408c7f28"
  instance_type = "t1.micro"
}

विवरण

resource ब्लॉक दिए गए TYPE (पहले पैरामीटर) और NAME (दूसरा पैरामीटर) का resource बनाता है। प्रकार और नाम का संयोजन अद्वितीय होना चाहिए।

ब्लॉक के भीतर ( { } ) संसाधन के लिए विन्यास है। कॉन्फ़िगरेशन प्रकार पर निर्भर है, और प्रदाता अनुभाग में प्रत्येक संसाधन प्रकार के लिए प्रलेखित है।

मेटा मानकों

सभी संसाधनों के लिए मेटा-पैरामीटर उपलब्ध हैं:

  • count (int) - समान संसाधनों की संख्या बनाने के लिए। यह सभी संसाधनों पर लागू नहीं होता है। गणना के साथ संयोजन में चर का उपयोग करने के विवरण के लिए, नीचे की count साथ चर का उपयोग करना देखें।

  • depends_on (स्ट्रिंग्स की सूची) - स्पष्ट निर्भरताएँ जो इस संसाधन के पास हैं। इस संसाधन से पहले ये निर्भरताएं बनाई जाएंगी। वाक्यविन्यास और अन्य विवरणों के लिए, स्पष्ट निर्भरता पर नीचे दिया गया अनुभाग देखें।

  • provider (स्ट्रिंग) - इस संसाधन के लिए उपयोग करने के लिए एक विशिष्ट प्रदाता का नाम। नाम TYPE.ALIAS के प्रारूप में है, उदाहरण के लिए, aws.west । जहां एक प्रदाता में alias विशेषता का उपयोग करके west को सेट किया जाता है। कई प्रदाता उदाहरण देखें।

  • lifecycle (कॉन्फ़िगरेशन ब्लॉक) - संसाधन के जीवनचक्र के व्यवहार को अनुकूलित करता है। विशिष्ट विकल्प नीचे दिए गए हैं।

    lifecycle ब्लॉक निम्नलिखित कुंजियों को सेट करने की अनुमति देता है:

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

समय समाप्ति

व्यक्तिगत संसाधन एक timeouts ब्लॉक प्रदान कर सकते हैं जो उपयोगकर्ताओं को उस समय को कॉन्फ़िगर करने में सक्षम बनाता है, जब किसी त्रुटि को माना जाने से पहले एक विशिष्ट ऑपरेशन को लेने की अनुमति दी जाती है। उदाहरण के लिए, aws_db_instance संसाधन संचालन, update और delete लिए कॉन्फ़िगर करने योग्य समयबाह्य प्रदान करता है। कोई भी संसाधन जो Timeouts प्रदान करता है, उस ऑपरेशन के लिए डिफ़ॉल्ट मानों का दस्तावेजीकरण करेगा, और उपयोगकर्ता उन्हें अपने कॉन्फ़िगरेशन में अधिलेखित कर सकते हैं।

उदाहरण create ओवर राइटिंग और delete टाइमआउट:

resource "aws_db_instance" "timeout_example" {
  allocated_storage = 10
  engine            = "mysql"
  engine_version    = "5.6.17"
  instance_class    = "db.t1.micro"
  name              = "mydb"

  # ...

  timeouts {
    create = "60m"
    delete = "2h"
  }
}

अलग-अलग संसाधन को कॉन्फ़िगर करने योग्य टाइमआउट प्रदान करने के लिए ऑप्ट-इन करना होगा, और टाइमआउट का समर्थन नहीं करने वाले संसाधन के लिए टाइमआउट को कॉन्फ़िगर करने का प्रयास करना होगा, या एक विशिष्ट कार्रवाई को ओवरराइट करना जो संसाधन विकल्प के रूप में निर्दिष्ट नहीं करता है, परिणामस्वरूप त्रुटि होगी। समय की मान्य इकाइयाँ s , m , h

स्पष्ट निर्भरताएँ

टेराफॉर्म यह सुनिश्चित करता है कि संसाधन बनाने से पहले निर्भरता सफलतापूर्वक बनाई जाए। एक नष्ट ऑपरेशन के दौरान, टेराफॉर्म यह सुनिश्चित करता है कि यह संसाधन इसकी निर्भरता से पहले ही नष्ट हो जाए।

एक संसाधन स्वचालित रूप से interpolations माध्यम से संदर्भित किसी भी चीज पर निर्भर करता interpolations । स्वचालित रूप से निर्धारित निर्भरताएं सभी की आवश्यकता होती हैं जो कि अधिकांश समय की आवश्यकता होती है। आप अतिरिक्त निर्भरता की सूची को स्पष्ट रूप से परिभाषित करने के लिए depends_on पैरामीटर का भी उपयोग कर सकते हैं।

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

depends_on का सिंटैक्स संसाधनों और मॉड्यूल की एक सूची है:

  • संसाधन TYPE.NAME , जैसे aws_instance.web
  • मॉड्यूल मॉड्यूल हैं। module.NAME , जैसे मॉड्यूल module.foo

जब कोई संसाधन मॉड्यूल पर निर्भर करता है, तो संसाधन बनने से पहले उस मॉड्यूल में सब कुछ बनाया जाना चाहिए।

मॉड्यूल और संसाधन दोनों के आधार पर संसाधन का एक उदाहरण नीचे दिखाया गया है। ध्यान दें कि depends_on में किसी भी निर्भरता हो सकती है:

resource "aws_instance" "web" {
  depends_on = ["aws_instance.leader", "module.vpc"]
}

कनेक्शन ब्लॉक

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

संसाधन अपने दम पर कुछ डेटा प्रदान करते हैं, जैसे कि एक आईपी पता, लेकिन अन्य डेटा उपयोगकर्ता द्वारा निर्दिष्ट किया जाना चाहिए।

निर्दिष्ट की जा सकने वाली सेटिंग की पूरी सूची को प्रोफ़ेशनल कनेक्शन पृष्ठ पर सूचीबद्ध किया गया है।

Provisioners

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

प्रावधान ब्लॉक के भीतर रिसोर्स-विशिष्ट कॉन्फ़िगरेशन है, बहुत कुछ संसाधन-विशिष्ट कॉन्फ़िगरेशन की तरह।

प्रोविजनर ब्लॉक में एक कनेक्शन ब्लॉक (ऊपर प्रलेखित) भी हो सकता है। इस कनेक्शन ब्लॉक का उपयोग किसी विशिष्ट प्रावधानकर्ता के लिए अधिक विशिष्ट कनेक्शन जानकारी प्रदान करने के लिए किया जा सकता है। एक उदाहरण का उपयोग मामला एक एकल प्रावधान के लिए लॉग इन करने के लिए एक अलग उपयोगकर्ता का उपयोग करने के लिए हो सकता है।

count साथ चर का उपयोग करना

count का उपयोग करते हुए संसाधन के कई उदाहरणों की घोषणा करते समय, प्रत्येक उदाहरण को दिए गए विशेषता के लिए एक अलग मूल्य रखना सामान्य है।

इसे पूरा करने के लिए आप मैप variable के साथ ${count.index} interpolations उपयोग कर सकते हैं।

उदाहरण के लिए, यहां बताया गया है कि आप अपने स्वयं के स्थिर आईपी पते के साथ प्रत्येक में तीन एडब्ल्यूएस उदाहरण कैसे बना सकते हैं:

variable "instance_ips" {
  default = {
    "0" = "10.11.12.100"
    "1" = "10.11.12.101"
    "2" = "10.11.12.102"
  }
}

resource "aws_instance" "app" {
  count = "3"
  private_ip = "${lookup(var.instance_ips, count.index)}"
  # ...
}

किसी संसाधन के किसी विशेष उदाहरण को संदर्भित करने के लिए आप resource.foo.*.id[#] उपयोग कर सकते हैं resource.foo.*.id[#] जहां # उदाहरण की अनुक्रमणिका संख्या है।

उदाहरण के लिए, सभी AWS सबनेट आईडी की सूची बनाने के लिए बनाम एक विशिष्ट सबनेट का संदर्भ इस सूची में आप इस वाक्य विन्यास का उपयोग कर सकते हैं:

resource "aws_vpc" "foo" {
  cidr_block = "198.18.0.0/16"
}

resource "aws_subnet" "bar" {
  count      = 2
  vpc_id     = "${aws_vpc.foo.id}"
  cidr_block = "${cidrsubnet(aws_vpc.foo.cidr_block, 8, count.index)}"
}

output "vpc_id" {
  value = "${aws_vpc.foo.id}"
}

output "all_subnet_ids" {
  value = "${aws_subnet.bar.*.id}"
}

output "subnet_id_0" {
  value = "${aws_subnet.bar.*.id[0]}"
}

output "subnet_id_1" {
  value = "${aws_subnet.bar.*.id[1]}"
}

कई प्रदाता उदाहरण

डिफ़ॉल्ट रूप से, एक संसाधन प्रदाता को उसके प्रकार के आधार पर लक्षित करता है। उदाहरण के लिए aws_instance संसाधन "aws" प्रदाता को लक्षित करेगा। टेराफ़ॉर्म 0.5.0 के रूप में, एक संसाधन किसी भी प्रदाता को नाम से लक्षित कर सकता है।

इसके लिए प्राथमिक उपयोग का मामला एक प्रदाता के विशिष्ट कॉन्फ़िगरेशन को लक्षित करना है जो कई क्षेत्रों, आदि का समर्थन करने के लिए कई बार कॉन्फ़िगर किया गया है।

किसी अन्य प्रदाता को लक्षित करने के लिए, provider फ़ील्ड सेट करें:

resource "aws_instance" "foo" {
    provider = "aws.west"

    # ...
}

फ़ील्ड का मान TYPE या TYPE.ALIAS होना चाहिए। provider कॉन्फ़िगर करते समय ALIAS मान alias क्षेत्र के मान से आता है।

provider "aws" {
  alias = "west"

  # ...
}

यदि कोई provider फ़ील्ड निर्दिष्ट नहीं है, तो डिफ़ॉल्ट प्रदाता का उपयोग किया जाता है।

वाक्य - विन्यास

पूर्ण वाक्यविन्यास है:

resource TYPE NAME {
    CONFIG ...
    [count = COUNT]
    [depends_on = [NAME, ...]]
    [provider = PROVIDER]

    [LIFECYCLE]

    [CONNECTION]
    [PROVISIONER ...]
}

जहां CONFIG है:

KEY = VALUE

KEY {
    CONFIG
}

जहां जीवन है:

lifecycle {
    [create_before_destroy = true|false]
    [prevent_destroy = true|false]
    [ignore_changes = [ATTRIBUTE NAME, ...]]
}

जहां CONNECTION है:

connection {
    KEY = VALUE
    ...
}

जहां PROVISIONER है:

provisioner NAME {
    CONFIG ...

    [when = "create"|"destroy"]
    [on_failure = "continue"|"fail"]

    [CONNECTION]
}