Fragmentos de código de plantillas generales
Los siguientes ejemplos muestran diferentes características de plantilla de CloudFormation que no son específicas de un servicio de AWS.
Temas
Propiedad UserData codificada en Base64 con AccessKey y SecretKey
Sección Parameters con parámetro de cadena con limitación de expresiones regulares
Sección Parameters con parámetro numérico con restricciones MinValue y MaxValue
Sección Parameters con parámetro numérico con restricción AllowedValues
Sección Parameters con un parámetro CommaDelimitedList literal
Sección Parameters con valor de parámetros basado en pseudoparámetro
Sección Outputs con una referencia de recursos y una salida de pseudoreferencia
Propiedad UserData codificada en Base64
Este ejemplo muestra el conjunto de una propiedad UserData
que utiliza las funciones Fn::Base64
y Fn::Join
. Las referencias MyValue
y MyName
son parámetros que deben definirse en la sección Parameters
de la plantilla. La cadena literal Hello World
es simplemente otro valor que este ejemplo introduce como parte de los UserData
.
JSON
"UserData" : { "Fn::Base64" : { "Fn::Join" : [ ",", [ { "Ref" : "MyValue" }, { "Ref" : "MyName" }, "Hello World" ] ] } }
YAML
UserData: Fn::Base64: !Sub | Ref: MyValue Ref: MyName Hello World
Propiedad UserData codificada en Base64 con AccessKey y SecretKey
Este ejemplo muestra el conjunto de una propiedad UserData
que utiliza las funciones Fn::Base64
y Fn::Join
. Incluye la información AccessKey
y SecretKey
. Las referencias AccessKey
y SecretKey
son parámetros que deben definirse en la sección Parameters de la plantilla.
JSON
"UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "ACCESS_KEY=", { "Ref" : "AccessKey" }, "SECRET_KEY=", { "Ref" : "SecretKey" } ] ] } }
YAML
UserData: Fn::Base64: !Sub | ACCESS_KEY=${AccessKey} SECRET_KEY=${SecretKey}
Sección Parameters con un parámetro de cadena literal
El siguiente ejemplo muestra una declaración de la sección Parameters (Parámetros) válida en la que se declara un parámetro de tipo String
individual.
JSON
"Parameters" : { "UserName" : { "Type" : "String", "Default" : "nonadmin", "Description" : "Assume a vanilla user if no command-line spec provided" } }
YAML
Parameters: UserName: Type: String Default: nonadmin Description: Assume a vanilla user if no command-line spec provided
Sección Parameters con parámetro de cadena con limitación de expresiones regulares
El siguiente ejemplo muestra una declaración de la sección Parameters (Parámetros) válida en la que se declara un parámetro de tipo String
individual. El parámetro AdminUserAccount
tiene el valor predeterminado de admin
. El valor del parámetro debe tener una longitud mínima de 1, una longitud máxima de 16 y contener caracteres alfabéticos y números, pero debe comenzar por un carácter alfabético.
JSON
"Parameters" : { "AdminUserAccount": { "Default": "admin", "NoEcho": "true", "Description" : "The admin account user name", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*" } }
YAML
Parameters: AdminUserAccount: Default: admin NoEcho: true Description: The admin account user name Type: String MinLength: 1 MaxLength: 16 AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
Sección Parameters con parámetro numérico con restricciones MinValue y MaxValue
El siguiente ejemplo muestra una declaración de la sección Parameters (Parámetros) válida en la que se declara un parámetro de tipo Number
individual. El parámetro WebServerPort
tiene un valor predeterminado de 80, un valor mínimo de 1 y un valor máximo de 65535.
JSON
"Parameters" : { "WebServerPort": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "MinValue": "1", "MaxValue": "65535" } }
YAML
Parameters: WebServerPort: Default: 80 Description: TCP/IP port for the web server Type: Number MinValue: 1 MaxValue: 65535
Sección Parameters con parámetro numérico con restricción AllowedValues
El siguiente ejemplo muestra una declaración de la sección Parameters (Parámetros) válida en la que se declara un parámetro de tipo Number
individual. El parámetro WebServerPort
tiene un valor predeterminado de 80 y solo permite valores de 80 y 8888.
JSON
"Parameters" : { "WebServerPortLimited": { "Default": "80", "Description" : "TCP/IP port for the web server", "Type": "Number", "AllowedValues" : ["80", "8888"] } }
YAML
Parameters: WebServerPortLimited: Default: 80 Description: TCP/IP port for the web server Type: Number AllowedValues: - 80 - 8888
Sección Parameters con un parámetro CommaDelimitedList literal
El siguiente ejemplo muestra una declaración de la sección Parameters
válida en la que se declara un parámetro de tipo CommaDelimitedList
individual. La propiedad NoEcho
se establece en TRUE
, lo que enmascara su valor con asteriscos (*****) en la salida describe-stacks, excepto para la información almacenada en las ubicaciones especificadas a continuación.
importante
El uso del atributo NoEcho
no enmascara ninguna información almacenada en lo que se muestra a continuación:
-
La sección de la plantilla
Metadata
. CloudFormation no transforma, modifica ni redacta ninguna información que incluya en la secciónMetadata
. Para obtener más información, consulte Sintaxis de Metadata de la plantilla de CloudFormation. -
La sección de la plantilla
Outputs
. Para obtener más información, consulte Sintaxis de Outputs de la plantilla de CloudFormation. -
El atributo
Metadata
de una definición de recurso. Para obtener más información, consulte Atributo Metadata.
Recomendamos encarecidamente que no utilice estos mecanismos para incluir información confidencial, como contraseñas o secretos.
importante
En lugar de integrar información confidencial directamente en las plantillas de CloudFormation, se recomienda utilizar parámetros dinámicos en la plantilla de la pila para hacer referencia a la información confidencial almacenada y administrada fuera de CloudFormation, como en AWS Systems Manager Parameter Store o AWS Secrets Manager.
Para obtener más información, consulte las Prácticas recomendadas de No integre credenciales en sus plantillas.
JSON
"Parameters" : { "UserRoles" : { "Type" : "CommaDelimitedList", "Default" : "guest,newhire", "NoEcho" : "TRUE" } }
YAML
Parameters: UserRoles: Type: CommaDelimitedList Default: "guest,newhire" NoEcho: true
Sección Parameters con valor de parámetros basado en pseudoparámetro
El siguiente ejemplo muestra comandos en los datos de usuario de EC2 que utilizan los pseudoparámetros AWS::StackName
y AWS::Region
. Para obtener más información sobre pseudoparámetros, consulte Referencia de pseudoparámetros.
JSON
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum install -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource LaunchConfig ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServerGroup ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }
YAML
UserData: Fn::Base64: !Sub | #!/bin/bash -xe yum update -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --region ${AWS::Region} /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource WebServerGroup --region ${AWS::Region}
Sección Mapping con tres asignaciones
El siguiente ejemplo muestra una declaración de sección Mapping
válida que contiene tres asignaciones. La asignación, cuando coincide con una clave de mapeo de Stop
, SlowDown
o Go
, proporciona los valores RGB asignados al atributo RGBColor
correspondiente.
JSON
"Mappings" : { "LightColor" : { "Stop" : { "Description" : "red", "RGBColor" : "RED 255 GREEN 0 BLUE 0" }, "SlowDown" : { "Description" : "yellow", "RGBColor" : "RED 255 GREEN 255 BLUE 0" }, "Go" : { "Description" : "green", "RGBColor" : "RED 0 GREEN 128 BLUE 0" } } }
YAML
Mappings: LightColor: Stop: Description: red RGBColor: "RED 255 GREEN 0 BLUE 0" SlowDown: Description: yellow RGBColor: "RED 255 GREEN 255 BLUE 0" Go: Description: green RGBColor: "RED 0 GREEN 128 BLUE 0"
Description basada en cadena literal
El siguiente ejemplo muestra una declaración de sección Description
válida donde el valor se basa en una cadena literal. Este fragmento de código puede ser para plantillas, parámetros, recursos, propiedades o salidas.
JSON
"Description" : "
Replace this value
"
YAML
Description: "
Replace this value
"
Sección Outputs con una salida de cadena literal
Este ejemplo muestra una asignación de salida basada en una cadena literal.
JSON
"Outputs" : { "MyPhone" : { "Value" : "Please call 555-5555", "Description" : "A random message for aws cloudformation describe-stacks" } }
YAML
Outputs: MyPhone: Value: Please call 555-5555 Description: A random message for aws cloudformation describe-stacks
Sección Outputs con una referencia de recursos y una salida de pseudoreferencia
Este ejemplo muestra una sección Outputs
con dos asignaciones de salida. Una se basa en un recurso y la otra se basa en una pseudoreferencia.
JSON
"Outputs" : { "SNSTopic" : { "Value" : { "Ref" : "MyNotificationTopic" } }, "StackName" : { "Value" : { "Ref" : "AWS::StackName" } } }
YAML
Outputs: SNSTopic: Value: !Ref MyNotificationTopic StackName: Value: !Ref AWS::StackName
Sección Outputs con una salida basada en una función, una cadena literal, una referencia y un pseudoparámetro
Este ejemplo muestra una sección Outputs con una asignación de salida. La función Join se utiliza para concatenar el valor con un signo de porcentaje como delimitador.
JSON
"Outputs" : { "MyOutput" : { "Value" : { "Fn::Join" : [ "%", [ "A-string", {"Ref" : "AWS::StackName" } ] ] } } }
YAML
Outputs: MyOutput: Value: !Join [ %, [ 'A-string', !Ref 'AWS::StackName' ]]
Versión de formato de plantilla
El siguiente fragmento de código muestra una declaración válida de sección AWSTemplateFormatVersion
.
JSON
"AWSTemplateFormatVersion" : "2010-09-09"
YAML
AWSTemplateFormatVersion: '2010-09-09'
Propiedad AWSTags
En este ejemplo se muestra una propiedad Tags
de AWS. Esta propiedad se especifica dentro de la sección Properties de un recurso. Cuando se crea el recurso, se etiqueta con las etiquetas que usted declare.
JSON
"Tags" : [ { "Key" : "keyname1", "Value" : "value1" }, { "Key" : "keyname2", "Value" : "value2" } ]
YAML
Tags: - Key: "keyname1" Value: "value1" - Key: "keyname2" Value: "value2"