我正在编写一个 lambda 函数,该函数将根据某些磁盘指标创建警报。到目前为止的代码如下所示:
import collections
from datetime import datetime
import calendar
def lambda_handler(event, context):
client = boto3.client('cloudwatch')
alarm = client.put_metric_alarm(
AlarmName='Disk Monitor',
MetricName='disk_used_percent',
Namespace='CWAgent',
Statistic='Maximum',
ComparisonOperator='GreaterThanOrEqualToThreshold',
Threshold=60.0,
Period=10,
EvaluationPeriods=3,
Dimensions=[
{
'Name': 'InstanceId',
'Value': '{instance_id}'
},
{
'Name': 'AutoScalingGroupName',
'Value': '{instance_id}'
},
{
'Name': 'fstype',
'Value': 'xfs'
},
{
'Name': 'path',
'Value': '/'
}
],
Unit='Percent',
ActionsEnabled=True)
正如所见,{instance_id}
是一个变量,因为它的想法是这将用于每个实例。但是,我想知道如何为 AutoScalingGroupName
编写相同的代码,因为我也要求它是一个变量。我知道下面为我提取了 AutoScalingGroupName
,但是我如何将它添加到上面的语法块中,这是我的问题:
aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?InstanceId == '<instance_dets>'].{AutoScalingGroupName:AutoScalingGroupName}"
例如,我是否会添加一个以如下开头的块:
def lambda_handler(event, context):
client = boto3.client('autoscaling')
如果是这样,我将如何编写语法方面所需的代码来获得 'Value': '{AutoScalingGroupName}'
,我的意思是一个变量来保存 ASG?
答案 0 :(得分:0)
describe_auto_scaling_instances 将 InstanceIds
作为参数。因此,如果您知道您的 instance_id
,您可以按如下方式找到它的 asg:
client = boto3.client('autoscaling')
response = client.describe_auto_scaling_instances(
InstanceIds=[instance_id])
asg_name = ''
if response['AutoScalingInstances']:
asg_name = response['AutoScalingInstances'][0]['AutoScalingGroupName']
print(asg_name)