typescript - AWS CDK genera nombres de recursos demasiado largos. ¿Cuál es la razón?
Estoy usando AWS CDK para crear Infraestructura y Código, pero cuando desplegué mis pilas, los nombres de los recursos eran demasiado largos. Por ejemplo, cuando se desplegó una pila, el nombre era algo así:
subnet-01b6cba6915f51b9d/NetworkStack/vpc/devvpc/compute-subnet-priv-a-devSubnet1
Me gustaría tener la última parte del nombre, porque es muy difícil de leer y es horrible. Eso también pasa con los nombres lógicos.
¿Alguien sabe cómo prevenir o solucionar esto? Gracias.
PD: Estoy usando TS
Una solución en los archivos de configuración o un código de nivel utilizando AWS CDK
Respuesta #1
De hecho, esos nombres que se pueden obtener a través del CDK pueden ser algo complicados, te diré algo que podrías validar, no sé si ya lo has hecho, pero estos nombres se pueden personalizar.
Recordemos que CloudFormation está presente en segundo plano, lo que dice la documentación y que he visto en algunos casos es que se puede indicar un nombre físico para cuando se crean estos recursos, en el caso de Python podría verse algo así.
bucket = s3.Bucket(self, "MyBucket", bucket_name="my-bucket-name")
Por mi parte no siempre lo hago, pero por supuesto, si queremos una implementación alineada con estándares y nomenclaturas específicos, será necesario. Vi esta pregunta en AWS re:Post, comparto la referencia para que también puedas echarle un vistazo.
Dicho esto, si me preguntas por qué esos nombres aleatorios, en última instancia es lo que CloudFormation hace cuando no se le indica exactamente, esto está respaldado con la documentación correspondiente, saludos.
Respuesta #2
El nombre está compuesto por el ID lógico y un hash generado por CloudFormation. El ID lógico se calcula concatenando los ID de los constructos en la ruta (todos los ID de los constructos desde la Stack superior hasta el recurso).
Puedes proporcionar tu propio nombre físico, pero no se recomienda. Del documento de mejores prácticas:
Usa nombres de recursos generados, no nombres físicos
Los nombres son un recurso precioso. Cada nombre solo se puede usar una vez. Por lo tanto, si codificas de forma fija el nombre de una tabla o el nombre de un bucket en tu infraestructura y aplicación, no puedes desplegar esa parte de la infraestructura dos veces en la misma cuenta. (El nombre del que estamos hablando aquí es el nombre especificado, por ejemplo, por la propiedad bucketName en un constructo de bucket de Amazon S3.)
Lo que es peor, no puedes hacer cambios en el recurso que requieran que sea reemplazado. Si una propiedad solo se puede establecer durante la creación del recurso, como el KeySchema de una tabla de Amazon DynamoDB, entonces esa propiedad es inmutable. Cambiar esta propiedad requiere un nuevo recurso. Sin embargo, el nuevo recurso debe tener el mismo nombre para ser un verdadero reemplazo. Pero no puede tener el mismo nombre mientras el recurso existente aún esté usando ese nombre.
Un mejor enfoque es especificar la menor cantidad de nombres posible. Si omites los nombres de los recursos, el AWS CDK los generará por ti de una manera que no causará problemas. Supongamos que tienes una tabla como recurso. Entonces puedes pasar el nombre de la tabla generada como una variable de entorno a tu función de AWS Lambda. En tu aplicación de AWS CDK, puedes hacer referencia al nombre de la tabla como table.tableName. Alternativamente, puedes generar un archivo de configuración en tu instancia de Amazon EC2 al iniciar, o escribir el nombre real de la tabla en el AWS Systems Manager Parameter Store para que tu aplicación pueda leerlo desde allí.
