CDK Pipelines es un módulo de CDK que te permite definir tu propio pipeline de CI/CD como código. Lo interesante es que el pipeline se actualiza a sí mismo cuando cambia el código del pipeline. Sí, inception.
El setup básico
import { pipelines } from 'aws-cdk-lib';
const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
synth: new pipelines.ShellStep('Synth', {
input: pipelines.CodePipelineSource.connection('mi-org/mi-repo', 'main', {
connectionArn: 'arn:aws:codestar-connections:...',
}),
commands: [
'npm ci',
'npm run build',
'npx cdk synth',
],
}),
});
Stages con aprobación manual
const staging = new AppStage(this, 'Staging', {
env: { account: '111111111111', region: 'us-east-1' },
});
const production = new AppStage(this, 'Production', {
env: { account: '222222222222', region: 'us-east-1' },
});
pipeline.addStage(staging);
pipeline.addStage(production, {
pre: [
new pipelines.ManualApprovalStep('ApproveProd'),
],
});
Ese ManualApprovalStep es lo que te da el botón "Approve" en la consola antes de que el deploy llegue a producción. Para proyectos críticos, es innegociable.
Tests de integración en el pipeline
pipeline.addStage(staging, {
post: [
new pipelines.ShellStep('IntegrationTests', {
commands: [
'npm run test:integration',
],
envFromCfnOutputs: {
API_URL: staging.apiUrl,
},
}),
],
});
Esto corre después del deploy a staging y antes de que el pipeline avance a producción. Si los tests fallan, el pipeline se detiene.
Lo que aprendí
- No uses una cuenta sola para todo. Separa cuentas por ambiente. CDK Pipelines lo maneja bien.
- Guarda secretos en Secrets Manager. Nunca hardcodees nada en el pipeline.
- Haz que el pipeline falle rápido. Pon los tests unitarios antes del build si puedes.
Cierre
CDK Pipelines no es la opción más liviana para CI/CD, pero si ya estás comprometido con CDK para infraestructura, tener el pipeline en el mismo código es coherente y mantenible.
Top comments (0)