javascript - ¿Cuál es el propósito de app.synth() en AWS CDK?
¿Cuál es el propósito de la línea app.synth() en las aplicaciones de AWS CDK? Por ejemplo, se puede ver aquí en la línea 29: https://github.com/aws-samples/aws-cdk-examples/blob/master/typescript/ecs/fargate-application-load-balanced-service/index.ts
He mirado la documentación de CDK pero no puedo encontrar cuál es el propósito real de esa función. Según lo entiendo, la aplicación se sintetiza automáticamente al ejecutar cdk deploy o cdk synth. También tomé el ejemplo mostrado en el repositorio enlazado arriba, comenté la línea app.synth(), lo desplegué, y pareció funcionar como se esperaba. Por lo tanto, me pregunto si me estoy perdiendo de algo en lo que respecta al propósito de app.synth()
Respuesta #1
Sé que ha pasado un tiempo desde que se hizo esta pregunta, pero tenía curiosidad y lo investigué por mi cuenta, así que lo compartiré contigo.
(También pensé que la respuesta actualmente aceptada era sobre el CDK CLI y no sobre el código de la aplicación CDK.)
La clase App tiene una opción llamada autoSynth que está establecida en true por defecto, por lo que incluso si omites app.synth() en tu código, se ejecutará automáticamente.
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.AppProps.html#autosynth
Como se menciona en la documentación, esta función puede no funcionar en algunos idiomas, por lo que parece estar especificada explícitamente en muchos ejemplos de código.
Según la documentación, está bien ejecutar app.synth() varias veces.
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.App.html#synthoptions
autoSynth funciona bien en Node.js. Está implementado en Node.js usando process.once("beforeExit", listener).
https://github.com/aws/aws-cdk/blob/v2.51.1/packages/@aws-cdk/core/lib/app.ts#L166-L170
Inicié esta investigación porque cuando ejecuté CDK en Deno, tuve que ejecutar explícitamente app.synth() para generar el ensamblaje de CDK. Como resultado de esta investigación, descubrí que esto se debe a que la capa de compatibilidad con Node en Deno actualmente no soporta eventos "beforeExit".
https://github.com/denoland/deno_std/blob/113435ada1948b90188586f022d55745c6d2d19b/node/process.ts#L51-L52
Según esta experiencia, es mejor llamar explícitamente a app.synth() como se recomienda.
Respuesta #2
cdk synth solo construye tu plantilla de CloudFormation. No la despliega (no crea recursos reales) en AWS. Puedes tomar la plantilla construida, desplegarla manualmente en la consola de CFN, editarla o inspeccionarla.
cdk deploy va a construir la plantilla y desplegarla en AWS también.
La gente usa synth con deploy porque es una buena práctica:
Es opcional (aunque buena práctica) sintetizar antes de implementar. El AWS CDK sintetiza tu pila antes de cada implementación.