CDK 응용 프로그램에 대한 CI/CD 파이프라인 생성
계정 설정
AWS 조직을 사용하여 세 개의 AWS 계정을 만들었습니다.
우리는 프랑크푸르트와 베를린 지역에 환경을 배치할 것이다.
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개의 클라우드 정보 스택을 구축했습니다.
다음은 뭐예요?
다음 단계는 수동 승인 조작을 추가하여 인원 파이프가 한 단계에서 다음 단계로 들어가야 하는지 묻거나 통합 테스트를 추가하여 다른 환경에 들어가기 전에 자동으로 테스트 배치하는 단계이다.곧 발표될 블로그 글과 9월 30일 CDK일 강연에서 이 점을 소개하겠습니다.
Reference
이 문제에 관하여(CDK 응용 프로그램에 대한 CI/CD 파이프라인 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-heroes/create-a-ci-cd-pipeline-for-your-cdk-app-3c2p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)