Introducción

Provisionar entornos de Amazon SageMaker Unified Studio manualmente consume tiempo y genera inconsistencias entre cuentas y entornos. La nueva integración con Terraform resuelve este problema al permitir que los equipos de infraestructura definan, versionen y desplieguen dominios de SageMaker como código, integrándose nativamente con pipelines de IaC existentes. En esta guía, vas a crear un dominio de SageMaker Unified Studio usando el módulo oficial terraform-aws-sagemaker-unified-studio, configurar IAM roles mínimos necesarios y desplegar proyectos dentro del dominio. El resultado será un entorno reproducible, gobernado y conectado a tus servicios de AWS.

Qué es y para qué sirve

Amazon SageMaker Unified Studio es un entorno unificado de desarrollo para equipos de datos que abarca desde integración de datos hasta modelos de ML y GenAI, todo gobernado por un catálogo compartido. Hasta ahora, provisionar estos dominios requería clicks en la consola o scripts ad-hoc. Con el soporte de Terraform, podés:

  • Automatizar dominios: Definir dominios de SageMaker en Terraform y desplegarlos en múltiples cuentas/regiones usando tus pipelines de IaC.
  • Controlar acceso: Asignar IAM roles específicos a usuarios y grupos dentro del dominio.
  • Gobernanza centralizada: Usar perfiles de proyecto y blueprints para estandarizar entornos de desarrollo, staging y producción.
  • Integración nativa: El módulo usa el Terraform AWS Cloud Control Provider para manejar recursos AWS directamente.

El módulo oficial terraform-aws-sagemaker-unified-studio abstrae la complejidad de configurar dominios, roles IAM y proyectos, permitiendo que te enfoques en la lógica de tus pipelines.

Prerequisitos

Verificá que cumplís con estos requisitos antes de empezar:

ComponenteVersión mínimaNotas
**Terraform**1.6.0+Usá [tfenv](https://github.com/tfutils/tfenv) para gestionar versiones.
**AWS Provider**5.0+En BLOCK15 del proyecto.
**AWS CLI**2.13.0+Para validar credenciales.
**IAM Permissions**BLOCK16 (temporal) o políticas mínimasNecesitás permisos para BLOCK17, BLOCK18, BLOCK19, etc.
**Región AWS**Us-east-1, eu-west-1, ap-southeast-2, etc.Verificá disponibilidad en [AWS Regional Services List](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).
**GitHub**Acceso a repositorios públicosPara clonar el módulo de ejemplo.
Notas críticas:
  • El módulo no crea VPC ni subredes. Asegurate de tener una VPC configurada con al menos 2 subredes privadas (para SageMaker) y NAT Gateway si necesitás salida a internet.
  • Costos: SageMaker Unified Studio tiene costo por hora de cómputo y almacenamiento. Revisá la página de pricing antes de desplegar.

Guía paso a paso

1. Configurá credenciales AWS y validá acceso

# Configurá credenciales en tu máquina local
aws configure

# Valida que tenés acceso
aws sts get-caller-identity
Resultado esperado: Un JSON con tu Account, UserId y Arn.

2. Inicializá un proyecto Terraform

mkdir sagemaker-unified-studio && cd sagemaker-unified-studio
touch main.tf outputs.tf terraform.tfvars
Contenido mínimo de main.tf:
terraform {
  required_version = ">= 1.6.0"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"  # Cambiá según tu región
}

3. Cloná y configurá el módulo oficial

git clone https://github.com/terraform-aws-modules/terraform-aws-sagemaker-unified-studio.git modules/sagemaker-unified-studio
Contenido de terraform.tfvars:
# Configuración básica del dominio
sagemaker_unified_studio_domain = {
  name          = "unified-studio-demo"
  auth_mode     = "IAM"  # Opción: "SSO" si usás AWS IAM Identity Center
  default_user_settings = {
    execution_role = aws_iam_role.sagemaker_execution.arn
  }
}

# Configuración de IAM (creada en paso 4)
iam_role_arn = aws_iam_role.sagemaker_execution.arn

4. Creá roles IAM para SageMaker

Crea iam.tf:
resource "aws_iam_role" "sagemaker_execution" {
  name               = "sagemaker-unified-studio-execution-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Action    = "sts:AssumeRole"
      Effect    = "Allow"
      Principal = { Service = "sagemaker.amazonaws.com" }
    }]
  })
}

resource "aws_iam_role_policy_attachment" "sagemaker_full_access" {
  role       = aws_iam_role.sagemaker_execution.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSageMakerFullAccess"
}

