es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?>

Tags:  , , , ,

Answer

  1. Avatar for 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ón dashboard_body del código para combinar las salidas de diferentes módulos ec2 de la siguiente manera:

    resource "aws_cloudwatch_dashboard" "main" {
      dashboard_name = "sample_dashboard"
      dashboard_body = <<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 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 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 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 cloudwatch.>

Comments are closed.