View a markdown version of this page

AWS CDK를 사용하여 AWS DevOps 에이전트 시작하기 - AWS DevOps 에이전트

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

AWS CDK를 사용하여 AWS DevOps 에이전트 시작하기

개요

이 가이드에서는 AWS 클라우드 개발 키트(AWS CDK)를 사용하여 AWS DevOps 에이전트 리소스를 생성하고 배포하는 방법을 보여줍니다. AWS CDK 애플리케이션은 AWS CloudFormation을 통해 에이전트 공간, AWS 자격 증명 및 액세스 관리(IAM) 역할, 운영자 앱 및 AWS 계정 연결 생성을 자동화합니다.

AWS CDK 접근 방식은 필요한 모든 리소스를 코드형 인프라로 정의하여 CLI 온보딩 가이드에 설명된 수동 단계를 자동화합니다.

AWS DevOps 에이전트는 여러 AWS 리전에서 사용할 수 있습니다. 전체 목록은 지원되는 리전: 단원을 참조하십시오.

사전 조건

시작하기 전에 다음 사항을 갖췄는지 확인하세요.

  • AWS 적절한 자격 증명으로 설치 및 구성된 명령줄 인터페이스(AWS CLI)

  • Node.js 버전 18 이상

  • AWS CDK 명령줄 인터페이스(CLI)는 전역적으로 설치됩니다. AWS CDK CLI를 설치하려면 다음 명령을 실행합니다.

npm install -g aws-cdk
  • 모니터링(기본) AWS 계정에 대한 하나의 계정

  • (선택 사항) 교차 AWS 계정 모니터링을 설정하려는 경우 두 번째 계정

  • (3부) aws-cdk-lib 버전 2.268.0 이상. 파트 3에 사용된 CfnAsset 및 CfnTrigger 구문이 해당 버전에 추가되었습니다. 프로젝트의 버전을 확인하려면를 실행합니다npm list aws-cdk-lib.

이 가이드에서 다루는 내용

이 가이드는 다음 부분으로 나뉩니다.

  • 1부 - 운영자 앱과 모니터링 계정의 AWS 연결을 사용하여 에이전트 공간을 배포합니다. 이 부분을 완료하면 에이전트가 해당 계정의 문제를 모니터링할 수 있습니다.

  • 2부(선택 사항) - 서비스 계정에 대한 소스 AWS 연결을 추가하고 해당 계정에 교차 계정 IAM 역할을 배포합니다. 이 구성을 사용하면 에이전트 공간이 계정 전체에서 리소스를 모니터링할 수 있습니다.

  • 3부(선택 사항) - 에이전트 공간에 스킬, 사용자 지정 에이전트 및 예약된 트리거를 추가하여 에이전트가 사용자 지정 지식을 보유하고 예약된 트리거가 해당 사용자 지정 에이전트를 자동으로 실행합니다.

생성할 리소스

1부: DevOpsAgentStack(모니터링 계정)

  • IAM 역할(DevOpsAgentRole-AgentSpace) - 계정을 모니터링하기 위해 DevOps 에이전트 서비스에서 수임합니다. AIDevOpsAgentAccessPolicy 관리형 정책과 Resource Explorer 서비스 연결 역할 생성을 허용하는 인라인 정책을 포함합니다.

  • IAM 역할(DevOpsAgentRole-WebappAdmin) - 에이전트 작업에 대한 AIDevOpsOperatorAppAccessPolicy 관리형 정책이 있는 운영자 앱 역할입니다.

  • 에이전트 공간(MyCDKAgentSpace) - AWS::DevOpsAgent::AgentSpace CloudFormation 리소스를 사용하여 생성된 중앙 에이전트 공간입니다. 운영자 앱 구성을 포함합니다.

  • 연결(AWS 모니터) - AWS::DevOpsAgent::Association CloudFormation 리소스를 사용하여 모니터링 계정을 에이전트 공간에 연결합니다.

  • 연결(AWS 소스) - (선택 사항) 교차 계정 모니터링을 위해 서비스 계정을 에이전트 스페이스에 연결합니다.

