대기열 'myDownlinQueue'에서 미터법 (트리거)이 ApproximateNumberOfMessagesVisible 인 경보를 만들고 싶습니다. 경보는 AutoScalingGroup 자동 조정 작업을 수행합니다. 그러나 내가 작성한 코드를 기반으로 제목에 언급 된 오류가 발생합니다. 어쩌면 내가 잘못하고 있지만, 아래는이 오류를 일으키는 코드입니다.TypeError : 목록 인덱스가 str이 아닌 정수 여야합니다.
# ==== AutoSCaling config =======================
autoscaling_group = {
"name": "myAG", #descriptive name for your auto scaling group
"min_size": 0 , #Minimum number of instances that should be running at all times
"max_size": 0 #Maximum number of instances that should be running at all times
}
lc_name = 'myLG' #Descriptive name for your launch configuration
#=================AMI to launch======================================================
as_ami = {
"id": "ami-******c", #The AMI ID of the instance your Auto Scaling group will launch
"VpcId" : "vpc-0c805575",
"security_groups": "sg-xxxxxxxa", #The security group(s) your instances will belong to
"instance_type": "t2.micro", #The size of instance that will be launched
"instance_monitoring": True #Indicated whether the instances will be launched with detailed monitoring enabled. Needed to enable CloudWatch
}
conn_reg = boto.ec2.connect_to_region(region_name=awsRegion)
zones = conn_reg.get_all_zones()
zoneStrings = []
for zone in zones:
zoneStrings.append(zone.name)
print " Available zones : " + zone.name
conn_vpc = boto.connect_vpc()
subnetids = conn_vpc.get_all_subnets()
conn_as = AutoScaleConnection(AWS_ACCESS_KEY,AWS_SECRET_KEY)
lc = LaunchConfiguration(name = lc_name,
image_id = as_ami["id"],
instance_type = as_ami["instance_type"],
user_data = "user-data.bls",
associate_public_ip_address = True,
instance_monitoring=as_ami["instance_monitoring"])
conn_as.create_launch_configuration(lc)
ag = AutoScalingGroup(group_name = autoscaling_group["name"],
availability_zones= zoneStrings,
vpc_zone_identifier = subnetList,
launch_config=lc, min_size = autoscaling_group["min_size"],
max_size = autoscaling_group["max_size"])
conn_as.create_auto_scaling_group(ag)
#=================Create Scaling Policies===================================
# Policy for scaling the number of servers up and down
scalingUpPolicy = ScalingPolicy(name = "myScaleUpPolicy",
adjustment_type ="ChangeInCapacity",
as_name=ag.name,
scaling_adjustment = numInstances ,
cooldown=180)
scalingDownPolicy = ScalingPolicy(name = "myScaleDownPolicy",
adjustment_type= "ExactCapacity",
as_name=ag.name,
scaling_adjustment= 0 ,
cooldown=180)
conn_as.create_scaling_policy(scalingUpPolicy)
conn_as.create_scaling_policy(scalingDownPolicy)
scalingUpPolicy = conn_as.get_all_policies(as_group="myAG", policy_names=["myScaleUpPolicy"])[0]
scalingDownPolicy = conn_as.get_all_policies(as_group="myAG",policy_names=["myScaleDownPolicy"])[0]
# =========== CloudWatch Connection =============
cw = connect_to_region(awsRegion)
# =========== SNS Connection ===================
sns = connect_to_region(awsRegion)
cw = CloudWatchConnection(AWS_ACCESS_KEY,AWS_SECRET_KEY)
sqs = SQSConnection(AWS_ACCESS_KEY,AWS_SECRET_KEY)
# ==== Alarm =================
numberOfMessages = 1
metric_object = cw.list_metrics(dimensions={"QueueName":"myDownlinkQueue"}, metric_name = "ApproximateNumberOfMessagesVisible",namespace = "AWS/SQS")
alarm_name = "myAlarm"
metric_object["ApproximateNumberOfMessagesVisible"].create_alarm(name =alarm_name,
comparison=">=",
threshold = numberOfMessages,
period = 60,
evaluation_periods = 1,
statistic = "Average",
alarm_actions=[scalingDownPolicy.policy_arn])
오류가 마지막 방법입니다 - 알람을 생성, 정확하게 scalingDownPolicy.policy_arn
질문이 너무 많아 코드가 너무 많으며 전체 오류 메시지가 없습니다. 추적 코드에 줄 번호가 들어있어 코드 또는 다른 라이브러리에서 문제가 발생했는지 여부를 나타낼 수 있습니다. –
@PauloScardine 제목에 오류가 있으며 마지막 줄에 주석이있는 경우 마지막 줄에 주석을 달면 오류가 발생하지 않습니다. 문제는 정확히 scalingDownPolicy.policy_arn입니다. create_alarm 메소드는 문자열 목록이 아닌 인덱스 목록을 필요로하지만 http://boto.cloudhackers.com/en/latest/autoscale_tut.html의 예제를 사용했습니다. 작업에 SQS 메트릭을 사용하는 알람을 작성하려면 어떻게해야합니까? 자동 크기 조절? –
오류 메시지는 매우 명백합니다.'scalingDownPolicy.policy_arn'은 문자열이지만 함수 호출에 정수가 필요합니다. 당신의 혼란은 무엇입니까? –