본문으로 건너뛰기

Amazon Bedrock으로 구축한 EWOK Agent 재해 복구

Intuit는 Amazon Bedrock과 typed skill을 결합해 모델이 판단하고 EWOK가 failover를 결정론적으로 실행하는 재해 복구 Agent를 구축했습니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

Intuit는 여러 AWS 리전에 걸친 서비스 failover에서 숙련된 on-call 엔지니어의 판단과 수동 콘솔 작업에 의존하던 부분을 줄이기 위해 Amazon Bedrock 기반 EWOK Agent를 구축했습니다. 이 구조에서 모델은 자연어 요청을 바탕으로 typed skill과 인자를 선택하고, 인증·감사·정책 검사를 거친 실제 상태 변경은 EWOK의 결정론적 executor가 수행합니다. YAML 스키마와 prompt body로 구성된 Skill은 Amazon Bedrock tool specification으로 변환되며, Amazon Bedrock Guardrails, typed success/error 결과, 반복 횟수 제한, circuit breaker가 실행 경계를 통제합니다. 기존 EWOK가 지원하는 workload의 복구 시간을 수 시간에서 약 20분으로 줄였다면, EWOK Agent는 자산 탐색과 workflow 선택, readiness check, change-freeze 예외 처리, 단계별 상태 보고까지 대화형 흐름으로 연결하면서도 production 승인에는 사람을 남겨 둡니다.

섹션별 상세

01
Intuit의 EWOK는 수천 개의 microservice가 여러 AWS Region에 분산된 환경에서 compute, database, networking, cache, asynchronous workload의 failover를 표준화합니다. Service owner가 YAML로 복구 의도와 단계 순서를 선언하면 EWOK가 기반 인프라 작업을 조정해 지원 workload의 복구 시간을 수 시간에서 약 20분으로 줄입니다. 그러나 어떤 workflow를 선택할지, 자산이 준비됐는지, change-freeze 중 예외 절차를 어떻게 적용할지는 여전히 숙련된 on-call 엔지니어의 기억과 수동 판단에 남아 있었습니다.
02
EWOK Agent는 엔지니어가 Engineering portal이나 IDE에서 “Failover payments-gateway in production”이라고 요청하면 자산과 사용 가능한 recovery workflow를 찾고 적절한 workflow를 선택합니다. 이어 readiness check와 policy gate를 통과시킨 뒤 EWOK API를 호출해 change record와 execution ID를 만들고, compute·database·cache·traffic 단계의 상태를 다시 전달합니다. 과거에 runbook 검색과 여러 콘솔의 API 호출로 이어지던 작업을 대화형 감독 방식으로 바꾸되, 판단이 필요한 승인과 예외 결정에는 엔지니어가 계속 참여합니다.
03
전체 구조는 Consumer, Agent, Skill, Execution의 네 계층으로 나뉘며, Amazon Bedrock은 모델 선택과 bounded reasoning loop, Amazon Bedrock Guardrails를 담당합니다. Skill 계층의 YAML schema와 prompt body는 모델이 선택할 수 있는 tool specification으로 컴파일되고, 모델은 요청에 맞는 skill과 인자를 구조화된 tool-use 요청으로 반환합니다. Execution 계층의 EWOK API는 자산 해석, workflow 조회, 정책 확인, change record 생성과 실제 failover를 기존의 테스트된 코드로 수행해 모델이 “무엇을 할지”와 시스템이 “어떻게 실행할지”를 분리합니다.
EWOK Agent의 Consumer, Agent, Skill, Execution 네 계층과 요청·도구 선택·결정론적 실행·상태 반환 흐름을 나타낸 아키텍처 다이어그램입니다.
Diagram상단의 Intuit Engineering Portal과 IDE Integration에서 평문 요청이 들어오면 Amazon Bedrock과 Amazon Bedrock Guardrails가 있는 Agent Layer를 거칩니다. Agent Layer는 typed skill을 tool specification으로 사용해 Skill Layer에서 capability를 선택하고, 아래의 EWOK API Execution Layer가 asset resolution, readiness check, policy gate, change record, failover 실행을 결정론적으로 처리합니다. 실행 단계별 상태는 다시 Agent Layer를 통해 엔지니어에게 반환되어 모델의 판단과 실제 복구 실행이 분리된다는 글의 핵심 구조를 시각화합니다.
04
Skill은 사람용 runbook을 대체하는 Markdown 파일로, typed I/O schema를 선언하는 YAML frontmatter와 운영 규칙을 담은 prompt body로 구성됩니다. 각 operation은 정확히 하나의 executor 호출에 매핑되고, 실패하면 즉시 중단하며 모델이 임의 재시도나 대안을 만들지 못하도록 규칙을 둡니다. change-freeze 기간에 invoke 결과가 change_blocked이면 오류로 처리하지 않고 incident number 또는 24~100자의 emergency justification을 요청한 뒤 정확히 한 번만 재실행하게 해 정책 예외를 명시적인 분기로 고정합니다.
python
def to_tool_spec(skill) -> dict:
    """Compile a skill's declared schema into a Bedrock toolSpec."""
    properties = {
        name: {"type": field.type, "description": field.description}
        for name, field in skill.input_schema.items()
    }
    required = [n for n, f in skill.input_schema.items() if f.required]
    return {
        "toolSpec": {
            "name": skill.name,
            "description": skill.description,
            "inputSchema": {"json": {
                "type": "object",
                "properties": properties,
                "required": required,
            }},
        }
    }

