es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agregando una etapa de aprobación manual en los CDK CodePipelines.

He estado trabajando con AWS CDK y creo que es una excelente manera de trabajar con AWS. Recientemente he tenido un problema que no he podido resolver. He revisado la documentación y los recursos, pero ninguno ha explicado cómo hacerlo en CDK. Tengo dos tuberías de código y cada tubería implementa en preparación o producción. Ahora quiero agregar una etapa de aprobación manual antes de que el código se implemente en producción. Mostraré mi código simple a continuación como referencia:

“`import * as cdk from ‘@aws-cdk/core’;
import { AppsPluginsCdkStack } from './apps-plugins-services/stack';
import {
CodePipeline,
ShellStep,
CodePipelineSource
} from '@aws-cdk/pipelines';

class ApplicationStage extends cdk.Stage {
constructor(scope: cdk.Construct, id: string) {
super(scope, id);
new CdkStack(this, 'cdkStack');
}
}

class ProductionPipelineStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);

//Cree la tubería de producción de CDK
const prodPipeline = new CodePipeline(this, 'ProductionPipeline', {
pipelineName: 'ProdPipeline',
synth: new ShellStep('ProdSynth', {
// Use una conexión creada usando la consola de AWS para autenticarse en GitHub
input: CodePipelineSource.connection(
'fahigm/cdk-repo',
'desarrollar',
{
connectionArn:
'AWS-CONNECTION-ARN' // Creada usando la consola de AWS
}
),
commands: ['npm ci', 'npm run build', 'npx cdk synth']
})
});

prodPipeline.addStage(new ApplicationStage(this, 'Produccion'));
}
}

class StagingPipelineStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
super(scope, id, props);
//Cree la tubería de preparación de CDK
const stagePipeline = new CodePipeline(this, 'StagingPipeline', {
pipelineName: 'StagePipeline',
synth: new ShellStep('StageSynth', {
// Use una conexión creada usando la consola de AWS para autenticarse en GitHub
input: CodePipelineSource.connection(
'fahigm/cdk-repo',
'maestro',
{
connectionArn:
'AWS-CONNECTION-ARN' // Creada usando la consola de AWS
}
),
commands: ['npm ci', 'npm run build', 'npx cdk synth']
})
});
stagePipeline.addStage(new ApplicationStage(this, 'Preparacion'));
}
}

const app = new cdk.App();

new ProductionPipelineStack(app, 'ProduccionCDKPipeline', {
env: { account: 'CUENTA', region: 'REGION' }
});

new StagingPipelineStack(app, 'PreparacionCDKPipeline', {
env: { account: 'CUENTA', region: 'REGION' }
});

app.synth();“`

Ahora no sé qué hacer a continuación. La documentación solo habla sobre cómo hacerlo desde la consola, pero quiero agregarlo en el código. ¡Realmente apreciaría cualquier ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar una etapa de aprobación manual antes de implementar en producción en AWS CDK, puede utilizar la clase ManualApprovalStep del paquete @aws-cdk/pipelines. Esta clase le permite agregar una acción de aprobación manual a su CodePipeline.

    Aquí está el código actualizado con la etapa de aprobación manual agregada:

    import * as cdk from '@aws-cdk/core';
    import { AppsPluginsCdkStack } from './apps-plugins-services/stack';
    import {
      CodePipeline,
      ShellStep,
      CodePipelineSource,
      ManualApprovalStep // importar la clase ManualApprovalStep
    } from '@aws-cdk/pipelines';
    
    class ApplicationStage extends cdk.Stage {
      constructor(scope: cdk.Construct, id: string) {
        super(scope, id);
        new CdkStack(this, 'cdkStack');
      }
    }
    
    class ProductionPipelineStack extends cdk.Stack {
      constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
        super(scope, id, props);
    
        // Crear el pipeline de producción de CDK
        const prodPipeline = new CodePipeline(this, 'ProductionPipeline', {
          pipelineName: 'ProdPipeline',
          synth: new ShellStep('ProdSynth', {
            // Use una conexión creada utilizando la consola de AWS para autenticarse con GitHub
            input: CodePipelineSource.connection(
              'fahigm/cdk-repo',
              'develop',
              {
                connectionArn:
                  'AWS-CONNECTION-ARN' // Creada utilizando la consola de AWS
              }
            ),
            commands: ['npm ci', 'npm run build', 'npx cdk synth']
          })
        });
    
        prodPipeline.addStage(new ApplicationStage(this, 'Production'));
    
        // Agregar etapa de aprobación manual
        prodPipeline.addStage({
          stageName: 'ManualApproval',
          actions: [new ManualApprovalStep('Approval')]
        });
      }
    }
    
    class StagingPipelineStack extends cdk.Stack {
      constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
        super(scope, id, props);
        // Crear el pipeline de preparación de CDK
        const stagePipeline = new CodePipeline(this, 'StagingPipeline', {
          pipelineName: 'StagePipeline',
          synth: new ShellStep('StageSynth', {
            // Use una conexión creada utilizando la consola de AWS para autenticarse con GitHub
            input: CodePipelineSource.connection(
              'fahigm/cdk-repo',
              'master',
              {
                connectionArn:
                  'AWS-CONNECTION-ARN' // Creada utilizando la consola de AWS
              }
            ),
            commands: ['npm ci', 'npm run build', 'npx cdk synth']
          })
        });
    
        stagePipeline.addStage(new ApplicationStage(this, 'Staging'));
      }
    }
    //
    const app = new cdk.App();
    
    new ProductionPipelineStack(app, 'ProductionCDKPipeline', {
      env: { account: 'ACCOUNT', region: 'REGION' }
    });
    
    new StagingPipelineStack(app, 'StagingCDKPipeline', {
      env: { account: 'ACCOUNT', region: 'REGION' }
    });
    
    app.synth();
    

    En este código actualizado, se importa la clase ManualApprovalStep de @aws-cdk/pipelines. Luego, en la clase ProductionPipelineStack, se agrega una nueva etapa llamada “ManualApproval” al pipeline usando el método addStage. Como acción en esta etapa, se crea un nuevo objeto ManualApprovalStep con el nombre “Approval”.

    Ahora, cuando el pipeline llega a la etapa de “ManualApproval”, se detendrá y esperará la aprobación manual antes de pasar a la siguiente etapa (es decir, implementar en producción).

    ¡Espero que esto ayude!

Comments are closed.