Inicio > Cursos > AWS para Developers > API Gateway y Arquitectura Serverless
AWS para DevelopersDatos, Seguridad y ServerlessLección 9 de 12

API Gateway y Arquitectura Serverless

API Gateway es el servicio que te permite crear APIs REST completas sin manejar servidores. Combinado con Lambda, tienes una arquitectura 100% serverless.

Flujo tipico: Cliente → API Gateway → Lambda → DynamoDB/RDS/S3

Caracteristicas: • Endpoints HTTP/REST que invocan funciones Lambda • Stages: dev, staging, prod (cada uno con su URL) • Throttling: limita peticiones por segundo para proteger tu backend • CORS: configuracion de origenes permitidos • Autorizacion: API Keys, Cognito, Lambda Authorizers • 1 millon de llamadas API gratis/mes en Free Tier

# Crear API REST
aws apigateway create-rest-api \
  --name "mi-app-api" \
  --description "API para mi aplicacion" \
  --endpoint-configuration types=REGIONAL

# Obtener el resource raiz (/)
aws apigateway get-resources --rest-api-id abc123

# Crear recurso /users
aws apigateway create-resource \
  --rest-api-id abc123 \
  --parent-id rootid \
  --path-part users

# Crear metodo GET /users
aws apigateway put-method \
  --rest-api-id abc123 \
  --resource-id usersid \
  --http-method GET \
  --authorization-type NONE

# Integrar con Lambda
aws apigateway put-integration \
  --rest-api-id abc123 \
  --resource-id usersid \
  --http-method GET \
  --type AWS_PROXY \
  --integration-http-method POST \
  --uri "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456:function:mi-funcion/invocations"

# Deploy a stage "prod"
aws apigateway create-deployment \
  --rest-api-id abc123 \
  --stage-name prod

# Tu API queda en:
# https://abc123.execute-api.us-east-1.amazonaws.com/prod/users
# Lambda que sirve como backend de API Gateway
import json
import boto3

dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table("users")

def handler(event, context):
    method = event["httpMethod"]
    
    if method == "GET":
        result = table.scan()
        return {
            "statusCode": 200,
            "headers": {
                "Content-Type": "application/json",
                "Access-Control-Allow-Origin": "*"  # CORS
            },
            "body": json.dumps(result["Items"])
        }
    
    elif method == "POST":
        body = json.loads(event["body"])
        table.put_item(Item=body)
        return {
            "statusCode": 201,
            "headers": {"Access-Control-Allow-Origin": "*"},
            "body": json.dumps({"message": "Usuario creado"})
        }
    
    return {"statusCode": 405, "body": "Metodo no permitido"}
ConsejoUsa integracion AWS_PROXY con Lambda. Es la mas simple: API Gateway pasa todo el request a Lambda y Lambda devuelve la respuesta completa incluyendo statusCode y headers.
← IAM y SeguridadTerraform e Infraestructura como Codigo →

Practica esta lección

Resuelve los ejercicios del curso de AWS para Developers en la app, gratis y con corrección automática.

Empezar a practicar