キュー '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'は文字列ですが、関数呼び出しには整数が必要です。あなたの混乱は何ですか? –