View a markdown version of this page

Kerang Interaktif (Terminal) - Batu Dasar Amazon AgentCore

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Kerang Interaktif (Terminal)

InvokeAgentRuntimeCommandShellOperasi membuka sesi terminal interaktif yang persisten di dalam sesi AgentCore Runtime yang sedang berjalan WebSocket. Tidak seperti eksekusi perintah one-shot, sesi shell mempertahankan status — variabel lingkungan, direktori kerja, dan riwayat perintah yang dibawa lintas input. Ini memungkinkan debugging, inspeksi lingkungan, dan membangun pengalaman terminal dalam aplikasi Anda.

Untuk menelep InvokeAgentRuntimeCommandShell on, Anda memerlukan bedrock-agentcore:InvokeAgentRuntimeCommandShell izin.

Cara kerjanya

InvokeAgentRuntimeCommandShellmembuat WebSocket koneksi ke proses shell interaktif yang berjalan di dalam sesi agen Anda. Koneksi menggunakan frame biner untuk mengalirkan input dan output terminal di kedua arah.

Agen yang sama, sesi yang sama

InvokeAgentRuntimeCommandShellberoperasi pada runtime agen yang sama dengan InvokeAgentRuntime danInvokeAgentRuntimeCommand. Anda tidak membuat sumber daya terpisah. Agen yang Anda gunakan CreateAgentRuntime menerima koneksi shell pada sesi aktif apa pun.

catatan

Anda dapat meneruskan a session_id untuk menargetkan sesi runtime tertentu. Jika dihilangkan, sesi baru dibuat untuk setiap koneksi. Untuk menggunakan koneksi ulang, Anda harus menyimpan dan menggunakan kembali keduanya session_id danshellId.

Koneksi mendukung:

Fitur Deskripsi

Keadaan persisten

Variabel lingkungan, direktori kerja, dan riwayat perintah membawa input dalam sesi yang sama.

Koneksi ulang

Berikan yang sama session_id dan shellId untuk menyambung kembali ke shell yang sama setelah pemutusan. Layanan memutar ulang hingga 256 KB output buffer.

Beberapa shell bersamaan

Hingga 10 sesi shell aktif (terminal) per runtime. Koneksi baru ditolak saat dalam kapasitas.

Prasyarat

  • bedrock-agentcore:InvokeAgentRuntimeCommandShellIzin IAM

  • ARN titik akhir AgentCore Runtime yang valid dengan runtime dalam keadaan READY

catatan

Agen yang dibuat setelah 5 Juni 2026 mendukung shell interaktif (terminal) secara otomatis. Jika Anda menerapkan agen sebelum tanggal ini, Anda harus menyebarkannya kembali untuk memperbarui runtime agen.

Menggunakan AgentCore CLI

Untuk petunjuk instalasi dan penyiapan, lihat Mem ulai dengan AgentCore CLI.

CLI menyediakan pengalaman terminal bawaan denganagentcore exec.

agentcore exec --it

Untuk menyambung ke runtime tertentu:

agentcore exec --it --runtime <runtime-arn> --region us-west-2

Tek Ctrl+] an untuk melepaskan dari cangkang tanpa menutupnya. CLI mencetak perintah reconnect:

agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>

Untuk perintah one-shot, hilangkan: --it

agentcore exec "ls -la /tmp"

Untuk output yang dapat dibaca mesin, gunakan mode JSON:

agentcore exec --json "echo hello" # Output: {"success":true,"exitCode":0,"stdout":"hello\n","stderr":""}

Untuk contoh CLI tambahan, lihat AgentCore sampel di GitHub.

Menggunakan AgentCore SDK

Instal Python SDK:

pip install bedrock-agentcore
contoh
SigV4 (default)
  1. Contoh berikut menunjukkan cara membuka sesi shell menggunakan AWS kredenSIAL default.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn) as shell: print(f"Connected. Shell ID: {shell.shell_id}") # Send a command await shell.send("echo Hello from AgentCore Shell\n") # Read output frames async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") if "Hello from AgentCore Shell" in frame.text: break asyncio.run(main())
Pre-signed URL
  1. Contoh berikut menunjukkan cara membuka sesi shell menggunakan URL yang telah ditandatangani sebelumnya.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, PresignedAuth, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, auth=PresignedAuth(expires=120)) as shell: await shell.send("whoami\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") break asyncio.run(main())
