我正在尝试创建一个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显示的模板无效。
答案 0 :(得分:1)
尝试了各种选项后,找到了解决方法,重要 要点是使用!Sub
函数,否则参数值不会在JSON字符串中替换。
DashboardName: "Test-My-Dashboard"
DashboardBody: !Sub '{
"widgets": [
请注意DashboardBody
属性中的!Sub函数。之后,您可以使用${PARAMETER_NAME}
格式引用参数值。
答案 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”,以避免复杂化。