{"id":15207,"date":"2023-05-09T15:31:23","date_gmt":"2023-05-09T15:31:23","guid":{"rendered":"https:\/\/beta.bluetab.net\/?p=15207"},"modified":"2024-03-05T17:15:36","modified_gmt":"2024-03-05T17:15:36","slug":"cdktf-otro-paso-en-el-viaje-del-devops-introduccion-y-beneficios","status":"publish","type":"post","link":"https:\/\/www.bluetab.net\/es\/cdktf-otro-paso-en-el-viaje-del-devops-introduccion-y-beneficios\/","title":{"rendered":"CDKTF: Otro paso en el viaje del DevOps, introducci\u00f3n y beneficios."},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"15207\" class=\"elementor elementor-15207\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b2ad9fe elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b2ad9fe\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-7eac278\" data-id=\"7eac278\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-45481b1 elementor-widget elementor-widget-heading\" data-id=\"45481b1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">CDKTF: Otro paso en el viaje del DevOps, introducci\u00f3n y beneficios.<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-6562b00 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6562b00\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-7c6d220\" data-id=\"7c6d220\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f4605b4 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"f4605b4\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2021\/09\/lucas-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-12198 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-150x150.png 150w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-300x300.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-768x768.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-75x75.png 75w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas.png 888w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\">Lucas Calvo<\/a><\/h4><p class=\"elementor-image-box-description\">Cloud Engineer<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-441976b\" data-id=\"441976b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e8e77c8 elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"e8e77c8\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2b67acd\" data-id=\"2b67acd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c738cdf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c738cdf\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-55b901d\" data-id=\"55b901d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7668b05 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7668b05\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-592ef24\" data-id=\"592ef24\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6010029 elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"6010029\" data-element_type=\"widget\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-1024x512.png\" class=\"attachment-large size-large wp-image-17829\" alt=\"\" srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-1024x512.png 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-300x150.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-768x384.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f28ddaa elementor-widget elementor-widget-heading\" data-id=\"f28ddaa\" data-element_type=\"widget\" id=\"intro\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Introducci\u00f3n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4abbf0e elementor-widget elementor-widget-text-editor\" data-id=\"4abbf0e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">En este art\u00edculo vamos a hablar de <strong>CDKTF<\/strong> y de <strong>c\u00f3mo utilizar todas sus ventajas<\/strong> para desplegar infraestructura de forma program\u00e1tica y reutilizable en GCP. Tambi\u00e9n veremos <strong>c\u00f3mo integrar CDKTF<\/strong> con tus m\u00f3dulos de terraform<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">1<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> para desplegar infraestructura m\u00e1s reutilizable bajo la supervisi\u00f3n de tu organizaci\u00f3n.<\/span><\/p><p><span style=\"font-weight: 400;\">CDKTF abre un mundo de posibilidades para llevar a nuestra organizaci\u00f3n al siguiente nivel de automatizaci\u00f3n, adem\u00e1s de facilitar el despliegue de la infraestructura a las personas m\u00e1s cercanas a la parte de desarrollo. En este art\u00edculo daremos algunas <strong>indicaciones de cuando es una buena opci\u00f3n utilizar CDKTF y cuando seguir utilizando terraform a trav\u00e9s de HCL<\/strong>, ya que no en todos los casos de usos el CDKTF nos aportar\u00e1 un valor a\u00f1adido.<\/span><\/p><p><span style=\"font-weight: 400;\">\u00bfQu\u00e9 necesitas para entender este art\u00edculo?<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Algunos conceptos sobre Terraform<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">2<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Instalar el CDKTF <\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">3<\/span><\/a><span style=\"font-weight: 400;\">].<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Algunos conceptos sobre python.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Necesitas una cuenta gratuita en GCP.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Todo el c\u00f3digo utilizado en este art\u00edculo est\u00e1 en el repositorio<\/span><a href=\"#referencias\"><span style=\"font-weight: 400;\">[<\/span><span style=\"font-weight: 400;\">4<\/span><span style=\"font-weight: 400;\">]<\/span><\/a><span style=\"font-weight: 400;\"> de Github.<\/span><\/p><p><span style=\"font-weight: 400;\"><strong>\u00bfEs CDKTF la soluci\u00f3n milagrosa para los despliegues en nuestra organizaci\u00f3n?<\/strong> Ve\u00e1moslo.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7aaf8a9 elementor-widget elementor-widget-heading\" data-id=\"7aaf8a9\" data-element_type=\"widget\" id=\"objetivo\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00bfQue es el CDKTF?\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cffc795 elementor-widget elementor-widget-text-editor\" data-id=\"cffc795\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">CDKTF, tambi\u00e9n llamado <strong>Cloud Development Kit for Terraform<\/strong>, permite definir y aprovisionar infraestructura de forma program\u00e1tica. En este art\u00edculo utilizaremos python para desplegar algunos recursos en GCP.<strong> El punto fuerte de CDKTF es que no necesitas aprender HashiCorp Configuration Language (HCL), s\u00f3lo necesitas saber Python<\/strong> que es m\u00e1s flexible que HCL porque te permite crear m\u00e1s integraciones con herramientas de tu organizaci\u00f3n y con otras APIs. Incluso puedes crear algunas clases espec\u00edficas en Python para hacer tu c\u00f3digo m\u00e1s reutilizable.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c33a6cf elementor-widget elementor-widget-image\" data-id=\"c33a6cf\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"468\" height=\"347\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF.png\" class=\"attachment-large size-large wp-image-15210 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF.png 468w, https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF-300x222.png 300w\" data-sizes=\"(max-width: 468px) 100vw, 468px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 468px; --smush-placeholder-aspect-ratio: 468\/347;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c81a2eb elementor-widget elementor-widget-heading\" data-id=\"c81a2eb\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Primeros pasos con CDKTF\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee6c422 elementor-widget elementor-widget-text-editor\" data-id=\"ee6c422\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Una vez explicado CDKTF, procederemos a <strong>crear nuestro primer proyecto<\/strong>. Para ello desplegaremos un cloud storage y un topic de pubsub en GCP, utilizaremos recursos terraform por simplicidad. Comenzaremos explicando varios comandos del CDKTF:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">cdktf init &#8211;template=python<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Este comando crea un nuevo proyecto CDK para Terraform usando una plantilla. Esto es muy \u00fatil cuando se quiere empezar a utilizar un nuevo proveedor, en nuestro caso el proveedor de Google.<\/span><\/p><p><span style=\"font-weight: 400;\">Una vez ejecutado este comando veremos la siguiente plantilla:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-269a075 elementor-widget elementor-widget-image\" data-id=\"269a075\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"215\" height=\"134\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF1.png\" class=\"attachment-large size-large wp-image-15212 lazyload\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 215px; --smush-placeholder-aspect-ratio: 215\/134;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ddf563e elementor-widget elementor-widget-text-editor\" data-id=\"ddf563e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Los ficheros m\u00e1s importantes son `main.py` y `cdktf.json`. Hablemos de ellos.<\/p><p>En el fichero `main.py` es donde se declara toda la infraestructura que vamos a desplegar con su l\u00f3gica. Haremos uso del proveedor de Google para definir nuestros recursos, `cloud storage` y `pubsub topic`. Luego para definir e importar el proveedor de google y la librer\u00eda de almacenamiento y pubsub importaremos los siguientes m\u00f3dulos en python:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c55e46f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c55e46f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```python\r\nfrom imports.google.provider import GoogleProvider\r\nfrom imports.google.storage_bucket import StorageBucket\r\nfrom imports.google.pubsub_topic import PubsubTopic\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3fd4aa7 elementor-widget elementor-widget-text-editor\" data-id=\"3fd4aa7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Estos proveedores se definen en el archivo `cdktf.json`, este archivo es donde puedes proporcionar los ajustes de configuraci\u00f3n personalizados para tu aplicaci\u00f3n y definir los proveedores y m\u00f3dulos que deseas utilizar. Cuando inicializamos la plantilla con el comando `cdktf init &#8211;template=python`, la plantilla genera un archivo `cdktf.json` b\u00e1sico en tu directorio ra\u00edz que puedes personalizar para tu aplicaci\u00f3n.<\/p><p>Este archivo tiene la siguiente informaci\u00f3n:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f225ffd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f225ffd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-json'>```json\r\n{\r\n  &quot;language&quot;: &quot;python&quot;,\r\n  &quot;app&quot;: &quot;pipenv run python main.py&quot;,\r\n  &quot;projectId&quot;: &quot;da305019-c0fc-4e47-b4ad-1a705cdd8811&quot;,\r\n  &quot;sendCrashReports&quot;: &quot;false&quot;,\r\n  &quot;terraformProviders&quot;: [&quot;google@~&gt; 4.0&quot;],\r\n  &quot;terraformModules&quot;: [],\r\n  &quot;codeMakerOutput&quot;: &quot;imports&quot;,\r\n  &quot;context&quot;: {\r\n    &quot;excludeStackIdFromLogicalIds&quot;: &quot;true&quot;,\r\n    &quot;allowSepCharsInLogicalIds&quot;: &quot;true&quot;\r\n  }\r\n}\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb46eef elementor-widget elementor-widget-text-editor\" data-id=\"fb46eef\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>En la l\u00ednea terraformProviders hemos definido el proveedor de google que contiene todos los recursos que necesitamos. En la secci\u00f3n Integraci\u00f3n con tus propios m\u00f3dulos aprenderemos a configurar este fichero para utilizar tus propios m\u00f3dulos terraform.<\/p><p>Una vez configurados los proveedores ya podemos definir nuestros recursos con Python:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f7fe47 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"5f7fe47\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```python\r\nclass MyStack(TerraformStack):\r\n    def __init__(self, scope: Construct, id: str):\r\n        super().__init__(scope, id)\r\n\r\n        GoogleProvider(self, &quot;google&quot;, region=&quot;europe-west4&quot;,project=&quot;xxxxx&quot;)\r\n        length = 5\r\n        suffix = &#039;&#039;.join((random.choice(string.ascii_lowercase) for x in range(length)))\r\n        bucket = StorageBucket(self, &quot;gcs&quot;, name = &quot;cdktf-test-1234-bt-&quot;+ str(suffix), location = &quot;EU&quot;, force_destroy = True)\r\n        topic = PubsubTopic(self, &quot;topic&quot; ,name = &quot;cdktf-topic&quot;, labels={&quot;tool&quot;:&quot;cdktf&quot;})\r\n        TerraformOutput(self,&quot;bucket_self_link&quot;,value=bucket.self_link)\r\n        TerraformOutput(self,&quot;topic-id&quot;,value=topic.id)\r\n\r\napp = App()\r\nMyStack(app, &quot;first_steps&quot;)\r\n\r\napp.synth()\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0cfc63 elementor-widget elementor-widget-text-editor\" data-id=\"d0cfc63\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Estas l\u00edneas de c\u00f3digo despliegan un cloud storage y un topic como hemos dicho previamente, tambi\u00e9n hemos creado un `string` aleatorio en python para a\u00f1adir al cloud storage como sufijo. Para ello hemos a\u00f1adido dos librer\u00edas m\u00e1s: `string` y `random`. Adem\u00e1s, hemos a\u00f1adido a nuestro script algunas salidas para ver alguna informaci\u00f3n importante sobre nuestro despliegue como `topic_id` o `bucket_self_link`.<\/p><p>El resultado final de nuestros primeros scripts con CDKTF es el siguiente:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-71a4bfc elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"71a4bfc\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```python\r\nfrom constructs import Construct\r\nfrom cdktf import App, TerraformStack, TerraformOutput\r\nfrom imports.google.provider import GoogleProvider\r\nfrom imports.google.storage_bucket import StorageBucket\r\nfrom imports.google.pubsub_topic import PubsubTopic\r\nimport random\r\nimport string\r\n\r\nclass MyStack(TerraformStack):\r\n    def __init__(self, scope: Construct, id: str):\r\n        super().__init__(scope, id)\r\n\r\n        GoogleProvider(self, &quot;google&quot;, region=&quot;europe-west4&quot;,project=&quot;xxxxx&quot;)\r\n        length = 5\r\n        suffix = &#039;&#039;.join((random.choice(string.ascii_lowercase) for x in range(length)))\r\n        bucket = StorageBucket(self, &quot;gcs&quot;, name = &quot;cdktf-test-1234-bt-&quot;+ str(suffix), location = &quot;EU&quot;, force_destroy = True)\r\n        topic = PubsubTopic(self, &quot;topic&quot; ,name = &quot;cdktf-topic&quot;, labels={&quot;tool&quot;:&quot;cdktf&quot;})\r\n        TerraformOutput(self,&quot;bucket_self_link&quot;,value=bucket.self_link)\r\n        TerraformOutput(self,&quot;topic-id&quot;,value=topic.id)\r\n\r\napp = App()\r\nMyStack(app, &quot;first_steps&quot;)\r\n\r\napp.synth()\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-94c83b5 elementor-widget elementor-widget-text-editor\" data-id=\"94c83b5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ahora podemos desplegar nuestra infraestructura, para ello necesitamos ejecutar algunos comandos con CDKTF. En primer lugar, tenemos que descargar los proveedores y m\u00f3dulos para una aplicaci\u00f3n y generar las construcciones CDK para ellos. Para ello utilizamos `cdktf get`. Utiliza el archivo de configuraci\u00f3n `cdktf.json` para leer la lista de proveedores. Este comando s\u00f3lo genera los bindings de los proveedores que faltan, por lo que es muy r\u00e1pido si nada ha cambiado.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e8e156 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"3e8e156\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-bash'>```bash\r\ncdktf get\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce8c917 elementor-widget elementor-widget-text-editor\" data-id=\"ce8c917\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Esta es la salida del comando:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12e9d71 elementor-widget elementor-widget-image\" data-id=\"12e9d71\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"468\" height=\"52\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF2.png\" class=\"attachment-large size-large wp-image-15214 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF2.png 468w, https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF2-300x33.png 300w\" data-sizes=\"(max-width: 468px) 100vw, 468px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 468px; --smush-placeholder-aspect-ratio: 468\/52;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eaf3584 elementor-widget elementor-widget-text-editor\" data-id=\"eaf3584\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Usamos el flag &#8211;force para recrear todos los bindings. Con el proveedor descargado procederemos al despliegue ejecutando el comando `cdktf deploy`:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2df7b1 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c2df7b1\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-bash'>```bash\r\ncdktf deploy\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b271eff elementor-widget elementor-widget-text-editor\" data-id=\"b271eff\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Esta es la salida del comando:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41178a5 elementor-widget elementor-widget-image\" data-id=\"41178a5\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"931\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/image4-1024x931.png\" class=\"attachment-large size-large wp-image-15245 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/image4-1024x931.png 1024w, https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/image4-300x273.png 300w, https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/image4-768x698.png 768w, https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/image4.png 1138w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/931;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30d9cb5 elementor-widget elementor-widget-text-editor\" data-id=\"30d9cb5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Con todos estos pasos hemos procedido a desplegar nuestra primera aplicaci\u00f3n con el CDKTF. Algo bastante sencillo y con c\u00f3digo muy reutilizable. Ahora vamos a proceder a la destrucci\u00f3n de la infraestructura para no incurrir en ning\u00fan coste. Utilizaremos el comando `cdktf destroy`.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec17b62 elementor-widget elementor-widget-heading\" data-id=\"ec17b62\" data-element_type=\"widget\" id=\"clonacion\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Integraciones con tus propios m\u00f3dulos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0aebff7 elementor-widget elementor-widget-text-editor\" data-id=\"0aebff7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Perfecto, una vez comprobado c\u00f3mo funciona el CDKTF <strong>vamos a integrarlo con los m\u00f3dulos terraform que se desarrollan en nuestra empresa<\/strong>. Esto nos permitir\u00eda hacer el <strong>c\u00f3digo mucho m\u00e1s reutilizable<\/strong> permitiendo que todo lo que se despliegue en el CDKTF se despliegue con los patrones que hemos definido en los m\u00f3dulos. Para esta prueba ejecutaremos la misma creaci\u00f3n (gcs y topic) pero esta vez haciendo uso de los m\u00f3dulos previamente desarrollados que pod\u00e9is encontrar en el siguiente repositorio.<\/p><ul><li>Cloud Storage[<a href=\"#referencias\">5<\/a>]<\/li><li>Pubsub[<a href=\"#referencias\">6<\/a>]<\/li><\/ul><p>Estos m\u00f3dulos han sido desarrollados con HCL y tienen ciertas nomenclaturas y l\u00f3gica para facilitar al m\u00e1ximo el despliegue al resto de desarrolladores de mi organizaci\u00f3n.<\/p><p>As\u00ed que procedamos a crear otra plantilla con el comando `cdktf init &#8211;template=python` pero esta vez para usar nuestros propios m\u00f3dulos.<\/p><p>Una vez ejecutado tenemos la misma plantilla que en el apartado anterior. Ahora vamos a proceder a modificar el `cdktf.json` para a\u00f1adir los m\u00f3dulos que vamos a utilizar y dos proveedores, google y google-beta, que son necesarios para el uso de estos m\u00f3dulos.<\/p><p>Este es el fichero `cdktf.json`:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3a3349 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b3a3349\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-json'>```json\r\n{\r\n  &quot;language&quot;: &quot;python&quot;,\r\n  &quot;app&quot;: &quot;pipenv run python main.py&quot;,\r\n  &quot;projectId&quot;: &quot;f02a016f-d673-4390-86db-65348eadfb3f&quot;,\r\n  &quot;sendCrashReports&quot;: &quot;false&quot;,\r\n  &quot;terraformProviders&quot;: [&quot;google@~&gt; 4.0&quot;, &quot;google-beta@~&gt; 4.0&quot;],\r\n  &quot;terraformModules&quot;: [\r\n    {\r\n      &quot;name&quot;: &quot;gcp_pubsub&quot;,\r\n      &quot;source&quot;: &quot;git::https:\/\/github.com\/lucasberlang\/gcp-pubsub.git?ref=v1.2.0&quot;\r\n    },\r\n    {\r\n      &quot;name&quot;: &quot;gcp_cloud_storage&quot;,\r\n      &quot;source&quot;: &quot;git::https:\/\/github.com\/lucasberlang\/gcp-cloud-storage.git?ref=v1.2.0&quot;\r\n    }\r\n  ],\r\n  &quot;codeMakerOutput&quot;: &quot;imports&quot;,\r\n  &quot;context&quot;: {\r\n    &quot;excludeStackIdFromLogicalIds&quot;: &quot;true&quot;,\r\n    &quot;allowSepCharsInLogicalIds&quot;: &quot;true&quot;\r\n  }\r\n}\r\n```\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7629201 elementor-widget elementor-widget-text-editor\" data-id=\"7629201\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Hemos a\u00f1adido la l\u00ednea terraform Modules donde indicamos el nombre del m\u00f3dulo y la fuente, en este caso nuestro repositorio de github. Tambi\u00e9n hemos a\u00f1adido la l\u00ednea terraform providers como en el apartado anterior.<\/p><p>Una vez a\u00f1adidos los proveedores y los m\u00f3dulos terraform vamos a instanciarlos en nuestro main, para ello solo tenemos que a\u00f1adirlos como librer\u00edas y luego invocarlos con los par\u00e1metros que est\u00e9n definidos en nuestro m\u00f3dulo. Puedes ir al readme del m\u00f3dulo que est\u00e1 subido en github para ver que par\u00e1metros son obligatorios y cuales son opcionales, tambi\u00e9n puedes ver salidas de esos m\u00f3dulos.<\/p><p>El c\u00f3digo quedar\u00eda de la siguiente manera:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5f3209 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"d5f3209\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```python\r\n#!\/usr\/bin\/env python\r\nfrom constructs import Construct\r\nfrom cdktf import App, TerraformStack, TerraformOutput\r\nfrom imports.google.provider import GoogleProvider\r\nfrom imports.google_beta.provider import GoogleBetaProvider\r\nfrom imports.gcp_pubsub import GcpPubsub\r\nfrom imports.gcp_cloud_storage import GcpCloudStorage\r\nimport random\r\nimport string\r\n\r\nclass MyStack(TerraformStack):\r\n    def __init__(self, scope: Construct, ns: str):\r\n        super().__init__(scope, ns)\r\n        GoogleProvider(self, &quot;google&quot;, region=&quot;europe-west4&quot;)\r\n        GoogleBetaProvider(self, &quot;google-beta&quot;, region=&quot;europe-west4&quot;)\r\n        length = 5\r\n        suffix = &#039;&#039;.join((random.choice(string.ascii_lowercase) for x in range(length)))\r\n        tags = {&quot;provider&quot; : &quot;go&quot;,\r\n                &quot;region&quot; : &quot;euw4&quot;,\r\n                &quot;enterprise&quot; : &quot;bt&quot;,\r\n                &quot;account&quot; : &quot;poc&quot;,\r\n                &quot;system&quot; : &quot;ts&quot;,\r\n                &quot;environment&quot; : &quot;poc&quot;,\r\n                &quot;cmdb_name&quot; : &quot;&quot;,\r\n                &quot;security_exposure_level&quot; : &quot;mz&quot;,\r\n                &quot;status&quot; : &quot;&quot;,\r\n                &quot;on_service&quot; : &quot;yes&quot;}\r\n\r\n        topic = GcpPubsub(self,&quot;topic&quot;,\r\n          name = &quot;cdktf-topic&quot;,\r\n          project_id = &quot;xxxxxxx&quot;,\r\n          offset = 1,\r\n          tags = tags)\r\n          \r\n        bucket = GcpCloudStorage(self,&quot;bucket&quot;,\r\n          name = &quot;cdktf-test-1234-bt-&quot; + suffix,\r\n          project_id = &quot;xxxxxxx&quot;,\r\n          offset = 1,\r\n          location = &quot;europe-west4&quot;,\r\n          force_destroy = True,\r\n          tags = tags)\r\n        \r\n        TerraformOutput(self,&quot;topic_id&quot;,value=topic.id_output)\r\n        TerraformOutput(self,&quot;bucket_self_link&quot;,value=bucket.bucket_output)\r\n\r\napp = App()\r\nMyStack(app, &quot;cdktf_modules&quot;)\r\n\r\napp.synth()\r\n```\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-624c648 elementor-widget elementor-widget-text-editor\" data-id=\"624c648\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Para invocar nuestros m\u00f3dulos que hemos a\u00f1adido previamente en el archivo `cdktf.json`, s\u00f3lo tenemos que a\u00f1adir este c\u00f3digo:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c842bbd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c842bbd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>```python\r\nfrom imports.gcp_pubsub import GcpPubsub\r\nfrom imports.gcp_cloud_storage import GcpCloudStorage\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-046e180 elementor-widget elementor-widget-text-editor\" data-id=\"046e180\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>El resto del c\u00f3digo es la invocaci\u00f3n de nuestros m\u00f3dulos con una serie de par\u00e1metros para inicializarlos, como regi\u00f3n, nombre, etc. Tambi\u00e9n hemos a\u00f1adido las salidas para tener algo de informaci\u00f3n sobre la creaci\u00f3n de los recursos en GCP. Ahora, vamos a proceder al despliegue de los recursos para comprobar el correcto funcionamiento de CDKTF.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f11a167 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f11a167\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-bash'>```bash\r\ncdktf get --force\r\ncdktf deploy\r\n``` <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/www.bluetab.net\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-751e97c elementor-widget elementor-widget-text-editor\" data-id=\"751e97c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Una vez desplegada, comprobaremos nuestra infraestructura en GCP y procederemos a borrar toda con el comando `cdktf destroy`.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b2b8ef elementor-widget elementor-widget-heading\" data-id=\"7b2b8ef\" data-element_type=\"widget\" id=\"conclusiones\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Evoluciones que puedes a\u00f1adir a tu empresa<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-39f9241 elementor-widget elementor-widget-text-editor\" data-id=\"39f9241\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Gracias al CDKTF podemos crear nuevos automatismos mucho m\u00e1s nativos que con el HCL tradicional<\/strong> ya que podemos integrarnos con todo tipo de backend en nuestro propio desarrollo. Esto abre <strong>todo un nuevo mundo de posibilidades<\/strong> en el despliegue autom\u00e1tico de infraestructuras.<\/p><p>Por ejemplo, si en tu empresa siempre te piden el mismo tipo de infraestructura desde los equipos de desarrollo, como una base de datos, un cluster kubernetes y luego los componentes de seguridad y comunicaciones asociados al caso de uso, \u00bfpor qu\u00e9 no automatizar este proceso y no crear proyectos terraform a la carta?.<\/p><p>Podemos evolucionar nuestra plataforma de automatizaci\u00f3n creando un portal web que invoque a nuestro microservicio hecho con el CDKTF que har\u00e1 las validaciones oportunas y luego proceder\u00e1 al despliegue. Esto tambi\u00e9n se podr\u00eda hacer con terraform pero no de una forma tan nativa como con el CDKTF ya que ahora usando python (u otro lenguaje, Typescript, Go etc&#8230;) podemos crear flujos de trabajo mucho m\u00e1s complejos llamando a otros backends y haciendo todo tipo de integraciones con nuestras herramientas corporativas. Podr\u00edamos generar una plataforma de despliegue para automatizar todos nuestros despliegues gen\u00e9ricos que nos solicitan desde otros equipos como aplicaciones, anal\u00edtica de datos, reporting, etc. Podr\u00edamos crear la siguiente arquitectura para resolver este problema:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38f4153 elementor-widget elementor-widget-image\" data-id=\"38f4153\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"468\" height=\"261\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF4.png\" class=\"attachment-large size-large wp-image-15218 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF4.png 468w, https:\/\/www.bluetab.mx\/wp-content\/uploads\/2023\/05\/CDKTF4-300x167.png 300w\" data-sizes=\"(max-width: 468px) 100vw, 468px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 468px; --smush-placeholder-aspect-ratio: 468\/261;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30687e6 elementor-widget elementor-widget-spacer\" data-id=\"30687e6\" data-element_type=\"widget\" id=\"ref\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-adc35da elementor-widget elementor-widget-heading\" data-id=\"adc35da\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusiones<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42a72e3 elementor-widget elementor-widget-text-editor\" data-id=\"42a72e3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Despu\u00e9s de haber trabajado varios a\u00f1os con terraform creo que el CDKTF es su evoluci\u00f3n natural, aunque todav\u00eda est\u00e1 en una fase prematura<\/strong>. No cuenta con una comunidad tan grande como la que terraform tiene con HCL, lo que hace dif\u00edcil iniciarse con esta herramienta. Depurar el c\u00f3digo suele ser complicado y no tan f\u00e1cil como con HCL. Los tutoriales oficiales no son muy completos por lo que muchas veces tendr\u00e1s que encontrar tu propio camino para resolver algunos problemas derivados del uso de CDKTF. Tambi\u00e9n creo que el CDKTF est\u00e1 en un punto de madurez como lo estaba terraform hace a\u00f1os en la versi\u00f3n inferior a la 0.11.0, es decir, funciona bien aunque todav\u00eda le queda mucho camino por recorrer.<\/p><p>Creo que <strong>si tu empresa ya utiliza terraform (HCL) de forma madura, cambiar el modelo a CDKTF no va a suponer grandes beneficios<\/strong>. El \u00fanico beneficio de usar CDKTF es en un caso de uso como el mencionado en la secci\u00f3n anterior, donde puedes mezclar el uso de tus m\u00f3dulos ya desarrollados con HCL y CDKTF para llevar la automatizaci\u00f3n de cierta infraestructura a un nivel superior.<\/p><p>Por otro lado, CDKTF es una herramienta que podr\u00eda recomendar si conoces python (u otros lenguajes) y no quieres aprender un lenguaje espec\u00edfico como HCL. <strong>CDKTF puede ser una buena herramienta si tu empresa no est\u00e1 en un punto de madurez avanzado con terraform o cualquier herramienta de IaC<\/strong>. El CDKTF te permite desarrollar de una forma m\u00e1s sencilla tu infraestructura como c\u00f3digo, las integraciones con otras herramientas dentro de tu organizaci\u00f3n ser\u00e1n mucho m\u00e1s sencillas ya que podr\u00e1s utilizar tu lenguaje de programaci\u00f3n favorito para realizarlas. Puede crear clases y m\u00f3dulos reutilizables de forma sencilla, creando una comunidad de desarrollo CDKTF dentro de su propia empresa y permitiendo a los desarrolladores estar m\u00e1s apegados a la infraestructura, lo que siempre es un reto. Tambi\u00e9n la parte de pruebas de tu c\u00f3digo CDKTF ser\u00e1 mucho m\u00e1s f\u00e1cil y nativa haciendo uso de pytest u otros frameworks [<a href=\"#referencias\">7<\/a>]. Probar con terraform (HCL) es m\u00e1s tedioso y ya tienes que usar frameworks como terratest para integrarlos en tu c\u00f3digo.<\/p><p>En general creo que CDKTF es una buena herramienta y es la evoluci\u00f3n natural de Terraform. Si queremos llevar nuestra automatizaci\u00f3n a otro nivel e integrarla con portales web o herramientas organizativas, CDKTF es la herramienta que necesitamos. Tambi\u00e9n <strong>abre un mundo de posibilidades para los equipos de desarrollo<\/strong>, ya que podr\u00e1n <strong>desplegar cualquier tipo de infraestructura utilizando un lenguaje de programaci\u00f3n<\/strong>. Habr\u00e1 que ver c\u00f3mo evoluciona para ver c\u00f3mo encaja en nuestras organizaciones y si alcanza el punto de madurez que ha alcanzado Terraform.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-239ebd9 elementor-widget elementor-widget-heading\" data-id=\"239ebd9\" data-element_type=\"widget\" id=\"referencias\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Referencias<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e34c034 elementor-widget elementor-widget-text-editor\" data-id=\"e34c034\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>[1] Ques es terraform.[<a href=\"https:\/\/developer.hashicorp.com\/terraform\">link<\/a>]<\/p><p>[2] M\u00f3dulos de Terraform. [<a href=\"https:\/\/developer.hashicorp.com\/terraform\/language\/modules\">link<\/a>]<\/p><p>[3] Gu\u00eda de instalaci\u00f3n del CDKTF. [<a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/cdktf\/cdktf-install\">link<\/a>]<\/p><p>[4] Repositorio de CKDTF GitHub. [<a href=\"https:\/\/github.com\/lucasberlang\/cdktf-tutorial\">link<\/a>]<\/p><p>[5] Repositorio de Cloud storage GitHub. [<a href=\"https:\/\/github.com\/lucasberlang\/gcp-cloud-storage\">link<\/a>]<\/p><p>[6] Repositorio de Pubsub GitHub. [<a href=\"https:\/\/github.com\/lucasberlang\/gcp-pubsub\">link<\/a>]<\/p><p>[7] Frameworks de testing.. [<a href=\"https:\/\/developer.hashicorp.com\/terraform\/cdktf\/test\/unit-tests\">link<\/a>]<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65c3381 elementor-widget elementor-widget-spacer\" data-id=\"65c3381\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-f668113 nav-column elementor-hidden-phone\" data-id=\"f668113\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d289a2d elementor-widget elementor-widget-table-of-contents\" data-id=\"d289a2d\" data-element_type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h2&quot;],&quot;exclude_headings_by_selector&quot;:[],&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_offset&quot;:150,&quot;sticky_parent&quot;:&quot;yes&quot;,&quot;marker_view&quot;:&quot;numbers&quot;,&quot;no_headings_message&quot;:&quot;No se ha encontrado ning\\u00fan encabezado en esta p\\u00e1gina.&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;,&quot;mobile&quot;],&quot;sticky_effects_offset&quot;:0,&quot;sticky_anchor_link_offset&quot;:0}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tNavegaci\u00f3n\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__d289a2d\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-09395a3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"09395a3\" data-element_type=\"section\" id=\"autores\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2ba3c08\" data-id=\"2ba3c08\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7a7e9b1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7a7e9b1\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0225831\" data-id=\"0225831\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7c5b092 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"7c5b092\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.mx\/wp-content\/uploads\/2021\/09\/lucas-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-12198 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-150x150.png 150w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-300x300.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-768x768.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-75x75.png 75w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/09\/lucas.png 888w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\">Lucas Calvo<\/a><\/h4><p class=\"elementor-image-box-description\">Cloud Engineer<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-816937f\" data-id=\"816937f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-756365e elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"756365e\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Compartir en linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f18d1b8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f18d1b8\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-b490454\" data-id=\"b490454\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a76f07c elementor-widget elementor-widget-heading\" data-id=\"a76f07c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7365ecc elementor-align-center elementor-widget elementor-widget-button\" data-id=\"7365ecc\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/es\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">DESCUBRE BLUETAB<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ec3a45 elementor-widget elementor-widget-spacer\" data-id=\"1ec3a45\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e6097d2 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"e6097d2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a66a650\" data-id=\"a66a650\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-38e61b8 elementor-widget elementor-widget-text-editor\" data-id=\"38e61b8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-9975abb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9975abb\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-e5edefb\" data-id=\"e5edefb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0628f91 elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"0628f91\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-strategy\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"strategy-opt\" data-bg-image=\"url(https:\/\/www.bluetab.mx\/wp-content\/uploads\/2020\/10\/strategy-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA STRATEGY\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-8724c63\" data-id=\"8724c63\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bc8b25d elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"bc8b25d\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-fabric\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"fabric-opt\" data-bg-image=\"url(https:\/\/www.bluetab.mx\/wp-content\/uploads\/2020\/10\/fabric-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA FABRIC\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ddc996d\" data-id=\"ddc996d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d384cf elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"1d384cf\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/augmented-analytics\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"AUGMENTED-ANALYTICS-opt\" data-bg-image=\"url(https:\/\/www.bluetab.mx\/wp-content\/uploads\/2020\/10\/AUGMENTED-ANALYTICS-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tAUGMENTED ANALYTICS\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f61bae8\" data-id=\"f61bae8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f3fe106 elementor-widget elementor-widget-text-editor\" data-id=\"f3fe106\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Te puede interesar<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a06bb9 elementor-posts--align-left elementor-grid-1 elementor-posts--thumbnail-left elementor-hidden-phone elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-widget elementor-widget-posts\" data-id=\"9a06bb9\" data-element_type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:32,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-15882 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/www.bluetab.net\/es\/microsoft-fabric-una-nueva-solucion-de-analisis-de-datos-todo-en-uno\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"152\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/microsoft-300x152.jpg\" class=\"attachment-medium size-medium wp-image-15909 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/microsoft-300x152.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/microsoft-768x389.jpg 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/10\/microsoft.jpg 900w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/152;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.bluetab.net\/es\/microsoft-fabric-una-nueva-solucion-de-analisis-de-datos-todo-en-uno\/\" >\n\t\t\t\tMICROSOFT FABRIC: Una nueva soluci\u00f3n de an\u00e1lisis de datos, todo en uno\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\toctubre 16, 2023\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/www.bluetab.net\/es\/microsoft-fabric-una-nueva-solucion-de-analisis-de-datos-todo-en-uno\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre MICROSOFT FABRIC: Una nueva soluci\u00f3n de an\u00e1lisis de datos, todo en uno\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-6158 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-noticias entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/www.bluetab.net\/es\/bluetab-se-certifica-como-aws-well-architected-partner-program\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"156\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/well-architectured-blog-300x156.jpg\" class=\"attachment-medium size-medium wp-image-6159 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/well-architectured-blog-300x156.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/well-architectured-blog-768x399.jpg 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/10\/well-architectured-blog.jpg 793w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/156;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.bluetab.net\/es\/bluetab-se-certifica-como-aws-well-architected-partner-program\/\" >\n\t\t\t\tBluetab se certifica como AWS Well Architected Partner Program\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\toctubre 19, 2020\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/www.bluetab.net\/es\/bluetab-se-certifica-como-aws-well-architected-partner-program\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Bluetab se certifica como AWS Well Architected Partner Program\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-10574 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/www.bluetab.net\/es\/workshop-chaos-engineering-sobre-kubernetes-con-litmus\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/07\/10-300x150.png\" class=\"attachment-medium size-medium wp-image-17841 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/07\/10-300x150.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/07\/10-1024x512.png 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/07\/10-768x384.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/07\/10.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.bluetab.net\/es\/workshop-chaos-engineering-sobre-kubernetes-con-litmus\/\" >\n\t\t\t\tWorkshop Ingenier\u00eda del caos sobre Kubernetes con Litmus\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tjulio 7, 2021\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/www.bluetab.net\/es\/workshop-chaos-engineering-sobre-kubernetes-con-litmus\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Workshop Ingenier\u00eda del caos sobre Kubernetes con Litmus\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e82f0bf elementor-posts--align-left elementor-grid-1 elementor-hidden-desktop elementor-hidden-tablet elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-posts--thumbnail-top elementor-widget elementor-widget-posts\" data-id=\"e82f0bf\" data-element_type=\"widget\" data-settings=\"{&quot;classic_row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:32,&quot;sizes&quot;:[]},&quot;classic_columns&quot;:&quot;1&quot;,&quot;classic_columns_tablet&quot;:&quot;2&quot;,&quot;classic_columns_mobile&quot;:&quot;1&quot;,&quot;classic_row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;classic_row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"posts.classic\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid\" role=\"list\">\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-14133 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/www.bluetab.net\/es\/data-mesh\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"156\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/07\/DM-300x156.jpg\" class=\"attachment-medium size-medium wp-image-14201 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/07\/DM-300x156.jpg 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/07\/DM-1024x534.jpg 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/07\/DM-768x400.jpg 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2022\/07\/DM.jpg 1136w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/156;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.bluetab.net\/es\/data-mesh\/\" >\n\t\t\t\tData Mesh\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tjulio 27, 2022\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/www.bluetab.net\/es\/data-mesh\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre Data Mesh\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-6567 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/www.bluetab.net\/es\/analisis-de-vulnerabilidades-en-contenedores-con-trivy\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/11\/enlaces-linkedin-1-300x150.png\" class=\"attachment-medium size-medium wp-image-17849 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/11\/enlaces-linkedin-1-300x150.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/11\/enlaces-linkedin-1-1024x512.png 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/11\/enlaces-linkedin-1-768x384.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2020\/11\/enlaces-linkedin-1.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.bluetab.net\/es\/analisis-de-vulnerabilidades-en-contenedores-con-trivy\/\" >\n\t\t\t\tAn\u00e1lisis de vulnerabilidades en contenedores con trivy\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tmarzo 22, 2024\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/www.bluetab.net\/es\/analisis-de-vulnerabilidades-en-contenedores-con-trivy\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre An\u00e1lisis de vulnerabilidades en contenedores con trivy\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"elementor-post elementor-grid-item post-12456 post type-post status-publish format-standard has-post-thumbnail category-blog-es category-practices category-tech entry\" role=\"listitem\">\n\t\t\t\t<a class=\"elementor-post__thumbnail__link\" href=\"https:\/\/www.bluetab.net\/es\/como-preparar-la-certificacion-aws-data-analytics-specialty\/\" tabindex=\"-1\" >\n\t\t\t<div class=\"elementor-post__thumbnail\"><img decoding=\"async\" width=\"300\" height=\"150\" data-src=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/11\/11-300x150.png\" class=\"attachment-medium size-medium wp-image-17837 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/11\/11-300x150.png 300w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/11\/11-1024x512.png 1024w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/11\/11-768x384.png 768w, https:\/\/www.bluetab.net\/wp-content\/uploads\/2021\/11\/11.png 1200w\" data-sizes=\"(max-width: 300px) 100vw, 300px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 300px; --smush-placeholder-aspect-ratio: 300\/150;\" \/><\/div>\n\t\t<\/a>\n\t\t\t\t<div class=\"elementor-post__text\">\n\t\t\t\t<h3 class=\"elementor-post__title\">\n\t\t\t<a href=\"https:\/\/www.bluetab.net\/es\/como-preparar-la-certificacion-aws-data-analytics-specialty\/\" >\n\t\t\t\tC\u00f3mo preparar la certificaci\u00f3n AWS Data Analytics &#8211; Specialty\t\t\t<\/a>\n\t\t<\/h3>\n\t\t\t\t<div class=\"elementor-post__meta-data\">\n\t\t\t\t\t<span class=\"elementor-post-date\">\n\t\t\tnoviembre 17, 2021\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\n\t\t<a class=\"elementor-post__read-more\" href=\"https:\/\/www.bluetab.net\/es\/como-preparar-la-certificacion-aws-data-analytics-specialty\/\" aria-label=\"M\u00e1s informaci\u00f3n sobre C\u00f3mo preparar la certificaci\u00f3n AWS Data Analytics &#8211; Specialty\" tabindex=\"-1\" >\n\t\t\tLEER M\u00c1S\t\t<\/a>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/article>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Lucas Calvo Cloud Engineer Introducci\u00f3n En este art\u00edculo vamos a hablar de CDKTF y de c\u00f3mo utilizar todas sus ventajas para desplegar infraestructura de forma<\/p>\n","protected":false},"author":1,"featured_media":17829,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"content-sidebar","footnotes":""},"categories":[21,667,631],"tags":[],"class_list":{"0":"post-15207","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-blog-es","8":"category-practices","9":"category-tech","10":"entry"},"uagb_featured_image_src":{"full":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15.png",1200,600,false],"thumbnail":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-150x150.png",150,150,true],"medium":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-300x150.png",300,150,true],"medium_large":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-768x384.png",768,384,true],"large":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-1024x512.png",1024,512,true],"1536x1536":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15.png",1200,600,false],"2048x2048":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15.png",1200,600,false],"sidebar-featured":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-75x75.png",75,75,true],"genesis-singular-images":["https:\/\/www.bluetab.net\/wp-content\/uploads\/2023\/05\/15-702x526.png",702,526,true]},"uagb_author_info":{"display_name":"Bluetab","author_link":"https:\/\/www.bluetab.net\/es\/author\/user\/"},"uagb_comment_info":0,"uagb_excerpt":"Lucas Calvo Cloud Engineer Introducci\u00f3n En este art\u00edculo vamos a hablar de CDKTF y de c\u00f3mo utilizar todas sus ventajas para desplegar infraestructura de forma","_links":{"self":[{"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/posts\/15207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/comments?post=15207"}],"version-history":[{"count":25,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/posts\/15207\/revisions"}],"predecessor-version":[{"id":15301,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/posts\/15207\/revisions\/15301"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/media\/17829"}],"wp:attachment":[{"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/media?parent=15207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/categories?post=15207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bluetab.net\/es\/wp-json\/wp\/v2\/tags?post=15207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}