AWS CDK를 사용하여 여러 AWS 지역, 계정 및 DevOps OU에서 Amazon Guru를 활성화하여 운영 성능을 개선하십시오. - AWS 권장 가이드

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

AWS CDK를 사용하여 여러 AWS 지역, 계정 및 DevOps OU에서 Amazon Guru를 활성화하여 운영 성능을 개선하십시오.

작성자: Dr. Rahul Sharad Gaikwad(AWS)

코드 리포지토리: Amazon DevOps Guru 샘플 코드

환경: PoC 또는 파일럿

기술: 관리 및 거버넌스 CloudNative DevOps, 운영, 보안, ID, 규정 준수, 서버리스

AWS 서비스: 아마존 API 게이트웨이, AWS CDK, 아마존 DevOps 구루, 아마존 DynamoDB, AWS Organizations

요약

이 패턴은 에서 AWS 클라우드 개발 키트 (AWS CDK) 를 사용하여 여러 Amazon Web Services (AWS) 지역, 계정 및 조직 단위 ( DevOps OU) 에서 Amazon Guru 서비스를 활성화하는 단계를 보여줍니다. TypeScript 각 계정에 로그인하여 계정별로 DevOps Guru를 활성화하는 대신, AWS CDK 스택을 사용하여 관리자 (기본) AWS CloudFormation StackSets 계정에서 AWS를 배포하여 여러 계정에서 Amazon DevOps Guru를 활성화할 수 있습니다.

Amazon DevOps Guru는 애플리케이션의 가용성을 개선하고 운영 문제를 더 빠르게 해결하는 데 도움이 되는 인공 지능 운영 (AIOps) 기능을 제공합니다. DevOps Guru는 ML 전문 지식 없이도 기계 학습 (ML) 기반 권장 사항을 적용하여 수동 작업을 줄여줍니다. DevOps Guru는 리소스와 운영 데이터를 분석합니다. 이상 징후가 감지되면 문제 해결에 도움이 되는 지표, 이벤트, 권장 사항을 제공합니다.

이 패턴은 Amazon DevOps Guru를 활성화하기 위한 세 가지 배포 옵션을 설명합니다.

  • 여러 계정과 리전에 있는 모든 스택 리소스용

  • OU에 있는 모든 스택 리소스용

  • 여러 계정과 리전에 있는 특정 스택 리소스용

사전 조건 및 제한 사항

사전 조건

‬제품 버전‭

  • AWS CDK Toolkit 버전 1.107.0 이상

  • npm 버전 7.9.0 이상

  • Node.js 버전 15.3.0 이상

아키텍처

기술

이 패턴의 아키텍처에는 다음과 같은 서비스가 포함됩니다.

AWS CDK 스택

패턴은 다음과 같은 AWS CDK 스택을 사용합니다. 

  • CdkStackSetAdminRole - 관리자와 대상 계정 간의 신뢰 관계를 설정하기 위해 AWS IAM(신원 및 액세스 관리) 관리자 역할을 생성

  • CdkStackSetExecRole - 관리자 계정을 신뢰하는 IAM 역할을 생성

  • CdkDevopsGuruStackMultiAccReg— DevOps Guru가 여러 AWS 지역 및 모든 스택에 대해 계정을 사용할 수 있도록 하고 Amazon Simple Notification Service (Amazon SNS) 알림을 설정할 수 있습니다.

  • CdkDevopsGuruStackMultiAccRegSpecStacks— DevOps Guru가 여러 AWS 지역 및 계정에서 특정 스택을 사용하도록 지원하고 Amazon SNS 알림을 설정할 수 있습니다.

  • CdkDevopsguruStackOrgUnit— DevOps OU 전반에 걸쳐 Guru를 활성화하고 Amazon SNS 알림을 설정할 수 있습니다. 

  • CdkInfrastructureStack— 관리자 계정에 API 게이트웨이, Lambda, DynamoDB와 같은 샘플 서버리스 애플리케이션 구성 요소를 배포하여 결함 삽입 및 인사이트 생성

샘플 애플리케이션 아키텍처

다음 다이어그램은 여러 계정과 리전에 배포된 샘플 서버리스 애플리케이션 아키텍처를 보여줍니다. 이 패턴은 관리자 계정을 사용하여 모든 AWS CDK 스택을 배포합니다. 또한 관리자 계정을 DevOps Guru를 설정하는 대상 계정 중 하나로 사용합니다.

  1. DevOps Guru를 활성화하면 먼저 각 리소스의 동작 기준을 정한 다음 제공된 지표에서 운영 데이터를 수집합니다. CloudWatch

  2. 이상 징후가 감지되면 해당 데이터를 의 이벤트와 연관시키고 통찰력을 생성합니다. CloudTrail

  3. 인사이트는 운영자가 원인 리소스를 식별할 수 있도록 규정된 권장 사항과 함께 상호 연관된 이벤트 시퀀스를 제공합니다.

  4. Amazon SNS는 운영자에게 알림 메시지를 보냅니다.

