Terraform 0.11

aws_autoscaling_group




terraform

aws_autoscaling_group

एक AutoScaling समूह संसाधन प्रदान करता है।

उदाहरण उपयोग

resource "aws_placement_group" "test" {
  name     = "test"
  strategy = "cluster"
}

resource "aws_autoscaling_group" "bar" {
  name                      = "foobar3-terraform-test"
  max_size                  = 5
  min_size                  = 2
  health_check_grace_period = 300
  health_check_type         = "ELB"
  desired_capacity          = 4
  force_delete              = true
  placement_group           = "${aws_placement_group.test.id}"
  launch_configuration      = "${aws_launch_configuration.foobar.name}"
  vpc_zone_identifier       = ["${aws_subnet.example1.id}", "${aws_subnet.example2.id}"]

  initial_lifecycle_hook {
    name                 = "foobar"
    default_result       = "CONTINUE"
    heartbeat_timeout    = 2000
    lifecycle_transition = "autoscaling:EC2_INSTANCE_LAUNCHING"

    notification_metadata = <<EOF
{
  "foo": "bar"
}
EOF

    notification_target_arn = "arn:aws:sqs:us-east-1:444455556666:queue1*"
    role_arn                = "arn:aws:iam::123456789012:role/S3Access"
  }

  tag {
    key                 = "foo"
    value               = "bar"
    propagate_at_launch = true
  }

  timeouts {
    delete = "15m"
  }

  tag {
    key                 = "lorem"
    value               = "ipsum"
    propagate_at_launch = false
  }
}

लॉन्च टेम्प्लेट के नवीनतम संस्करण के साथ

resource "aws_launch_template" "foobar" {
  name_prefix = "foobar"
  image_id = "ami-1a2b3c"
  instance_type = "t2.micro"
}

resource "aws_autoscaling_group" "bar" {
  availability_zones = ["us-east-1a"]
  desired_capacity = 1
  max_size = 1
  min_size = 1
  launch_template = {
    id = "${aws_launch_template.foobar.id}"
    version = "$$Latest"
  }
}

प्रक्षेपित टैग

variable "extra_tags" {
  default = [
    {
      key = "Foo"
      value = "Bar"
      propagate_at_launch = true
    },
    {
      key = "Baz"
      value = "Bam"
      propagate_at_launch = true
    },
  ]
}

resource "aws_autoscaling_group" "bar" {
  name                      = "foobar3-terraform-test"
  max_size                  = 5
  min_size                  = 2
  launch_configuration      = "${aws_launch_configuration.foobar.name}"
  vpc_zone_identifier       = ["${aws_subnet.example1.id}", "${aws_subnet.example2.id}"]

  tags = [
    {
      key                 = "explicit1"
      value               = "value1"
      propagate_at_launch = true
    },
    {
      key                 = "explicit2"
      value               = "value2"
      propagate_at_launch = true
    },
  ]

  tags = ["${concat(
    list(
      map("key", "interpolation1", "value", "value3", "propagate_at_launch", true),
      map("key", "interpolation2", "value", "value4", "propagate_at_launch", true)
    ),
    var.extra_tags)
  }"]
}

