CDK 응용 프로그램에 대한 CI/CD 파이프라인 생성

8067 단어 awscdkaws
이전 글에서, 우리는 기본적인 서버 없는 응용 프로그램을 만들었는데, 이 응용 프로그램은prod 환경에 배치되었다.본고에서 저는 코드가 생산에 들어가기 전에 진정한 테스트 환경을 가질 수 있도록 CDK 응용 프로그램을 여러 AWS 계정과 지역의 여러 단계에 배치하는 방법을 보여 드리겠습니다.

계정 설정



AWS 조직을 사용하여 세 개의 AWS 계정을 만들었습니다.
  • 이 계정 로드 파이프
  • 이 계정은 개발 단계
  • 를 포함한다
  • 이 계정은prod단계를 포함한다
  • 이 블로그에서 우리는 이 계정들을'CI/CD'라고 부른다. 계정 id는 111111,'Serverless Dev', id는 222222, 그리고'Serverless Prod', id는 333333이다.
    우리는 프랑크푸르트와 베를린 지역에 환경을 배치할 것이다.

    CDK 부트


    CDK 파이프라인이 작동하기 위해서는 배포할 모든 계정/영역 쌍을 안내해야 합니다.그 밖에 우리는 새로운 가이드 스타일을 사용하여 가이드를 해야 한다.
    이를 위해 각 계정에 로그인하여 다음 명령을 실행합니다.
    # In CI/CD account
    CDK_NEW_BOOTSTRAP=1 cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' aws://111111111111/eu-central-1
    CDK_NEW_BOOTSTRAP=1 cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' aws://111111111111/eu-west-1
    
    # In Dev account
    CDK_NEW_BOOTSTRAP=1 cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --trust 111111111111 aws://222222222222/eu-central-1
    CDK_NEW_BOOTSTRAP=1 cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --trust 111111111111 aws://222222222222/eu-west-1
    
    # In Prod account
    CDK_NEW_BOOTSTRAP=1 cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --trust 111111111111 aws://333333333333/eu-central-1
    CDK_NEW_BOOTSTRAP=1 cdk bootstrap --cloudformation-execution-policies 'arn:aws:iam::aws:policy/AdministratorAccess' --trust 111111111111 aws://333333333333/eu-west-1
    
    보시다시피 저희는 모든 계정에서 이 두 구역을 안내하고 있습니다. 작업량 계정에 대해서는 CI/CD 계정과 신뢰 관계를 맺어 크로스 계정 배치를 허용하고 있습니다.CDK 부트는 CI/CD 계정의 파이프라인에 의해 배포 역할을 생성합니다.우리가 관리 정책을 추가할 때, 모든 이 역할들은 완전한 관리 권한을 가지게 될 것이다.
    내 AWS 조직에 대해 나는 계정을 유도하기 위해 작은 Python 조수 스크립트를 만들었다.너는 이곳에서 그것을 찾을 수 있다https://gist.github.com/hoegertn/390f80857f745f3487ecbf2ffbef137b

    파이프 추가


    CDK 응용 프로그램에서 변경 사항이 필요합니다.우선, CDK 파이프를 만들고 서버 응용 프로그램이 없는 파이프에 단계를 추가해야 합니다.나는 GitHub를 나의 환매 위치로 사용할 것이다. 따라서 우리는 개인 방문 영패가 필요하다. 우리는 그것을 Secrets Manager에서'GitHub'라는 새로운 비밀에 저장할 것이다.
    비밀을 저장하는 것을 잊어버리면 나중에 파이프를 만들 때 이상한 내부 고장 오류가 발생합니다.
    CDK 파이핑 라이브러리를 설치하려면 npm install --save-exact @aws-cdk/pipelines 를 사용합니다.
    현재 우리는 bin 폴더에서 응용 프로그램을 수정해야 합니다.예전에는 그랬어요.
    #!/usr/bin/env node
    import 'source-map-support/register';
    import * as cdk from '@aws-cdk/core';
    import { ServerlessDemoStack } from '../lib/serverless-demo-stack';
    
    const app = new cdk.App();
    new ServerlessDemoStack(app, 'cdk-serverless-demo', {
      env: {account: 'XXXX', region: 'eu-central-1'},
    });
    
    우선 파이프에 새 스택을 만들고 GitHub repo와 secret을 참조합니다.
    class PipelineStack extends cdk.Stack {
      constructor(scope: cdk.Construct, id: string, props: cdk.StageProps) {
        super(scope, id, props);
    
        // Create CodePipeline artifact to hold source code from repo
        const sourceArtifact = new codepipeline.Artifact();
        // Create CodePipeline artifact to hold synthesized cloud assembly
        const cloudAssemblyArtifact = new codepipeline.Artifact();
    
        // Create the CDK pipeline
        const pipeline = new pipelines.CdkPipeline(this, 'Pipeline', {
          pipelineName: 'ServerlessPipelineDemo',
          cloudAssemblyArtifact,
    
          // Checkout source from GitHub
          sourceAction: new codepipeline_actions.GitHubSourceAction({
            actionName: 'Source',
            owner: 'taimos',
            repo: 'cdk-serverless-demo-pipeline',
            branch: 'main',
            oauthToken: cdk.SecretValue.secretsManager('GitHub'),
            output: sourceArtifact,
          }),
          // For synthesize we use the default NPM synth
          synthAction: pipelines.SimpleSynthAction.standardNpmSynth({
            sourceArtifact,
            cloudAssemblyArtifact,
            // We override the default install command to prepare our lambda too
            installCommand: 'npm ci && npm ci --prefix lambda',
            // As we may need Docker we create a privileged container
            environment: {
              privileged: true,
            },
          }),
        });
      }
    }
    
    이제 CDK 응용 프로그램에서 응용 프로그램 스택을 삭제하고 파이프로 교체합니다. 이것은 응용 프로그램의 유일한 스택이기 때문입니다.그리고 합성 단계에서 우리의 단계를 만들 것입니다.
    const app = new cdk.App();
    new PipelineStack(app, 'ServerlessPipelineDemo', {
      env: {account: '111111111111', region: 'eu-central-1'}
    });
    

    파이프의 배치


    우리는 지금 코드를 저장소에 제출하고 원본 코드로 보내야 한다.나로서는 그것을 GitHub로 밀었다.이제 CI/CD 계정에 로그인하여 수동으로 cdk deploy ServerlessPipelineDemo 한 번 실행하여 파이프를 설정합니다.모든 추가 업데이트는 저장소를 통해 이루어집니다.
    CodePipeline이 즉시 첫 번째 실행을 시작하고 반품이 시작되지 않으면 실패하므로 첫 번째 배포 전에 푸시해야 합니다.

    응용 프로그램 단계 추가


    서버 없는 응용 프로그램에 대해, 우리는 현재 확장 스테이지 클래스의 새로운 클래스를 만들어서 스테이지를 정의합니다.
    class AppStage extends cdk.Stage {
      constructor(scope: cdk.Construct, id: string, props: cdk.StageProps) {
        super(scope, id, props);
        new ServerlessDemoStack(this, 'cdk-serverless-demo');
      }
    }
    
    이제 파이핑에서 이 단계 정의를 사용하여 AWS 계정과 영역에 환경을 추가할 수 있습니다.따라서 파이프 스택에서 파이프를 정의한 후에 다음을 추가했습니다.
    pipeline.addApplicationStage(new AppStage(this, 'app-dev-fra', { env: { account: '222222222222', region: 'eu-central-1' } }));
    pipeline.addApplicationStage(new AppStage(this, 'app-dev-dub', { env: { account: '222222222222', region: 'eu-west-1' } }));
    pipeline.addApplicationStage(new AppStage(this, 'app-prod-fra', { env: { account: '333333333333', region: 'eu-central-1' } }));
    pipeline.addApplicationStage(new AppStage(this, 'app-prod-dub', { env: { account: '333333333333', region: 'eu-west-1' } }));
    
    우리는 현재 이러한 변경 사항을 제출하고 추진할 수 있으며, 파이프는 이 제출을 받아들여 새로운 집행을 시작할 것이다.UpdatePiline 단계에 도달하면 변이하여 파이프를 다시 시작하고 자산, 배치 등에 추가 단계를 추가합니다.

    보시다시피 파이프는 서버 없는 응용 프로그램의 네 가지 환경을 두 개의 다른 계정과 두 개의 다른 지역에 배치합니다.총 6개의 클라우드 정보 스택을 구축했습니다.
  • CI/CD 계정
  • eu-central-1: ServerlessPipelineDemo- 파이프 스택
  • eu-west-1: Serverless PipelineDemo-support-eu-west-1- 자산통 복제용 파이프 지원 스택
  • 개발계좌
  • eu-central-1: 응용 프로그램 개발fracdk 서버 없음 프레젠테이션-프랑크푸르트 개발 단계
  • eu-west-1: 응용 프로그램 개발dubcdk 서버 없음 프레젠테이션-베를린 개발 단계
  • 제품 계정
  • eu-central-1:approdfracdk 서버 없음 프레젠테이션-프랑크푸르트의prod단계
  • eu-west-1:approdubcdk 서버 없음 프레젠테이션-베를린의prod단계
  • 각 단계의 URL을 얻기 위해 배포된 CloudFormation 출력을 검토했습니다.작업을 수행하거나 대상 계정의 CloudFormation 콘솔을 사용하여 액세스할 수 있습니다.

    다음은 뭐예요?


    다음 단계는 수동 승인 조작을 추가하여 인원 파이프가 한 단계에서 다음 단계로 들어가야 하는지 묻거나 통합 테스트를 추가하여 다른 환경에 들어가기 전에 자동으로 테스트 배치하는 단계이다.곧 발표될 블로그 글과 9월 30일 CDK일 강연에서 이 점을 소개하겠습니다.

    좋은 웹페이지 즐겨찾기