Skill의 typed schema를 Amazon Bedrock Converse API가 사용할 toolSpec으로 변환합니다.

python
client = ChatBedrockConverse(
    model_id=config.model_id,  # pluggable via config
    guardrail_config={
        "guardrailIdentifier": config.guardrail_id,
        "guardrailVersion": config.guardrail_version,
        "trace": "enabled",
    },
)

모델 ID와 Guardrails 설정을 하나의 ChatBedrockConverse client에 연결해 모든 모델 호출에 안전성 검사를 적용합니다.

05
Amazon Bedrock Converse API와 langchain-aws의 ChatBedrockConverse client가 모델 호출과 tool-use 결과 처리를 연결하며, 설정만 바꿔 foundation model을 교체할 수 있습니다. 각 호출에 Guardrail을 붙이고 guardrail_intervened를 정상적인 종료 결과로 취급해 안전 정책에 걸린 요청을 재시도하지 않으며, typed success/error 상태와 MAX_ITERATIONS 상한으로 결과 해석과 반복 범위를 제한합니다. 모델은 AWS credential이나 EWOK 네트워크 경로를 갖지 않고 자산·환경 인자만 내보내며, request-scoped IAM 역할을 주입받은 executor가 실제 API를 호출합니다.
python
def run(self, request: str) -> str:
    messages = [HumanMessage(content=request)]
    llm = self.client.bind_tools(
        [to_tool_spec(s) for s in self.skills]
    )
    for _ in range(MAX_ITERATIONS):
        response = llm.invoke([self.system_prompt, *messages])
        messages.append(response)
        stop_reason = response.response_metadata.get("stopReason")
        if stop_reason == "end_turn":
            return response.text()  # final answer for the engineer
        if stop_reason == "guardrail_intervened":
            return response.text()  # stop, don't retry past a guardrail
        if stop_reason == "tool_use":
            for call in response.tool_calls:
                skill = self.skills_by_name[call["name"]]
                result = skill.executor.execute(**call["args"])
                messages.append(ToolMessage(
                    tool_call_id=call["id"],
                    content=result.data,
                    status="success" if result.success else "error",
                ))
    raise MaxIterationsError(f"No resolution within {MAX_ITERATIONS} iterations")

