En AWS CloudFormation, se utiliza una sintaxis declarativa para describir y automatizar la creación de recursos en la nube. A continuación, se resumen las funciones principales y la sintaxis básica que debes conocer para trabajar efectivamente con plantillas CloudFormation.
🧱 Estructura básica de una plantilla
AWSTemplateFormatVersion: '2010-09-09'
Description: Descripción de lo que hace esta plantilla
Parameters: # Parámetros que el usuario puede proporcionar
Resources: # Recursos que se van a crear (obligatorio)
Outputs: # Valores exportables o útiles después del despliegue
Mappings: # Mapas estáticos (como configuración por región)
Conditions: # Lógicas para crear recursos opcionalmente
🔧 Funciones intrínsecas más usadas
Estas funciones permiten referencias dinámicas, condiciones, combinaciones, entre otros.
1. !Ref
Devuelve el valor de un recurso o parámetro.
!Ref NombreRecurso
📌 Ejemplo:
InstanceType: !Ref EC2InstanceType
2. !GetAtt
Obtiene un atributo de un recurso.
!GetAtt NombreRecurso.Atributo
📌 Ejemplo:
FunctionArn: !GetAtt MiFuncionLambda.Arn
3. !Join
Concatena valores con un delimitador.
!Join [ ":", [ "arn", "aws", "s3", "", !Ref BucketName ] ]
🔍 Resultado: arn:aws:s3:::nombre-del-bucket
4. !Sub
Sustituye variables dentro de una cadena.
!Sub "arn:aws:s3:::${BucketName}/*"
5. !FindInMap
Busca valores en un Mappings.
!FindInMap [ RegionMap, !Ref "AWS::Region", AMI ]
6. !Select
Selecciona un elemento de una lista.
!Select [ 0, [ "a", "b", "c" ] ] # Devuelve "a"
7. !Split
Divide una cadena en una lista.
!Split [ ",", "apple,banana,cherry" ]
8. !If, !Equals, !Not, !And, !Or
Se usan para lógica condicional junto con Conditions.
📌 Ejemplo:
Conditions:
IsProd: !Equals [ !Ref Environment, "prod" ]
Resources:
MyBucket:
Type: AWS::S3::Bucket
Condition: IsProd
📤 Ejemplo completo mínimo
AWSTemplateFormatVersion: '2010-09-09'
Description: Crear una S3 Bucket
Parameters:
BucketName:
Type: String
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Ref BucketName
Outputs:
BucketNameOutput:
Value: !Ref MyBucket
Description: Nombre del bucket creado