1-创建具有权限的AMI Polint。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData",
"cloudwatch:GetMetricStatistics",
"cloudwatch:ListMetrics",
"ec2:DescribeTags"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:::parameter/AmazonCloudWatch-*"
}
]
}
2-为EC2创建功能(角色),并添加步骤1中创建的策略。
3-在实例中安装CloudWatch代理。 (在此示例中,我在Linux Ubuntu机器中使用)。
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
收集必要的妈妈运行命令:
cd /opt/aws/amazon-cloudwatch-agent/bin
wget https://raw.githubusercontent.com/railandermarques/cloudwatchmonitoring/master/config.json
cd /opt/aws/amazon-cloudwatch-agent/etc/
cp -av ../bin/config.json amazon-cloudwatch-agent.json
mkdir -p /usr/share/collectd/
touch /usr/share/collectd/types.db
sudo sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
systemctl enable amazon-cloudwatch-agent
systemctl status amazon-cloudwatch-agent
4-cry a t.pica nhs带有您选择的名称。
5-访问AWS上的CloudWatch>所有警报>创建警报>选择“度量控制台”,然后搜索Cwagent,请检查具有光盘的内容。
- 与党派的道路选择母亲 - disk_used_percent”。 (在这种情况下,我正在监视扩展根盘。)
- 定义要接收警报的时期,并指示您希望光盘扩展的相等或更高百分比。然后单击“下一步”。
6-在“通知”选项卡中,选择“警报”,“选择现有SNS”,然后选择步骤4中创建的吨位。然后单击“ Next”。P>
7-定义警报的名称,单击“下一步”,然后“创建警报”。
8-此示例将警报发送给一组不和谐,为此,有必要将“请求”层添加到lambda。按照以下步骤操作:
-
情况没有人知道如何创建请求依赖性下载文件-https://github.com/henbsantos/requests-lambda/blob/main/requests.zip
在
-
定义一个名称>故障下载的zip>兼容运行时间选择Python 3.9>创建。
9-创建一个带有您选择的名称的lambda函数,选择Python 3.9并分配一个允许访问所有EBS和实例EC2的函数(在此示例中,它已使用管理员访问权限,但是可以调整此功能获得较窄的许可)。
10-在lambda函数内,在“层”选项卡上,单击“添加一层”,然后在步骤8中选择创建的图层。
11- lamba_function.py
观察:这样,正在扩展root专辑,party /dev /xvda 1,type ext4。如果磁盘具有不同的配置,则有必要更改行50的命令。
第41行 - 将扩展的更改音量ID。
第48行 - 更改实例ID。
第55行 - 更改Discord Webhok地址(放置将收到扩展饰面警告的聊天)。
第56行 - 要发送到Discord的警报的编辑消息。
import boto3
import time
import json
import requests
def expandir_volume_ebs(volume_id):
ec2_client = boto3.client('ec2')
response = ec2_client.describe_volumes(VolumeIds=[volume_id])
current_size = response['Volumes'][0]['Size']
new_size = current_size + 1
response = ec2_client.modify_volume(
VolumeId=volume_id,
Size=new_size
)
return response
def executar_comandos_shell(instance_id, comandos):
ssm_client = boto3.client('ssm')
response = ssm_client.send_command(
InstanceIds=[instance_id],
DocumentName="AWS-RunShellScript",
Parameters={'commands': comandos}
)
return response
def enviar_mensagem_discord(webhook_url, message):
data = {
'content': message
}
response = requests.post(webhook_url, json=data)
if response.status_code != 204:
print('Falha ao enviar mensagem para o Discord:', response.text)
def lambda_handler(event, context):
volume_id = "vol-0d2dfdd723adb27bd"
response = expandir_volume_ebs(volume_id)
print("Volume expandido:", response)
time.sleep(180)
instance_id = "i-0ac8a7a16a50b9f06"
comandos = ['sudo su', 'growpart /dev/xvda 1', 'resize2fs /dev/xvda1']
response = executar_comandos_shell(instance_id, comandos)
print("Comandos executados:", response)
webhook_url = 'https://discord.com/api/webhooks/1123651003187728464/OYQ_--_Am'
message = 'O disco root /dev/xvda 1 da instância i-0ac8a7a16a50b9f06 foi expandido!'
enviar_mensagem_discord(webhook_url, message)
return {
'statusCode': 200,
'body': json.dumps('Lambda executada !')
}
12-apã³slambda将被执行您在Webhook障碍聊天中收到警报。