2부: ServiceStack(서비스 계정, 선택 사항)

  • IAM 역할(DevOpsAgentRole-SecondaryAccount) - 이름이 고정된 교차 계정 역할입니다. 모니터링 계정의 에이전트 공간에서 신뢰합니다. AIDevOpsAgentAccessPolicy 관리형 정책과 Resource Explorer 서비스 연결 역할 생성을 허용하는 인라인 정책을 포함합니다.

  • Lambda 함수(echo-service) - 입력 이벤트를 에코백하는 간단한 예제 서비스입니다.

3부: 자산 및 트리거(모니터링 계정, 선택 사항)

이 스택은 다음 리소스를 생성합니다.

  • 스킬(rds-performance-investigation) - assetType의와 함께 CfnAsset 구문을 사용하여 생성된 관련 시 에이전트가 로드하는 스킬입니다skill.

  • 사용자 지정 에이전트(rds-firefighter) -의와 함께 CfnAsset 구문을 사용하여 생성된 스킬이 연결된 특정 워크플로로 에이전트assetType의 범위를 지정합니다custom_agent.

  • 트리거(TIME_BASED) - CfnTrigger 구문을 사용하여 생성된 일정에 따라 사용자 지정 에이전트를 실행합니다.

설정

1단계: 샘플 리포지토리 복제

다음 명령을 실행하여 리포지토리를 복제하고 프로젝트 디렉터리로 변경합니다.

git clone https://github.com/aws-samples/sample-aws-devops-agent-cdk.git cd sample-aws-devops-agent-cdk

2단계: 종속성 설치

다음 명령을 실행하여 프로젝트 종속성을 설치합니다.

npm install

1부: 에이전트 공간 배포

이 섹션에서는 모니터링 계정에 에이전트 공간, IAM 역할, 운영자 앱 및 AWS 연결을 생성합니다.

1단계: 모니터링 계정 ID 구성

lib/constants.ts를 열고 모니터링 계정 ID를 설정합니다.

다음 예제에서는 업데이트할 상수를 보여줍니다.

export const MONITORING_ACCOUNT_ID = "<YOUR_MONITORING_ACCOUNT_ID>";

2단계: AWS CDK 환경 부트스트랩

모니터링 계정에서 AWS CDK를 부트스트래핑하지 않은 경우 다음 명령을 실행합니다.

cdk bootstrap aws://<MONITORING_ACCOUNT_ID>/<REGION> --profile monitoring

3단계: 빌드 및 배포

다음 명령을 실행하여 TypeScript 코드를 빌드하고 스택을 배포합니다.

npm run build cdk deploy DevOpsAgentStack --profile monitoring

4단계: 스택 출력 기록

배포가 완료되면 AWS CDK는 스택 출력을 인쇄합니다. 나중에 사용할 수 있도록 이러한 값을 기록합니다.

다음 예제에서는 예상 출력을 보여줍니다.

Outputs: DevOpsAgentStack.AgentSpaceArn = arn:aws:aidevops:<REGION>:123456789012:agentspace/abc123 DevOpsAgentStack.AgentSpaceRoleArn = arn:aws:iam::123456789012:role/DevOpsAgentRole-AgentSpace DevOpsAgentStack.OperatorRoleArn = arn:aws:iam::123456789012:role/DevOpsAgentRole-WebappAdmin DevOpsAgentStack.AssociationId = assoc-xyz

2부를 완료하려는 경우 AgentSpaceArn 값을 저장합니다. 서비스 계정 스택을 구성하는 데 필요합니다.

스택은 에이전트 공간 ID가 아닌 에이전트 공간 ARN을 출력합니다. 이후 단계에서는 ARN에서 뒤에 오는 세그먼트인 IDagentspace/를 요청합니다. 앞의 예에서 ARN은 로 끝나agentspace/abc123므로 에이전트 공간 ID는 입니다abc123. 해당 값도 기록합니다.

5단계: 배포 확인

에이전트 공간이 성공적으로 생성되었는지 확인하려면 다음 AWS CLI 명령을 실행합니다.

aws devops-agent get-agent-space \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

이 시점에서 에이전트 공간은 운영자 앱이 활성화되고 모니터링 계정이 연결된 상태로 배포됩니다. 에이전트는이 계정의 문제를 모니터링할 수 있습니다.

2부(선택 사항): 교차 계정 모니터링 추가

