Skip to content
English
On this page

Ejercicio: Creación de Proyecto con AWS CodeStar

Objetivo

Crear una aplicación web utilizando AWS CodeStar que incluirá:

  • Pipeline de CI/CD completo
  • Aplicación web Python/Flask
  • Infraestructura serverless con API Gateway y Lambda

Parte 1: Configuración Inicial de CodeStar

1. Acceder a AWS CodeStar

  1. Ve a la consola AWS:

    Búsqueda: "CodeStar"
    O: Services > Developer Tools > AWS CodeStar
  2. Primera vez:

    Si es tu primera vez:
    - Clic en "Get Started"
    - Permite que CodeStar cree el rol de servicio

2. Crear Proyecto

  1. En Dashboard de CodeStar:
    Clic: Create project
    
    Project template:
    - Application Category: Web application
    - Programming language: Python
    - AWS Service: AWS Lambda
    
    Project name: my-serverless-web
    Repository: AWS CodeCommit

3. Configurar Acceso IDE

  1. En la página del proyecto:
    Team -> Team members
    Añadir usuario IAM existente o crear nuevo
    Asignar rol: Owner

Parte 2: Clonar y Configurar Proyecto Local

1. Configurar Git Local

bash
# Instalar AWS CLI y configurar credenciales
aws configure
# Ingresar:
# - AWS Access Key ID
# - AWS Secret Access Key
# - Default region
# - Output format: json

# Clonar repositorio
git clone https://git-codecommit.[region].amazonaws.com/v1/repos/my-serverless-web
cd my-serverless-web

2. Estructura del Proyecto

my-serverless-web/
├── .git/
├── buildspec.yml              # Configuración CodeBuild
├── template.yml              # Template CloudFormation
├── tests/                    # Tests unitarios
│   └── test_handler.py
├── src/                      # Código fuente
│   ├── index.py             # Handler Lambda
│   └── requirements.txt      # Dependencias Python
└── README.md

Parte 3: Desarrollo de la Aplicación

1. Modificar Handler Lambda (src/index.py)

python
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    """
    Handler principal para Lambda
    """
    logger.info('Evento recibido: %s', event)
    
    try:
        return {
            'statusCode': 200,
            'headers': {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*'
            },
            'body': json.dumps({
                'message': 'Hello from AWS CodeStar!',
                'event': event
            })
        }
    except Exception as e:
        logger.error('Error: %s', e)
        return {
            'statusCode': 500,
            'body': json.dumps({
                'error': str(e)
            })
        }

2. Configurar Tests (tests/test_handler.py)

python
import unittest
import json
from src.index import lambda_handler

class TestHandler(unittest.TestCase):
    def test_successful_response(self):
        event = {
            'httpMethod': 'GET',
            'path': '/'
        }
        response = lambda_handler(event, None)
        
        self.assertEqual(response['statusCode'], 200)
        self.assertEqual(
            json.loads(response['body'])['message'],
            'Hello from AWS CodeStar!'
        )

if __name__ == '__main__':
    unittest.main()

Parte 4: Pipeline y Despliegue

1. Revisar Pipeline Generado

  1. En la página del proyecto:
    Pipeline -> Ver detalles
    Verificar etapas:
    - Source (CodeCommit)
    - Build (CodeBuild)
    - Deploy (CloudFormation)

2. Modificar buildspec.yml

yaml
version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.9
    commands:
      - pip install -r src/requirements.txt
      - pip install pytest
      
  pre_build:
    commands:
      - pytest tests/
      
  build:
    commands:
      - aws cloudformation package --template template.yml --s3-bucket ${BUCKET_NAME} --output-template template-export.yml

artifacts:
  files:
    - template-export.yml
    - appspec.yml
    - src/**/*

3. Actualizar template.yml

yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Resources:
  HelloFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.lambda_handler
      Runtime: python3.9
      CodeUri: ./src
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /
            Method: get

Parte 5: Monitoreo y Logs

1. Configurar CloudWatch Logs

  1. En la página del proyecto:
    Monitoring -> Ver métricas
    Verificar:
    - Invocaciones Lambda
    - Errores
    - Latencia

2. Configurar Alarmas

  1. En CloudWatch:
    Create alarm:
    Métrica: Errors > 0
    Período: 5 minutos
    Notificación: SNS topic

Verificación y Pruebas

1. Probar Localmente

bash
# Instalar dependencias
pip install -r src/requirements.txt

# Ejecutar tests
python -m pytest tests/

2. Probar API Desplegada

bash
# Obtener URL de API Gateway del dashboard de CodeStar
curl https://[tu-api-id].execute-api.[region].amazonaws.com/Prod/

3. Verificar Recursos

  • [ ] Función Lambda creada
  • [ ] API Gateway configurado
  • [ ] Pipeline ejecutándose
  • [ ] Logs generándose

Solución de Problemas Comunes

Error de Permisos

  1. Verificar rol de servicio CodeStar
  2. Verificar rol de ejecución Lambda
  3. Revisar políticas IAM

Error de Construcción

  1. Revisar buildspec.yml
  2. Verificar tests
  3. Revisar logs de CodeBuild

Error de Despliegue

  1. Revisar template.yml
  2. Verificar stack CloudFormation
  3. Revisar logs de despliegue

Limpieza

  1. En CodeStar Dashboard:
    Project settings -> Delete project
    Confirmar eliminación
    Esperar eliminación completa de recursos

Conceptos Clave para el Examen

  • Integración de servicios AWS
  • CI/CD automatizado
  • Serverless computing
  • Gestión de proyectos en AWS

Puntos importantes a recordar:

  1. CodeStar integra automáticamente varios servicios AWS
  2. Simplifica la configuración inicial del proyecto
  3. Proporciona pipeline CI/CD preconfigurado
  4. Incluye gestión de permisos IAM

Consejos adicionales:

  • Revisa la configuración generada por CodeStar
  • Personaliza según necesidades específicas
  • Utiliza las herramientas de monitoreo incluidas
  • Mantén actualizada la documentación del proyecto