使用自动缩放组的 AWS 指标的 AWS Lambda 函数

时间:2021-05-04 11:41:15

标签: python lambda aws-lambda boto3

我正在编写一个 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?

1 个答案:

答案 0 :(得分:0)

describe_auto_scaling_instancesInstanceIds 作为参数。因此,如果您知道您的 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)
相关问题