¿Cómo se manejan los files de configuration para AWS CodePipelines?

Estoy en un equipo de desarrolladores usando Git como nuestro control de versiones.

Queremos tener un mínimo de 3 etapas de nuestro process de desarrollo: puesta en escena, desarrollo y producción.

Lo único que debería cambiar entre estas etapas es un único file de configuration, para indicarle a la estructura Serverless qué nombre deben tener las funciones lambda, los segmentos S3 y cualquier otro recurso que necesite crearse para la stack CloudFormation.

Sin embargo, esto hace que el control de la fuente sea un poco más difícil. Si ponemos los files de configuration directamente en el código fuente, entonces tenemos que asegurarnos de que esos files no sean anulados cuando confirmamos / enviamos a origen. Pero el CodeBuild tiene que tener acceso a él de alguna manera, y tiene que asegurarse de get el file de configuration correcto para la etapa especificada.

Preferiría una solución a este problema que sea parte del ecosistema de AWS.

Lo que sugeriría es que sus variables de entorno estén almacenadas en la Tienda de Parámetros EC2, a la que puede hacer reference en su Buildspec.yml de CodeBuild.

Para utilizar CodePipeline en su caso, también necesita diferentes canalizaciones y diferentes proyectos de CodeBuild para cada entorno.

Por ejemplo, supongamos que almacena las siguientes variables en EC2 Parameter Store (o AWS SSM),

DEVELOPMENT_DB_PASSWORD='helloworld' STAGING_DB_PASSWORD='helloworld' PRODUCTION_DB_PASSWORD='helloworld' 

En su proyecto CodeBuild, debe especificar el entorno como una variable (por ejemplo, $ENVIRONMENT=DEVELOPMENT ). No use buildspec para esto. Puede usar AWS Console o CloudFormation.

Entonces, tu buildspec.yml puede verse así:

 env: parameter-store: DEVELOPMENT_DB_PASS: "DEVELOPMENT_DB_PASSWORD" STAGING_DB_PASS: "DEVELOPMENT_DB_PASSWORD" PRODUCTION_DB_PASS: "DEVELOPMENT_DB_PASSWORD" 

Estas variables son accesibles en su serverless.yml usando ${env:ENVIRONMENT}_DB_PASS así:

 provider: environment: DB_PASS: ${env:${env:ENVIRONMENT}_DB_PASS} 

Todo lo que tienes que hacer ahora es crear esos tres CodePipelines teniendo cada uno su propio proyecto CodeBuild (con cada proyecto usando un $ENVIRONMENT diferente).

¿Por qué no usas tres files de configuration? uno para cada etapa.