Harness Academy
Tài liệu gốc 08 7 phútTiếng Việt + English
docs/localstack.mdXem bản gốc
Ngôn ngữ bài đọc
Bản dịch tiếng Việt

Bản dịch đầy đủ theo đúng cấu trúc tài liệu; code, liên kết và định danh kỹ thuật được giữ nguyên.

LocalStack

LocalStack cấp cho agent quyền truy cập vào môi trường AWS mô phỏng để nó có thể cung cấp và thực hiện các dịch vụ AWS mà không cần chạm vào tài khoản thực. Nó nối dây AWS CLI sang LocalStack đang chạy ví dụ -- đưa điểm cuối, vùng và thông tin xác thực -- và có thể tùy ý bắt đầu và dừng bộ chứa LocalStack Docker cho mỗi lần chạy.

Nguồn

Mặc dù Pydantic AI Harness có trên các bản phát hành 0.x nhưng API có thể thay đổi giữa các bản phát hành nhỏ; khi đó, cảnh báo ngừng sử dụng và hướng dẫn di chuyển ghi chú phát hành sẽ cho bạn (hoặc người đại diện của bạn) biết chính xác cách nâng cấp. Xem chính sách phiên bản.

vấn đề

Các agent xây dựng hoặc thử nghiệm cơ sở hạ tầng đám mây cần một nơi nào đó để tạo các nhóm, bảng, hàng đợi và hàm. Việc hướng chúng vào AWS thực sẽ chậm, tốn tiền, có nguy cơ rò rỉ thông tin xác thực và khó thiết lập lại giữa các lần chạy. LocalStack mô phỏng các API AWS cục bộ, nhưng việc kết nối một agent với nó có nghĩa là lặp lại điều tương tự bản tóm tắt: chèn URL điểm cuối, cung cấp thông tin xác thực giả, pháo kích ra AWS CLI và kiểm tra xem dịch vụ nào đang hoạt động.

Cách sử dụng

LocalStack hiển thị công cụ AWS được kết nối với phiên bản LocalStack đang chạy. các agent đưa ra các lệnh AWS CLI đơn giản; khả năng đưa vào điểm cuối, vùng, và thông tin xác thực, đồng thời bổ sung kiểm tra tình trạng cho các dịch vụ được mô phỏng.

from pydantic_ai import Agent
from pydantic_ai_harness import LocalStack

agent = Agent(
    'anthropic:claude-sonnet-4-6',
    capabilities=[LocalStack()],
)

result = agent.run_sync('Create an S3 bucket called reports and list all buckets.')
print(result.output)

Theo mặc định, agent kết nối với phiên bản LocalStack mà bạn đã bắt đầu riêng -- ví dụ với localstack CLI (localstack start). Các giá trị mặc định khớp với quy ước của LocalStack: cạnh điểm cuối http://localhost.localstack.cloud:4566 (giải quyết thành 127.0.0.1) và test / test thông tin xác thực. Đặt manage_container=True có khả năng khởi động và dừng vùng chứa Docker mới mỗi lần chạy.

Công cụ

Công cụMục đích
aws_cliChạy lệnh AWS CLI đối với LocalStack. Truyền lệnh không có phần dẫn đầu aws và không có --endpoint-url - cả hai đều được tiêm. Trả về nhãn stdout/stderr cộng với mã thoát khi bị lỗi.
localstack_healthTruy vấn điểm cuối tình trạng của LocalStack và trả về JSON của những dịch vụ nào (s3, dynamodb, sqs, v.v.) có sẵn.

Các lệnh chạy dưới dạng một vectơ đối số (không có shell), do đó các toán tử shell và chuyển hướng trong chuỗi lệnh không có hiệu lực. Đầu ra được dán nhãn với [stdout] / [stderr] dấu hiệu và một [exit code: N] dòng trên lối ra khác không. Khi nó vượt quá max_output_chars đuôi được giữ nguyên (thả đầu), vì vậy lỗi tồn tại cắt ngắn.

AWS CLI có thể đọc và ghi vào các tệp cục bộ thông qua các đối số như --body, file://, fileb://và s3 cp. Hãy coi khả năng này là cả hai Quyền truy cập của trình mô phỏng AWS và quyền truy cập AWS CLI vào hệ thống tệp của quy trình.

Kiểm soát dịch vụ

Lĩnh vựcHiệu ứng
allowed_servicesNếu không trống thì chỉ có thể sử dụng các dịch vụ AWS này (danh sách cho phép), ví dụ: ['s3', 'dynamodb'].
denied_servicesCác dịch vụ AWS này luôn bị từ chối (danh sách từ chối).

allowed_services và denied_services loại trừ lẫn nhau -- đặt một, không phải cả hai. Dịch vụ này là token không gắn cờ đầu tiên của lệnh (s3 trong s3 ls).

!!! cảnh báo "Nỗ lực hết mình, không phải ranh giới an ninh" Những cổng kiểm tra này sẽ ra lệnh cho agent chứ không phải những gì nó có thể tiếp cận. Để đảm bảo cứng nhắc, hãy tự định cấu hình LocalStack với dịch vụ hẹp nhất và hành vi IAM mà hoạt động cần và chạy agent ở mức độ cô lập ở cấp độ hệ điều hành.

Quản lý thùng chứa

Đặt manage_container=True và khả năng khởi động LocalStack Docker container cho mỗi lần chạy và dừng nó khi quá trình chạy kết thúc, do đó agent luôn nhận được môi trường trong lành, biệt lập. Docker phải được cài đặt và chạy.