이 섹션에서는 에이전트 공간이 두 번째 AWS 계정(서비스 계정)의 리소스를 모니터링할 수 있도록 설정을 확장합니다. 여기에는 다음 두 가지 작업이 포함됩니다.

  1. 서비스 계정을 가리키는 소스 AWS 연결을 DevOpsAgentStack에 추가합니다.

  2. 에이전트 공간을 신뢰하는 IAM 역할을 사용하여 ServiceStack을 서비스 계정에 배포합니다.

중요

계속하기 전에 1부를 완료해야 합니다. ServiceStack에는 DevOpsAgentStack 배포 출력AgentSpaceArn의이 필요합니다.

1단계: 서비스 계정 ID 구성

서비스 계정 ID를 lib/constants.ts 열고 설정합니다.

다음 예제에서는 업데이트할 상수를 보여줍니다.

export const SERVICE_ACCOUNT_ID = "<YOUR_SERVICE_ACCOUNT_ID>";

DevOpsAgentStack은이 계정 ID를 사용하여 소스 AWS 연결을 생성합니다. 이 값을 설정하기 전에 DevOpsAgentStack을 배포한 경우 다시 배포하여 연결을 생성합니다.

다음 명령을 실행하여 재배포합니다.

npm run build cdk deploy DevOpsAgentStack --profile monitoring

2단계: 에이전트 공간 ARN 설정

DevOpsAgentStack 출력(1부, 4단계)에서 AgentSpaceArn 값을 복사하고에서 설정합니다lib/constants.ts.

다음 예제에서는 업데이트할 상수를 보여줍니다.

export const AGENT_SPACE_ARN = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/<SPACE_ID>";

ServiceStack은이 값을 사용하여 보조 계정 역할에 대한 신뢰 정책의 범위를 지정합니다. ServiceStack은이 값이 설정된 경우에만 합성됩니다.

3단계: 서비스 계정 부트스트랩

서비스 계정에서 AWS CDK를 부트스트래핑하지 않은 경우 다음 명령을 실행합니다.

cdk bootstrap aws://<SERVICE_ACCOUNT_ID>/<REGION> --profile service

4단계: ServiceStack 배포

다음 명령을 실행하여 서비스 계정의 자격 증명을 사용하여 ServiceStack을 빌드하고 배포합니다.

npm run build cdk deploy ServiceStack --profile service

이렇게 하면 서비스 계정에 다음 리소스가 생성됩니다.

  • 모니터링 계정의 에이전트 공간을 신뢰하는 IAM 역할(DevOpsAgentRole-SecondaryAccount)

  • 예제 서비스로 사용되는 에코 Lambda 함수(echo-service)

5단계: 배포 확인

Lambda 함수가 성공적으로 배포되었는지 확인하려면 다음 명령을 실행하여 에코 서비스를 테스트합니다.

aws lambda invoke \ --function-name echo-service \ --payload '{"test": "hello world"}' \ --profile service \ response.json cat response.json

3부(선택 사항): 스킬, 사용자 지정 에이전트 및 예약된 트리거 추가

이 섹션에서는 1부에서 생성한 에이전트 공간에 리소스 3개를 추가합니다. 관련될 때 에이전트가 로드하는 스킬과 에이전트의 범위를 특정 워크플로로 지정하는 사용자 지정 에이전트를 추가합니다. 또한 사용자 지정 에이전트를 자동으로 실행하는 예약된 트리거를 추가합니다. 이러한 리소스는 aws-cdk-lib/aws-devopsagent 모듈의 CfnAsset 및 CfnTrigger 구문을 사용합니다.

이러한 리소스에는 AWS 계정에 추가 요금이 발생할 수 있습니다. 작업을 마쳤을 때 제거하려면이 가이드의 끝에 있는 정리 섹션을 따르세요.

이 예제에서는 skill 및 custom_agent 자산 유형을 사용합니다. 동일한 CfnAsset 구문이 memory_store, agents_md및와 같은 모든 자산 유형을 생성합니다attachment. 다른 유형을 사용하려면 assetType 속성을 변경하고 유형에 필요한 메타데이터를 제공합니다. 자산 유형, 필수 메타데이터 및 속성 참조의 전체 목록은 섹션을 참조하세요자산 관리.

