Can anyone help me to create AWS autoscaleing with...
# general
v
Can anyone help me to create AWS autoscaleing with ELB? When the cpu reaches 80% a new vm will add and when it goes below 30% it will remove one. I tried to do it with Python but couldn't complete it after getting several errors. I have asked previously but not getting any help.
h
Can you share what issue you are having?
v
The error I am getting.
Copy code
(venv) (base) apple@Apples-MacBook-Pro pulumi-demo % pulumi up
Please choose a stack, or create a new one: dev
Previewing update (dev)

View in Browser (Ctrl+O): <https://app.pulumi.com/infa-sasatapathy/pulumi-demo/dev/previews/2d621d1a-5c1a-476d-9578-6b855ac1f0d5>

     Type                            Name                     Plan       
 +   pulumi:pulumi:Stack             pulumi-demo-dev          create     
 +   ├─ aws:ec2:SecurityGroup        webserver-sg             create     
 +   ├─ aws:ec2:SecurityGroupRule    AllowSSH                 create     
 +   ├─ aws:ec2:SecurityGroupRule    AllowHTTP                create     
 +   ├─ aws:ec2:LaunchConfiguration  my-launch-configuration  create     
 +   ├─ aws:ec2:SecurityGroupRule    AllowALL                 create     
 +   ├─ aws:elb:LoadBalancer         my-load-balancer         create     
 +   ├─ aws:autoscaling:Group        my-auto-scaling-group    create     
 +   ├─ aws:autoscaling:Attachment   example                  create     
 +   ├─ aws:cloudwatch:MetricAlarm   scale-up-alarm           create     
 +   └─ aws:cloudwatch:MetricAlarm   scale-down-alarm         create     

Outputs:
    load_balancer_url: output<string>

Resources:
    + 11 to create

Do you want to perform this update? yes
Updating (dev)

View in Browser (Ctrl+O): <https://app.pulumi.com/infa-sasatapathy/pulumi-demo/dev/updates/25>

     Type                            Name                     Status                        Info
 +   pulumi:pulumi:Stack             pulumi-demo-dev          **creating failed (20s)**     1 error
 +   ├─ aws:ec2:SecurityGroup        webserver-sg             created (4s)                  
 +   ├─ aws:ec2:SecurityGroupRule    AllowSSH                 created (1s)                  
 +   ├─ aws:ec2:SecurityGroupRule    AllowHTTP                created (3s)                  
 +   ├─ aws:ec2:LaunchConfiguration  my-launch-configuration  created (3s)                  
 +   ├─ aws:elb:LoadBalancer         my-load-balancer         created (9s)                  
 +   ├─ aws:ec2:SecurityGroupRule    AllowALL                 created (4s)                  
 +   └─ aws:autoscaling:Group        my-auto-scaling-group    **creating failed**           1 error

Diagnostics:
  pulumi:pulumi:Stack (pulumi-demo-dev):
    error: update failed

  aws:autoscaling:Group (my-auto-scaling-group):
    error: 1 error occurred:
        * creating urn:pulumi:dev::pulumi-demo::aws:autoscaling/group:Group::my-auto-scaling-group: 1 error occurred:
        * waiting for Auto Scaling Group (my-auto-scaling-group-a5e1d9f) capacity satisfied: scaling activity (3da63ac6-f6e9-aeb9-54b1-5fe6eae11253): Failed: The security group 'webserver-sg-221e9e9' does not exist in VPC 'vpc-0774602361e27ead0'. Launching EC2 instance failed.
    scaling activity (43b63ac6-f6e7-f68e-dd77-9a06e1231fe1): Failed: The security group 'webserver-sg-221e9e9' does not exist in VPC 'vpc-0774602361e27ead0'. Launching EC2 instance failed.

Outputs:
    load_balancer_url: "<http://my-load-balancer-ac52a60-1169040298.us-east-1.elb.amazonaws.com|my-load-balancer-ac52a60-1169040298.us-east-1.elb.amazonaws.com>"

Resources:
    + 7 created

Duration: 37s

warning: A new version of Pulumi is available. To upgrade from version '3.111.1' to '3.112.0', run 
   $ brew update && brew upgrade pulumi
or visit <https://pulumi.com/docs/install/> for manual instructions and release notes.
(venv) (base) apple@Apples-MacBook-Pro pulumi-demo %
My code,
Copy code
import pulumi
import pulumi_aws as aws
from pulumi_aws import ec2

sg = ec2.SecurityGroup('webserver-sg', description="Security Group for web servers")

allow_ssh = ec2.SecurityGroupRule("AllowSSH", type="ingress", from_port=22, to_port=22, protocol="tcp", cidr_blocks=["0.0.0.0/0"], security_group_id=sg.id)
allow_http = ec2.SecurityGroupRule("AllowHTTP", type="ingress", from_port=80, to_port=80, protocol="tcp", cidr_blocks=["0.0.0.0/0"], security_group_id=sg.id)
allow_all = ec2.SecurityGroupRule("AllowALL", type="egress", from_port=0, to_port=0, protocol="-1", cidr_blocks=["0.0.0.0/0"], security_group_id=sg.id)

# create the user data
user_data = """
#!/bin/bash
echo "Hello, world!" > index.html
nohup python -m SimpleHTTPServer 80 &
"""

# Create a classic load balancer
load_balancer = aws.elb.LoadBalancer("my-load-balancer",
    availability_zones=["us-east-1a", "us-east-1b", "us-east-1c"],
    listeners=[{
        "instance_port": 80,
        "instance_protocol": "HTTP",
        "lb_port": 80,
        "lb_protocol": "HTTP"
    }],
    security_groups=[sg.id]
)

# Create an auto-scaling group
auto_scaling_group = aws.autoscaling.Group("my-auto-scaling-group",
    min_size=2,
    max_size=5,
    launch_configuration=aws.ec2.LaunchConfiguration("my-launch-configuration",
        image_id="ami-0c101f26f147fa7fd",
        instance_type="t2.micro",
        user_data=user_data,
        security_groups=[sg.name]
    ),
    availability_zones=["us-east-1a", "us-east-1b", "us-east-1c"],
    load_balancers=[load_balancer.name]
)


# Attach the load balancer to the auto-scaling group
attachment = aws.autoscaling.Attachment("example",
    autoscaling_group_name=auto_scaling_group.name,
    elb=load_balancer.name
)

# Create a CloudWatch metric alarm for scaling up
scale_up_alarm = aws.cloudwatch.MetricAlarm("scale-up-alarm",
    alarm_actions=[auto_scaling_group.arn],
    comparison_operator="GreaterThanOrEqualToThreshold",
    evaluation_periods=1,
    metric_name="CPUUtilization",
    namespace="AWS/EC2",
    period=60,
    statistic="Average",
    threshold=80,
    dimensions={
        "AutoScalingGroupName": auto_scaling_group.name
    }
)

# Create a CloudWatch metric alarm for scaling down
scale_down_alarm = aws.cloudwatch.MetricAlarm("scale-down-alarm",
    alarm_actions=[auto_scaling_group.arn],
    comparison_operator="LessThanOrEqualToThreshold",
    evaluation_periods=1,
    metric_name="CPUUtilization",
    namespace="AWS/EC2",
    period=60,
    statistic="Average",
    threshold=30,
    dimensions={
        "AutoScalingGroupName": auto_scaling_group.name
    }
)

# Export the load balancer URL
pulumi.export("load_balancer_url", load_balancer.dns_name)
h
this may be related to the default vpc issue. Can you create the launch_configuration outside of the asg and refer that with .id in the asg definition and try ? i would debug by trying to create them separately and increment.
v
Sure. I will try.