Integrar API Gateway con DynamoDB permite exponer tu base de datos como una API RESTful sin necesidad de servidores. Esto se puede hacer de dos formas principales:
🛠️ Opción 1: Usando Lambda como intermediario
Arquitectura recomendada (flexible y segura):
API Gateway → AWS Lambda → DynamoDB
🔹 Paso 1: Crear una tabla DynamoDB (si no existe)
aws dynamodb create-table \
--table-name Productos \
--attribute-definitions AttributeName=productoId,AttributeType=S \
--key-schema AttributeName=productoId,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
🔹 Paso 2: Crear una función Lambda (ejemplo en Python)
import boto3
import json
dynamodb = boto3.resource('dynamodb')
tabla = dynamodb.Table('Productos')
def lambda_handler(event, context):
if event['httpMethod'] == 'GET':
producto_id = event['queryStringParameters']['productoId']
response = tabla.get_item(Key={'productoId': producto_id})
return {
'statusCode': 200,
'body': json.dumps(response.get('Item', {}))
}
if event['httpMethod'] == 'POST':
item = json.loads(event['body'])
tabla.put_item(Item=item)
return {'statusCode': 200, 'body': 'Producto agregado'}
🔹 Paso 3: Crear la función Lambda en AWS
aws lambda create-function \
--function-name productos-api \
--runtime python3.12 \
--role arn:aws:iam::<tu-account-id>:role/<rol-con-permisos-dynamodb-lambda> \
--handler lambda_function.lambda_handler \
--zip-file fileb://funcion.zip
🔹 Paso 4: Crear API REST en API Gateway
- Ve a API Gateway > Crear API REST.
- Crea un recurso (ej:
/productos).
- Añade métodos (GET, POST).
- En la integración selecciona Lambda Function y elige
productos-api.
- Despliega la API (crear un stage, como
dev).
✅ Opción 2: Integración directa (sin Lambda)
API Gateway puede conectarse directamente a DynamoDB usando integraciones VTL (Velocity Template Language), pero esto es más complejo y menos flexible. Solo se recomienda si quieres evitar Lambda por costos.
✅ Permisos necesarios
Asegúrate de que el rol Lambda tenga esta política mínima:
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem"
],
"Resource": "arn:aws:dynamodb:*:*:table/Productos"
}