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.
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