AgentCore에서 사용할 브라우저 선정 - AgentCore Browser
요약
본 문서는 Amazon Bedrock AgentCore Runtime 환경에서 웹 검색 기능을 구현하기 위한 다양한 방법을 비교 분석합니다. 특히, 브라우저 조작이 가능한 'AgentCore Browser' 방식과 HTTP 요청 기반의 'Strands http_request', 그리고 관리형 웹 인덱스 검색인 'AgentCore Web Search'를 검토했습니다. 테스트 결과, CodeZip 환경에서는 Playwright 드라이버 실행의 제약으로 인해 AgentCore Browser 사용이 권장되지 않는 것으로 결론지었습니다.
핵심 포인트
- CodeZip 방식 전제 하에 다양한 웹 정보 접근 방법 비교 분석
- AgentCore Browser는 브라우저 조작 가능하나 구현 용이성 문제 발생
- Strands http_request는 빠르나 JS 실행 및 DOM 조작 불가
- CodeZip 환경에서는 Playwright 드라이버 실행 제약으로 인해 AgentCore Browser 사용 비권장
서론
agentcore에서 웹 검색 기능을 구현하려고 했을 때 여러 가지 방법이 있었기 때문에, 그 사용감을 정리하게 되었습니다.
전제
이번 조사에서는 Amazon Bedrock AgentCore Runtime을 CodeZip 방식으로 이용하는 것을 전제로 합니다.
목적은 AgentCore Runtime 상의 AI 에이전트가 웹상의 정보에 접근하는 방법을 비교하고, 현재 custom-agentcore에 채택할 방식을 검토하는 것입니다.
검증 대상은 주로 다음 3가지 방식입니다.
A. AgentCore Browser <- 이번에 검증할 것
- Amazon Bedrock AgentCore Browser 상에서 동작하는 Chromium에 Playwright로부터 연결하는 방식
- JavaScript 실행, 페이지 이동, 클릭, 폼 입력 등 실제 브라우저 조작이 가능
B. Strands http_request
-
브라우저를 사용하지 않고 HTTP 요청을 통해 웹페이지나 API의 응답을 직접 가져오는 방식
-
경량이고 빠르지만, JavaScript 실행이나 DOM 조작 등은 하지 않음
C. AgentCore Web Search
- AgentCore Gateway의 Web Search Tool을 이용해 Amazon이 관리하는 웹 인덱스에서 정보를 검색하는 방식
- 웹상의 정보 탐색에는 적합하지만, 특정 페이지에 대한 브라우저 조작이나 폼 입력 등은 하지 않음
한편, Runtime 내에서 Chromium을 직접 실행하는 LocalChromiumBrowser도 후보로 있었지만, Chromium 본체나 OS 의존 라이브러리를 Runtime에 포함할 필요가 있어 CodeZip 방식과의 궁합이 좋지 않아 이번 비교 대상에서 제외했습니다.
조사 방침
각 방식에 대해 동일하거나 유사한 질문을 주고, 다음 관점에서 동작을 확인했습니다.
- 일반적인 웹페이지 내용 취득
- JavaScript를 이용하는 페이지 대응
- 페이지 내 요소의 취득
- 클릭이나 폼 입력 등의 웹 조작
- 웹 검색을 통한 정보 취득
- CodeZip 환경에서의 구현 용이성
테스트 방침
case1:
다음 웹페이지를 확인해 주세요.
...
여기서는 조금 긴 문장을 요약해서 표시할 수 있는지 확인합니다.
case2:
다음 페이지를 확인해 주세요.
...
이것은 출력하는 것을 좀 엄격하게 해서 취득 대상을 구조적으로 가져올 수 있는지의 확인입니다
case3:
다음 API에 GET 요청을 해 주세요.
...
이것은 더 엄격하게 해서 JSON 형식으로의 취득을 확인하고 있습니다
case4:
위 사이트의 id=
원래 AgentCore runtime codezip 방식으로서는 agentcore browser를 사용하는 것이 권장되지 않는 것 같습니다.
이는 아래의 문장에서도 알 수 있습니다.
이것은 Agentcore Harness에서 생성한 환경(Harness 내에 공식 문서대로 Browser를 사용하도록 환경을 만들고, 정상적으로 작동하는 것을 확인했음)을 runtime으로 만들기 위한 명령을 실행했을 때 생성된 파일입니다.
app/MyHarnessAgent/EXPORT_NOTES.md
Export Notes — MyHarness → MyHarnessAgent
Exported on: 2026-09-07Exported on: 2026-09-07
Strands version: strands-agents >= 1.15.0
...
중요한 부분을 번역하여 발췌하자면,
"CodeZip (Lambda 형식)의 런타임에서는 Playwright의 Node.js용 드라이버를 실행할 수 없기 때문에, 호출 시 도구가 실패합니다."라고 되어 있습니다.
역시 runtime이 lambda 형태인지에 대한 이야기(실제로는 microVM 위에서 작동하는 것 같음)는 둘째 치고서, "Playwright의 Node.js용 드라이버를 실행할 수 없다"고 설명되어 있습니다.
이는 실증적으로 확인되었으며, bedrock_agentcore.tools를 사용하여 아무 생각 없이 그대로 구현하면 다음과 같은 답변과 에러가 나옵니다.
- 대화
$ agentcore invoke "read_web_page가 정상적으로 작동하는지 확인해 주세요. 만약 문제가 발생하고 있다면 솔직하게 알려주세요"
그러면, read_web_page 함수가 정상적으로 작동하는지 테스트해보겠습니다. 솔직히 말씀드리자면: read_web_page 함수는 현재 정상적으로 작동하지 않습니다.
...
- 에러 메시지(일부 가림)
2026-09-29T12:08:54.192Z {"resource":{"attributes":
{"telemetry.sdk.language":"python","telemetry.sdk.name":"opentel
emetry","telemetry.sdk.version":"1.42.1","service.name":"browser"
...
"[Errno 13] Permission denied: '/var/task/playwright/driver/node'"가 중요하며, 이는 특정 파일/폴더에 대해 권한이 허용되지 않았음을 의미합니다.
다만, 이번 검증에서는 Playwright 포함 Node driver를 `/tmp`에 복사하고 실행 권한을 부여하는 work-around를 통해 CodeZip Runtime에서 AgentCore Browser를 사용할 수 있음을 확인했습니다.
아무래도 실제 환경은 다음과 같은 것 같습니다.
AgentCore Runtime (CodeZip)
/
├─ var/
...
원래는, /var/task/playwright/driver/node에 있는 Playwright 포함 Node driver를 실행해야 했지만 그 위치 그대로 기대대로 실행되지 않았습니다.
따라서 이번에는 Playwright 포함 Node driver를 `/tmp`에 복사하고 그것을 연결함으로써 성공했습니다.
위의 main.py agentcore_browser.py 에 실제 구현 코드가 있으니 괜찮으시면 확인해 보세요.
## 테스트 결과
case1:
다음 웹페이지를 확인해 주세요.
...
문제없이 가져올 수 있습니다.
case2:
다음 페이지를 확인해 주세요.
...
물론 이것도 문제없이 검색할 수 있습니다.
case3:
다음 API에 GET 요청을 해 주세요.
...
json 형식도 문제가 없습니다.
case4:
위 사이트의 id="s4L"를 클릭하고
...
출력되는 독백은 길지만, 웹 내에서 정상적으로 조작할 수 있음이 확인됩니다.
case5:
기재된 사용자 이름과 비밀번호를 입력하여 로그인하고, 로그인 성공 시 표시되는 페이지의 메시지를 알려주세요
...
고도화된 로그인 사이트도 문제없이 조작할 수 있습니다.
case6:
현재의 공간 x의 주가를 알려주세요
---
...
이곳에서도 문제없이 검색할 수 있습니다.
덧붙여 말씀드리자면, 답변에 나오는 'CAPTCHA'란 웹사이트 접속자가 컴퓨터(봇)가 아니라 실제 사람인지를 확인하기 위한 인증 기술입니다.
Google은 대량의 검색 쿼리 전송이나 Google 계정 자동 로그인 같은 봇 행위를 엄격하게 감시하고 있습니다.
물론 LLM이 조작했기 때문에 티가 납니다.
따라서 프롬프트에서 다른 브라우저(이번에는 DuckDuckGo)를 사용하도록 하거나, Web Bot Auth를 사용하거나, 웹 검색은 비조작계의 browser tool을 사용하게 하는 것이 현명하다고 생각됩니다.
## 요약
이번에는 AgentCore Browser를 사용했습니다.
결론적으로, **브라우저로 하고 싶은 것은 모두 포괄할 수 있다는 점이 강점이지만, 반대로 웹 검색만을 용도로 한다면 다소 오버스펙이라고 느껴졌습니다**.
기본 상태라면 봇 감지(CAPTCHA)에 걸려 최악의 환각(hallucination)을 일으킬 가능성이 있고, 문제가 있는 사이트를 방문할 가능성도 있습니다(다만, AWS의 안전한 격리 환경에서 브라우저가 실행되기 때문에, 만일 악의적인 사이트를 방문하더라도 사내 인프라에 영향을 주지 않는 것 같습니다).
이를 피하기 위해서는 playwright 코드를 추가하여 엄격하게 제어할 필요성이 생겨 결국 구현이 조금 번거로워질 가능성도 있습니다.
다음은 'B. Strands http_request'입니다(작성 중).
### 토론

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기