기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CDK를 사용하여 마이크로서비스용 CI/CD 파이프라인 및 Amazon ECS 클러스터 자동으로 구축
작성자: Varsha Raju(AWS)
환경: PoC 또는 파일럿 | 기술: DevOps; 컨테이너 및 마이크로서비스; 현대화; 인프라 | AWS 서비스: AWS CodeBuild, AWS CodeCommit, AWS CodePipeline, 아마존 ECS, AWS CDK |
요약
이 패턴은 Amazon Elastic Container Service(Amazon ECS)에서 마이크로서비스를 구축하고 배포하기 위한 지속적 통합 및 지속적 전송(CI/CD) 파이프라인과 기본 인프라를 자동으로 생성하는 방법을 설명합니다. proof-of-concept CI/CD 파이프라인을 설정하여 조직에 CI/CD, 마이크로서비스 등의 이점을 보여주려는 경우 이 접근 방식을 사용할 수 있습니다. DevOps 또한 이 접근 방식을 사용하여 초기 CI/CD 파이프라인을 만든 다음 조직의 요구 사항에 따라 사용자 지정하거나 변경할 수 있습니다.
이 패턴의 접근 방식은 각각 Virtual Private Cloud(VPC)와 두 개의 가용 영역에서 실행되도록 구성된 Amazon ECS 클러스터를 포함하는 프로덕션 환경과 비프로덕션 환경을 생성합니다. 이러한 환경은 모든 마이크로서비스에서 공유되며 그런 다음 각 마이크로서비스에 대한 CI/CD 파이프라인을 생성합니다. 이러한 CI/CD 파이프라인은 CodeCommit AWS의 소스 리포지토리에서 변경 내용을 가져와 변경 사항을 자동으로 구축한 다음 프로덕션 및 비프로덕션 환경에 배포합니다. 파이프라인이 모든 단계를 성공적으로 완료하면 URL을 사용하여 프로덕션 및 비프로덕션 환경에서 마이크로서비스에 액세스할 수 있습니다.
사전 조건 및 제한 사항
사전 조건
활성 Amazon Web Services(AWS) 계정
starter-code.zip
파일을 포함하는 기존 Amazon Simple Storage Service(S3) 버킷(첨부)계정에 설치 및 구성된 AWS Cloud Development Kit(AWS CDK) 이에 대한 자세한 내용은 AWS CDK 설명서의 AWS CDK 시작 섹션을 참조하십시오.
Python 3 및
pip
, 설치 및 구성됨. 자세한 내용은 Python 설명서를 참조하십시오. AWS CDK, AWS CodeBuild, CodePipeline AWS, CodeCommit 아마존 엘라스틱 컨테이너 레지스트리 (Amazon ECR), 아마존 ECS 및 AWS Fargate에 익숙해야 합니다.
Docker에 대한 숙지.
CI/CD에 대한 이해 및 DevOps
제한 사항
일반 AWS 계정 한도가 적용됩니다. 자세한 내용은 AWS General Reference 설명서의 AWS service quotas을 참조하십시오.
제품 버전
이 코드는 Node.js 버전 16.13.0 및 AWS CDK 버전 1.132.0을 사용하여 테스트되었습니다.
아키텍처
이 다이어그램은 다음 워크플로를 보여줍니다.
애플리케이션 개발자가 리포지토리에 코드를 커밋합니다. CodeCommit
파이프라인이 시작됩니다.
CodeBuild Docker 이미지를 빌드하여 Amazon ECR 리포지토리로 푸시합니다.
CodePipeline 비프로덕션 Amazon ECS 클러스터의 기존 Fargate 서비스에 새 이미지를 배포합니다.
Amazon ECS는 Amazon ECR 리포지토리의 이미지를 비프로덕션 Fargate 서비스로 가져옵니다.
테스트는 비프로덕션 URL을 사용하여 수행됩니다.
릴리스 관리자가 프로덕션 배포를 승인합니다.
CodePipeline 새 이미지를 프로덕션 Amazon ECS 클러스터의 기존 Fargate 서비스에 배포합니다.
Amazon ECS는 Amazon ECR 리포지토리의 이미지를 프로덕션 Fargate 서비스로 가져옵니다.
프로덕션 사용자는 프로덕션 URL을 사용하여 기능에 액세스합니다.
기술 스택
AWS CDK
CodeBuild
CodeCommit
CodePipeline
Amazon ECR
Amazon ECS
Amazon VPC
자동화 및 규모 조정
이 패턴의 접근 방식을 사용하여 공유 AWS CloudFormation 스택에 배포된 마이크로서비스를 위한 파이프라인을 생성할 수 있습니다. 자동화를 통해 각 VPC에 Amazon ECS 클러스터를 한 개 이상 생성할 수 있으며 공유 Amazon ECS 클러스터에 배포된 마이크로서비스를 위한 파이프라인을 생성할 수도 있습니다. 하지만 이를 위해서는 새 리소스 정보를 파이프라인 스택에 대한 입력으로 제공해야 합니다.
도구
AWS CDK — AWS Cloud Development Kit (AWS CDK) 는 코드로 클라우드 인프라를 정의하고 AWS를 통해 프로비저닝하기 위한 소프트웨어 개발 프레임워크입니다. CloudFormation
AWS CodeBuild — CodeBuild AWS는 클라우드의 완전 관리형 빌드 서비스입니다. CodeBuild 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성합니다.
AWS CodeCommit — CodeCommit AWS는 AWS 클라우드에서 Git 리포지토리를 비공개로 저장하고 관리할 수 있는 버전 제어 서비스입니다. CodeCommit 자체 소스 제어 시스템을 관리하거나 인프라 확장에 대해 걱정할 필요가 없습니다.
AWS CodePipeline — CodePipeline AWS는 소프트웨어 릴리스에 필요한 단계를 모델링, 시각화 및 자동화하는 데 사용할 수 있는 지속적 전송 서비스입니다. 소프트웨어 출시 프로세스의 여러 단계를 신속하게 모델링하고 구성할 수 있습니다. CodePipeline 소프트웨어 변경 사항을 지속적으로 릴리스하는 데 필요한 단계를 자동화합니다.
Amazon ECS - Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하기 위해 사용하는 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다. AWS Fargate에서 관리하는 서버리스 인프라에서 작업 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해, 관리하는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 클러스터에서 작업과 서비스를 실행할 수 있습니다.
Docker
- Docker를 사용하면 개발자가 모든 애플리케이션을 가볍고 휴대가 간편하며 자급자족할 수 있는 컨테이너로 포장, 배송 및 실행할 수 있습니다.
코드
이 패턴의 코드는 cicdstarter.zip
및 starter-code.zip
파일(첨부)에서 확인할 수 있습니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
AWS CDK의 작업 디렉터리를 설정합니다. |
| AWS DevOps, 클라우드 인프라 |
작업 | 설명 | 필요한 기술 |
---|---|---|
공유 인프라를 만드십시오. |
| AWS DevOps, 클라우드 인프라 |
AWS CloudFormation 스택을 모니터링합니다. |
| AWS DevOps, 클라우드 인프라 |
AWS CloudFormation 스택을 테스트합니다. |
중요: 두 VPC의 ID와 두 VPC 모두의 기본 보안 그룹에 대한 보안 그룹 ID를 모두 기록해야 합니다. | AWS DevOps, 클라우드 인프라 |
작업 | 설명 | 필요한 기술 |
---|---|---|
마이크로서비스를 위한 인프라를 만드십시오. |
참고: 디렉터리의 | AWS DevOps, 클라우드 인프라 |
AWS CloudFormation 스택을 모니터링합니다. | AWS CloudFormation 콘솔을 열고 | AWS DevOps, 클라우드 인프라 |
AWS CloudFormation 스택을 테스트합니다. |
| |
파이프라인을 사용합니다. |
| AWS DevOps, 클라우드 인프라 |
각 마이크로서비스에 대해 이 에픽을 반복하십시오. | 이 에픽의 작업을 반복하여 각 마이크로서비스에 대한 CI/CD 파이프라인을 생성하십시오. | AWS DevOps, 클라우드 인프라 |
관련 리소스
추가 정보
cdk synth
명령
cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
cdk deploy
명령
cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>
첨부
이 문서와 관련된 추가 콘텐츠에 액세스하려면 attachment.zip 파일의 압축을 풉니다.