Solución:
Basándonos en nuestra experiencia, encontramos 3 formas posibles de traducir la infraestructura de AWS implementada manualmente existente (desde la interfaz de usuario de la consola web) a Cloudformation (CF).
-
Usando una nueva característica introducida nativa de CloudFormation (desde noviembre de 2019) que le permite importar recursos existentes en una pila de CloudFormation
-
Utilizando
aws cli
ejecutar$aws service_name_here describe
para cada elemento que componen su pila, por ejemplo, para Pila de base de datos RDS:
- Instancia RDS ->
Type: AWS::RDS::DBInstance
, - RDS (EC2) SG ->
Type: AWS::EC2::SecurityGroup
, - Grupo de subredes RDS ->
Type: AWS::RDS::DBSubnetGroup
y - Grupo de parámetros de base de datos RDS ->
Type: AWS::RDS::DBParameterGroup
Y traducir manualmente a CF basado en los resultados obtenidos de la aws cli
para cada uno de los componentes. Este enfoque generalmente requiere más experiencia tanto en AWS como en CF, pero las plantillas que está creando se pueden estructurar y diseñar siguiendo buenas prácticas, completamente parametrizadas (Sub, Ref, Join, Fn::GetAtt:, Fn::ImportValue
), modular, aplicando conditions
y en una primera iteración, el resultado probablemente estaría cerca del estado final de las plantillas (ejemplos de referencia interesantes: https://github.com/widdix/aws-cf-templates/).
- Utilizando AWS CloudFormer:
- https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cloudformer.html
- http://www.tothenew.com/blog/using-aws-cloudformer-to-create-template-of-existing-infrastructure
- NOTA: Las plantillas resultantes no son tan “ordenadas” como las desarrolladas manualmente bajo el enfoque (1), tendrán todos los ID y valores codificados y tal vez la estructura no siga la convención que usa para sus plantillas de CF, pero por supuesto proporcionará un buen punto de partida.
¡Puntos extra! 🙂
-
Utilizando Terraformación (https://github.com/dtan4/terraforming). Considerando la nueva versión de Terraform
0.12.0-beta2
(ya soportado en versión estable porterraform-provider-aws 2.7.0
), con nuevas características y su sintaxis más amigable, y sin ignorar que es una herramienta de código abierto y agnóstica del proveedor de la nube, no descartaría la posibilidad de generar código Terraform basado en la infra existente de AWS, si es posible bajo la forma de módulos. y submódulos que tienen como referencia -> https://registry.terraform.io/ como alternativa a AWS CF. -
Algunas otras alternativas nuevas para exportar su infraestructura de AWS actualmente implementada al código Cloudformation / Terraform:
- https://former2.com
- https://modules.tf
Artículo relacionado: https://medium.com/@exequiel.barrirero/aws-export-configuration-as-code-cloudformation-terraform-b1bca8949bca
No es posible usar la AWS CLI, pero puede usar CloudFormer [1] herramienta para crear una plantilla de CloudFormation a partir de recursos existentes. He tenido un éxito decente con eso. Las plantillas no son tan “bonitas” como las plantillas hechas a mano, pero proporcionan un buen punto de partida.
[1] http://aws.amazon.com/developertools/6460180344805680
Además de CloudFormer, es posible que desee echar un vistazo a Bellerophon: https://github.com/arminhammer/bellerophon.