Utilisation de commandes de terminal avec un rôle d'exécution
Vous pouvez créer un outil d'interprétation de code personnalisé doté d'un rôle d'exécution pour upload/download les fichiers d'Amazon S3. Cela permet à votre code d'interagir avec les compartiments S3 pour stocker et récupérer des données.
Conditions préalables
Avant de créer un interpréteur de code personnalisé avec accès S3, vous devez :
-
Créez un compartiment S3 (par exemple,
DOC-EXAMPLE-BUCKET) -
Créez un dossier dans le compartiment (par exemple,
output_artifacts) -
Créez un rôle IAM avec la politique de confiance suivante :
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] } -
Ajoutez les autorisations suivantes au rôle :
{ "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}" } } } ] }
Exemple de code python
Vous pouvez implémenter l'intégration S3 à l'aide de boto3 (AWS SDK pour Python). L'exemple suivant utilise boto3 pour créer un interpréteur de code personnalisé doté d'un rôle d'exécution capable de charger des fichiers vers ou de télécharger des fichiers depuis Amazon S3.
Note
Avant d'exécuter ce code, assurez-vous de remplacer REGION et <awsaccountid> par votre AWS région et votre numéro de AWS compte.
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")
Cet exemple vous montre comment :
-
Création d'un interpréteur de code personnalisé avec un rôle d'exécution
-
Configurer l'accès au réseau - Choisissez le mode PUBLIC si votre interpréteur de code doit se connecter à l'Internet public. Si votre interpréteur de code a besoin d'un accès limité à Amazon S3, choisissez le mode SANDBOX.
-
Charger et télécharger des fichiers entre l'environnement Code Interpreter et S3
-
Exécuter des commandes et des scripts dans l'environnement de l'interpréteur de code
-
Nettoyez les ressources lorsque vous avez terminé