OAuth
  1. Contoh berikut menunjukkan cara membuka sesi shell menggunakan token pembawa OAuth.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, OAuthAuth, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" bearer_token = "your_oauth_token_here" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, auth=OAuthAuth(bearer_token=bearer_token)) as shell: await shell.send("echo oauth-connected\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") if "oauth-connected" in frame.text: break asyncio.run(main())

Koneksi ulang

Pola umum adalah digunakan shellId untuk menyambung kembali ke shell setelah pemutusan, mempertahankan semua status sesi.

import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient async def main(): client = AgentCoreRuntimeClient(region="us-west-2") runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" session_id = "my-session-0000000000000000000000" shell_id = "my-shell" shell = await client.open_shell( runtime_arn, session_id=session_id, shell_id=shell_id, ).__aenter__() print(f"connected (reconnected={shell.reconnected})") await shell.send("export GREETING='hello'\n") await asyncio.sleep(1) async with client.open_shell( runtime_arn, session_id=session_id, shell_id=shell_id, ) as shell2: print(f"reconnected (reconnected={shell2.reconnected})") assert shell2.reconnected if __name__ == "__main__": asyncio.run(main())

Auto-reconnect

SDK juga dapat terhubung kembali secara otomatis saat WebSocket koneksi terputus. Gunakan ReconnectConfig untuk mengaktifkan ini:

import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, ReconnectConfig, ShellChannel async def on_reconnect(reconnected: bool): print(f"Reconnected: {reconnected}") async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" shell_id = "my-persistent-shell" config = ReconnectConfig(max_retries=5, base_delay=0.5, on_reconnect=on_reconnect) client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, shell_id=shell_id, reconnect_config=config) as shell: # If the connection drops, the SDK retries automatically await shell.send("long-running-command\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") asyncio.run(main())

Untuk contoh SDK tambahan, lihat AgentCore contoh di GitHub.

Kasus penggunaan umum

Debugging interaktif

Buka shell untuk memeriksa lingkungan runtime agen Anda — periksa paket yang diinstal, baca file log, periksa sistem file, atau uji perintah sebelum menambahkannya ke kode agen Anda.

python --version && pip list | head -20
Inspeksi lingkungan

Verifikasi variabel lingkungan, konektivitas jaringan, alat yang tersedia, dan status sistem file. Berguna saat mendiagnosis kegagalan agen atau memvalidasi konfigurasi penerapan.

env | grep AWS && curl -s http://169.254.169.254/latest/meta-data/
Akses terminal agen pengkodean

Agen pengkodean AI menggunakan shell interaktif (terminal) sebagai lingkungan eksekusi mereka. Ketika agen pengkodean perlu menjalankan kode, menginstal paket, atau menjalankan pengujian, ia membuka sesi shell ke AgentCore Runtime dan mengeksekusi perintah secara langsung - dengan cara yang sama pengembang akan menggunakan terminal. Misalnya, Claude Code, Amazon Kiro, dan OpenAI Codex masing-masing terhubung ke sesi shell di mana mereka dapat menulis kode secara berulang, menjalankannya, mengamati output, dan memperbaiki kesalahan dalam satu loop. Status persisten berarti agen dapat menjalankan urutan perintah tanpa kehilangan konteks antar langkah.

# A coding agent opens a shell and iterates on code async with client.open_shell(runtime_arn, shell_id="agent-workspace") as shell: await shell.send("cd /workspace && git clone https://github.com/user/repo.git\n") await shell.send("cd repo && pip install -r requirements.txt\n") await shell.send("python -m pytest tests/ -v\n") # Agent reads test output, fixes failures, re-runs — all in the same shell
Long-running proses

Mulai proses yang bertahan lebih lama dari permintaan HTTP tunggal. Gunakan koneksi ulang untuk memeriksa kemajuan atau memberikan masukan tambahan dari waktu ke waktu.

nohup python train.py > /tmp/train.log 2>&1 &

Pilihan desain utama

Sesi interaktif yang persisten

Setiap koneksi memetakan ke proses shell yang berumur panjang. Anda dapat mengirim beberapa perintah tanpa membangun kembali koneksi, dan status yang terakumulasi oleh perintah sebelumnya (variabel yang diekspor, cd perubahan) tersedia untuk yang lebih baru.

Pembingkaian biner berakhir WebSocket

Terminal I/O dialirkan sebagai WebSocket bingkai biner. Ini mendukung urutan kontrol terminal mentah, warna, gerakan kursor, dan aplikasi layar penuh tanpa pengkodean overhead.

