Inicio rápido: Crea y ejecuta un sandbox de Azure Container Apps usando el SDK de Python

En este inicio rápido, usas el SDK de Python para provisionar un grupo sandbox, lanzar un sandbox, ejecutar un comando y limpiar todos los recursos creados.

Prerequisites

  • Una suscripción a Azure con permiso para crear grupos de recursos.
  • CLI de Azure (az) instalado e iniciado sesión.
  • uv con Python 3.13+.

Configuración del entorno

Instala el SDK, inicia sesión en Azure y escribe un .env archivo para los scripts de este inicio rápido.

uv venv
uv pip install azure-containerapps-sandbox azure-mgmt-resource azure-mgmt-authorization

# Sign in so DefaultAzureCredential picks up your identity
az login

cat > .env <<EOF
AZURE_SUBSCRIPTION_ID=$(az account show --query id -o tsv)
AZURE_RESOURCE_GROUP=my-rg
AZURE_SANDBOX_GROUP=my-sandbox-group
AZURE_REGION=eastus2
AZURE_PRINCIPAL_ID=$(az ad signed-in-user show --query id -o tsv)
EOF

Crea el grupo de recursos y el grupo de entorno de pruebas, y concédete acceso al plano de datos. Guardar como setup.py:

import os, uuid
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.authorization import AuthorizationManagementClient
from azure.containerapps.sandbox import SandboxGroupManagementClient

credential = DefaultAzureCredential()
sub = os.environ["AZURE_SUBSCRIPTION_ID"]
rg = os.environ["AZURE_RESOURCE_GROUP"]
group = os.environ["AZURE_SANDBOX_GROUP"]
region = os.environ["AZURE_REGION"]

ResourceManagementClient(credential, sub).resource_groups.create_or_update(
    rg, {"location": region},
)

SandboxGroupManagementClient(
    credential, subscription_id=sub, resource_group=rg,
).begin_create_group(group, location=region).result()

# Container Apps SandboxGroup Data Owner (built-in role)
ROLE_DEF_ID = "c24cf47c-5077-412d-a19c-45202126392c"
scope = f"/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.App/sandboxGroups/{group}"

AuthorizationManagementClient(credential, sub).role_assignments.create(
    scope=scope,
    role_assignment_name=str(uuid.uuid4()),
    parameters={
        "properties": {
            "roleDefinitionId": f"/subscriptions/{sub}/providers/Microsoft.Authorization/roleDefinitions/{ROLE_DEF_ID}",
            "principalId": os.environ["AZURE_PRINCIPAL_ID"],
            "principalType": "User",
        }
    },
)
print(f"Setup complete: rg={rg}, sandbox_group={group}, role granted.")
uv run --env-file .env python setup.py

La asignación de roles tarda entre 30 y 60 segundos en propagarse. Si main.py devuelve un 403, espera un minuto y vuelve a intentarlo.

Crea y ejecuta un sandbox

Guardar como main.py:

import os
from azure.identity import DefaultAzureCredential
from azure.containerapps.sandbox import SandboxGroupClient, endpoint_for_region

credential = DefaultAzureCredential()
client = SandboxGroupClient(
    endpoint_for_region(os.environ["AZURE_REGION"]), credential,
    subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
    resource_group=os.environ["AZURE_RESOURCE_GROUP"],
    sandbox_group=os.environ["AZURE_SANDBOX_GROUP"],
)

# Create a sandbox
sandbox = client.begin_create_sandbox(disk="ubuntu").result()

# Run a command
result = sandbox.exec("echo 'Hello from Azure Container Apps Sandbox.'")
print(result.stdout)

# Clean up
sandbox.delete()

Ejecute el script:

uv run --env-file .env python main.py

Limpieza de recursos

Para eliminar el grupo sandbox y el grupo de recursos, guarda el siguiente código como teardown.py:

import os
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.containerapps.sandbox import SandboxGroupManagementClient

credential = DefaultAzureCredential()
sub = os.environ["AZURE_SUBSCRIPTION_ID"]
rg = os.environ["AZURE_RESOURCE_GROUP"]

SandboxGroupManagementClient(
    credential, subscription_id=sub, resource_group=rg,
).begin_delete_group(os.environ["AZURE_SANDBOX_GROUP"]).result()

ResourceManagementClient(credential, sub).resource_groups.begin_delete(rg).result()
print(f"Teardown complete: {rg} deleted.")

Ejecuta el script de limpieza.

uv run --env-file .env python teardown.py

Pasos siguientes