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 membawa seluruh input. Hal ini memungkinkan debugging, inspeksi lingkungan, dan membangun pengalaman terminal dalam aplikasi Anda.
Untuk meneleponInvokeAgentRuntimeCommandShell, 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 dan. shellId
Koneksi mendukung:
| Fitur | Deskripsi |
|---|---|
|
Keadaan persisten |
Variabel lingkungan, direktori kerja, dan riwayat perintah membawa masukan dalam sesi yang sama. |
|
Rekoneksi |
Berikan hal yang sama |
|
Beberapa cangkang 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 status READY
catatan
Agen yang dibuat setelah 5 Juni 2026 mendukung shell interaktif (terminal) secara otomatis. Jika Anda menggunakan agen Anda sebelum tanggal ini, Anda harus menerapkannya kembali untuk memperbarui runtime agen.
Menggunakan AgentCore CLI
Untuk petunjuk instalasi dan penyiapan, lihat Memulai AgentCore Runtime menggunakan CLI.
CLI memberikan pengalaman terminal bawaan dengan. agentcore exec
agentcore exec --it
Untuk terhubung ke runtime tertentu:
agentcore exec --it --runtime <runtime-arn> --region us-west-2
Tekan Ctrl+] untuk melepaskan dari cangkang tanpa menutupnya. CLI mencetak perintah sambung kembali:
agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>
Untuk perintah satu tembakan, 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
Menggunakan AgentCore SDK
Instal Python SDK:
pip install bedrock-agentcore
contoh
Rekoneksi
Pola yang umum digunakan shellId untuk menyambung kembali ke shell setelah terputus, 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 turun. 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 sampel
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 tes, 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 di antara langkah-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 hidup lebih lama dari satu permintaan HTTP. 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 diakumulasikan oleh perintah sebelumnya (variabel yang diekspor,
cdperubahan) tersedia untuk yang lebih baru. - Pembingkaian biner berakhir WebSocket
-
Terminal I/O dialirkan sebagai WebSocket frame biner. Ini mendukung urutan kontrol terminal mentah, warna, gerakan kursor, dan aplikasi layar penuh tanpa pengkodean overhead.
- Koneksi ulang dengan replay output
-
Saat Anda menyambung kembali menggunakan yang sama
shellId, layanan memutar ulang hingga 256 KB output terbaru. Ini memungkinkan Anda pulih dari gangguan jaringan tanpa kehilangan konteks. Proses shell terus berjalan selama pemutusan. - Batas sesi
-
Ketika 10 sesi shell (terminal) sudah terbuka saat runtime, koneksi baru ditolak dengan kesalahan. Anda harus menutup sesi yang ada sebelum membuka yang baru.
Pertimbangan keamanan
Tip
Untuk tampilan gabungan dari semua rekomendasi keamanan Runtime, lihat Praktik terbaik keamanan untuk AgentCore Runtime.
penting
Di bawah model tanggung jawab AWS bersama, Anda bertanggung jawab atas perintah yang Anda jalankan dalam 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 dalam microVM terisolasi dengan kernel, memori, dan filesystem sendiri. Sesi Shell tidak dapat mengakses beban kerja pelanggan lain atau lolos dari batas VM. Namun, dalam VM Anda, perintah shell memiliki akses penuh ke sistem file kontainer dan kredensyal 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 mempertahankan jejak audit. I/O Konten terminal (stdin/stdout) dialirkan ke klien Anda dan tidak dicatat oleh layanan.
Audit dengan CloudTrail
AWS CloudTrail merekam panggilan InvokeAgentRuntimeCommandShell API di akun Anda. Setiap catatan mencakup metadata seperti identitas pemanggil, stempel waktu, alamat IP sumber, dan status respons. CloudTrail tidak mencatat permintaan atau muatan respons. Gunakan CloudTrail untuk mengaudit siapa yang membuka sesi shell dan kapan, lalu berkorelasi dengan CloudWatch Log menggunakan ID permintaan untuk detail koneksi.
Untuk beban kerja yang sensitif, pertimbangkan untuk menerapkan kontrol tambahan seperti:
-
Menggunakan kebijakan IAM untuk membatasi prinsipal mana yang dapat memanggil
InvokeAgentRuntimeCommandShell -
Mengkonfigurasi titik akhir VPC untuk menjaga lalu lintas dalam jaringan Anda
-
Menyiapkan filter metrik CloudWatch Log 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 WebSocket pemutakhiran:
- ValidationException
-
Terjadi ketika parameter permintaan tidak valid. 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 bahwa kebijakan IAM Anda mencakup
bedrock-agentcore:InvokeAgentRuntimeCommandShellizin. - ResourceNotFoundException
-
Terjadi ketika runtime agen yang ditentukan tidak dapat ditemukan. Verifikasi bahwa ARN runtime 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 backoff. Mengurai
errorbidang JSON badan respons untuk membedakan penyebab. - ThrottlingException
-
Terjadi ketika Anda melebihi batas tarif API. Menerapkan backoff eksponensial dan coba lagi logika.
- ConflictException
-
Koneksi lain mengklaim hal yang sama
shellIdsecara bersamaan. Coba lagi setelah 1 detik. Ini adalah kondisi balapan yang sempit (bukan keadaan persisten) dan segera diselesaikan dengan mencoba lagi.
Setelah terhubung, kode tutup berikut menunjukkan mengapa koneksi dihentikan:
| Kode | Arti | Tindakan Klien |
|---|---|---|
|
|
Penutupan normal - cangkang keluar dengan bersih atau terputus dengan anggun |
Tampilan “terputus”. Pengakhiran normal. |
|
|
Pergi - server menyebarkan atau mematikan |
Auto-reconnect dengan disimpan |
|
|
Data yang tidak didukung - dikirim setelah 5 frame teks berturut-turut (protokol biner saja) |
JANGAN sambungkan kembali secara otomatis. Beralih ke frame biner. |
|
|
Penutupan abnormal - disintesis secara lokal ketika tidak ada bingkai tutup yang diterima (kematian jaringan, TCP RST) |
Auto-reconnect dengan disimpan |
|
|
Pelanggaran kebijakan — koneksi TTL kedaluwarsa (1 jam), batas frame rate terlampaui (250 frames/sec), atau write buffer overflow |
Auto-reconnect untuk kedaluwarsa TTL (TTL baru saat menyambung kembali). Untuk batas tarif: mundur, lalu sambungkan kembali. |
|
|
Pesan terlalu besar — payload frame melebihi 64 KB |
Kurangi ukuran bingkai (potongan menjadi <64 KB), lalu sambungkan kembali. Sesi masih hidup. |
|
|
Kesalahan server - kegagalan internal yang tidak terduga |
Coba lagi dengan backoff. |
|
|
Diganti - klien lain yang terhubung dengan yang sama |
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. SimpanshellIddi sisi klien. -
Gunakan
ReconnectConfigdalam SDK untuk secara otomatis menangani interupsi jaringan transien tanpa logika rekoneksi manual. -
Baca bingkai keluaran segera. Jika klien tertinggal, buffer tulis server terisi dan koneksi ditutup dengan kode.
1008 -
Untuk input besar (seperti menempelkan file), pisahkan konten menjadi potongan-potongan di bawah 64 KB per frame untuk menghindari kode penutupan.
1009 -
Tetapkan batas waktu koneksi yang sesuai. Durasi koneksi maksimum adalah 1 jam - sambungkan kembali dengan yang sama
shellIduntuk melanjutkan lebih dari itu. -
Tutup sesi secara eksplisit setelah selesai. Sesi terpisah dihitung menuju batas 10 sesi.
Kuota dan batas
| Kuota | Nilai | Deskripsi |
|---|---|---|
|
Ukuran payload frame maksimum |
64 KB |
Bingkai yang melebihi batas ini menghasilkan kode |
|
Laju bingkai |
250 frames/sec |
Melebihi ini memicu kode tutup. |
|
Durasi koneksi maksimum |
1 jam |
Koneksi ditutup dengan kode |
|
Sesi shell bersamaan (terminal) per runtime |
10 |
Koneksi baru ditolak jika 10 sesi sudah terbuka. Tutup sesi yang ada dan coba lagi. |
|
Penyangga penyambungan ulang |
256 KB |
Output maksimum diputar ulang saat menyambung kembali ke shell. |
Untuk batas layanan lengkap, lihat Kuota untuk Amazon Bedrock AgentCore.