Koneksi ulang dengan pemutaran ulang output

Saat Anda menyambung kembali menggunakan yang samashellId, layanan akan memutar ulang hingga 256 KB output terbaru. Ini memungkinkan Anda memulihkan dari gangguan jaringan tanpa kehilangan konteks. Proses shell terus berjalan selama pemutusan.

Batas sesi

Ketika 10 sesi shell (terminal) sudah terbuka pada runtime, koneksi baru ditolak dengan kesalahan. Anda harus menutup sesi yang sudah ada sebelum membuka yang baru.

Pertimbangan keamanan

Tip

Untuk tampilan gabungan dari semua rekomendasi keamanan Runtime, lihat Prakti k terbaik keamanan untuk AgentCore Runtime.

penting

Di bawah model tanggung jawab AWS bersama, Anda bertanggung jawab atas perintah yang Anda jalankan di sesi AgentCore Runtime Anda. AWS menyediakan infrastruktur dan isolasi yang aman di tingkat microVM. Anda bertanggung jawab atas perintah yang Anda jalankan, data yang Anda proses, dan kontrol akses yang Anda konfigurasikan.

Batas keamanan untuk sesi shell (terminal) adalah microVM. Setiap sesi AgentCore Runtime berjalan di microVM terisolasi dengan kernel, memori, dan filesystem sendiri. Sesi Shell tidak dapat mengakses beban kerja pelanggan lain atau keluar dari batas VM. Namun, di dalam VM Anda, perintah shell memiliki akses penuh ke sistem file container dan kredenSIAL atau rahasia apa pun yang telah Anda konfigurasikan.

Audit dengan CloudWatch Log

AgentCore Runtime mengirimkan ID permintaan dan metadata koneksi ke grup CloudWatch log Amazon Logs agen Anda. Anda dapat menggunakan log ini untuk memantau aktivitas koneksi shell dan memelihara jejak audit. Kon I/O ten terminal (stdin/stdout) dialirkan ke klien Anda dan tidak dicatat oleh layanan.

Audit dengan CloudTrail

AWS CloudTrail merek InvokeAgentRuntimeCommandShell am panggilan API di akun Anda. Setiap catatan menyertakan metadata seperti identitas pemanggil, stempel waktu, alamat IP sumber, dan status respons. CloudTrail tidak mencatat permintaan atau payload respons. Gunakan CloudTrail untuk mengaudit siapa yang membuka sesi shell dan kapan, kemudian berkorelasi dengan CloudWatch Log menggunakan ID permintaan untuk detail koneksi.

Untuk beban kerja sensitif, pertimbangkan untuk menerapkan kontrol tambahan seperti:

  • Menggunakan kebijakan IAM untuk membatasi kepala sekolah mana yang dapat memanggil InvokeAgentRuntimeCommandShell

  • Mengkonfigurasi titik akhir VPC untuk menjaga lalu lintas dalam jaringan Anda

  • Menyiapkan filter metrik CloudWatch Logs dan alarm untuk mendeteksi pola koneksi yang tidak terduga

  • Meninjau CloudTrail log secara teratur untuk upaya akses yang tidak sah

Penanganan kesalahan

Saat membuat koneksi sesi shell, Anda mungkin mengalami kesalahan berikut selama pemut WebSocket akhiran:

ValidationException

Terjadi ketika parameter permintaan tidak valid. Hal ini dapat terjadi jika ID sesi kurang dari 33 karakter, fitur tidak diaktifkan di wilayah target, atau agen tidak dalam status READY.

AccessDeniedException

Terjadi ketika Anda tidak memiliki izin yang diperlukan. Pastikan kebijakan IAM Anda menyertakan bedrock-agentcore:InvokeAgentRuntimeCommandShell izin tersebut.

ResourceNotFoundException

Terjadi ketika runtime agen yang ditentukan tidak dapat ditemukan. Verifikasi bahwa runtime ARN sudah benar.

RuntimeClientError (424)

Terjadi dalam beberapa skenario: (1) Sesi shell bersamaan maksimum (terminal) tercapai (10 terbuka) — tutup sesi yang ada dan coba lagi. (2) Format ID Shell tidak valid - harus 1-128 karakter alfanumerik, garis bawah, atau tanda hubung. (3) Runtime tidak dapat dijangkau - coba lagi setelah mundur. Parsing error bidang JSON badan respons untuk membedakan penyebab.

ThrottlingException

Terjadi saat Anda melebihi batas tarif API. Terapkan logika mundur eksponensial dan coba lagi.

ConflictException

Koneksi lain mengklaim hal yang sama shellId secara bersamaan. Coba lagi setelah 1 detik. Ini adalah kondisi balapan yang sempit (bukan keadaan persisten) dan segera diselesaikan saat dicoba lagi.

RetryableConflictException (409)

Terjadi ketika Anda membuka koneksi sesi shell saat layanan menyediakan atau menghancurkan sesi target. Pesannya adalahSession operation in progress, please retry. Kondisi ini bersifat sementara dan dapat dicoba kembali. Jendelanya singkat dan sesi yang sudah berjalan tidak terpengaruh. Coba lagi dengan mundur eksponensial pendek. Karena InvokeAgentRuntimeCommandShell merupakan WebSocket API, SDK tidak men AWS cobanya ulang secara otomatis. Coba lagi sendiri.

Setelah terhubung, kode tutup berikut menunjukkan mengapa koneksi dihentikan:

Kode Arti Tindakan Klien

1000

Penutupan normal - cangkang keluar dengan bersih atau terputus anggun

Tampilan “terputus”. Penghentian normal.

1001

Pergi — server menyebarkan atau mematikan

Auto-reconnect dengan disimpanshellId.

1003

Data tidak didukung - dikirim setelah 5 bingkai teks berturut-turut (protokol biner saja)

JANGAN sambungkan kembali secara otomatis. Beralih ke bingkai biner.

1006

Penutupan abnormal - disintesis secara lokal ketika tidak ada bingkai dekat yang diterima (kematian jaringan, TCP RST)

Auto-reconnect dengan disimpanshellId.

1008

Pelanggaran kebijakan — TTL koneksi kedaluwarsa (1 jam), batas kecepatan bingkai terlampaui (250 frames/sec), atau luapan buffer tulis

Auto-reconnect untuk kedaluwarsa TTL (TTL baru saat menyambung kembali). Untuk batas tarif: mundur, lalu sambungkan kembali.

1009

Pesan terlalu besar — muatan bingkai melebihi 64 KB

Kurangi ukuran bingkai (potongan menjadi <64 KB), lalu sambungkan kembali. Session masih hidup.

1011

Kesalahan server - kegagalan internal yang tidak terduga

Coba lagi dengan mundur.

4000

Diganti — klien lain terhubung dengan yang sama shellId

JANGAN sambungkan kembali secara otomatis. Tampilkan “sesi terlampir dari klien lain”.

Praktik terbaik

Ikuti praktik terbaik ini saat menggunakanInvokeAgentRuntimeCommandShell:

  • Gunakan unik shellId (seperti UUID) untuk setiap sesi logis untuk mengaktifkan koneksi ulang. Simpan shellId di sisi klien.

  • Gunakan ReconnectConfig di SDK untuk secara otomatis menangani gangguan jaringan sementara tanpa logika koneksi ulang manual.

  • Baca bingkai keluaran segera. Jika klien tertinggal, buffer tulis server terisi dan koneksi ditutup dengan kode1008.

  • Untuk input besar (seperti menempelkan file), bagi konten menjadi potongan-potongan di bawah 64 KB per frame untuk menghindari kode tertutup. 1009

  • Tetapkan batas waktu koneksi yang sesuai. Durasi koneksi maksimum adalah 1 jam - sambungkan kembali dengan yang sama shellId untuk melanjutkan melampaui itu.

  • Tutup sesi secara eksplisit setelah selesai. Sesi terpisah dihitung terhadap batas 10 sesi.

Kuota dan batas

Kuota Nilai Deskripsi

Ukuran muatan bingkai maksimum

64 KB

Bingkai yang melebihi batas ini menghasilkan kode tertutup1009.

Laju bingkai

250 frames/sec

Melebihi ini memicu kode tutup1008.

Durasi koneksi maksimum

1 jam

Koneksi ditutup dengan kode1008. Sambungkan kembali menggunakan yang sama shellId untuk melanjutkan.

Sesi shell bersamaan (terminal) per runtime

10

Koneksi baru ditolak jika 10 sesi sudah terbuka. Tutup sesi yang ada dan coba lagi.

Buffer koneksi ulang

256 KB

Output maksimum diputar ulang saat menghubungkan kembali ke shell.

Untuk batas layanan lengkap, lihat Ku ota untuk Amazon Bedrock AgentCore.