DevOps 관행 및 AWS Cloud9를 사용하여 마이크로서비스와 느슨하게 연결된 아키텍처 구축 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

DevOps 관행 및 AWS Cloud9를 사용하여 마이크로서비스와 느슨하게 연결된 아키텍처 구축

작성자: Alexandre Nardi(AWS)

환경: PoC 또는 파일럿

기술: DevOps, 서버리스, 웹 및 모바일 앱, 데이터베이스

AWS 서비스: AWS Cloud9, AWS CloudFormation, AWS CodePipeline, Amazon DynamoDB , AWS CodeCommit

요약

알림: AWS Cloud9 는 더 이상 신규 고객에게 제공되지 않습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS Cloud9 수 있습니다. 자세히 알아보기

알림: AWS CodeCommit 는 더 이상 신규 고객에게 제공되지 않습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS CodeCommit 수 있습니다. 자세히 알아보기

이 패턴은 Amazon Web Services()에서 DevOps 사례를 테스트하기 시작하는 개발자와 개발 리더를 위해 서버리스 아키텍처에서 일반적인 웹 애플리케이션을 개발하는 방법을 보여줍니다AWS. 책을 검색하고 구매할 수 있는 스토어프론트 및 백엔드를 생성하는 샘플 애플리케이션을 구축하고 독립적으로 개발할 수 있는 마이크로서비스를 제공합니다. 이 패턴은 AWS Cloud9를 개발 환경으로, Amazon DynamoDB 데이터베이스를 데이터 스토어로, AWS CodePipeline 및 와 같은 AWS 서비스를 사용하여 CI/CD(지속적 통합 및 지속적 배포) 기능을 AWS CodeBuild 제공합니다.

이 패턴은 다음과 같은 개발 활동을 안내합니다. 

  • 표준 AWS Cloud9 개발 환경 생성

  • AWS CloudFormation 템플릿을 사용하여 웹 애플리케이션 및 서적용 마이크로서비스 생성

  • AWS Cloud9를 사용하여 프런트엔드 수정, 변경 사항 커밋 및 변경 사항 테스트

  • 마이크로서비스에 대한 CI/CD 파이프라인 생성 및 테스트

  • 유닛 테스트 자동화

이 패턴의 코드는 AWS DevOps End-to-End 워크숍 리포지토리의 GitHub에 나와 있습니다.

사전 조건 및 제한 사항

사전 조건 

중요: AWS 계정에 이 데모 애플리케이션을 빌드하면 AWS 리소스가 생성되고 사용됩니다. 애플리케이션을 생성하고 실행하는 데 사용되는 AWS 서비스 및 리소스 비용은 사용자가 부담합니다. 작업을 마친 후에는 계속 요금이 부과되지 않도록 모든 리소스를 삭제해야 합니다. 지침은 에픽 섹션을 참조하십시오. 

제한 사항

이 안내는 데모 및 개발 목적으로만 제공됩니다. 프로덕션 환경에서 사용하려면 AWS Identity and Access Management(IAM) 설명서의 보안 모범 사례를 참조하고 IAM 역할, Amazon DynamoDB 및 기타 사용된 서비스를 필요한 대로 변경합니다. 웹 애플리케이션은 AWS Bookstore 데모 앱 에서 파생됩니다. 추가 고려 사항은 README 파일의 알려진 제한 섹션을 참조하세요.

아키텍처

서점 애플리케이션의 아키텍처는 AWS 서점 데모 앱용 README 파일의 아키텍처 섹션에 설명되어 있습니다. 

배포 관점에서 Bookstore 데모 앱은 단일 CloudFormation 템플릿을 사용하여 모든 서비스와 객체를 하나의 스택에 배포합니다. 이 패턴은 특정 개발자 또는 팀이 특정 제품(Books)에서 작업하고 애플리케이션의 나머지 부분과 독립적으로 업데이트할 수 있는 방법을 보여주기 위해 몇 가지 변경 사항을 적용했습니다. 따라서 이 패턴의 코드는 Books 마이크로서비스의 AWS Lambda 함수와 관련 객체를 두 번째 CloudFormation 템플릿으로 구분하여 Books 스택을 생성합니다. 따라서 CI/CD 관행을 사용하여 마이크로서비스가 업데이트되는 것을 확인할 수 있습니다. 다음 다이어그램에서 점선 테두리는 Books 마이크로서비스를 나타냅니다.

DevOps 관행을 사용하는 느슨하게 연결된 아키텍처에서 마이크로서비스를 책으로 만듭니다.

도구

도구

  • JavaScript 테스트를 위한 Jest 프레임워크

  • Python 3.9

코드

이 패턴의 소스 코드와 템플릿은 AWS DevOps End-to-End 워크숍 리포지토리 GitHub의 에서 사용할 수 있습니다. 에픽 섹션의 단계를 따르기 전에 리포지토리의 모든 파일을 컴퓨터로 다운로드하십시오.

참고: 에픽 섹션에서는 프로세스에 대한 일반적인 정보를 제공하기 위해 이 안내를 위한 고급 단계를 제공합니다. 각 단계를 완료하려면 자세한 지침은 AWS DevOps End-to-End 워크숍 리포지토리의 README 파일을 참조하세요.

AWS DevOps End-to-End 워크숍 리포지토리는 AWS Bookstore 데모 앱 리포지토리를 확장하고 수정된 버전의 AWS Cloud9 부트스트래핑 코드를 사용하여 AWS Cloud9 를 생성합니다IDE.

모범 사례

Bookstore 애플리케이션을 사용하는 방법은 간단합니다. 권장되는 몇 가지 모범 사례는 다음과 같습니다.

  • 애플리케이션을 설치할 때 원하는 프로젝트 이름을 사용하거나 편의를 위해 기본 이름(demobookstore)을 사용할 수 있습니다.

  • 애플리케이션을 가동하고 실행한 후 하루 더 테스트를 계속하려면 Amazon Neptune 데이터베이스를 종료하는 것이 좋습니다. 데이터베이스 인스턴스로 인해 추가 요금이 발생할 수 있기 때문입니다. 하지만 7일 후에는 데이터베이스가 자동으로 시작된다는 점에 유의하십시오.

  • 코드 세부 정보는 AWS Bookstore 데모 앱 리포지토리 설명서를 참조하세요. 각 마이크로서비스와 테이블에 대해 설명합니다.

  • 추가 모범 사례는 AWS DevOps End-to-End 워크숍 리포지토리에서 README 파일의 시간이 있는 경우 몇 가지 문제... 섹션을 참조하세요. 이 정보를 검토하여 보안을 위한 추가 기능을 자세히 살펴보고 디커플링 서비스를 연습해 보는 것이 좋습니다.

에픽

작업설명필요한 기술

에서 소스 코드를 다운로드합니다 GitHub.

이 패턴의 소스 코드와 템플릿은 AWS DevOps End-to-End 워크숍 리포지토리 GitHub의 에서 사용할 수 있습니다. 에픽 섹션의 다음 단계를 따르기 전에 리포지토리의 모든 파일을 컴퓨터로 다운로드하십시오.

참고: 에픽 섹션에서는 프로세스에 대한 일반적인 정보를 제공하기 위해 이 안내를 위한 고급 단계를 제공합니다. 각 단계를 완료하려면 자세한 지침은 AWS DevOps End-to-End 워크숍 리포지토리의 README 파일을 참조하세요.

AWS DevOps End-to-End 워크숍 리포지토리는 AWS Bookstore 데모 앱 리포지토리를 확장하고 수정된 버전의 AWS Cloud9 부트스트래핑 코드를 사용하여 AWS Cloud9 를 생성합니다IDE.

앱 개발자
작업설명필요한 기술

Bookstore 앱을 위한 프론트엔드 및 Lambda 함수를 생성합니다.

  1. CloudFormation 콘솔 에 로그인하고 DemoBookstoreMainTemplate.yml 템플릿을 배포하여 DemoBookStoreStack 스택을 생성합니다. 그러면 Books 마이크로서비스 외부에 있는 프런트엔드 및 Lambda 함수가 생성됩니다.

  2. 스택의 출력 탭에서 WebApplication 레이블 URL 아래에 웹 사이트를 기록해 둡니다.

개발자

Books 마이크로서비스를 생성합니다.

CloudFormation 콘솔 에서 DemoBookstoreBooksServiceTemplate.yml 템플릿을 배포하여 DemoBooksServiceStack 스택을 생성합니다.

개발자

애플리케이션을 테스트합니다.

URL DemoBookStoreStack 스택의 웹 사이트를 사용하여 Bookstore 애플리케이션에 액세스합니다.

개발자
작업설명필요한 기술

AWS Cloud9를 생성합니다IDE.

CloudFormation 콘솔 에서 C9EnvironmentTemplate.yml 템플릿을 배포하여 AWS Cloud9 환경을 생성합니다.

개발자, 개발자 책임자

CodeCommit 리포지토리를 생성합니다.

  1. AWS CodeCommit 콘솔 에 로그인하고 프런트엔드 애플리케이션의 코드가 포함된 demobookstore-WebAssets리포지토리가 있는지 확인합니다.

  2. demobookstore-BooksService라는 Books 마이크로서비스를 위한 리포지토리를 생성하십시오.

  3. git clone 명령을 사용하여 AWS Cloud9demobookstore-WebAssets( 및 demobookstore-BooksService)에서 두 리포지토리를 복제합니다.

개발자

프론트엔드에서 코드를 변경하고 파이프라인을 확인합니다.

  1. AWS Cloud9를 사용하여 웹 페이지에서 일부 코드를 변경합니다. 그러면 demobookstore-WebAssets 리포지토리가 업데이트됩니다.

  2. AWS CodePipeline 콘솔 에서 demobookstore-Assets-Pipeline이 실행 중인지 확인합니다. 

  3. 브라우저에서 새로 고쳐 웹 애플리케이션을 테스트하십시오(Firefox에서 Ctrl+F5).

개발자
작업설명필요한 기술

