如何获取所有Cloudwatch Alarm实例的InstanceId,我正在尝试创建一个cloudwatch警报,以便在磁盘达到90%的使用率时发送电子邮件。
Resources:
EC2DiskHealth:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": Disk Usage" ]]}
Namespace: System/Linux
MetricName: DiskSpaceAvailable
Dimensions:
- Name: InstanceId
Value : { "Ref" : "instance-id" }
- Name: Filesystem
Value: /dev/xvda1
- Name: MountPath
Value: /
Statistic: Average
Period: 60
EvaluationPeriods: 5
Threshold:
Fn::GetOptionSetting:
OptionName: ELBHealth
DefaultValue: "90"
ComparisonOperator: GreaterThanThreshold
AlarmActions:
- arn:aws:sns:awsregion:sns
InsufficientDataActions:
- arn:aws:sns:awsregion:sns
OKActions:
- arn:aws:sns:awsregion:sns
输出: 我应该能够获得instance-id以使闹钟起作用。
Dimensions:
- Name: InstanceId
Value : { "Ref" : "instance-id" }
错误:
Service:AmazonCloudFormation, Message:Template format error: Unresolved resource dependencies [instance-id] in the Resources block of the template
答案 0 :(得分:2)
您的情况似乎是:
MyList
的指标的实例上运行一些脚本/代码DiskSpaceAvailable
超过某个指标这是不可能的。
Amazon CloudWatch模板可以创建资源并可以引用资源,但它无法发现并发现资源,也无法对已发现的资源执行循环。
例如,模板可以创建一个实例,然后专门为该实例添加一个警报。但是,它不会自动发现资源。
你可以写一个AWS Lambda-backed Custom Resource来做任何你想做的事情(你必须编写代码),但你的代码需要创建警报而不是CloudFormation。
底线:您的用例最好通过您自己的代码(Lambda或直接代码)完成,而不是使用CloudFormation。
答案 1 :(得分:-1)
您的问题是,当cloudwatch检测到磁盘实例使用率超过90%时,发送电子邮件。
这是cloudwatch任务的基础:在cloudwatch警报本身中创建电子邮件通知,设置电子邮件并保存。
更多详细信息(这是与CPU相关的示例,但原理相同):
https://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/US_AlarmAtThresholdEC2.html
如果您希望从实例本身获取实例ID,则可以通过其元数据获得其实例ID:
<button type="button" >