Executando Comandos em um Sandbox

Execute comandos de shell, aguarde saída, eventos de fluxo e cancele o trabalho em um sandbox em execução.

Comece com um sandbox no estado RUNNING. Defina seu perfil de autenticação de sessão, região e ID de sandbox:

profile_name="DEFAULT"
region="us-chicago-1"
sandbox_id="SANDBOX_ID"

Executando um Comando e Aguardando Saída

Use run-and-wait para um comando cujo resultado você deseja antes de continuar:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run-and-wait \
  --sandbox-id "$sandbox_id" \
  --command "pwd && ls -la /workspace" \
  --timeout PT5M

Inspecione o ID do comando retornado, a saída padrão, o erro padrão e o código de saída. Um código de saída diferente de zero indica que o comando reportou um erro.

Saída de Streaming

Use run-and-stream para ler a saída à medida que o comando for executado. Este exemplo imprime três mensagens:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run-and-stream \
  --sandbox-id "$sandbox_id" \
  --command "sh -lc 'for i in 1 2 3; do echo message-\$i; sleep 1; done'" \
  --timeout PT5M \
  --file -

Iniciando um Comando de Forma Assíncrona

Use run para iniciar um comando e salvar seu ID para recuperação ou cancelamento de saída:

command_id=$(oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run \
  --sandbox-id "$sandbox_id" \
  --command "sleep 30" \
  --timeout PT2M \
  --query 'data.id' --raw-output)

Recuperar saída capturada:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command get-output \
  --sandbox-id "$sandbox_id" \
  --command-id "$command_id" \
  --from-seq 0

Ou eventos de fluxo para o comando existente:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command stream \
  --sandbox-id "$sandbox_id" \
  --command-id "$command_id" \
  --from-seq 0

O valor da sequência 0 inicia a recuperação desde o início.

Cancelando um Comando

Para solicitar o encerramento de um comando em execução, envie SIGTERM:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command cancel \
  --sandbox-id "$sandbox_id" \
  --command-id "$command_id" \
  --signal SIGTERM

Cancelar um comando e interromper o sandbox são operações separadas. Consulte Interrompendo um Sandbox para encerrar o runtime.

Executando um Serviço em uma Porta Publicada

Ao criar o sandbox, use --publish-ports para expor a porta de que seu serviço precisa. Por exemplo:

project_id="PROJECT_OCID"

sandbox_id=$(oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox create \
  --project-id "$project_id" \
  --display-name preview-sandbox \
  --runtime python-3.11 \
  --shape SMALL \
  --publish-ports '["8080"]' \
  --expiration-duration PT30M \
  --wait-for-state RUNNING \
  --query 'data.id' --raw-output)
Importante

As portas publicadas não têm autenticação de aplicativo fornecida pela plataforma. Qualquer pessoa que obtenha um URL publicado pode acessar essa porta enquanto o sandbox é executado, a menos que seu aplicativo restrinja o acesso. Adicione autenticação quando necessário e publique apenas as portas necessárias para sua carga de trabalho.

Para uma visualização temporária contendo apenas arquivos não sensíveis, inicie um servidor em um diretório dedicado:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox-command run \
  --sandbox-id "$sandbox_id" \
  --command "mkdir -p /workspace/preview && python3 -m http.server 8080 --bind 0.0.0.0 --directory /workspace/preview" \
  --timeout PT30M

Obtenha a sandbox e leia a entrada published-ports cuja key é 8080. Seu value é o URL do serviço:

oci --profile "$profile_name" --auth security_token --region "$region" \
  generative-ai-sandbox sandbox get \
  --sandbox-id "$sandbox_id"

Aguarde o servidor estar pronto antes de se conectar. Interrompa o comando ou o sandbox quando terminar a visualização.