【问题标题】:How to use Parameters in CloudWatch Dashboard template如何在 CloudWatch 仪表板模板中使用参数
【发布时间】:2019-12-08 22:08:03
【问题描述】:

我正在尝试创建一个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 参数,当我实际使用此模板创建堆栈时将提供该参数。

问题是 stack/dashbaord 是使用它创建的,但参数值没有在 Dashboard 指标中使用,而是使用值作为 "${MyEnvironment}-my-data-out" 而不是 "Dev-my-data-out" 假设我提供了 "MyEnvironment" 值作为 "Dev"

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

【问题讨论】:

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


【解决方案1】:

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

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

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

!Sub function documentation

【讨论】:

  • 卓越生活更安全。我花了将近 4 个小时来寻找这个。谢谢
【解决方案2】:

“MyEnvironment”不是伪变量。它仅适用于 AWS 变量,例如区域。 如果要参数化,则需要使用 '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”以避免复杂化。

【讨论】:

  • 这对我不起作用,使用它创建仪表板失败,如果我使用转义字符串,则仪表板创建成功,但使用转义字符串而不是参数值。
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 2020-06-23
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 2020-04-03
  • 2021-07-07
相关资源
最近更新 更多