तर्क संदर्भ

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

  • name - (वैकल्पिक) ऑटो स्केलिंग समूह का नाम। Terraform द्वारा उत्पन्न डिफ़ॉल्ट रूप से।
  • name_prefix - (वैकल्पिक) निर्दिष्ट उपसर्ग के साथ एक अद्वितीय नाम बनाता है। name साथ संघर्ष।
  • max_size - (आवश्यक) ऑटो स्केल समूह का अधिकतम आकार।
  • min_size - (आवश्यक) ऑटो स्केल समूह का न्यूनतम आकार। (नीचे दी गई क्षमता की प्रतीक्षा भी देखें।)
  • availability_zones - (केवल ईसी 2-क्लासिक के लिए आवश्यक) समूह के लिए एक या अधिक उपलब्धता वाले ज़ोन की सूची। vpc_zone_identifier का उपयोग करते समय इस पैरामीटर को निर्दिष्ट नहीं किया जाना चाहिए।
  • default_cooldown - (वैकल्पिक) एक स्केलिंग गतिविधि के पूरा होने से पहले सेकंड में, समय की मात्रा, एक और स्केलिंग गतिविधि शुरू हो सकती है।
  • launch_configuration - (वैकल्पिक) उपयोग करने के लिए लॉन्च कॉन्फ़िगरेशन का नाम।
  • launch_template - (वैकल्पिक) लॉन्च उदाहरणों का उपयोग करने के लिए टेम्पलेट विनिर्देश लॉन्च करें। अधिक विवरण के लिए नीचे लॉन्च टेम्प्लेट विशिष्टता देखें।
  • initial_lifecycle_hook - (वैकल्पिक) उदाहरणों को लॉन्च करने से पहले ऑटोस्कोलिंग समूह में संलग्न करने के लिए एक या अधिक जीवनचक्र के हुक । सिंटैक्स ठीक उसी तरह है जैसे अलग aws_autoscaling_lifecycle_hook संसाधन, बिना aws_autoscaling_lifecycle_hook विशेषता के। कृपया ध्यान दें कि यह केवल एक नया ऑटोस्कोलिंग समूह बनाते समय काम करेगा। अन्य सभी उपयोग-मामलों के लिए, aws_autoscaling_lifecycle_hook संसाधन का उपयोग करें।
  • health_check_grace_period - (वैकल्पिक, डिफ़ॉल्ट: 300) समय (सेकंड में) स्वास्थ्य की जाँच से पहले सेवा में आने के बाद।
  • health_check_type - (वैकल्पिक) "EC2" या "ELB"। नियंत्रण करता है कि स्वास्थ्य की जाँच कैसे की जाती है।
  • desired_capacity - (वैकल्पिक) अमेज़ॅन ईसी 2 उदाहरणों की संख्या जो समूह में चलनी चाहिए। (नीचे दी गई क्षमता की प्रतीक्षा भी देखें।)
  • force_delete - (वैकल्पिक) समाप्त होने के लिए पूल में सभी उदाहरणों की प्रतीक्षा किए बिना ऑटोस्कोलिंग समूह को हटाने की अनुमति देता है। यदि आप किसी संसाधन को स्केल करने की प्रक्रिया में हैं, तो भी आपको हटाने के लिए एक ऑटोसालिंग समूह को बाध्य कर सकते हैं। सामान्यतया, टेररफॉर्म समूह को हटाने से पहले सभी उदाहरणों को छोड़ देता है। यह उस व्यवहार को दरकिनार कर देता है और संभावित रूप से संसाधनों को खतरे में डालता है
  • load_balancers (वैकल्पिक) load_balancers समूह के नामों को जोड़ने के लिए लोचदार लोड बैलेंसर नामों की एक सूची। केवल क्लासिक लोड बैलेंसरों के लिए मान्य है। ALBs के लिए, बजाय target_group_arns उपयोग करें।
  • vpc_zone_identifier (वैकल्पिक) में संसाधनों को लॉन्च करने के लिए सबनेट आईडी की एक सूची।
  • target_group_arns (वैकल्पिक) अनुप्रयोग लोड संतुलन के साथ उपयोग के लिए aws_alb_target_group ARN की एक सूची।
  • termination_policies (वैकल्पिक) ऑटो स्केल समूह में इंस्टेंसेस को कैसे termination_policies किया जाए, यह तय करने के लिए नीतियों की एक सूची। अनुमत मान OldestInstance , NewestInstance , OldestLaunchConfiguration , ClosestToNextInstanceHour , Default
  • सस्पेंड_प्रोसेस - (वैकल्पिक) ऑटोस्लिंग समूह के लिए निलंबित करने के लिए प्रक्रियाओं की एक सूची। अनुमत मूल्य Launch , Terminate , HealthCheck ReplaceUnhealthy , AZRebalance ReplaceUnhealthy , AZRebalance , AlarmNotification , ScheduledActions AddToLoadBalancer , AddToLoadBalancer । ध्यान दें कि यदि आप Launch या Terminate प्रक्रिया प्रकारों को निलंबित करते हैं, तो यह आपके ऑटोसालिंग समूह को ठीक से काम करने से रोक सकता है।
  • tag (वैकल्पिक) टैग ब्लॉक की एक सूची। नीचे टैग किया गया है।
  • tags (वैकल्पिक) टैग ब्लॉक (नक्शे) की एक सूची। नीचे टैग किया गया है।
  • placement_group (वैकल्पिक) प्लेसमेंट समूह का नाम जिसमें आप अपने उदाहरण लॉन्च करेंगे, यदि कोई हो।
  • metrics_granularity - (वैकल्पिक) इकट्ठा करने के लिए मैट्रिक्स के साथ संबद्ध करने के लिए metrics_granularity । केवल मान्य मूल्य 1Minute । डिफ़ॉल्ट 1Minute
  • enabled_metrics - (वैकल्पिक) इकट्ठा करने के लिए मैट्रिक्स की एक सूची। अनुमत मान GroupMinSize , GroupMaxSize , GroupDesiredCapacity , GroupInServiceInstances , GroupPendingInstances , GroupStandbyInstances , GroupTerminatingInstances , GroupTerminatingInstances
  • wait_for_capacity_timeout (डिफ़ॉल्ट: "10 मीटर") एक अधिकतम duration कि टेराफॉर्म को समय से पहले स्वस्थ होने के लिए एएसजी उदाहरणों का इंतजार करना चाहिए। (नीचे दी गई क्षमता की प्रतीक्षा भी देखें।) इसे "0" पर सेट करने से Terraform सभी क्षमता प्रतीक्षा व्यवहार को छोड़ देता है।
  • min_elb_capacity - (वैकल्पिक) इसे सेट करने के कारण Terraform को ELB में स्वस्थ दिखाने के लिए इस संख्या के उदाहरणों के लिए प्रतीक्षा करनी होती है। अपडेट ईएलबी उदाहरण संख्या परिवर्तनों पर प्रतीक्षा नहीं करेंगे। (नीचे दी गई क्षमता की प्रतीक्षा भी देखें।)
  • wait_for_elb_capacity - (वैकल्पिक) इसे सेट करने से wait_for_elb_capacity का कारण होगा कि वे सभी संलग्न लोड बैलेन्सर के निर्माण और अद्यतन कार्यों में स्वस्थ उदाहरणों की इस संख्या की प्रतीक्षा करें। ( min_elb_capacity व्यवहार पर वरीयता प्राप्त min_elb_capacity है।) (नीचे दी गई क्षमता की प्रतीक्षा भी कर रहा है ।)
  • protect_from_scale_in (वैकल्पिक) इंस्टेंस सुरक्षा को सेट करने देता है। घटनाओं में पैमाने के दौरान समाप्ति के लिए इस समूह के साथ ऑटोस्कोलिंग समूह उदाहरणों का चयन नहीं करेगा।
  • service_linked_role_arn (वैकल्पिक) सेवा से जुड़ी भूमिका का ARN जो ASG अन्य विज्ञापन सेवाओं को कॉल करने के लिए उपयोग करेगा

टैग निम्नलिखित का समर्थन करते हैं:

tag विशेषता निम्नलिखित क्षेत्रों के साथ एक टैग घोषणा को स्वीकार करती है:

  • key - (आवश्यक) कुंजी
  • value - (आवश्यक) मान
  • propagate_at_launch - (आवश्यक) इस ASG के माध्यम से लॉन्च किए गए Amazon EC2 उदाहरणों में टैग के प्रसार को सक्षम करता है

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

खाका विशिष्टता लॉन्च करें

launch_template ब्लॉक निम्नलिखित का समर्थन करता है:

  • id - लॉन्च टेम्पलेट की आईडी। name साथ संघर्ष।
  • name - लॉन्च टेम्पलेट का नाम। id साथ संघर्ष।
  • version - टेम्पलेट संस्करण। संस्करण संख्या, $Latest या $Default । (डिफ़ॉल्ट: $Default )।

संदर्भ संदर्भित करता है

उपरोक्त सभी तर्कों के अलावा, निम्नलिखित विशेषताएँ निर्यात की जाती हैं:

  • id - ऑटोस्कोलिंग समूह आईडी।
  • arn - इस AutoScaling Group के लिए ARN
  • availability_zones - ऑटोस्कोल समूह की उपलब्धता क्षेत्र।
  • min_size - min_size समूह का न्यूनतम आकार
  • max_size - max_size समूह का अधिकतम आकार
  • default_cooldown - स्केलिंग गतिविधि और सफल स्केलिंग गतिविधि के बीच का समय।
  • name - ऑटोस्केल समूह का नाम
  • health_check_grace_period - उदाहरण के बाद समय स्वास्थ्य की जाँच से पहले सेवा में आता है।
  • health_check_type - "EC2" या "ELB"। नियंत्रण करता है कि स्वास्थ्य की जाँच कैसे की जाती है।
  • desired_capacity -अमेज़ॅन ईसी 2 उदाहरणों की संख्या जो समूह में चलनी चाहिए।
  • launch_configuration - launch_configuration समूह का लॉन्च कॉन्फ़िगरेशन
  • vpc_zone_identifier (वैकल्पिक) - VPC ज़ोन पहचानकर्ता
  • load_balancers (वैकल्पिक) load_balancers समूह से जुड़े लोड बैलेंसर नाम।
  • target_group_arns (वैकल्पिक) लक्ष्य समूह ARN की सूची जो इस AutoScaling Group पर लागू होती है

समय समाप्ति

autoscaling_group निम्नलिखित Timeouts कॉन्फ़िगरेशन विकल्प प्रदान करता है:

  • delete - (डिफ़ॉल्ट 10 minutes ) एएसजी को नष्ट करने के लिए उपयोग किया जाता है।

क्षमता की प्रतीक्षा में

एक नव-निर्मित एएसजी शुरू में खाली है और प्रदान किए गए लॉन्च कॉन्फ़िगरेशन का उपयोग करके इंस्टेंस लॉन्च करके min_size (या desired_capacity , यदि निर्दिष्ट हो) के पैमाने पर शुरू होता है। इन उदाहरणों को लॉन्च करने और बूट करने में समय लगता है।

एएसजी अपडेट पर, इन मूल्यों में परिवर्तन भी सेवा प्रदान करने वाले उदाहरणों की लक्ष्य संख्या में परिणाम के लिए समय लेते हैं।

Terraform दो तंत्र प्रदान करता है जो लगातार निर्भर संसाधनों पर ASG पैमाने को प्रबंधित करने में मदद करता है।

ASG क्षमता की प्रतीक्षा कर रहा है

पहला डिफ़ॉल्ट व्यवहार है। जारी रखने से पहले ASG में दिखाने के लिए min_size (या यदि desired_capacity , निर्दिष्ट) स्वस्थ उदाहरणों के लिए टेराफॉर्म ASG निर्माण के बाद प्रतीक्षा करता है।

यदि बाद के अपडेट में min_size या desired_capacity परिवर्तन को बदल दिया जाता है, तो Terraform जारी रखने से पहले स्वस्थ संख्या की सही संख्या की प्रतीक्षा करेगा।

Terraform एक उदाहरण को "स्वस्थ" मानता है जब ASG HealthStatus: "Healthy" रिपोर्ट HealthStatus: "Healthy" और LifecycleState: "InService" । एएसजी के जीवनचक्र के बारे में अधिक जानकारी के लिए एडब्ल्यूएस ऑटोस्केलिंग डॉक्स देखें।

Terraform wait_for_capacity_timeout तक के स्वस्थ उदाहरणों की प्रतीक्षा wait_for_capacity_timeout । यदि ASG निर्माण में कुछ मिनटों से अधिक समय लग रहा है, तो यह गतिविधि त्रुटियों को स्केल करने के लिए जांच के लायक है, जो चयनित लॉन्च कॉन्फ़िगरेशन के साथ समस्याओं के कारण हो सकता है।

"0" लिए wait_for_capacity_timeout सेट करना ASG क्षमता प्रतीक्षा को अक्षम करता है।

ईएलबी क्षमता की प्रतीक्षा कर रहा है

दूसरा तंत्र वैकल्पिक है, और ASGs को load_balancers विशेषता के माध्यम से निर्दिष्ट ELB के साथ या target_group_arns के साथ निर्दिष्ट ALB के साथ प्रभावित करता है।

ASG निर्माण के दौरान सभी संलग्न ELB में "InService" दिखाने के लिए min_elb_capacity पैरामीटर कम से कम अनुरोधित संख्याओं की प्रतीक्षा करने के लिए Terraform का कारण बनता है। एएसजी अपडेट पर इसका कोई प्रभाव नहीं है।

यदि wait_for_elb_capacity सेट है, तो Terraform निर्माण और अद्यतनों दोनों पर सभी संलग्न ELB में "InService" होने के लिए उस संख्या की सटीक प्रतीक्षा करेगा।

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

एएसजी क्षमता के साथ, टेराफॉर्म स्वस्थ होने के लिए उचित संख्या के लिए प्रतीक्षा करने के लिए इंतजार करना होगा।

समस्या निवारण क्षमता प्रतीक्षा समय समाप्त हो रहा है

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

आयात

AutoScaling Group को name का उपयोग करके आयात किया जा सकता है, जैसे

$ terraform import aws_autoscaling_group.web web-asg