모델 호출, 종료 사유 판별, Skill executor 실행, 결과 재주입을 MAX_ITERATIONS 안에서 반복합니다.

06
운영 환경의 안전성을 위해 입력에 포함된 alarm description, runbook, service metadata를 Guardrails input tag로 감싸 prompt injection을 데이터로 처리하게 하고, executor에서도 허용된 service name과 Region 목록을 다시 검증합니다. 서비스별 job queue와 중복 제거, failover cooldown, circuit breaker, API rate limit, nonce와 timestamp 검증이 반복 호출과 replay attack을 억제하며, destructive action과 change-freeze override에는 Human in the loop 승인을 요구합니다. 모든 agent invocation, tool call, failover decision은 EWOK change record와 immutable audit trail에 남아 사후 복구 과정과 승인 흐름을 재구성할 수 있습니다.

용어 해설

재해 복구(Disaster Recovery)
장애나 재난으로 서비스가 중단될 때 정상적인 보조 리전이나 인프라로 트래픽과 실행 상태를 전환하는 운영 체계입니다. 이 글에서는 여러 AWS 리전에 걸친 자산의 컴퓨팅, 데이터베이스, 캐시, 네트워크를 정해진 순서로 복구해 서비스 중단 시간을 줄이는 과정으로 사용됩니다.
에이전틱 루프(Agentic Loop)
모델이 다음 행동을 선택하고, 도구 실행 결과를 다시 입력받아 후속 행동이나 종료를 결정하는 반복 제어 구조입니다. EWOK Agent에서는 Amazon Bedrock Converse API가 모델 호출과 도구 선택을 담당하고, 반복 횟수와 종료 조건을 제한해 복구 요청이 무한히 실행되지 않도록 합니다.
도구 사용(Tool Use)
언어 모델이 자연어 응답 대신 등록된 함수나 도구의 이름과 인자를 구조화된 형식으로 반환하는 기능입니다. EWOK Agent는 YAML 스키마를 Amazon Bedrock tool specification으로 변환해 모델이 자산과 환경을 선택하게 하며, 실제 상태 변경은 인증된 executor가 수행합니다.
정책 게이트(Policy Gate)
기술적으로 실행 가능한 작업이라도 조직의 운영 규정이나 변경 관리 조건을 만족하는지 확인하는 제어 지점입니다. 예를 들어 변경 동결 기간의 failover를 incident number나 긴급 사유 없이 차단하고, 승인된 경우에만 다음 실행 단계로 넘깁니다.
변경 기록(Change Record)
운영 환경의 변경을 승인하고 실행 과정을 추적하기 위해 변경 관리 시스템에 남기는 공식 기록입니다. EWOK는 production workflow가 시작될 때 기록을 만들고 실행이 끝나면 닫아, failover가 사람의 작업과 같은 감사 추적과 승인 절차를 거치도록 합니다.

기술

  • Amazon Bedrock
  • Amazon Bedrock Guardrails
  • Amazon Bedrock Converse API
  • Amazon Bedrock AgentCore
  • Amazon Bedrock AgentCore Observability
  • LangChain
  • langchain-aws
  • ChatBedrockConverse
  • Boto3
  • Python
  • Model Context Protocol
  • AWS Identity and Access Management
  • Amazon CloudWatch
  • AWS Lambda
  • AWS CloudFormation
  • Kubernetes
  • Amazon EC2
  • Amazon API Gateway
  • Amazon Aurora
  • Amazon ElastiCache

활용 사례

  • 여러 AWS Region에 분산된 microservice의 production failover
  • compute·database·cache·traffic 계층을 포함한 재해 복구 orchestration
  • change-freeze 기간의 정책 예외가 포함된 운영 복구
  • Engineering portal과 IDE에서 수행하는 대화형 failover
  • 감사 가능한 production 인프라 작업을 수행하는 tool-using agent
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 05.수집 2026. 09. 05.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.