여러 계정 및 지역에 배포된 샘플 서버리스 애플리케이션입니다.

자동화 및 규모 조정

이 패턴으로 제공된 GitHub 리포지토리는 AWS CDK를 코드형 인프라 (IaC) 도구로 사용하여 이 아키텍처에 대한 구성을 생성합니다. AWS CDK를 사용하면 여러 AWS 계정, 지역 및 DevOps OU에서 리소스를 오케스트레이션하고 Guru를 지원할 수 있습니다.

도구

서비스

  • AWS CDK — AWS Cloud Development Kit (AWS CDK) 를 사용하면 지원되는 5가지 프로그래밍 언어 ( TypeScript, JavaScript Python, Java, C #) 중 하나로 클라우드 인프라를 코드로 정의할 수 있습니다.

  • AWS CLI - AWS Command Line Interface(AWS CLI)는 AWS 서비스, 리소스와 상호 작용할 수 있는 일관된 명령줄 인터페이스를 제공하는 통합 도구입니다.

코드

이 패턴의 소스 코드는 Amazon DevOps Guru CDK 샘플 리포지토리에서 확인할 수 있습니다. GitHub AWS CDK 코드가 작성되었습니다. TypeScript 리포지토리를 복제하여 사용하려면 다음 섹션의 지침을 따르세요.

중요: 이 패턴의 일부 사례에는 Unix, Linux, macOS용으로 포맷된 AWS CDK, AWS CLI 명령어 예제가 포함되어 있습니다. Windows에서는 각 줄 끝에 있는 백슬래시(\) 연속 문자를 캐럿(^)으로 바꿉니다.

에픽

작업설명필요한 기술

AWS 네임드 프로필을 구성

다중 계정 환경에서 스택을 배포하려면 다음과 같이 AWS 네임드 프로필을 설정하세요.

관리자 계정의 경우

$aws configure --profile administrator AWS Access Key ID [****]: <your-administrator-access-key-ID> AWS Secret Access Key [****]: <your-administrator-secret-access-key> Default region name [None]: <your-administrator-region> Default output format [None]: json

대상 계정의 경우

$aws configure --profile target AWS Access Key ID [****: <your-target-access-key-ID> AWS Secret Access Key [****]: <your-target-secret-access-key> Default region name [None]: <your-target-region> Default output format [None]: json

자세한 내용은 AWS CLI 설명서에서 네임드 프로파일 사용을 참조하세요.

DevOps 엔지니어

AWS 프로필 구성 확인

(선택 사항) AWS CLI 설명서의 설정 및 보기 구성 설정에 있는 지침에 따라 credentialsconfig 파일에서 AWS 프로필 구성을 확인할 수 있습니다.

DevOps 엔지니어

AWS CDK 버전을 확인합니다.

다음 명령을 실행하여 AWS CDK Toolkit 버전을 확인하세요.

$cdk --version

이 패턴을 사용하려면 버전 1.107.0 이상이 필요합니다. 이전 버전의 AWS CDK를 사용 중이면 AWS CDK 문서에 있는 지침에 따라 업데이트하세요.

DevOps 엔지니어

프로젝트 코드 복제

다음 명령을 사용하여 이 패턴의 GitHub 저장소를 복제합니다.

$git clone https://github.com/aws-samples/amazon-devopsguru-cdk-samples.git
DevOps 엔지니어

패키지 종속성을 설치하고 파일을 컴파일합니다. TypeScript

다음 명령을 실행하여 패키지 종속성을 설치하고 TypeScript 파일을 컴파일합니다.

$cd amazon-devopsguru-cdk-samples $npm install $npm fund

이 명령은 샘플 저장소의 모든 패키지를 설치합니다.

중요: 누락된 패키지와 관련된 오류가 발생하면 다음 명령 중 하나를 사용하세요.

$npm ci

—또는—

$npm install -g @aws-cdk/<package-name>

패키지 이름과 버전 목록은 /amazon-devopsguru-cdk-samples/package.json 파일의 Dependencies 섹션에서 확인할 수 있습니다. 자세한 내용은 npm 설명서에 있는 npm cinpm install을 참조하세요.

DevOps 엔지니어
작업설명필요한 기술

Amazon SNS 알림 이메일 주소를 구성합니다.

Amazon SNS 알림 이메일 주소를 제공하려면 다음 단계를 따르세요.

  1. 파일 /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-stack.ts/amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-org-uni-stack.ts를 편집합니다.

  2. DevOpsGuruTopic, Subscription 섹션에서 Endpoint 매개변수를 이메일 주소로 업데이트합니다.

  3. 파일을 저장하고 닫습니다.

DevOps 엔지니어

프로젝트 코드를 작성합니다.

명령을 실행하여 프로젝트 코드를 작성하고 스택을 합성하세요.

npm run build && cdk synth

다음과 유사한 출력 화면이 표시되어야 합니다. 

$npm run build && cdk synth > cdk-devopsguru@0.1.0 build > tsc Successfully synthesized to ~/amazon-devopsguru-cdk-samples/cdk.out Supply a stack id (CdkDevopsGuruStackMultiAccReg,CdkDevopsGuruStackMultiAccRegSpecStacks, CdkDevopsguruStackOrgUnit, CdkInfrastructureStack, CdkStackSetAdminRole, CdkStackSetExecRole) to display its template.

자세한 정보와 절차는 AWS CDK 문서에서 첫 번째 AWS CDK 앱을 참조하세요.

DevOps 엔지니어

AWS CDK 스택을 나열합니다.

다음 명령을 실행하여 모든 AWS CDK 스택을 나열하세요.

$cdk list

이 명령은 다음 목록을 표시합니다.

CdkDevopsGuruStackMultiAccReg CdkDevopsGuruStackMultiAccRegSpecStacks CdkDevopsguruStackOrgUnit CdkInfrastructureStack CdkStackSetAdminRole CdkStackSetExecRole
DevOps 엔지니어
작업설명필요한 기술

IAM 역할 생성에 필요한 AWS CDK 스택을 배포합니다.

이 패턴은 CloudFormation StackSetsAWS를 사용하여 여러 계정에서 스택 작업을 수행합니다. 첫 번째 스택 집합을 생성하는 경우, AWS 계정에 필요한 권한을 설정하려면 다음 IAM 역할을 만들어야 합니다.

  • AWSCloudFormationStackSetAdministrationRole

  • AWSCloudFormationStackSetExecutionRole

참고: 역할에는 다음과 같은 정확한 이름이 있어야 합니다.

  1. 다음 CLI 명령을 실행하여 관리자(기본) 계정에서 IAM AWSCloudFormationStackSetAdministrationRole 역할을 만듭니다.

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. 스택 인스턴스를 실행하려는 모든 대상 계정에서 IAM AWSCloudFormationStackSetExecutionRole 역할을 만듭니다. 이 역할을 만들려면 다음 CLI 명령을 실행하세요.

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator   $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

자세한 내용은 AWS CloudFormation 설명서의 자체 관리 권한 부여를 참조하십시오.

DevOps 엔지니어

AWS CDK 스택을 배포하여 여러 계정에 DevOps Guru를 활성화하십시오.

AWS CDK CdkDevopsGuruStackMultiAccReg 스택은 여러 계정과 리전에 걸쳐 스택 인스턴스를 배포하기 위한 스택 세트를 생성합니다. 스택을 배포하려면 지정된 매개변수와 함께 다음 CLI 명령을 실행합니다.

$cdk deploy CdkDevopsGuruStackMultiAccReg \ --profile administrator \ --parameters AdministratorAccountId=<administrator-account-ID> \ --parameters TargetAccountId=<target-account-ID> \ --parameters RegionIds="<region-1>,<region-2>"

현재 Amazon DevOps Guru는 Guru FAQ에 나열된 AWS 지역에서 사용할 수 있습니다. DevOps

DevOps 엔지니어
작업설명필요한 기술

OU ID를 추출합니다.

AWS Organizations 콘솔에서 DevOps Guru를 활성화하려는 조직 단위의 ID를 식별합니다.

DevOps 엔지니어

OU에 대한 서비스 관리형 권한을 활성화합니다.

계정 관리에 AWS Organizations를 사용하는 경우 서비스 관리 권한을 부여하여 Guru를 DevOps 활성화해야 합니다. IAM 역할을 수동으로 만드는 대신 조직 기반 신뢰할 수 있는 액세스 및 서비스 연결 역할(SLR)을 사용하세요.

DevOps 엔지니어

AWS CDK 스택을 배포하여 DevOps OU 전체에 Guru를 활성화하십시오.

AWS CDK CdkDevopsguruStackOrgUnit 스택은 OU 전반에 걸쳐 DevOps Guru 서비스를 지원합니다. 스택을 배포하려면 지정된 매개변수와 함께 다음 명령을 실행하세요.

$cdk deploy CdkDevopsguruStackOrgUnit \ --profile administrator \ --parameters RegionIds="<region-1>,<region-2>" \ --parameters OrganizationalUnitIds="<OU-1>,<OU-2>"
DevOps 엔지니어
작업설명필요한 기술

IAM 역할 생성에 필요한 AWS CDK 스택을 배포합니다.

첫 번째 옵션에 표시된 필수 IAM 역할을 아직 만들지 않았다면 먼저 만들어야 합니다.

  1. 다음 CLI 명령을 실행하여 관리자(기본) 계정에서 IAM AWSCloudFormationStackSetAdministrationRole 역할을 만듭니다.

    $cdk deploy CdkStackSetAdminRole --profile administrator
  2. 스택 인스턴스를 실행하려는 모든 대상 계정에서 IAM AWSCloudFormationStackSetExecutionRole 역할을 만듭니다. 이 역할을 만들려면 CLI 명령을 실행하세요.

    $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile administrator $cdk deploy CdkStackSetExecRole \ --parameters AdministratorAccountId=<administrator-account-ID> \ --profile target

자세한 내용은 AWS CloudFormation 설명서의 자체 관리 권한 부여를 참조하십시오.

DevOps 엔지니어

기존 스택을 삭제하세요.

모든 스택 리소스에 대해 DevOps Guru를 활성화하는 첫 번째 옵션을 이미 사용한 경우 다음 명령을 사용하여 이전 스택을 삭제할 수 있습니다.

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator

또는 스택을 다시 배포할 때  RegionIds 매개변수를 변경하여 스택이 이미 존재함 오류를 방지할 수 있습니다.

DevOps 엔지니어

스택 목록으로 AWS CDK 스택을 업데이트하세요.

  1. /amazon-devopsguru-cdk-samples/lib/cdk-devopsguru-multi-acc-reg-spec-stack.ts 파일을 편집합니다.

  2. Resources, CloudFormationStackNames, 아래에 DevOps Guru를 활성화하려는 스택을 나열하십시오. 데모용으로 이 매개변수는 CdkInfrastructureStack 스택을 지정하지만 요구 사항에 따라 이 항목을 편집할 수 있습니다.

  3. 파일을 저장하고 닫습니다.

  4. 스택 템플릿을 합성하고 업데이트하려면 다음을 실행합니다.

     $cdk synth
데이터 엔지니어

DevOps Guru가 여러 계정의 특정 스택 리소스를 사용할 수 있도록 AWS CDK 스택을 배포하십시오.

AWS CDK CdkDevopsGuruStackMultiAccRegSpecStacks 스택을 사용하면 DevOps Guru가 여러 계정의 특정 스택 리소스를 사용할 수 있습니다. 스택을 배포하려면 다음 명령을 실행하세요.

$cdk deploy CdkDevopsGuruStackMultiAccRegSpecStacks \ --profile administrator \ --parameters AdministratorAccountId=<administrator-account-ID> \ --parameters TargetAccountId=<target-account-ID> \ --parameters RegionIds="<region-1>,<region-2>"

참고: 이전에 옵션 1을 위해 이 스택을 배포했다면 RegionIds 매개변수를 변경(사용 가능한 리전 중에서 선택)하여 스택이 이미 존재함 오류를 방지하세요.

DevOps 엔지니어
작업설명필요한 기술

샘플 서버리스 인프라 스택을 배포하세요.

AWS CDK CdkInfrastructureStack 스택은 API Gateway, Lambda 및 DynamoDB 테이블과 같은 서버리스 구성 요소를 배포하여 Guru 통찰력을 입증합니다. DevOps 스택을 배포하려면 다음 명령을 실행하세요. 

$cdk deploy CdkInfrastructureStack --profile administrator
DevOps 엔지니어

DynamoDB에 샘플 레코드를 삽입하세요.

다음 명령을 실행하여 샘플 레코드로 DynamoDB 테이블을 채웁니다. populate-shops-dynamodb-table.json 스크립트의 올바른 경로를 입력합니다.

$aws dynamodb batch-write-item \ --request-items file://scripts/populate-shops-dynamodb-table.json \ --profile administrator

이 명령은 다음 출력을 표시합니다.

{ "UnprocessedItems": {} }
DevOps 엔지니어

DynamoDB에서 삽입된 레코드를 확인하세요.

DynamoDB 테이블에 populate-shops-dynamodb-table.json 파일의 샘플 레코드가 포함되어 있는지 확인하려면 AWS CDK 스택의 출력으로 게시되는 ListRestApiEndpointMonitorOperator API의 URL에 액세스합니다. CdkInfrastructureStack스택용 AWS CloudFormation 콘솔의 출력 탭에서도 이 URL을 찾을 수 있습니다. AWS CDK 출력은 다음과 유사하게 표시됩니다.

CdkInfrastructureStack.CreateRestApiMonitorOperatorEndpointD1D00045 = https://oure17c5vob.execute-api.<your-region>.amazonaws.com/prod/ CdkInfrastructureStack.ListRestApiMonitorOperatorEndpointABBDB8D8 = https://cdff8icfrn4.execute-api.<your-region>.amazonaws.com/prod/
DevOps 엔지니어

리소스가 기준선 설정을 완료할 때까지 기다립니다.

이 서버리스 스택에는 몇 가지 리소스가 있습니다. 다음 단계를 수행하기 전에 2시간 정도 기다리는 것이 좋습니다. 프로덕션 환경에 이 스택을 배포한 경우 Guru에서 DevOps 모니터링하도록 선택한 리소스 수에 따라 기준 설정을 완료하는 데 최대 24시간이 걸릴 수 있습니다.

DevOps 엔지니어
작업설명필요한 기술

AWS CDK 인프라 스택을 업데이트하세요.

DevOps Guru Insights를 사용해 보려면 구성을 일부 변경하여 일반적인 운영 문제를 재현할 수 있습니다.

  1. /amazon-devopsguru-cdk-samples/lib/infrastructure-stack.ts 파일을 편집합니다.

  2. DDB Table 섹션에서 DynamoDB 테이블의 읽기 용량을 5에서 1로 변경합니다.

  3. 파일을 저장하고 닫습니다.

  4. 다음 명령을 실행하여 업데이트된 AWS CDK 인프라 스택을 합성하고 배포합니다.

    $cdk synth $cdk deploy CdkInfrastructureStack --profile administrator
DevOps 엔지니어

API에 HTTP 요청을 삽입합니다.

ListRestApiMonitorOperatorEndpointxxxx API에 HTTP 요청 형태로 인그레스 트래픽을 삽입합니다.

  1. Python 스크립트 /amazon-devopsguru-cdk-samples/scripts/sendAPIRequest.py을 편집합니다.

  2. ListRestApiMonitorOperatorEndpointxxxx에 대한 API 링크로 url 변수를 업데이트합니다. 이 URL은 AWS CDK 배포 명령의 출력 또는 AWS Cloudformation 콘솔의 스택에 대한 출력 탭에서 찾을 수 있습니다.

  3. 파일을 저장하고 닫습니다.

  4. 다음 명령을 사용하여 Python 스크립트를 실행합니다.

    $python sendAPIRequest.py
  5. 200 상태 코드를 받았는지 확인하세요.

  6. 빠른 속도로 트래픽을 유입하려면 여러 대(가급적 4대)의 터미널에서 스크립트를 실행해야 할 수 있습니다.

  7. 스크립트가 약 10분 동안 루프로 실행되면 DevOps Guru 콘솔에서 운영 통찰력을 확인할 수 있습니다.

DevOps 엔지니어

DevOps Guru 인사이트를 검토하세요.

표준 조건에서 DevOps Guru 대시보드는 진행 중인 인사이트 카운터에 0을 표시합니다. 이상 징후가 감지되면 인사이트 형태로 경보를 발령합니다. 탐색 창에서 인사이트를 선택하여 개요, 집계된 메트릭, 관련 이벤트, 권장 사항 등 이상 징후에 대한 세부 정보를 확인합니다. 인사이트 검토에 대한 자세한 내용은 Amazon DevOps Guru를 사용하여 AIOps로 운영 인사이트 확보하기 블로그 게시물을 참조하십시오.

DevOps 엔지니어
작업설명필요한 기술

리소스를 정리하고 삭제합니다.

이 패턴을 수행한 다음에는 추가 요금이 발생하지 않도록 생성한 리소스를 제거해야 합니다. 명령을 실행합니다.

$cdk destroy CdkDevopsGuruStackMultiAccReg --profile administrator $cdk destroy CdkDevopsguruStackOrgUnit --profile administrator $cdk destroy CdkDevopsGuruStackMultiAccRegSpecStacks --profile administrator $cdk destroy CdkInfrastructureStack --profile administrator $cdk destroy CdkStackSetAdminRole --profile administrator $cdk destroy CdkStackSetExecRole --profile administrator $cdk destroy CdkStackSetExecRole --profile target
DevOps 엔지니어

관련 리소스