{"id":15207,"date":"2023-05-09T15:31:23","date_gmt":"2023-05-09T15:31:23","guid":{"rendered":"https:\/\/bluetab.net\/?p=15207"},"modified":"2023-05-09T15:31:23","modified_gmt":"2023-05-09T15:31:23","slug":"cdktf-otro-paso-en-el-viaje-del-devops-introduccion-y-beneficios","status":"publish","type":"post","link":"https:\/\/bluetab.co.uk\/en\/2023\/05\/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":"<figure><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\" rel=\"noopener\">Lucas Calvo<\/a><\/h4>\n<p>Cloud Engineer<\/p>\n<h2>Introducci\u00f3n<\/h2>\n<p>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<a href=\"\/#referencias\">[1]<\/a> para desplegar infraestructura m\u00e1s reutilizable bajo la supervisi\u00f3n de tu organizaci\u00f3n.<\/p>\n<p>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.<\/p>\n<p>\u00bfQu\u00e9 necesitas para entender este art\u00edculo?<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Algunos conceptos sobre Terraform<a href=\"\/#referencias\">[2]<\/a>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Instalar el CDKTF <a href=\"\/#referencias\">[3<\/a>].<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Algunos conceptos sobre python.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Necesitas una cuenta gratuita en GCP.<\/li>\n<\/ul>\n<p>Todo el c\u00f3digo utilizado en este art\u00edculo est\u00e1 en el repositorio<a href=\"\/#referencias\">[4]<\/a> de Github.<\/p>\n<p><strong>\u00bfEs CDKTF la soluci\u00f3n milagrosa para los despliegues en nuestra organizaci\u00f3n?<\/strong> Ve\u00e1moslo.<\/p>\n<h2>\u00bfQue es el CDKTF?<\/h2>\n<p>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.<\/p>\n<p><img decoding=\"async\" width=\"468\" height=\"347\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF.png 468w, https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF-300x222.png 300w\" sizes=\"(max-width: 468px) 100vw, 468px\"><\/p>\n<h2>Primeros pasos con CDKTF<\/h2>\n<p>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:<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">cdktf init &#8211;template=python<\/li>\n<\/ul>\n<p>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.<\/p>\n<p>Una vez ejecutado este comando veremos la siguiente plantilla:<\/p>\n<p><img decoding=\"async\" width=\"215\" height=\"134\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF1.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Los ficheros m\u00e1s importantes son `main.py` y `cdktf.json`. Hablemos de ellos.<\/p>\n<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>\n<pre><code class=\"language-python\">```python\nfrom imports.google.provider import GoogleProvider\nfrom imports.google.storage_bucket import StorageBucket\nfrom imports.google.pubsub_topic import PubsubTopic\n``` <\/code><\/pre>\n<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>\n<p>Este archivo tiene la siguiente informaci\u00f3n:<\/p>\n<pre><code class=\"language-json\">```json\n{\n  \"language\": \"python\",\n  \"app\": \"pipenv run python main.py\",\n  \"projectId\": \"da305019-c0fc-4e47-b4ad-1a705cdd8811\",\n  \"sendCrashReports\": \"false\",\n  \"terraformProviders\": [\"google@~&gt; 4.0\"],\n  \"terraformModules\": [],\n  \"codeMakerOutput\": \"imports\",\n  \"context\": {\n    \"excludeStackIdFromLogicalIds\": \"true\",\n    \"allowSepCharsInLogicalIds\": \"true\"\n  }\n}\n``` <\/code><\/pre>\n<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>\n<p>Una vez configurados los proveedores ya podemos definir nuestros recursos con Python:<\/p>\n<pre><code class=\"language-python\">```python\nclass MyStack(TerraformStack):\n    def __init__(self, scope: Construct, id: str):\n        super().__init__(scope, id)\n        GoogleProvider(self, \"google\", region=\"europe-west4\",project=\"xxxxx\")\n        length = 5\n        suffix = ''.join((random.choice(string.ascii_lowercase) for x in range(length)))\n        bucket = StorageBucket(self, \"gcs\", name = \"cdktf-test-1234-bt-\"+ str(suffix), location = \"EU\", force_destroy = True)\n        topic = PubsubTopic(self, \"topic\" ,name = \"cdktf-topic\", labels={\"tool\":\"cdktf\"})\n        TerraformOutput(self,\"bucket_self_link\",value=bucket.self_link)\n        TerraformOutput(self,\"topic-id\",value=topic.id)\napp = App()\nMyStack(app, \"first_steps\")\napp.synth()\n``` <\/code><\/pre>\n<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>\n<p>El resultado final de nuestros primeros scripts con CDKTF es el siguiente:<\/p>\n<pre><code class=\"language-python\">```python\nfrom constructs import Construct\nfrom cdktf import App, TerraformStack, TerraformOutput\nfrom imports.google.provider import GoogleProvider\nfrom imports.google.storage_bucket import StorageBucket\nfrom imports.google.pubsub_topic import PubsubTopic\nimport random\nimport string\nclass MyStack(TerraformStack):\n    def __init__(self, scope: Construct, id: str):\n        super().__init__(scope, id)\n        GoogleProvider(self, \"google\", region=\"europe-west4\",project=\"xxxxx\")\n        length = 5\n        suffix = ''.join((random.choice(string.ascii_lowercase) for x in range(length)))\n        bucket = StorageBucket(self, \"gcs\", name = \"cdktf-test-1234-bt-\"+ str(suffix), location = \"EU\", force_destroy = True)\n        topic = PubsubTopic(self, \"topic\" ,name = \"cdktf-topic\", labels={\"tool\":\"cdktf\"})\n        TerraformOutput(self,\"bucket_self_link\",value=bucket.self_link)\n        TerraformOutput(self,\"topic-id\",value=topic.id)\napp = App()\nMyStack(app, \"first_steps\")\napp.synth()\n``` <\/code><\/pre>\n<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>\n<pre><code class=\"language-bash\">```bash\ncdktf get\n``` <\/code><\/pre>\n<p>Esta es la salida del comando:<\/p>\n<p><img decoding=\"async\" width=\"468\" height=\"52\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF2.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF2.png 468w, https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF2-300x33.png 300w\" sizes=\"(max-width: 468px) 100vw, 468px\"><\/p>\n<p>Usamos el flag &#8211;force para recrear todos los bindings. Con el proveedor descargado procederemos al despliegue ejecutando el comando `cdktf deploy`:<\/p>\n<pre><code class=\"language-bash\">```bash\ncdktf deploy\n``` <\/code><\/pre>\n<p>Esta es la salida del comando:<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"931\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/image4-1024x931.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/image4-1024x931.png 1024w, https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/image4-300x273.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/image4-768x698.png 768w, https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/image4.png 1138w\" sizes=\"(max-width: 1024px) 100vw, 1024px\"><\/p>\n<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>\n<h2>Integraciones con tus propios m\u00f3dulos<\/h2>\n<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>\n<ul>\n<li>Cloud Storage[<a href=\"\/#referencias\">5<\/a>]<\/li>\n<li>Pubsub[<a href=\"\/#referencias\">6<\/a>]<\/li>\n<\/ul>\n<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>\n<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>\n<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>\n<p>Este es el fichero `cdktf.json`:<\/p>\n<pre><code class=\"language-json\">```json\n{\n  \"language\": \"python\",\n  \"app\": \"pipenv run python main.py\",\n  \"projectId\": \"f02a016f-d673-4390-86db-65348eadfb3f\",\n  \"sendCrashReports\": \"false\",\n  \"terraformProviders\": [\"google@~&gt; 4.0\", \"google-beta@~&gt; 4.0\"],\n  \"terraformModules\": [\n    {\n      \"name\": \"gcp_pubsub\",\n      \"source\": \"git::https:\/\/github.com\/lucasberlang\/gcp-pubsub.git?ref=v1.2.0\"\n    },\n    {\n      \"name\": \"gcp_cloud_storage\",\n      \"source\": \"git::https:\/\/github.com\/lucasberlang\/gcp-cloud-storage.git?ref=v1.2.0\"\n    }\n  ],\n  \"codeMakerOutput\": \"imports\",\n  \"context\": {\n    \"excludeStackIdFromLogicalIds\": \"true\",\n    \"allowSepCharsInLogicalIds\": \"true\"\n  }\n}\n```\n <\/code><\/pre>\n<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>\n<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>\n<p>El c\u00f3digo quedar\u00eda de la siguiente manera:<\/p>\n<pre><code class=\"language-python\">```python\n#!\/usr\/bin\/env python\nfrom constructs import Construct\nfrom cdktf import App, TerraformStack, TerraformOutput\nfrom imports.google.provider import GoogleProvider\nfrom imports.google_beta.provider import GoogleBetaProvider\nfrom imports.gcp_pubsub import GcpPubsub\nfrom imports.gcp_cloud_storage import GcpCloudStorage\nimport random\nimport string\nclass MyStack(TerraformStack):\n    def __init__(self, scope: Construct, ns: str):\n        super().__init__(scope, ns)\n        GoogleProvider(self, \"google\", region=\"europe-west4\")\n        GoogleBetaProvider(self, \"google-beta\", region=\"europe-west4\")\n        length = 5\n        suffix = ''.join((random.choice(string.ascii_lowercase) for x in range(length)))\n        tags = {\"provider\" : \"go\",\n                \"region\" : \"euw4\",\n                \"enterprise\" : \"bt\",\n                \"account\" : \"poc\",\n                \"system\" : \"ts\",\n                \"environment\" : \"poc\",\n                \"cmdb_name\" : \"\",\n                \"security_exposure_level\" : \"mz\",\n                \"status\" : \"\",\n                \"on_service\" : \"yes\"}\n        topic = GcpPubsub(self,\"topic\",\n          name = \"cdktf-topic\",\n          project_id = \"xxxxxxx\",\n          offset = 1,\n          tags = tags)\n        bucket = GcpCloudStorage(self,\"bucket\",\n          name = \"cdktf-test-1234-bt-\" + suffix,\n          project_id = \"xxxxxxx\",\n          offset = 1,\n          location = \"europe-west4\",\n          force_destroy = True,\n          tags = tags)\n        TerraformOutput(self,\"topic_id\",value=topic.id_output)\n        TerraformOutput(self,\"bucket_self_link\",value=bucket.bucket_output)\napp = App()\nMyStack(app, \"cdktf_modules\")\napp.synth()\n```\n <\/code><\/pre>\n<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>\n<pre><code class=\"language-python\">```python\nfrom imports.gcp_pubsub import GcpPubsub\nfrom imports.gcp_cloud_storage import GcpCloudStorage\n``` <\/code><\/pre>\n<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>\n<pre><code class=\"language-bash\">```bash\ncdktf get --force\ncdktf deploy\n``` <\/code><\/pre>\n<p>Una vez desplegada, comprobaremos nuestra infraestructura en GCP y procederemos a borrar toda con el comando `cdktf destroy`.<\/p>\n<h2>Evoluciones que puedes a\u00f1adir a tu empresa<\/h2>\n<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>\n<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>\n<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>\n<p><img decoding=\"async\" width=\"468\" height=\"261\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF4.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF4.png 468w, https:\/\/bluetab.net\/wp-content\/uploads\/2023\/05\/CDKTF4-300x167.png 300w\" sizes=\"(max-width: 468px) 100vw, 468px\"><\/p>\n<h2>Conclusiones<\/h2>\n<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>\n<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>\n<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>\n<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>\n<h2>Referencias<\/h2>\n<p>[1] Ques es terraform.[<a href=\"https:\/\/developer.hashicorp.com\/terraform\">link<\/a>]<\/p>\n<p>[2] M\u00f3dulos de Terraform. [<a href=\"https:\/\/developer.hashicorp.com\/terraform\/language\/modules\">link<\/a>]<\/p>\n<p>[3] Gu\u00eda de instalaci\u00f3n del CDKTF. [<a href=\"https:\/\/developer.hashicorp.com\/terraform\/tutorials\/cdktf\/cdktf-install\">link<\/a>]<\/p>\n<p>[4] Repositorio de CKDTF GitHub. [<a href=\"https:\/\/github.com\/lucasberlang\/cdktf-tutorial\">link<\/a>]<\/p>\n<p>[5] Repositorio de Cloud storage GitHub. [<a href=\"https:\/\/github.com\/lucasberlang\/gcp-cloud-storage\">link<\/a>]<\/p>\n<p>[6] Repositorio de Pubsub GitHub. [<a href=\"https:\/\/github.com\/lucasberlang\/gcp-pubsub\">link<\/a>]<\/p>\n<p>[7] Frameworks de testing.. [<a href=\"https:\/\/developer.hashicorp.com\/terraform\/cdktf\/test\/unit-tests\">link<\/a>]<\/p>\n<h4>\n\t\t\t\tNavegaci\u00f3n<\/h4>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/09\/lucas-150x150.png\" alt=\"\" loading=\"lazy\"><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/lucascalvoberlanga\/\" target=\"_blank\" rel=\"noopener\">Lucas Calvo<\/a><\/h4>\n<p>Cloud Engineer<\/p>\n<h5>\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\n<p><a href=\"\/\" role=\"button\"><br \/>\nDESCUBRE BLUETAB<br \/>\n<\/a><\/p>\n<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/p>\n<h5>DATA STRATEGY<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-strategy\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/data-fabric\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/data-fabric\/\"><\/p>\n<h5>DATA FABRIC<\/h5>\n<p><\/a><a href=\"\/soluciones\/data-fabric\/\">\t\t\t\t\t\t<\/a><br \/>\n<a href=\"\/soluciones\/augmented-analytics\/\"><\/a><\/p>\n<p><a href=\"\/soluciones\/augmented-analytics\/\"><\/p>\n<h5>AUGMENTED ANALYTICS<\/h5>\n<p><\/a><a href=\"\/soluciones\/augmented-analytics\/\">\t\t\t\t\t\t<\/a><\/p>\n<p>Te puede interesar<\/p>\n","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 program\u00e1tica y reutilizable en GCP. Tambi\u00e9n veremos c\u00f3mo integrar CDKTF con tus m\u00f3dulos de terraform[1] para desplegar infraestructura m\u00e1s reutilizable bajo la supervisi\u00f3n de tu organizaci\u00f3n. CDKTF abre un mundo [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":20828,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,29,30],"tags":[],"class_list":["post-15207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-es","category-practices-en","category-tech-en"],"acf":[],"jetpack_featured_media_url":"https:\/\/bluetab.co.uk\/wp-content\/uploads\/2023\/05\/15.png","_links":{"self":[{"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/posts\/15207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/comments?post=15207"}],"version-history":[{"count":0,"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/posts\/15207\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/media\/20828"}],"wp:attachment":[{"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/media?parent=15207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/categories?post=15207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.co.uk\/en\/wp-json\/wp\/v2\/tags?post=15207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}