Terraform: ¿cómo pasar las instancias creadas desde diferentes módulos a una única métrica de widget en el panel de control de CloudWatch?
Cómo pasar instancias creadas desde diferentes módulos a un solo widget de métricas en el panel de CloudWatch
Usando el siguiente código, puedo crear un panel de CloudWatch y un widget, el problema es que tengo diferentes módulos EC2 y cada uno tiene salidas separadas (para las ID de instancia). Al ejecutar el siguiente código, obtengo un widget diferente para cada uno de ellos. Pero quiero un solo widget para todos ellos.
resource "aws_cloudwatch_dashboard" "main" {
dashboard_name = "sample_dashboard"
dashboard_body = <<eof
{
"widgets": [
${templatefile("${path.module}/cpu.tmpl", { ids = toset([for instance in module.ec2-aaa: instance.aaa-instance-id]) })},
${templatefile("${path.module}/cpu.tmpl", { ids = toset([for instance in module.ec2-bbb: instance.bbb-instance-id]) })}
]
}
eof
}
cpu.tmpl
{
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties": {
"metrics": ${jsonencode([for id in ids : ["aws/ec2","cpuutilization","instanceid", "${id}"]])},
"period": 300,
"stat": "average",
"region": "us-east-1",
"title": "ec2 instance cpu"
}
}
¿es posible combinar las salidas de esos módulos o concatenarlos al pasarlos como entrada al widget? {=”” “widgets”:=”” [=”” ${templatefile(“${path.module}/cpu.tmpl”,=”” {=”” ids=”toset([for” instance=”” in=”” module.ec2-aaa:=”” instance.aaa-instance-id])=”” })},=”” ${templatefile(“${path.module}/cpu.tmpl”,=”” {=”” ids=”toset([for” instance=”” in=”” module.ec2-bbb:=”” instance.bbb-instance-id])=”” })}=”” ]=”” }=”” eof=”” }=”” ="" cpu.tmpl=""
code=”” {=”” “type”:=”” “metric”,=”” “x”:=”” 0,=”” “y”:=”” 0,=”” “width”:=”” 12,=”” “height”:=”” 6,=”” “properties”:=”” {=”” “metrics”:=”” ${jsonencode([for=”” id=”” in=”” ids=”” :=”” [“aws/ec2″,”cpuutilization”,”instanceid”,=”” “${id}”]])},=”” “period”:=”” 300,=”” “stat”:=”” “average”,=”” “region”:=”” “us-east-1″,=”” “title”:=”” “ec2=”” instance=”” cpu”=”” }=”” }=”” “`=”” ¿es=”” posible=”” combinar=”” las=”” salidas=”” de=”” esos=”” módulos=”” o=”” concatenarlos=”” al=”” pasarlos=”” como=”” entrada=”” al=””></eof
{
“widgets”: [
${templatefile(“${path.module}/cpu.tmpl”, { ids = toset([for instance in module.ec2-aaa: instance.aaa-instance-id]) })},
${templatefile(“${path.module}/cpu.tmpl”, { ids = toset([for instance in module.ec2-bbb: instance.bbb-instance-id]) })}
]
}
eof
}
cpu.tmpl
```code
{
"type": "metric",
"x": 0,
"y": 0,
"width": 12,
"height": 6,
"properties": {
"metrics": ${jsonencode([for id in ids : ["aws/ec2","cpuutilization","instanceid", "${id}"]])},
"period": 300,
"stat": "average",
"region": "us-east-1",
"title": "ec2 instance cpu"
}
}
¿es posible combinar las salidas de esos módulos o concatenarlos al pasarlos como entrada al widget?>
davy.ai
Sí, es posible combinar las salidas de los módulos o concatenarlas al pasarlas como entrada al widget. Una forma de lograr esto es utilizando la función
concat
de Terraform. Puedes modificar la seccióndashboard_body
del código para combinar las salidas de diferentes módulos ec2 de la siguiente manera:en este código, estamos utilizando la función
concat
para combinar la salidainstance-ids
demodule.ec2-aaa
ymodule.ec2-bbb
. la variableids
se pasa como entrada a la plantillacpu.tmpl
, que se utilizará para crear el widget.al hacer esto, podrás pasar las instancias creadas en diferentes módulos a una única métrica de widget en el panel de control de cloudwatch. {=”” “widgets”:=”” [=”” ${templatefile(“${path.module}/cpu.tmpl”,=”” {=”” ids=”toset(concat(module.ec2-aaa.instance-ids,” module.ec2-bbb.instance-ids))=”” })}=”” ]=”” }=”” eof=”” }=””
="" en="" este="" código,="" estamos="" utilizando="" la="" función="" `concat`="" para="" combinar="" la="" salida="" `instance-ids`="" de="" `module.ec2-aaa`="" y="" `module.ec2-bbb`.="" la="" variable="" `ids`="" se="" pasa="" como="" entrada="" a="" la="" plantilla="" `cpu.tmpl`,="" que="" se="" utilizará="" para="" crear="" el="" widget.="" al="" hacer="" esto,="" podrás="" pasar="" las="" instancias="" creadas="" en="" diferentes="" módulos="" a="" una="" única="" métrica="" de="" widget="" en="" el="" panel="" de="" control="" de=""></eof
{
"widgets": [
${templatefile("${path.module}/cpu.tmpl", { ids = toset(concat(module.ec2-aaa.instance-ids, module.ec2-bbb.instance-ids)) })}
]
}
eof
}
en este código, estamos utilizando la función
concat
para combinar la salidainstance-ids
demodule.ec2-aaa
ymodule.ec2-bbb
. la variableids
se pasa como entrada a la plantillacpu.tmpl
, que se utilizará para crear el widget.al hacer esto, podrás pasar las instancias creadas en diferentes módulos a una única métrica de widget en el panel de control de cloudwatch.>