github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/builtin/providers/aws/resource_aws_autoscaling_group_test.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "reflect" 6 "regexp" 7 "strings" 8 "testing" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/awserr" 12 "github.com/aws/aws-sdk-go/service/autoscaling" 13 "github.com/hashicorp/terraform/helper/acctest" 14 "github.com/hashicorp/terraform/helper/resource" 15 "github.com/hashicorp/terraform/terraform" 16 ) 17 18 func TestAccAWSAutoScalingGroup_basic(t *testing.T) { 19 var group autoscaling.Group 20 var lc autoscaling.LaunchConfiguration 21 22 randName := fmt.Sprintf("terraform-test-%s", acctest.RandString(10)) 23 24 resource.Test(t, resource.TestCase{ 25 PreCheck: func() { testAccPreCheck(t) }, 26 Providers: testAccProviders, 27 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 28 Steps: []resource.TestStep{ 29 resource.TestStep{ 30 Config: testAccAWSAutoScalingGroupConfig(randName), 31 Check: resource.ComposeTestCheckFunc( 32 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 33 testAccCheckAWSAutoScalingGroupHealthyCapacity(&group, 2), 34 testAccCheckAWSAutoScalingGroupAttributes(&group, randName), 35 resource.TestCheckResourceAttr( 36 "aws_autoscaling_group.bar", "availability_zones.2487133097", "us-west-2a"), 37 resource.TestCheckResourceAttr( 38 "aws_autoscaling_group.bar", "name", randName), 39 resource.TestCheckResourceAttr( 40 "aws_autoscaling_group.bar", "max_size", "5"), 41 resource.TestCheckResourceAttr( 42 "aws_autoscaling_group.bar", "min_size", "2"), 43 resource.TestCheckResourceAttr( 44 "aws_autoscaling_group.bar", "health_check_grace_period", "300"), 45 resource.TestCheckResourceAttr( 46 "aws_autoscaling_group.bar", "health_check_type", "ELB"), 47 resource.TestCheckResourceAttr( 48 "aws_autoscaling_group.bar", "desired_capacity", "4"), 49 resource.TestCheckResourceAttr( 50 "aws_autoscaling_group.bar", "force_delete", "true"), 51 resource.TestCheckResourceAttr( 52 "aws_autoscaling_group.bar", "termination_policies.0", "OldestInstance"), 53 resource.TestCheckResourceAttr( 54 "aws_autoscaling_group.bar", "termination_policies.1", "ClosestToNextInstanceHour"), 55 ), 56 }, 57 58 resource.TestStep{ 59 Config: testAccAWSAutoScalingGroupConfigUpdate(randName), 60 Check: resource.ComposeTestCheckFunc( 61 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 62 testAccCheckAWSLaunchConfigurationExists("aws_launch_configuration.new", &lc), 63 resource.TestCheckResourceAttr( 64 "aws_autoscaling_group.bar", "desired_capacity", "5"), 65 resource.TestCheckResourceAttr( 66 "aws_autoscaling_group.bar", "termination_policies.0", "ClosestToNextInstanceHour"), 67 testLaunchConfigurationName("aws_autoscaling_group.bar", &lc), 68 testAccCheckAutoscalingTags(&group.Tags, "Bar", map[string]interface{}{ 69 "value": "bar-foo", 70 "propagate_at_launch": true, 71 }), 72 ), 73 }, 74 }, 75 }) 76 } 77 78 func TestAccAWSAutoScalingGroup_autoGeneratedName(t *testing.T) { 79 asgNameRegexp := regexp.MustCompile("^tf-asg-") 80 81 resource.Test(t, resource.TestCase{ 82 PreCheck: func() { testAccPreCheck(t) }, 83 Providers: testAccProviders, 84 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 85 Steps: []resource.TestStep{ 86 resource.TestStep{ 87 Config: testAccAWSAutoScalingGroupConfig_autoGeneratedName, 88 Check: resource.ComposeTestCheckFunc( 89 resource.TestMatchResourceAttr( 90 "aws_autoscaling_group.bar", "name", asgNameRegexp), 91 ), 92 }, 93 }, 94 }) 95 } 96 97 func TestAccAWSAutoScalingGroup_terminationPolicies(t *testing.T) { 98 resource.Test(t, resource.TestCase{ 99 PreCheck: func() { testAccPreCheck(t) }, 100 Providers: testAccProviders, 101 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 102 Steps: []resource.TestStep{ 103 resource.TestStep{ 104 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesEmpty, 105 Check: resource.ComposeTestCheckFunc( 106 resource.TestCheckResourceAttr( 107 "aws_autoscaling_group.bar", "termination_policies.#", "0"), 108 ), 109 }, 110 111 resource.TestStep{ 112 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesUpdate, 113 Check: resource.ComposeTestCheckFunc( 114 resource.TestCheckResourceAttr( 115 "aws_autoscaling_group.bar", "termination_policies.#", "1"), 116 resource.TestCheckResourceAttr( 117 "aws_autoscaling_group.bar", "termination_policies.0", "OldestInstance"), 118 ), 119 }, 120 121 resource.TestStep{ 122 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesExplicitDefault, 123 Check: resource.ComposeTestCheckFunc( 124 resource.TestCheckResourceAttr( 125 "aws_autoscaling_group.bar", "termination_policies.#", "1"), 126 resource.TestCheckResourceAttr( 127 "aws_autoscaling_group.bar", "termination_policies.0", "Default"), 128 ), 129 }, 130 131 resource.TestStep{ 132 Config: testAccAWSAutoScalingGroupConfig_terminationPoliciesEmpty, 133 Check: resource.ComposeTestCheckFunc( 134 resource.TestCheckResourceAttr( 135 "aws_autoscaling_group.bar", "termination_policies.#", "0"), 136 ), 137 }, 138 }, 139 }) 140 } 141 142 func TestAccAWSAutoScalingGroup_tags(t *testing.T) { 143 var group autoscaling.Group 144 145 randName := fmt.Sprintf("tfautotags-%s", acctest.RandString(5)) 146 147 resource.Test(t, resource.TestCase{ 148 PreCheck: func() { testAccPreCheck(t) }, 149 Providers: testAccProviders, 150 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 151 Steps: []resource.TestStep{ 152 resource.TestStep{ 153 Config: testAccAWSAutoScalingGroupConfig(randName), 154 Check: resource.ComposeTestCheckFunc( 155 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 156 testAccCheckAutoscalingTags(&group.Tags, "Foo", map[string]interface{}{ 157 "value": "foo-bar", 158 "propagate_at_launch": true, 159 }), 160 ), 161 }, 162 163 resource.TestStep{ 164 Config: testAccAWSAutoScalingGroupConfigUpdate(randName), 165 Check: resource.ComposeTestCheckFunc( 166 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 167 testAccCheckAutoscalingTagNotExists(&group.Tags, "Foo"), 168 testAccCheckAutoscalingTags(&group.Tags, "Bar", map[string]interface{}{ 169 "value": "bar-foo", 170 "propagate_at_launch": true, 171 }), 172 ), 173 }, 174 }, 175 }) 176 } 177 178 func TestAccAWSAutoScalingGroup_VpcUpdates(t *testing.T) { 179 var group autoscaling.Group 180 181 resource.Test(t, resource.TestCase{ 182 PreCheck: func() { testAccPreCheck(t) }, 183 Providers: testAccProviders, 184 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 185 Steps: []resource.TestStep{ 186 resource.TestStep{ 187 Config: testAccAWSAutoScalingGroupConfigWithAZ, 188 Check: resource.ComposeTestCheckFunc( 189 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 190 resource.TestCheckResourceAttr( 191 "aws_autoscaling_group.bar", "availability_zones.#", "1"), 192 resource.TestCheckResourceAttr( 193 "aws_autoscaling_group.bar", "availability_zones.2487133097", "us-west-2a"), 194 resource.TestCheckResourceAttr( 195 "aws_autoscaling_group.bar", "vpc_zone_identifier.#", "1"), 196 ), 197 }, 198 199 resource.TestStep{ 200 Config: testAccAWSAutoScalingGroupConfigWithVPCIdent, 201 Check: resource.ComposeTestCheckFunc( 202 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 203 testAccCheckAWSAutoScalingGroupAttributesVPCZoneIdentifer(&group), 204 resource.TestCheckResourceAttr( 205 "aws_autoscaling_group.bar", "availability_zones.#", "1"), 206 resource.TestCheckResourceAttr( 207 "aws_autoscaling_group.bar", "availability_zones.2487133097", "us-west-2a"), 208 resource.TestCheckResourceAttr( 209 "aws_autoscaling_group.bar", "vpc_zone_identifier.#", "1"), 210 ), 211 }, 212 }, 213 }) 214 } 215 216 func TestAccAWSAutoScalingGroup_WithLoadBalancer(t *testing.T) { 217 var group autoscaling.Group 218 219 resource.Test(t, resource.TestCase{ 220 PreCheck: func() { testAccPreCheck(t) }, 221 Providers: testAccProviders, 222 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 223 Steps: []resource.TestStep{ 224 resource.TestStep{ 225 Config: testAccAWSAutoScalingGroupConfigWithLoadBalancer, 226 Check: resource.ComposeTestCheckFunc( 227 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 228 testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(&group), 229 ), 230 }, 231 }, 232 }) 233 } 234 235 func TestAccAWSAutoScalingGroup_withPlacementGroup(t *testing.T) { 236 var group autoscaling.Group 237 238 randName := fmt.Sprintf("tf_placement_test-%s", acctest.RandString(5)) 239 resource.Test(t, resource.TestCase{ 240 PreCheck: func() { testAccPreCheck(t) }, 241 Providers: testAccProviders, 242 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 243 Steps: []resource.TestStep{ 244 resource.TestStep{ 245 Config: testAccAWSAutoScalingGroupConfig_withPlacementGroup(randName), 246 Check: resource.ComposeTestCheckFunc( 247 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 248 resource.TestCheckResourceAttr( 249 "aws_autoscaling_group.bar", "placement_group", randName), 250 ), 251 }, 252 }, 253 }) 254 } 255 256 func TestAccAWSAutoScalingGroup_withMetrics(t *testing.T) { 257 var group autoscaling.Group 258 259 resource.Test(t, resource.TestCase{ 260 PreCheck: func() { testAccPreCheck(t) }, 261 Providers: testAccProviders, 262 CheckDestroy: testAccCheckAWSAutoScalingGroupDestroy, 263 Steps: []resource.TestStep{ 264 resource.TestStep{ 265 Config: testAccAWSAutoscalingMetricsCollectionConfig_allMetricsCollected, 266 Check: resource.ComposeTestCheckFunc( 267 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 268 resource.TestCheckResourceAttr( 269 "aws_autoscaling_group.bar", "enabled_metrics.#", "7"), 270 ), 271 }, 272 273 resource.TestStep{ 274 Config: testAccAWSAutoscalingMetricsCollectionConfig_updatingMetricsCollected, 275 Check: resource.ComposeTestCheckFunc( 276 testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group), 277 resource.TestCheckResourceAttr( 278 "aws_autoscaling_group.bar", "enabled_metrics.#", "5"), 279 ), 280 }, 281 }, 282 }) 283 } 284 285 func testAccCheckAWSAutoScalingGroupDestroy(s *terraform.State) error { 286 conn := testAccProvider.Meta().(*AWSClient).autoscalingconn 287 288 for _, rs := range s.RootModule().Resources { 289 if rs.Type != "aws_autoscaling_group" { 290 continue 291 } 292 293 // Try to find the Group 294 describeGroups, err := conn.DescribeAutoScalingGroups( 295 &autoscaling.DescribeAutoScalingGroupsInput{ 296 AutoScalingGroupNames: []*string{aws.String(rs.Primary.ID)}, 297 }) 298 299 if err == nil { 300 if len(describeGroups.AutoScalingGroups) != 0 && 301 *describeGroups.AutoScalingGroups[0].AutoScalingGroupName == rs.Primary.ID { 302 return fmt.Errorf("AutoScaling Group still exists") 303 } 304 } 305 306 // Verify the error 307 ec2err, ok := err.(awserr.Error) 308 if !ok { 309 return err 310 } 311 if ec2err.Code() != "InvalidGroup.NotFound" { 312 return err 313 } 314 } 315 316 return nil 317 } 318 319 func testAccCheckAWSAutoScalingGroupAttributes(group *autoscaling.Group, name string) resource.TestCheckFunc { 320 return func(s *terraform.State) error { 321 if *group.AvailabilityZones[0] != "us-west-2a" { 322 return fmt.Errorf("Bad availability_zones: %#v", group.AvailabilityZones[0]) 323 } 324 325 if *group.AutoScalingGroupName != name { 326 return fmt.Errorf("Bad Autoscaling Group name, expected (%s), got (%s)", name, *group.AutoScalingGroupName) 327 } 328 329 if *group.MaxSize != 5 { 330 return fmt.Errorf("Bad max_size: %d", *group.MaxSize) 331 } 332 333 if *group.MinSize != 2 { 334 return fmt.Errorf("Bad max_size: %d", *group.MinSize) 335 } 336 337 if *group.HealthCheckType != "ELB" { 338 return fmt.Errorf("Bad health_check_type,\nexpected: %s\ngot: %s", "ELB", *group.HealthCheckType) 339 } 340 341 if *group.HealthCheckGracePeriod != 300 { 342 return fmt.Errorf("Bad health_check_grace_period: %d", *group.HealthCheckGracePeriod) 343 } 344 345 if *group.DesiredCapacity != 4 { 346 return fmt.Errorf("Bad desired_capacity: %d", *group.DesiredCapacity) 347 } 348 349 if *group.LaunchConfigurationName == "" { 350 return fmt.Errorf("Bad launch configuration name: %s", *group.LaunchConfigurationName) 351 } 352 353 t := &autoscaling.TagDescription{ 354 Key: aws.String("Foo"), 355 Value: aws.String("foo-bar"), 356 PropagateAtLaunch: aws.Bool(true), 357 ResourceType: aws.String("auto-scaling-group"), 358 ResourceId: group.AutoScalingGroupName, 359 } 360 361 if !reflect.DeepEqual(group.Tags[0], t) { 362 return fmt.Errorf( 363 "Got:\n\n%#v\n\nExpected:\n\n%#v\n", 364 group.Tags[0], 365 t) 366 } 367 368 return nil 369 } 370 } 371 372 func testAccCheckAWSAutoScalingGroupAttributesLoadBalancer(group *autoscaling.Group) resource.TestCheckFunc { 373 return func(s *terraform.State) error { 374 if len(group.LoadBalancerNames) != 1 { 375 return fmt.Errorf("Bad load_balancers: %v", group.LoadBalancerNames) 376 } 377 378 return nil 379 } 380 } 381 382 func testAccCheckAWSAutoScalingGroupExists(n string, group *autoscaling.Group) resource.TestCheckFunc { 383 return func(s *terraform.State) error { 384 rs, ok := s.RootModule().Resources[n] 385 if !ok { 386 return fmt.Errorf("Not found: %s", n) 387 } 388 389 if rs.Primary.ID == "" { 390 return fmt.Errorf("No AutoScaling Group ID is set") 391 } 392 393 conn := testAccProvider.Meta().(*AWSClient).autoscalingconn 394 395 describeGroups, err := conn.DescribeAutoScalingGroups( 396 &autoscaling.DescribeAutoScalingGroupsInput{ 397 AutoScalingGroupNames: []*string{aws.String(rs.Primary.ID)}, 398 }) 399 400 if err != nil { 401 return err 402 } 403 404 if len(describeGroups.AutoScalingGroups) != 1 || 405 *describeGroups.AutoScalingGroups[0].AutoScalingGroupName != rs.Primary.ID { 406 return fmt.Errorf("AutoScaling Group not found") 407 } 408 409 *group = *describeGroups.AutoScalingGroups[0] 410 411 return nil 412 } 413 } 414 415 func testLaunchConfigurationName(n string, lc *autoscaling.LaunchConfiguration) resource.TestCheckFunc { 416 return func(s *terraform.State) error { 417 rs, ok := s.RootModule().Resources[n] 418 if !ok { 419 return fmt.Errorf("Not found: %s", n) 420 } 421 422 if *lc.LaunchConfigurationName != rs.Primary.Attributes["launch_configuration"] { 423 return fmt.Errorf("Launch configuration names do not match") 424 } 425 426 return nil 427 } 428 } 429 430 func testAccCheckAWSAutoScalingGroupHealthyCapacity( 431 g *autoscaling.Group, exp int) resource.TestCheckFunc { 432 return func(s *terraform.State) error { 433 healthy := 0 434 for _, i := range g.Instances { 435 if i.HealthStatus == nil { 436 continue 437 } 438 if strings.EqualFold(*i.HealthStatus, "Healthy") { 439 healthy++ 440 } 441 } 442 if healthy < exp { 443 return fmt.Errorf("Expected at least %d healthy, got %d.", exp, healthy) 444 } 445 return nil 446 } 447 } 448 449 func testAccCheckAWSAutoScalingGroupAttributesVPCZoneIdentifer(group *autoscaling.Group) resource.TestCheckFunc { 450 return func(s *terraform.State) error { 451 // Grab Subnet Ids 452 var subnets []string 453 for _, rs := range s.RootModule().Resources { 454 if rs.Type != "aws_subnet" { 455 continue 456 } 457 subnets = append(subnets, rs.Primary.Attributes["id"]) 458 } 459 460 if group.VPCZoneIdentifier == nil { 461 return fmt.Errorf("Bad VPC Zone Identifier\nexpected: %s\ngot nil", subnets) 462 } 463 464 zones := strings.Split(*group.VPCZoneIdentifier, ",") 465 466 remaining := len(zones) 467 for _, z := range zones { 468 for _, s := range subnets { 469 if z == s { 470 remaining-- 471 } 472 } 473 } 474 475 if remaining != 0 { 476 return fmt.Errorf("Bad VPC Zone Identifier match\nexpected: %s\ngot:%s", zones, subnets) 477 } 478 479 return nil 480 } 481 } 482 483 const testAccAWSAutoScalingGroupConfig_autoGeneratedName = ` 484 resource "aws_launch_configuration" "foobar" { 485 image_id = "ami-21f78e11" 486 instance_type = "t1.micro" 487 } 488 489 resource "aws_autoscaling_group" "bar" { 490 availability_zones = ["us-west-2a"] 491 desired_capacity = 0 492 max_size = 0 493 min_size = 0 494 launch_configuration = "${aws_launch_configuration.foobar.name}" 495 } 496 ` 497 498 const testAccAWSAutoScalingGroupConfig_terminationPoliciesEmpty = ` 499 resource "aws_launch_configuration" "foobar" { 500 image_id = "ami-21f78e11" 501 instance_type = "t1.micro" 502 } 503 504 resource "aws_autoscaling_group" "bar" { 505 availability_zones = ["us-west-2a"] 506 max_size = 0 507 min_size = 0 508 desired_capacity = 0 509 510 launch_configuration = "${aws_launch_configuration.foobar.name}" 511 } 512 ` 513 514 const testAccAWSAutoScalingGroupConfig_terminationPoliciesExplicitDefault = ` 515 resource "aws_launch_configuration" "foobar" { 516 image_id = "ami-21f78e11" 517 instance_type = "t1.micro" 518 } 519 520 resource "aws_autoscaling_group" "bar" { 521 availability_zones = ["us-west-2a"] 522 max_size = 0 523 min_size = 0 524 desired_capacity = 0 525 termination_policies = ["Default"] 526 527 launch_configuration = "${aws_launch_configuration.foobar.name}" 528 } 529 ` 530 531 const testAccAWSAutoScalingGroupConfig_terminationPoliciesUpdate = ` 532 resource "aws_launch_configuration" "foobar" { 533 image_id = "ami-21f78e11" 534 instance_type = "t1.micro" 535 } 536 537 resource "aws_autoscaling_group" "bar" { 538 availability_zones = ["us-west-2a"] 539 max_size = 0 540 min_size = 0 541 desired_capacity = 0 542 termination_policies = ["OldestInstance"] 543 544 launch_configuration = "${aws_launch_configuration.foobar.name}" 545 } 546 ` 547 548 func testAccAWSAutoScalingGroupConfig(name string) string { 549 return fmt.Sprintf(` 550 resource "aws_launch_configuration" "foobar" { 551 image_id = "ami-21f78e11" 552 instance_type = "t1.micro" 553 } 554 555 resource "aws_placement_group" "test" { 556 name = "%s" 557 strategy = "cluster" 558 } 559 560 resource "aws_autoscaling_group" "bar" { 561 availability_zones = ["us-west-2a"] 562 name = "%s" 563 max_size = 5 564 min_size = 2 565 health_check_type = "ELB" 566 desired_capacity = 4 567 force_delete = true 568 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 569 570 launch_configuration = "${aws_launch_configuration.foobar.name}" 571 572 tag { 573 key = "Foo" 574 value = "foo-bar" 575 propagate_at_launch = true 576 } 577 } 578 `, name, name) 579 } 580 581 func testAccAWSAutoScalingGroupConfigUpdate(name string) string { 582 return fmt.Sprintf(` 583 resource "aws_launch_configuration" "foobar" { 584 image_id = "ami-21f78e11" 585 instance_type = "t1.micro" 586 } 587 588 resource "aws_launch_configuration" "new" { 589 image_id = "ami-21f78e11" 590 instance_type = "t1.micro" 591 } 592 593 resource "aws_autoscaling_group" "bar" { 594 availability_zones = ["us-west-2a"] 595 name = "%s" 596 max_size = 5 597 min_size = 2 598 health_check_grace_period = 300 599 health_check_type = "ELB" 600 desired_capacity = 5 601 force_delete = true 602 termination_policies = ["ClosestToNextInstanceHour"] 603 604 launch_configuration = "${aws_launch_configuration.new.name}" 605 606 tag { 607 key = "Bar" 608 value = "bar-foo" 609 propagate_at_launch = true 610 } 611 } 612 `, name) 613 } 614 615 const testAccAWSAutoScalingGroupConfigWithLoadBalancer = ` 616 resource "aws_vpc" "foo" { 617 cidr_block = "10.1.0.0/16" 618 tags { Name = "tf-asg-test" } 619 } 620 621 resource "aws_internet_gateway" "gw" { 622 vpc_id = "${aws_vpc.foo.id}" 623 } 624 625 resource "aws_subnet" "foo" { 626 cidr_block = "10.1.1.0/24" 627 vpc_id = "${aws_vpc.foo.id}" 628 } 629 630 resource "aws_security_group" "foo" { 631 vpc_id="${aws_vpc.foo.id}" 632 633 ingress { 634 protocol = "-1" 635 from_port = 0 636 to_port = 0 637 cidr_blocks = ["0.0.0.0/0"] 638 } 639 640 egress { 641 protocol = "-1" 642 from_port = 0 643 to_port = 0 644 cidr_blocks = ["0.0.0.0/0"] 645 } 646 } 647 648 resource "aws_elb" "bar" { 649 subnets = ["${aws_subnet.foo.id}"] 650 security_groups = ["${aws_security_group.foo.id}"] 651 652 listener { 653 instance_port = 80 654 instance_protocol = "http" 655 lb_port = 80 656 lb_protocol = "http" 657 } 658 659 health_check { 660 healthy_threshold = 2 661 unhealthy_threshold = 2 662 target = "HTTP:80/" 663 interval = 5 664 timeout = 2 665 } 666 667 depends_on = ["aws_internet_gateway.gw"] 668 } 669 670 resource "aws_launch_configuration" "foobar" { 671 // need an AMI that listens on :80 at boot, this is: 672 // bitnami-nginxstack-1.6.1-0-linux-ubuntu-14.04.1-x86_64-hvm-ebs-ami-99f5b1a9-3 673 image_id = "ami-b5b3fc85" 674 instance_type = "t2.micro" 675 security_groups = ["${aws_security_group.foo.id}"] 676 } 677 678 resource "aws_autoscaling_group" "bar" { 679 availability_zones = ["${aws_subnet.foo.availability_zone}"] 680 vpc_zone_identifier = ["${aws_subnet.foo.id}"] 681 max_size = 2 682 min_size = 2 683 health_check_grace_period = 300 684 health_check_type = "ELB" 685 wait_for_elb_capacity = 2 686 force_delete = true 687 688 launch_configuration = "${aws_launch_configuration.foobar.name}" 689 load_balancers = ["${aws_elb.bar.name}"] 690 } 691 ` 692 693 const testAccAWSAutoScalingGroupConfigWithAZ = ` 694 resource "aws_vpc" "default" { 695 cidr_block = "10.0.0.0/16" 696 tags { 697 Name = "terraform-test" 698 } 699 } 700 701 resource "aws_subnet" "main" { 702 vpc_id = "${aws_vpc.default.id}" 703 cidr_block = "10.0.1.0/24" 704 availability_zone = "us-west-2a" 705 tags { 706 Name = "terraform-test" 707 } 708 } 709 710 resource "aws_launch_configuration" "foobar" { 711 image_id = "ami-b5b3fc85" 712 instance_type = "t2.micro" 713 } 714 715 resource "aws_autoscaling_group" "bar" { 716 availability_zones = [ 717 "us-west-2a" 718 ] 719 desired_capacity = 0 720 max_size = 0 721 min_size = 0 722 launch_configuration = "${aws_launch_configuration.foobar.name}" 723 } 724 ` 725 726 const testAccAWSAutoScalingGroupConfigWithVPCIdent = ` 727 resource "aws_vpc" "default" { 728 cidr_block = "10.0.0.0/16" 729 tags { 730 Name = "terraform-test" 731 } 732 } 733 734 resource "aws_subnet" "main" { 735 vpc_id = "${aws_vpc.default.id}" 736 cidr_block = "10.0.1.0/24" 737 availability_zone = "us-west-2a" 738 tags { 739 Name = "terraform-test" 740 } 741 } 742 743 resource "aws_launch_configuration" "foobar" { 744 image_id = "ami-b5b3fc85" 745 instance_type = "t2.micro" 746 } 747 748 resource "aws_autoscaling_group" "bar" { 749 vpc_zone_identifier = [ 750 "${aws_subnet.main.id}", 751 ] 752 desired_capacity = 0 753 max_size = 0 754 min_size = 0 755 launch_configuration = "${aws_launch_configuration.foobar.name}" 756 } 757 ` 758 759 func testAccAWSAutoScalingGroupConfig_withPlacementGroup(name string) string { 760 return fmt.Sprintf(` 761 resource "aws_launch_configuration" "foobar" { 762 image_id = "ami-21f78e11" 763 instance_type = "c3.large" 764 } 765 766 resource "aws_placement_group" "test" { 767 name = "%s" 768 strategy = "cluster" 769 } 770 771 resource "aws_autoscaling_group" "bar" { 772 availability_zones = ["us-west-2a"] 773 name = "%s" 774 max_size = 1 775 min_size = 1 776 health_check_grace_period = 300 777 health_check_type = "ELB" 778 desired_capacity = 1 779 force_delete = true 780 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 781 placement_group = "${aws_placement_group.test.name}" 782 783 launch_configuration = "${aws_launch_configuration.foobar.name}" 784 785 tag { 786 key = "Foo" 787 value = "foo-bar" 788 propagate_at_launch = true 789 } 790 } 791 `, name, name) 792 } 793 794 const testAccAWSAutoscalingMetricsCollectionConfig_allMetricsCollected = ` 795 resource "aws_launch_configuration" "foobar" { 796 image_id = "ami-21f78e11" 797 instance_type = "t1.micro" 798 } 799 800 resource "aws_autoscaling_group" "bar" { 801 availability_zones = ["us-west-2a"] 802 max_size = 1 803 min_size = 0 804 health_check_grace_period = 300 805 health_check_type = "EC2" 806 desired_capacity = 0 807 force_delete = true 808 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 809 launch_configuration = "${aws_launch_configuration.foobar.name}" 810 enabled_metrics = ["GroupTotalInstances", 811 "GroupPendingInstances", 812 "GroupTerminatingInstances", 813 "GroupDesiredCapacity", 814 "GroupInServiceInstances", 815 "GroupMinSize", 816 "GroupMaxSize" 817 ] 818 metrics_granularity = "1Minute" 819 } 820 ` 821 822 const testAccAWSAutoscalingMetricsCollectionConfig_updatingMetricsCollected = ` 823 resource "aws_launch_configuration" "foobar" { 824 image_id = "ami-21f78e11" 825 instance_type = "t1.micro" 826 } 827 828 resource "aws_autoscaling_group" "bar" { 829 availability_zones = ["us-west-2a"] 830 max_size = 1 831 min_size = 0 832 health_check_grace_period = 300 833 health_check_type = "EC2" 834 desired_capacity = 0 835 force_delete = true 836 termination_policies = ["OldestInstance","ClosestToNextInstanceHour"] 837 launch_configuration = "${aws_launch_configuration.foobar.name}" 838 enabled_metrics = ["GroupTotalInstances", 839 "GroupPendingInstances", 840 "GroupTerminatingInstances", 841 "GroupDesiredCapacity", 842 "GroupMaxSize" 843 ] 844 metrics_granularity = "1Minute" 845 } 846 `