View a markdown version of this page

Utilizzo dei comandi da terminale con un ruolo di esecuzione - Amazon Bedrock AgentCore

Utilizzo dei comandi da terminale con un ruolo di esecuzione

Puoi creare uno strumento di interpretazione del codice personalizzato con un ruolo di esecuzione per upload/download i file da Amazon S3. Ciò consente al codice di interagire con i bucket S3 per l'archiviazione e il recupero dei dati.

Prerequisiti

Prima di creare un interprete di codice personalizzato con accesso S3, devi:

  1. Creare un bucket S3 (ad es.) DOC-EXAMPLE-BUCKET

  2. Crea una cartella all'interno del bucket (ad es.) output_artifacts

  3. Crea un ruolo IAM con la seguente politica di fiducia:

    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }
  4. Aggiungi le seguenti autorizzazioni al ruolo:

    { "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}" } } } ] }

Codice di esempio Python

Puoi implementare l'integrazione con S3 usando boto3 (AWS SDK per Python). L'esempio seguente utilizza boto3 per creare un interprete di codice personalizzato con un ruolo di esecuzione in grado di caricare o scaricare file da Amazon S3.

Nota

Prima di eseguire questo codice, assicurati di sostituire REGION e <awsaccountid> con la tua AWS regione e il numero di account. AWS

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")

Questo esempio illustra come:

  • Crea un interprete di codice personalizzato con un ruolo di esecuzione

  • Configura l'accesso alla rete: scegli la modalità PUBBLICA se il tuo interprete di codice deve connettersi alla rete Internet pubblica. Se il tuo interprete di codice necessita di un accesso limitato ad Amazon S3, scegli la modalità SANDBOX.

  • Carica e scarica file tra l'ambiente Code Interpreter e S3

  • Esegui comandi e script all'interno dell'ambiente Code Interpreter

  • Pulisci le risorse al termine