빌드 및 서비스 업데이트에 대한 YAML 파일을 추가합니다.

  1. AWS Cloud9에서 buildspec.ymlDemoBookstoreBooksServiceUpdateTemplate.yml 파일을 업로드합니다.

    • buildspec.yml에는 구축 지침이 있으며 자동화된 테스트를 위한 테스트 지침도 포함되어 있습니다. 지금 설명하고 나중에 사용할 예정입니다.

    • DemoBookstoreBooksServiceUpdateTemplate.yml은 파이프라인의 배포 단계에서 사용할 수 있는 DemoBookstoreBooksServiceTemplate.yml의 업데이트된 버전입니다.

  2. 파일을 커밋하고 푸시합니다.

개발자

빌드 파이프라인용 S3 버킷을 생성합니다.

S3 버킷을 만들려면 Amazon S3 설명서에 있는 지침을 따르십시오.

  • 버킷 이름은 전역적으로 고유해야 합니다(예: demobookstore-books-service-pipeline-bucket-<YYYYMMDDHHMM>). 

  • 모든 공개 액세스 차단 확인란의 선택을 취소하고 승인합니다... 확인란을 선택합니다.

개발자

CloudFormation 배포를 위한 역할을 생성하는 IAM 데 사용합니다.

demobookstore-CloudFormation-role 역할을 생성하여 AdministratorAccess 정책을 연결합니다. 다음 에픽에서는 이 역할을 최소 권한으로 재구성할 수 있습니다.

개발자

새 파이프라인을 생성하여 Books 마이크로서비스 구축 및 배포를 자동화합니다.

README 파일 에 설명된 대로 커밋, 빌드 및 배포 단계를 사용하여 파이프라인(예: demobookstore-BooksService-Pipeline )을 생성합니다.

개발자

AWS Cloud9에서 마이크로서비스를 테스트합니다.

ListBooks 함수를 변경하고 파이프라인이 작동하는지 확인합니다.

개발자

ListBooks Lambda 함수에 대한 단위 테스트를 자동화합니다.

AWS Cloud9 에서 빌드가 단위 테스트를 실행하도록 IDE활성화하고 테스트 결과를 확인합니다. 지침은README 파일을 참조하세요.

개발자
작업설명필요한 기술

솔루션을 안전하게 만듭니다.

최소 권한을 갖도록 demobookstore-CloudFormation-role을 구성하고 다른 사용자 역할도 확인합니다.

개발자

CloudFormation 템플릿의 종속성을 제거합니다.

DemoBookstoreMainTemplate.yml 템플릿과 DemoBookstoreBooksServiceTemplate.yml 템플릿 간에 정보를 교환하는 방법은 출력과 가져오기를 기반으로 합니다. 이 두 템플릿 간에 값을 전달하면 종속성이 추가됩니다. 종속성을 제거하려면AWS Systems Manager 파라미터 스토어 사용을 고려하세요.

개발자

Cart 마이크로서비스를 생성합니다.

예를 들어, Books 마이크로서비스를 사용하여 DemoBookstoreMainTemplate.yml 템플릿에서 쇼핑 카트 관련 기능을 제거하고 Cart 마이크로서비스를 생성합니다.

개발자
작업설명필요한 기술

S3 버킷을 삭제합니다.

Amazon S3 콘솔에서 샘플 웹 애플리케이션과 연결된 다음 버킷을 삭제합니다.

  • AWS Bookstore 데모 앱용으로 생성된 버킷 2개. 버킷 이름은 프런트엔드를 생성할 AWS CloudFormation 때 제공한 스택 이름으로 시작합니다. 예: DemoBookStoreStack.

  • 빌드 파이프라인용 버킷 1개. 예: demobookstore-books-service-pipeline-bucket-<YYYYMMDDHHMM>.

개발자

스택을 삭제합니다.

CloudFormation 콘솔 에서 샘플 웹 애플리케이션과 연결된 스택을 삭제합니다.

  • DemoBooksServiceStack

  • DemoBookStoreStack

제거하는 데 90분 이상 걸릴 수 있습니다. 제거에 실패하면 다시 삭제하고 알림을 기반으로 수동 리소스(예: VPC 또는 네트워크 인터페이스)도 삭제합니다.

개발자

IAM 역할을 삭제합니다.

IAM 콘솔 에서 다음 역할을 삭제합니다.

  • demobookstore-Cloudformation-role

  • demobookstore-BooksService-BuildProject-service-role

지침은 step-by-step IAM 설명서를 참조하세요. 

개발자

관련 리소스

추가 정보

자세한 step-by-step 지침은 AWS DevOps End-to-End 워크숍 GitHub 리포지토리의 README 파일을 참조하세요.

2023년 5월 업데이트 정보: 이 패턴은 최신 버전의 Node 및 Python을 사용하도록 업데이트되었습니다. 소스 코드의 많은 패키지를 업데이트했으며 Glyphicon은 더 이상 무료가 아니기 때문에 삭제했습니다. 또한 AWS Bookstore 데모 앱 리포지토리의 모든 종속성을 제거했으므로 이제 두 리포지토리가 독립적으로 진화할 수 있습니다.