如何在AWS CloudWatch模板中参数化实例ID?

时间:2018-06-25 02:51:10

标签: amazon-web-services amazon-cloudformation amazon-cloudwatch

我正在尝试使用CPUUtilization指标配置仪表板。我们有12个实例,每周我们都会缩减这些实例,并且如果没有这些基础实例,我们的Cloudwatch仪表板就会过时。 下次当我们启动一组新服务器时,我们必须手动转到仪表板并使用新的实例ID对其进行编辑 这是手动过程,我们需要使其自动化。 我附加了用于当前仪表板的基本模板。

{
"widgets": [
    {
        "type": "metric",
        "x": 0,
        "y": 0,
        "width": 9,
        "height": 9,
        "properties": {
            "view": "timeSeries",
            "stacked": false,
            "metrics": [
                [ "AWS/EC2", "CPUUtilization", "InstanceId", "i-0894e335e6ad2e561", { "period": 60 } ],
                [ "...", "i-01fde0cee726e7896", { "period": 60 } ],
                [ "...", "i-096e96499aa827924", { "period": 60 } ],
                [ "...", "i-0e550d881bcbf41c5", { "period": 60 } ],
                [ "...", "i-041a59616f061a373", { "period": 60 } ],
                [ "...", "i-06a6237975ec0f274", { "period": 60 } ],
                [ "...", "i-052f844dd071eab25", { "period": 60 } ],
                [ "...", "i-02dfa8d807c1f5477", { "period": 60 } ],
                [ "...", "i-0cda118fc6e375093", { "period": 60 } ],
                [ "...", "i-02ef6dfd642f2ffd4", { "period": 60 } ],
                [ "...", "i-0e0e9c12d672a48a7", { "period": 60 } ],
                [ "...", "i-0eb432b4098c4e9d8", { "period": 60 } ]
            ],
            "region": "ap-southeast-2",
            "period": 300,
            "title": "TEST CPU Utilization",

        }
    }

]

有什么办法解决吗?

2 个答案:

答案 0 :(得分:1)

您可以在新运行的实例上触发cloudwatch事件

enter image description here

您将lambda函数定义为目标,并可以在其中创建PutDashboard api call

client.put_dashboard(DashboardName='string', DashboardBody='string')

cloudwatch事件将告诉您已触发了哪个实例ID,您可以在上述api调用中使用它。

您还可以侦听终止事件,并自动将实例从仪表板中删除。

最后,确保您的代码准确地运行在您想要的实例上。我建议您为此使用标签。

答案 1 :(得分:0)

我将通过生成有问题的CloudFormation来做到这一点,特别是使用模板语言和bash脚本来引导模板。

  

Templating in Python

     

Templating in Java

     

Templating in Javascript

根据您选择的模板语言的语法,我希望您的模板文件看起来像这样:

...more cloudformation...
{
"widgets": [
    {
        "type": "metric",
        "x": 0,
        "y": 0,
        "width": 9,
        "height": 9,
        "properties": {
            "view": "timeSeries",
            "stacked": false,
            "metrics": [
                <% for instance in instances { %>
                    [ "AWS/EC2", "CPUUtilization", "InstanceId", "<% instance.id %>", { "period": 60 } ],
                <% } %> 
            ],
            "region": "ap-southeast-2",
            "period": 300,
            "title": "TEST CPU Utilization",
        }
    }

]
}
... more cloudformation...

一旦确定了模板过程,您将需要能够找到您的实例ID,以便将它们作为输入送入模板过程。为此,我建议使用EC2标记为您的实例提供识别标记,并使用AWS CLI查询此类实例。

aws ec2 describe-instances --filters "Name=tag:[tagName],Values=[tagValue]"

该命令应从上述相同的脚本运行,并将输出馈送到模板引擎。

请注意,[tagName]和[tagValue]应该替换为您自己提供给实例的tagName和tagValue,如上所述。