View a markdown version of this page

Terminalbefehle mit einer Ausführungsrolle verwenden - Amazon Grundgestein AgentCore

Terminalbefehle mit einer Ausführungsrolle verwenden

Sie können ein benutzerdefiniertes Code Interpreter-Tool mit einer Ausführungsrolle für upload/download Dateien aus Amazon S3 erstellen. Dadurch kann Ihr Code mit S3-Buckets interagieren, um Daten zu speichern und abzurufen.

Voraussetzungen

Bevor Sie einen benutzerdefinierten Code-Interpreter mit S3-Zugriff erstellen, müssen Sie:

  1. Erstellen Sie einen S3-Bucket (z. B. DOC-EXAMPLE-BUCKET

  2. Erstellen Sie einen Ordner innerhalb des Buckets (z. B.output_artifacts)

  3. Erstellen Sie eine IAM-Rolle mit der folgenden Vertrauensrichtlinie:

    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }
  4. Fügen Sie der Rolle die folgenden Berechtigungen hinzu:

    { "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:ResourceAccount": "${aws:PrincipalAccount}" } } } ] }

Python-Beispiel-Code

Sie können die S3-Integration mit boto3 (AWS SDK für Python) implementieren. Im folgenden Beispiel wird boto3 verwendet, um einen benutzerdefinierten Code-Interpreter mit einer Ausführungsrolle zu erstellen, der Dateien in Amazon S3 hochladen oder Dateien von Amazon S3 herunterladen kann.

Anmerkung

Bevor Sie diesen Code ausführen, stellen Sie sicher, dass Sie und durch Ihre AWS Region REGION und <awsaccountid> AWS Kontonummer ersetzen.

import boto3 import json import time REGION = "<Region>" CP_ENDPOINT_URL = f"https://bedrock-agentcore-control.{REGION}.amazonaws.com" DP_ENDPOINT_URL = f"https://bedrock-agentcore.{REGION}.amazonaws.com" # Update the accountId to reflect the correct S3 path. S3_BUCKET_NAME = "DOC-EXAMPLE-BUCKET" bedrock_agentcore_control_client = boto3.client( 'bedrock-agentcore-control', region_name=REGION, endpoint_url=CP_ENDPOINT_URL ) bedrock_agentcore_client = boto3.client( 'bedrock-agentcore', region_name=REGION, endpoint_url=DP_ENDPOINT_URL ) unique_name = f"s3InteractionEnv_{int(time.time())}" create_response = bedrock_agentcore_control_client.create_code_interpreter( name=unique_name, description="Combined test code sandbox", executionRoleArn="arn:aws:iam::123456789012:role/S3InteractionRole", networkConfiguration={ "networkMode": "SANDBOX" } ) code_interpreter_id = create_response['codeInterpreterId'] print(f"Created custom interpreter ID: {code_interpreter_id}") session_response = bedrock_agentcore_client.start_code_interpreter_session( codeInterpreterIdentifier=code_interpreter_id, name="combined-test-session", sessionTimeoutSeconds=1800 ) session_id = session_response['sessionId'] print(f"Created session ID: {session_id}") print(f"Downloading CSV generation script from S3") command_to_execute = f"aws s3 cp s3://{S3_BUCKET_NAME}/generate_csv.py ." response = bedrock_agentcore_client.invoke_code_interpreter( codeInterpreterIdentifier=code_interpreter_id, sessionId=session_id, name="executeCommand", arguments={ "command": command_to_execute } ) for event in response["stream"]: print(json.dumps(event["result"], default=str, indent=2)) print(f"Executing the CSV generation script") response = bedrock_agentcore_client.invoke_code_interpreter( codeInterpreterIdentifier=code_interpreter_id, sessionId=session_id, name="executeCommand", arguments={ "command": "python generate_csv.py 5 10" } ) for event in response["stream"]: print(json.dumps(event["result"], default=str, indent=2)) print(f"Uploading generated artifact to S3") command_to_execute = f"aws s3 cp generated_data.csv s3://{S3_BUCKET_NAME}/output_artifacts/" response = bedrock_agentcore_client.invoke_code_interpreter( codeInterpreterIdentifier=code_interpreter_id, sessionId=session_id, name="executeCommand", arguments={ "command": command_to_execute } ) for event in response["stream"]: print(json.dumps(event["result"], default=str, indent=2)) print(f"Stopping the code interpreter session") stop_response = bedrock_agentcore_client.stop_code_interpreter_session( codeInterpreterIdentifier=code_interpreter_id, sessionId=session_id ) print(f"Deleting the code interpreter") delete_response = bedrock_agentcore_control_client.delete_code_interpreter( codeInterpreterId=code_interpreter_id ) print(f"Code interpreter status from response: {delete_response['status']}") print(f"Clean up completed, script run successful")

In diesem Beispiel wird Folgendes veranschaulicht:

  • Erstellen Sie einen benutzerdefinierten Code-Interpreter mit einer Ausführungsrolle

  • Netzwerkzugriff konfigurieren — Wählen Sie den Modus ÖFFENTLICH, wenn Ihr Codeinterpreter eine Verbindung zum öffentlichen Internet herstellen muss. Wenn Ihr Code Interpreter Zugriff auf Amazon S3 benötigt, wählen Sie den SANDBOX-Modus.

  • Laden Sie Dateien zwischen der Code Interpreter-Umgebung und S3 hoch und laden Sie sie herunter

  • Führen Sie Befehle und Skripts in der Code Interpreter-Umgebung aus

  • Bereinigen Sie die Ressourcen, wenn Sie fertig sind