我需要一个AWS步骤帮助。我知道当实例停止,终止,启动和挂起阶段时,我们可以发送SNS通知。但是,当EC2实例重新启动时,我们如何发送通知?
谢谢!
答案 0 :(得分:1)
如果在实例内 发出了重新引导,则AWS不会检测到该重新引导。只是操作系统在做自己的事情。
如果通过AWS管理控制台或API调用发出了重新引导,则实例实际上不会更改状态。来自Instance Lifecycle - Amazon Elastic Compute Cloud:
重新启动实例等同于重新启动操作系统。该实例保留在同一台主机上,并在其实例存储卷上维护其公用DNS名称,专用IP地址以及所有数据。重新启动通常需要几分钟,但是重新启动所需的时间取决于实例配置。
因此,对通过AWS控制台或API发出的重新启动命令做出反应的唯一方法是创建一个接收所有Amazon EC2事件的AWS CloudWatch Events规则,然后检查它是否明确RebootInstances
命令。
规则如下:
{
"source": [
"aws.ec2"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"ec2.amazonaws.com"
],
"eventName": [
"RebootInstances"
]
}
}
然后它可以触发Amazon SNS通知,其中将包含instanceId
。
但是,通知不是很漂亮-它由JSON组成。如果要发送美观的消息,请参阅:amazon web services - Email notification through SNS and Lambda - Stack Overflow
答案 1 :(得分:0)
您可以在实例上创建cron条目来执行@reboot(example here),并使用aws cli sns publish发送sns通知,而不是监视Cloudtrail。
答案 2 :(得分:0)
您可以将crontab与@reboot结合使用来运行脚本。
$ crontab -e
@reboot $(python /home/ec2-user/sms.py)
对于sms.py
处的python脚本/home/ec2-user
sms.py(如果需要,请更改AWS区域):
import boto3
import json
client = boto3.client('sns', region_name='us-west-2')
msg = 'Instance reboot!'
response = client.publish(
PhoneNumber='+1XXXXXXXXXX',
Message=msg)
print(response)
确保实例上安装了boto3-$ pip install boto3 --user