Problema:
- El pipeline fallaba con 'Error acquiring the state lock' cuando un proceso
anterior de Terraform no liberaba el lock correctamente
- Los locks bloqueados requerían intervención manual
Solución implementada:
1. Nuevo script scripts/terraform-lock-cleanup.sh:
- Verifica locks existentes en DynamoDB antes de ejecutar Terraform
- Calcula antigüedad del lock (default: 30 minutos)
- Elimina locks bloqueados automáticamente
- Espera si el lock es reciente (operación en curso legítima)
2. Nuevo step 02_pre_terraform_check:
- Ejecuta antes del step 03_terraform
- Instala AWS CLI y configura credenciales
- Limpia locks bloqueados antes de iniciar Terraform
3. Agregado -lock-timeout=5m a comandos Terraform:
- terraform plan -lock-timeout=5m
- terraform apply -lock-timeout=5m
- Permite esperar si hay una operación legítima en curso
4. Aplicado a ambas ramas:
- developer: cleanup para entorno dev
- master: cleanup para entorno prod
Beneficios:
- Pipeline más robusto y autónomo
- Menos intervención manual para locks bloqueados
- Mejor manejo de concurrencia entre pipelines
- Previene corrupción de estado por locks huérfanos
Refs: Build #64 falló por state lock en DynamoDB
- Escribe BITBUCKET_STEP_OIDC_TOKEN a archivo temporal para evitar
OSError: File name too long en el decoder JWT
- Python lee token via stdin en lugar de pasar JWT como filename
- Agrega skip_region_validation = true en backend.dev.hcl y backend.prod.hcl
para compatibilidad con mx-central-1
The previous script only exported AWS_WEB_IDENTITY_TOKEN_FILE and
AWS_ROLE_ARN, expecting AWS CLI/Terraform to pick them up automatically.
However, Terraform's S3 backend does not use these variables implicitly.
Now we explicitly call 'aws sts assume-role-with-web-identity',
parse the JSON response, and export the temporary credentials:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
Also exports AWS_REGION for Terraform S3 backend compatibility.
Fixes pipeline failure in step 03_terraform with:
InvalidIdentityToken: Incorrect token audience
- Crea scripts/telegram-pipeline-notify.sh con detalles de branch, commit, build y autor
- Actualiza bitbucket-pipelines.yml para usar notificaciones locales en todos los ambientes
- Corrige bug donde 01_image-setup referenciaba ci-cd-commons antes de clonarlo
- Usa formato MarkdownV2 para mensajes en Telegram
- Agrega aws_iam_openid_connect_provider y roles IAM para DEV/PROD
- Actualiza bitbucket-pipelines.yml para usar OIDC en steps 03, 05, 07
- Crea script helper scripts/aws-oidc-setup.sh
- Agrega provider tls en terraform/provider.tf
- Documenta el flujo completo en docs/14-oidc-bitbucket-aws.md
Elimina la dependencia de AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY
estáticos en el pipeline, permitiendo autenticación sin credenciales
de larga vida via AssumeRoleWithWebIdentity.
Refs: cuenta DEV 668889063715, PROD 523761210517