如何在 CloudWatch 控制面板模板中使用参数

Sac*_*ade 4 yaml amazon-web-services aws-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"
                                    ]...
Run Code Online (Sandbox Code Playgroud)

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

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

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

Sac*_*ade 6

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

        DashboardName: "Test-My-Dashboard"
        DashboardBody: !Sub '{
                "widgets": [
Run Code Online (Sandbox Code Playgroud)

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

!子函数文档