Aquí tienes una guía práctica para el Despliegue de Recursos AWS con CloudFormation para Votan Help, una aplicación (hipotética o real) que puede incluir APIs, bases de datos y lógica de negocio en Lambda. El enfoque se basa en Infraestructura como Código (IaC) utilizando AWS CloudFormation.
✅ Objetivo
Desplegar de forma automatizada los recursos de AWS necesarios para Votan Help, incluyendo:
- API Gateway (REST o HTTP)
- AWS Lambda Functions
- DynamoDB (para almacenamiento)
- Roles IAM (permisos)
- Outputs exportables
📦 Estructura de Recursos para Votan Help
AWSTemplateFormatVersion: '2010-09-09'
Description: Recursos AWS para Votan Help
Parameters:
TableName:
Type: String
Default: VotanHelpTable
Resources:
### DynamoDB Table ###
VotanHelpTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: !Ref TableName
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
SSESpecification:
SSEEnabled: true
### IAM Role for Lambda ###
VotanHelpLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: votan-help-lambda-role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: votan-help-dynamodb-access
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- dynamodb:*
Resource: "*"
- Effect: Allow
Action:
- logs:*
Resource: "*"
### Lambda Function ###
VotanHelpFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: votan-help-handler
Handler: index.handler
Role: !GetAtt VotanHelpLambdaRole.Arn
Runtime: nodejs18.x
Timeout: 10
Code:
ZipFile: |
exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({ message: "Votan Help is working!" })
};
};
### API Gateway HTTP API ###
VotanHelpApi:
Type: AWS::ApiGatewayV2::Api
Properties:
Name: votan-help-api
ProtocolType: HTTP
Target: !GetAtt VotanHelpFunction.Arn
### API Integration Permission ###
LambdaPermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !Ref VotanHelpFunction
Action: lambda:InvokeFunction
Principal: apigateway.amazonaws.com
SourceArn: !Sub arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${VotanHelpApi}/*
Outputs:
ApiEndpoint:
Value: !Sub "https://${VotanHelpApi}.execute-api.${AWS::Region}.amazonaws.com"
Export:
Name: VotanHelpAPIEndpoint
TableName:
Value: !Ref VotanHelpTable
Export:
Name: VotanHelpDynamoDB
🚀 Despliegue
- Guarda el archivo como
votan-help-stack.yaml
- Súbelo a CloudFormation vía consola o CLI:
aws cloudformation create-stack \
--stack-name votan-help-stack \
--template-body file://votan-help-stack.yaml \
--capabilities CAPABILITY_NAMED_IAM
🛠️ Personalización
Puedes añadir más funcionalidades como:
- Autenticación con Cognito
- API Gateway con rutas más complejas
- Otros entornos (dev, prod) mediante parámetros