🧩 BE

AWS MCP + Claude Code

Date
2026/03/27
Category
AI
Tag
MCP
Detail

1. 기존 AI 활용 인프라 관리 기술 현황

aws gui로 매뉴얼하게 인프라 관리
직접 Figma로 아키텍처 그려서 정적 분석
서버에 오류가 터지면 어떤 람다에서 오류가 터졌는지 CloudWatch 하나하나 들어가서 봐야하는 불편함
AWS 내부 인프라 데이터에 최적화된 Amazon Q Developer 도입
Amazon Q는 AWS 자체적으로 개발한 LLM으로, AWS가 학습시킨 인프라 best practice 데이터를 학습시켜서, aws 내부 인프라 환경에 최적화된 답변을 생성해주는 AI 어시스턴트이다.
인프라 환경은 IaC(Infrastructure as Code)를 활용하는게 아니면 히스토리를 남기기 어렵고, 서비스 규모, 비용 제한 등 상황별 best practice가 달라서 학습 데이터 생성이 어렵다. 글고 AWS는 VPC 등의 네트워크 보안, IAM 권한 제한으로 인해 내부 서비스 데이터 접근이 어렵기에 AI를 활용한 제어가 불가능하다. 애플 기기끼리 잘 호환되는 것 처럼 AWS도 외부 서비스랑 호환이 어렵고, AWS도 본인들 환경에서 모든걸 구축하기를 권장한다. (그럴거면 가격을 좀 낮추던가 혜택을 더 주던가..)
AWS는 AmazonQDeveloperAccess 권한 정책을 제공함. 때문에 AWS에 최적화된 Amazon Q의 Developer모델을 활용해서 내 계정에서 어떤 컴퓨팅 시스템이 돌아가는지, 어떤 오류가 생기는지 등을 AI에게 프롬프트 형식으로 질의하고 개선하는 파이프라인을 구축 가능.

2. Slack 메신저에 Amazon Q 연결 및 질의

Amazon Q Developer도 요금제가 있다. Free Tier, Pro Tier로 나뉘는데, Free Tier에서는 월별 50건의 에이전트 요청을 지원하고, 매월 1000줄의 코드라인 작성을 지원해준다.
여기서 에이전트 요청이라는건 Amazon Q가 직접 인프라를 수정하고 서비스를 추가하는 등의 내부 작업을 수행하는걸 말하는데, 이 부분은 ReadOnlyAccess권한 정책을 넣어서 추가 과금을 방지한다.
Slack 채널(donga-aws) 생성 후, Amazon Q Developer in chat applications(편의상 Q 챗봇) 에서 클라이언트 구성했다.
이후 새 채널 구성에서, Slack 채널 구성 → 이름(donga-slack-configuration), 대상 채널, 권한 부여(Q 챗봇 접근 권한, Cloudwatch 알림 권한, 읽기 전용 권한 부여)
가드 레일 정책에도 ReadOnlyAccess + AmazonQDeveloperAccess 들어가 있다.
한계점 : 내부 인프라 구성에 대한 기본적인 질의만 가능. 조금이라도 복잡한 프롬프트를 주면 제대로 된 분석을 하지 못하는 경우가 발생했다. 똑같이 2시간 내로 작동된 람다함수 리스트를 달라고 했는데, 프롬프트에 따라 답변이 다르게왔다.
AWS SNS로 임계값 위반 Lambda 에러 Slack 알림 설정
→ 결론 : Amazon Q는 내부 인프라 접근성 매우 좋다. but 다른 LLM 모델만큼 스스로 생각해서 복잡한 업무를 처리하거나 후속작업을 추천하거나 CLI 명령어를 직접 수행하거나 하지는 못한다. (대충 말해도 찰떡같이 못알아먹음)

3. Claude Code + AWS MCP를 활용한 RAG, 로그 모니터링 자동화, IaC 도입

Amazon Q는 AWS에 친화적이지만 좀 지능이 떨어진다는 한계점이 존재한다. 똑같이 나의 AWS 내부 데이터를 주면서 더 똑똑하게 분석할 수 있는 방법은 없을까?
2025 8월에 AWS MCP가 오픈소스 베타버전으로 출시되었다. 이 mcp로 cloudwatch에 GetMetricData로 액세스해서 로그 수집을 하고, 이걸 Grafana로 시각화하는 동시에, Claude Code를 붙여서 내부 현황 조회 및 로그 분석을 수행하는 파이프라인을 구상했다.
mcp
awslabs
1.
MCP 접근을 위한 IAM 유저 생성
MCPCloudWatchLogsReadOnlyPolicy 생성
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents", "logs:StartQuery", "logs:GetQueryResults", "logs:DescribeMetricFilters", "logs:DescribeSubscriptionFilters", "logs:DescribeResourcePolicies", "lambda:ListFunctions", "lambda:GetFunction", "lambda:GetFunctionConfiguration" ], "Resource": "*" } ] }
JSON
복사
mcp-readonly 유저 생성, 정책 연결 후 보안 자격 증명 액세스 키 생성.
로컬 터미널에서 credentials 값 추가
vim ~/.aws/credentials [mcp-readonly] aws_access_key_id = 액세스키ID aws_secret_access_key = 비밀액세스키 region = ap-northeast-2
Shell
복사
aws lambda list-functions --profile mcp-readonly --region ap-northeast-2 --query 'Functions[].FunctionName’ 으로 확인
2.
claude code - mcp 서버 연결
프로젝트 폴더(donga-data-pipeline)에 mcp 서버 생성
.mcp.json 파일 생성 = claude code가 mcp관련 접속 정보를 얻을 수 있게 설정 (github에는 kiro, cline 기준으로 설정파일이 나와있는데, claude는 .mcp.json으로 바인딩 하는듯 함)
3.
연결 Test (위의 Amazon Q와 동일한 프롬프트 질의. "내 Lambda 함수 목록을 알려줘")
4.
심화 프롬프트 질문 (복잡한 쿼리로 데이터 조회)
"Lambda 함수 24개 중에 최근 7일간 한 번도 실행 안 된 함수 있어?"
(보안이슈)
"지난 24시간 동안 에러가 발생한 함수 있어? 있으면 에러 메시지도 같이 보여줘"
5.
심화 프롬프트 질문 (대용량 데이터 집계 및 분석, 간단한 시각화)
"지난 7일 에러 패턴 분석해서, 어떤 시간대에 어떤 함수가 자주 실패하는지 알려줘"
특히나 에러 발생 여부 프롬프트 질의에서는 실제 AWS CloudWatch GUI에서는 기록되지 않았던 오류를 잡아내서, 프롬프트를 활용한 QA 자동화도 충분히 가능한 수준임을 인지할 수 있었다.

4. 추후 고도화 계획

Terraform을 활용한 IaC로 오류 해결, Grafana로 로그 소스 넘겨서 시각화 대시보드 구축까지 해볼 예정
Slack에서 바로 질의하는것도 좋아보여서, Amazon Q 처럼 Claude Code도 Slack 웹훅이 있는지 찾아볼 예정