중요

계속하기 전에 1부를 완료해야 합니다. 이 스택에는 DevOpsAgentStack 배포의 에이전트 공간 ID가 필요합니다.

1단계: 콘텐츠 스택 생성

다음 콘텐츠를 가진 lib/content-stack.ts이라는 파일을 생성합니다: 시간 기반 트리거의 작업은 자산 ID별로 사용자 지정 에이전트를 형식으로 참조합니다custom:<assetId>. 스택은 사용자 지정 에이전트 속성의 값을 사용하여이 참조를 자동으로 연결합니다attrAssetId. 사용자 지정 에이전트의 skills 목록에는 이름이 아닌 자산 IDs도 포함되므로 스킬의를 사용합니다attrAssetId. 또한 스택에 암시적 종속성을 부여하므로 이를 연결하는 에이전트보다 먼저 스킬이 생성됩니다.

import * as cdk from 'aws-cdk-lib'; import { CfnAsset, CfnTrigger } from 'aws-cdk-lib/aws-devopsagent'; import { Construct } from 'constructs'; export interface ContentStackProps extends cdk.StackProps { readonly agentSpaceId: string; } export class ContentStack extends cdk.Stack { constructor(scope: Construct, id: string, props: ContentStackProps) { super(scope, id, props); // A skill the agent loads when relevant const skill = new CfnAsset(this, 'ExampleSkill', { agentSpaceId: props.agentSpaceId, assetType: 'skill', metadata: { name: 'rds-performance-investigation', description: 'Investigation procedures for RDS performance issues.', agent_types: ['GENERIC'], }, files: [ { path: 'SKILL.md', contentText: [ '# RDS Performance Investigation', 'Use this skill when investigating database latency, connection', 'errors, or query timeouts.', ].join('\n'), }, ], }); // A custom agent with attached skills that a trigger can invoke const customAgent = new CfnAsset(this, 'ExampleCustomAgent', { agentSpaceId: props.agentSpaceId, assetType: 'custom_agent', metadata: { name: 'rds-firefighter', skills: [skill.attrAssetId], }, files: [ { path: 'AGENT.md', contentText: ['# RDS Firefighter', 'Custom agent for RDS incidents.'].join('\n'), }, ], }); // A time-based trigger that runs the custom agent on a schedule const dailyTrigger = new CfnTrigger(this, 'DailyTrigger', { agentSpaceId: props.agentSpaceId, type: 'TIME_BASED', condition: { schedule: { expression: 'rate(1 day)', }, }, action: { actionType: 'create:task', task: { agent: `custom:${customAgent.attrAssetId}`, }, }, status: 'Active', }); new cdk.CfnOutput(this, 'SkillAssetId', { description: 'The skill asset ID', value: skill.attrAssetId, }); new cdk.CfnOutput(this, 'CustomAgentAssetId', { description: 'The custom agent asset ID', value: customAgent.attrAssetId, }); new cdk.CfnOutput(this, 'TriggerId', { description: 'The trigger ID', value: dailyTrigger.attrTriggerId, }); } }

2단계: AWS CDK 앱에 스택 추가

앱 진입점(예: bin/app.ts)에서 스택을 인스턴스화하고 1부, 4단계에서 기록한 에이전트 공간 ID를 전달합니다. 전체 AgentSpaceArn 값이 abc123아닌와 같은 ID를 사용합니다.

new ContentStack(app, 'ContentStack', { env: { account: MONITORING_ACCOUNT_ID, region: process.env.CDK_DEFAULT_REGION }, agentSpaceId: '<AGENT_SPACE_ID>', });

3단계: 스택 배포

다음 명령을 실행하여 모니터링 계정 자격 증명을 사용하여 스택을 빌드하고 배포합니다.

npm run build cdk deploy ContentStack --profile monitoring

자산의 agentSpaceId 및 assetType 속성은 트리거의 , agentSpaceIdtypecondition, 및 action 속성과 마찬가지로 생성 전용입니다. 둘 중 하나를 변경하면 리소스가 대체됩니다. 트리거의 status (Active 또는 Inactive)를 업데이트하여 삭제하지 않고 트리거Inactive를 일시 중지하도록 설정할 수 있습니다. 다른 자산 유형 및 전체 속성 참조에 대한 자세한 내용은 섹션을 참조하세요자산 관리.

4단계: 배포 확인

자산과 트리거가 생성되었는지 확인하려면 다음 AWS CLI 명령을 실행합니다.

aws devops-agent list-assets \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION> aws devops-agent list-triggers \ --agent-space-id <AGENT_SPACE_ID> \ --region <REGION>

문제 해결

이 섹션에서는 일반적인 문제와 해결 방법을 설명합니다.

CfnAsset 또는 CfnTrigger는에서 내보내지 않습니다. aws-cdk-lib/aws-devopsagent

  • 이러한 구문에는 aws-cdk-lib 버전 2.268.0 이상이 필요합니다. 를 실행npm list aws-cdk-lib하여 버전을 확인하고를 실행npm install aws-cdk-lib@latest하여 업그레이드합니다.

CloudFormation 리소스 유형을 찾을 수 없음

  • 에 배포하고 있는지 확인합니다지원되는 리전:.

  • AWS CLI가 적절한 권한으로 구성되어 있는지 확인합니다.

IAM 역할 생성 실패

  • 배포 역할에 IAM 역할을 생성할 수 있는 권한이 있는지 확인합니다.

  • 신뢰 정책 조건이 계정 ID와 일치하는지 확인합니다.

"대상 계정에서 역할을 수임할 수 없음"과 함께 교차 계정 배포가 실패합니다.

  • 각 스택은 대상 계정의 자격 증명으로 배포해야 합니다. --profile 플래그를 사용하여 올바른 AWS CLI 프로파일을 지정합니다.

  • 대상 계정에서 AWS CDK가 부트스트랩되었는지 확인합니다.

IAM 전파 지연

  • IAM 역할 변경 사항이 전파되는 데 몇 분 정도 걸릴 수 있습니다. 역할 생성 직후 에이전트 공간 생성에 실패하면 몇 분 정도 기다렸다가 다시 배포합니다.

정리

모든 리소스를 제거하려면 스택을 역순으로 삭제합니다.

다음 명령을 실행하여 스택을 삭제합니다.

# If you deployed the Part 3 ContentStack, destroy it first cdk destroy ContentStack --profile monitoring # If you deployed the ServiceStack, destroy it next cdk destroy ServiceStack --profile service # Then destroy the DevOpsAgentStack cdk destroy DevOpsAgentStack --profile monitoring

경고:이 작업은 에이전트 공간과 모든 관련 데이터를 영구적으로 삭제합니다. 이 작업은 실행 취소할 수 없습니다. 계속하기 전에 중요한 정보를 백업했는지 확인합니다.

보안 고려 사항

  • AWS CDK 애플리케이션은 aidevops.amazonaws.com 서비스 보안 주체만 해당 역할을 수임하도록 허용하는 신뢰 정책을 사용하여 IAM 역할을 생성합니다.

  • 신뢰 정책에는 특정 AWS 계정 및 에이전트 공간 ARN에 대한 액세스를 제한하는 조건이 포함됩니다.

  • 모든 정책은 최소 권한 원칙을 따릅니다. 조직의 보안 요구 사항에 따라 IAM 정책을 검토하고 사용자 지정합니다.

  • 교차 계정 역할(DevOpsAgentRole-SecondaryAccount)은 고정된 이름을 사용하며 특정 에이전트 공간 ARN으로 범위가 지정됩니다.

다음 단계

AWS CDK를 사용하여 AWS DevOps 에이전트를 배포한 후:

  1. DevOps 에이전트 AWS 사용 설명서에서 DevOps 에이전트 기능의 전체 범위에 대해 알아봅니다.

  2. 자동화된 인프라 관리를 위해 AWS CDK 배포를 CI/CD 파이프라인에 통합하는 것이 좋습니다.

  3. 타사 통합을 등록하는 경우 콘솔에서 웹후크를 교체하여 웹후크 URL과 보안 암호를 가져옵니다. AWS CDK는 스택 출력으로 웹후크 보안 암호를 반환하지 않는 AWS CloudFormation을 통해 배포합니다. 웹후크 자격 증명 관리에 대한 지침은 웹후크 자격 증명 관리를 참조하세요.

추가 리소스