Recientemente comencé a trabajar con AWS e IaC, estoy usando Cloudformation para aprovisionar mis recursos de AWS, pero descubrí que AWS proporciona un SDK y un CDK para permitirle aprovisionar recursos mediante programación en lugar de json/yaml simple.
Pero según la documentación, realmente no entendí en qué se diferencian, ¿alguien puede explicarme en qué se diferencian y para qué caso de uso debería usar qué?
CDK: es un marco para modelar y aprovisionar su infraestructura o pila. Stack puede consistir en una base de datos, por ejemplo: DynamoDB, S3 Bucket, Lambda, API Gateway, etc. Proporciona una función para escribir código para crear una infraestructura en AWS. También llamada Infraestructura como código. Chequea aquí
SDK: estas son las bibliotecas de código proporcionadas por Amazon en varios idiomas, como Java, Python, PHP, Javascript, Typescript, etc. Estas bibliotecas ayudan a interactuar con los servicios de AWS (como la creación de datos en DynamoDB) que crea a través de CDK o consola. Los SDK simplifican el uso de los servicios de AWS en su aplicación con una API. Chequea aquí
AWS SDK es una biblioteca principalmente para facilitar el acceso a los servicios de AWS al manejar por usted la (des) serialización de datos, la administración de credenciales, el manejo de fallas, etc. Quizás, para escenarios específicos, podría usar AWS SDK como la infraestructura como un herramienta de código, sin embargo, podría ser engorroso ya que no es el uso previsto de la biblioteca.
Según https://docs.aws.amazon.com/whitepapers/latest/develop-deploy-dotnet-apps-on-aws/infrastructure-as-code.html , las herramientas dedicadas para IaC son AWS CloudFormation y AWS CDK .
AWS CDK es una abstracción sobre CloudFormation. De hecho, los scripts de CDK se transforman en las definiciones de CloudFormation cuando se sintetizan los scripts.
La diferencia se puede describir mejor con un ejemplo: imagine que para cada función lambda en su pila desea crear una alarma de CloudWatch de error y conectarse al tema de SNS.
Con CloudFormation, a) tendrá que escribir un conjunto bastante similar de definiciones yaml/json para cada función lambda a fin de garantizar la supervisión, b) usar las plantillas de pila anidadas, c) usar los módulos de CloudFormation.
Con CDK puede escribir una construcción de código genérico: clase o método, que puede crear la alarma para la función lambda determinada y crear la acción de alarma SNS para un tema determinado.
En otras palabras, CDK lo ayuda a generalizar y reutilizar su IaC de una manera muy familiar a la forma en que desarrolla su código comercial. El código es más corto y más legible que las definiciones de CF.
La diferencia es aún más notable cuando necesita configurar recursos similares en diferentes regiones de AWS y cuando tiene una cuenta de AWS diferente por entorno. Puede administrar todas las cuentas y regiones de AWS con un solo código base de CDK.
Encuentro que la diferencia para mí es que el CDK codifica el JSON/YAML de CloudFormation. Primera respuesta, está bien, está bien en el código, pero el beneficio en el lado del código es que puede escribir pruebas unitarias contra el código. Por lo tanto se llega a construir esa sensación de seguridad o póliza de seguro frente a los servicios aprovisionados en el CDK.
Hay otras formas de probar CF, sin embargo, con un fondo de desarrollo, esto se siente más cómodo.