from pydantic_ai_harness import LocalStack

LocalStack(
    manage_container=True,
    image='localstack/localstack',
    container_env={'DEBUG': '1', 'PERSISTENCE': '1'},
    startup_timeout=120.0,
)

Cổng cạnh của container (4566) được xuất bản trên cổng máy chủ từ endpoint_urlvà khả năng chờ điểm cuối tình trạng trước khi chạy bắt đầu, sau đó dừng vùng chứa khi nó kết thúc (ngay cả khi lượt chạy tăng lên). Mỗi lần chạy có vùng chứa riêng, vì vậy các hoạt động đồng thời của một agent cần có các cổng máy chủ riêng biệt hoặc một phiên bản được quản lý bên ngoài (manage_container=False).

Vì LocalStack 2026.03.0 là mặc định localstack/localstack hình ảnh là một hình ảnh yêu cầu token xác thực để bắt đầu (token Hobby/OSS miễn phí bao gồm cộng đồng sử dụng). Khi LOCALSTACK_AUTH_TOKEN được thiết lập trong quy trình hiện tại nó được tự động chuyển tiếp đến vùng chứa; một di sản LOCALSTACK_API_KEY giá trị được chuyển tiếp khi không có token xác thực nào được đặt. Giá trị xác thực được chuyển tiếp thông qua Môi trường Docker CLI thay vì được nhúng trong docker run lý lẽ. các mặc định localstack/localstack hình ảnh yêu cầu token để bắt đầu, do đó, hoạt động được quản lý cần một cấu hình. Để chạy tokenless, hãy đặt image vào thẻ từ trước yêu cầu về tài khoản, chẳng hạn như localstack/localstack:4.x thả ra.

Các dịch vụ được hỗ trợ bởi Docker như Lambda cần gắn ổ cắm Docker và một số dịch vụ dịch vụ hiển thị các cổng bên ngoài cổng (LocalStack dự trữ 4510-4559). Kích hoạt những điều đó một cách rõ ràng khi dịch vụ bạn kiểm tra yêu cầu chúng:

from pydantic_ai_harness import LocalStack

LocalStack(manage_container=True, service_port_range='4510-4559', mount_docker_socket=True)

Việc gắn ổ cắm Docker sẽ mang lại khả năng kiểm soát Docker cấp máy chủ chứa. Giữ mount_docker_socket=False trừ khi dịch vụ mô phỏng yêu cầu nó và chạy môi trường đã được tin cậy.

Vòng đời tương tự có sẵn độc lập dưới dạng trình quản lý bối cảnh không đồng bộ:

import asyncio

from pydantic_ai_harness.localstack import LocalStackContainer


async def main() -> None:
    async with LocalStackContainer(environment={'DEBUG': '1'}) as localstack:
        ...  # talk to localstack.endpoint_url


asyncio.run(main())

Cấu hình

from pydantic_ai_harness import LocalStack

LocalStack(
    endpoint_url='http://localhost.localstack.cloud:4566',  # edge endpoint (host port reused when managed)
    region='us-east-1',                    # region for the CLI and environment
    access_key_id='test',                  # LocalStack accepts any value
    secret_access_key='test',              # LocalStack accepts any value
    allowed_services=[],                   # allowlist (mutually exclusive with denied)
    denied_services=[],                    # denylist
    default_timeout=60.0,                  # seconds, per command and health check
    max_output_chars=50_000,               # output cap returned to the model
    aws_cli_path='aws',                    # CLI executable (e.g. 'aws' or 'awslocal')
    manage_container=False,                # start/stop a Docker container per run
    image='localstack/localstack',         # image used when managing the container
    host_address='127.0.0.1',              # host address for Docker port publishing
    service_port_range=None,               # e.g. '4510-4559' for non-gateway service ports
    mount_docker_socket=False,             # required by Docker-backed services such as Lambda
    container_name=None,                   # optional name for the managed container
    container_env={},                      # env vars for the managed container
    docker_path='docker',                  # Docker executable
    startup_timeout=120.0,                 # seconds to wait for the container to be ready
    include_instructions=True,             # add usage instructions to the prompt
)

AWS CLI phải được cài đặt và bật PATH (hoặc điểm aws_cli_path vào đó). Nếu nhị phân bị thiếu, aws_cli trả về một lỗi rõ ràng thay vì hủy bỏ chạy. Đặt include_instructions=False để bỏ qua văn bản nhắc nhở của khả năng khi bạn tự cung cấp.

Thông số agent (YAML/JSON)

LocalStack hoạt động với Pydantic AI thông số agent:

# agent.yaml
model: anthropic:claude-sonnet-4-6
capabilities:
  - LocalStack:
      endpoint_url: http://localhost.localstack.cloud:4566
      allowed_services: ['s3', 'dynamodb', 'sqs']
from pydantic_ai import Agent
from pydantic_ai_harness import LocalStack

agent = Agent.from_file('agent.yaml', custom_capability_types=[LocalStack])

Vượt qua custom_capability_types để trình tải thông số kỹ thuật biết cách khởi tạo LocalStack.

Đọc thêm

Tham chiếu API

::: pydantic_ai_harness.localstack.LocalStack

::: pydantic_ai_harness.localstack.LocalStackToolset

::: pydantic_ai_harness.localstack.LocalStackContainer

Mục lục nguồn