resource "aws_iam_role_policy_attachment" "s3_read_only" {
  role       = aws_iam_role.sagemaker_execution.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
}
Resultado esperado:
terraform plan

Deberías ver que se crearán 3 recursos IAM y el dominio de SageMaker.

5. Desplegá el dominio con Terraform

terraform init
terraform plan -out=tfplan
terraform apply tfplan
Verificá el despliegue:
  1. En la consola de AWS, navegá a Amazon SageMaker > Unified Studio > Domains.
  2. Deberías ver un dominio llamado unified-studio-demo con estado InService.

6. Creá un proyecto dentro del dominio

Modificá main.tf:
module "sagemaker_unified_studio" {
  source = "./modules/sagemaker-unified-studio"

  # ... (configuración anterior)

  projects = {
    "ml-demo" = {
      description = "Proyecto de ML con notebooks y endpoints"
      blueprints  = ["data-science", "mlops"]  # Blueprints disponibles: "mlops", "data-science", "feature-store"
    }
  }
}
Desplegá los cambios:
terraform apply
Resultado esperado:

En SageMaker > Unified Studio > Projects, deberías ver un proyecto llamado ml-demo con los blueprints aplicados.

7. Conectá usuarios al dominio (opcional)

Para asignar usuarios o grupos a roles dentro del dominio, usá la política IAM creada:

resource "aws_iam_user" "data_scientist" {
  name = "analista-datos-01"
}

resource "aws_iam_user_policy_attachment" "sagemaker_user_access" {
  user       = aws_iam_user.data_scientist.name
  policy_arn = module.sagemaker_unified_studio.sagemaker_user_policy_arn
}
Acceso:
  1. El usuario deberá usar la consola de SageMaker con el rol asignado.
  2. Para acceso programático, configurá credenciales temporales con aws sts assume-role.

8. Integrá el módulo en tu pipeline de CI/CD

Ejemplo para GitHub Actions (.github/workflows/deploy.yml):
name: Deploy SageMaker Unified Studio
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: hashicorp/setup-terraform@v2
        with:
          terraform_version: 1.6.0
      - run: terraform init
      - run: terraform apply -auto-approve
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: us-east-1

9. Destruí el entorno (cuando no lo necesites)

terraform destroy -auto-approve
Nota: SageMaker cobra por hora activa. Borrá el dominio si no lo usás.

Consideraciones y buenas prácticas

Limitaciones conocidas

  1. Regiones soportadas: El módulo funciona solo en regiones donde SageMaker Unified Studio está disponible. Verificá la lista oficial.
  2. Blueprints fijos: Los blueprints (data-science, mlops, etc.) son estáticos. Si necesitás personalizarlos, creá un módulo local que extienda esta configuración.
  3. Costo de almacenamiento: SageMaker almacena datos en S3. Usá políticas de ciclo de vida para optimizar costos.

Alternativas si el módulo no cumple tus necesidades

Caso de usoAlternativaEnfoque
**Gobernanza avanzada**Usá AWS Control Tower + SageMaker PipelinesIntegración con políticas SCPs.
**Multi-cuenta**Desplegá el módulo en cada cuenta con Terraform Cloud/EnterpriseUsá módulos BLOCK33 para cuentas.
**Blueprints personalizados**Creá un módulo local que extienda el oficialEjemplo: [custom-blueprint](https://github.com/terraform-aws-modules/terraform-aws-sagemaker-unified-studio/tree/main/examples/custom-blueprint).
### Buenas prácticas de seguridad
  1. Mínimos privilegios: No uses AmazonSageMakerFullAccess en producción. Creá políticas IAM específicas para cada proyecto.
  2. Auditoría: Habilitá AWS CloudTrail para registrar cambios en el dominio de SageMaker.
  3. Redes: Deployá el dominio en subredes privadas con salida a internet solo si es necesario (ej: para descargar imágenes de contenedores).

Conclusión

Con esta guía, automatizaste el despliegue de un dominio de Amazon SageMaker Unified Studio usando Terraform, integrándolo con tus pipelines de IaC y aplicando gobernanza centralizada. Ahora podés:

  • Desplegar entornos consistentes entre cuentas y regiones.
  • Gestionar proyectos y blueprints como código.
  • Controlar acceso con IAM y auditorías con CloudTrail.
Próximos pasos:
  • Explorá los blueprints avanzados para proyectos de GenAI.
  • Integrá el módulo con tu sistema de CI/CD para despliegues continuos.

FIN

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *