如何在CloudWatch仪表板模板中使用参数

时间:2019-07-31 11:39:29

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

我正在尝试创建一个CloudFormation模板来创建一个CloudWatch仪表板。以下是模板代码-

Parameters:
    MyEnvironment:
        Type: String
        Default: "do"
        Description: "Specifies the environment of the platform."
Resources:
    MyServiceDashboard:
        Type: AWS::CloudWatch::Dashboard
        Properties:
            DashboardName: "Test-My-Dashboard"
            DashboardBody: >
                {
                    "widgets": [
                        {
                            "type": "metric",
                            "x": 15,
                            "y": 18,
                            "width": 6,
                            "height": 6,
                            "properties": {
                                "view": "timeSeries",
                                "stacked": false,
                                "metrics": [
                                    [ "AWS/Kinesis", "GetRecords.IteratorAgeMilliseconds", "StreamName", 
"${MyEnvironment}-my-data-out"
                                    ]...

我尝试使用MyEnvironment参数,该参数将在我实际使用此模板创建堆栈时提供。

问题是使用此方法创建的堆栈/ dashbaord,但未在仪表板度量标准中使用参数值,而是使用值作为"${MyEnvironment}-my-data-out"而不是"Dev-my-data-out",假设我已经提供了"MyEnvironment"值为"Dev"

我尝试了此链接中指定的方法-Use Pseudo Variables in Cloudwatch Dashboard Template (Cloudformation),但使用Sub >-关键字时CloudFormation显示的模板无效。

2 个答案:

答案 0 :(得分:1)

尝试了各种选项后,找到了解决方法,重要 要点是使用!Sub函数,否则参数值不会在JSON字符串中替换。

        DashboardName: "Test-My-Dashboard"
        DashboardBody: !Sub '{
                "widgets": [

请注意DashboardBody属性中的!Sub函数。之后,您可以使用${PARAMETER_NAME}格式引用参数值。

!Sub function documentation

答案 1 :(得分:0)

“ MyEnvironment”不是伪变量。它仅适用于AWS变量,例如region。 如果要进行参数化,则需要使用“ Ref”。

    Parameters:
MyEnvironment:
    Type: String
    Default: "do"
    Description: "Specifies the environment of the platform."
    Resources:
MyServiceDashboard:
    Type: AWS::CloudWatch::Dashboard
    Properties:
        DashboardName: "Test-My-Dashboard"
        DashboardBody: >
            {
                "widgets": [
                    {
                        "type": "metric",
                        "x": 15,
                        "y": 18,
                        "width": 6,
                        "height": 6,
                        "properties": {
                            "view": "timeSeries",
                            "stacked": false,
                            "metrics": [
                                [ "AWS/Kinesis", "GetRecords.IteratorAgeMilliseconds", "StreamName",  {"Ref" : "MyEnvironment"}

                              ]... 

直接在MyEnvironment参数中传递“ Dev-my-data-out”,以避免复杂化。