Formato de especificación
CloudFormation crea una especificación para cada tipo de recurso, como, por ejemplo, AWS::S3::Bucket
o AWS::EC2::Instance
. En las secciones siguientes se describe el formato y cada campo dentro de la especificación.
Temas
Secciones de la especificación
La definición formal para cada tipo de recurso se organiza en tres secciones principales: PropertyTypes
, ResourceSpecificationVersion
y ResourceTypes
, tal y como se muestra en el siguiente ejemplo:
{ "PropertyTypes": { Property specifications }, "ResourceSpecificationVersion": "
Specification version number
", "ResourceTypes": { Resource specification } }
PropertyTypes
-
Para recursos que tengan propiedades dentro de una propiedad (también conocido como subpropiedades), una lista de especificaciones de las subpropiedades, como, por ejemplo, que propiedades son necesarias, el tipo de valor permitido para cada propiedad y su comportamiento de actualización. Para obtener más información, consulte Especificación de propiedad.
Si un recurso no tiene subproperties, se omite esta sección.
ResourceSpecificationVersion
-
La versión de la especificación de recursos. El formato de la versión es
, donde cada versión aumenta el número de versión. Todos los recursos que tienen el mismo número de versión independientemente de si el recurso se ha actualizado o no.majorVersion
.minorVersion
.patch
CloudFormation incrementa el número de parche cuando el servicio corrige un error compatible con versiones anteriores, como arreglar un enlace de documentación roto. Cuando CloudFormation agrega recursos o propiedades que son compatibles con versiones anteriores, incrementa el número de versión secundaria. Por ejemplo, las versiones posteriores de una especificación pueden agregar las propiedades de recursos adicionales para admitir nuevas características de un servicio de AWS.
Los cambios incompatibles con versiones anteriores incrementa el número de versión principal. Un cambio incompatible con versiones anteriores pueden ser el resultado de un cambio en la especificación de los recursos, como un cambio de nombre en un campo, o un cambio en un recurso, como hacer que una propiedad de recurso opcional sea obligatoria.
ResourceTypes
-
La lista de recursos y la información sobre las propiedades de cada uno de los recursos, como, por ejemplo, los nombres de propiedad de sus propiedades, qué propiedades son necesarias y su comportamiento de actualización. Para obtener más información, consulte Especificación de recursos.
nota
Si ve un archivo que contiene la definición de un tipo de recurso, el nombre de esta propiedad es
ResourceType
(singular).
Especificación de propiedad
La especificación para cada propiedad incluye los siguientes campos. Para subpropiedades, el nombre de la propiedad utiliza el formato
.resourceType
.subpropertyName
"
Property name
": { "Documentation": "Link to the relevant documentation
" "DuplicatesAllowed": "true or false
", "ItemType": "Type of list or map (non-primitive)
", "PrimitiveItemType": "Type of list or map (primitive)
", "PrimitiveType": "Type of value (primitive)
", "Required": "true or false
", "Type": "Type of value (non-primitive)
", "UpdateType": "Mutable, Immutable, or Conditional
", }
Documentation
-
Un enlace a la Guía del usuario de AWS CloudFormation que proporciona información sobre la propiedad.
DuplicatesAllowed
-
Si el valor del campo
Type
esList
, indica si CloudFormation permite valores duplicados. Si el valor estrue
, CloudFormation pasa por alto los valores duplicados. Si el valor esfalse
, CloudFormation devuelve un error si envía valores duplicados. ItemType
-
Si el valor del campo
Type
esList
oMap
, indica el tipo de lista o mapa si contienen tipos no primitivos. De lo contrario, se omite este campo. Para listas o asignaciones que contienen tipos primitivos, la propiedadPrimitiveItemType
indica el tipo de valor válido.Un nombre de subpropiedad es un tipo de elemento válido. Por ejemplo, si el valor del tipo es
List
y el valor del tipo de elemento esPortMapping
, puede especificar una lista de propiedades de mapeo de puertos. PrimitiveItemType
-
Si el valor del campo
Type
esList
oMap
, indica el tipo de lista o asignación si contienen tipos primitivos. De lo contrario, se omite este campo. Para listas o asignaciones que contienen tipos no primitivos, la propiedadItemType
indica el tipo de valor válido.Los tipos primitivos válidos para listas y asignaciones son
String
,Long
,Integer
,Double
,Boolean
oTimestamp
.Por ejemplo, si el valor del tipo es
List
y el valor del tipo de elemento esString
, puede especificar una lista de cadenas para la propiedad. Si el valor del tipo esMap
y el valor del tipo de elemento esBoolean
, puede especificar una cadena para el mapeo booleano para la propiedad. PrimitiveType
-
En el caso de valores primitivos, el tipo primitivo válido para la propiedad. Un tipo primitivo es un tipo de datos básico para valores de propiedades de recursos. Los tipos primitivos válidos son
String
,Long
,Integer
,Double
,Boolean
,Timestamp
oJson
. Si los valores válidos son de tipo no primitivo, este campo se omite y el campoType
indica el tipo de valor válido. Required
-
Indica si la propiedad es necesaria.
Type
-
En el caso de tipos no primitivos, valores válidos para la propiedad. Los tipos válidos son un nombre de subpropiedad,
List
oMap
. Si los valores válidos son de tipo primitivo, este campo se omite y el campoPrimitiveType
indica el tipo de valor válido.Una lista es una lista de valores separados por comas. Una asignación es un conjunto de pares clave-valor, donde las claves son siempre cadenas. El tipo de valor para listas y asignaciones se indica mediante el campo
ItemType
oPrimitiveItemType
. UpdateType
-
Durante una actualización de pila, el comportamiento de actualización cuando agrega, elimina o modifica la propiedad. CloudFormation sustituye el recurso al cambiar propiedades inmutables. CloudFormation no sustituye el recurso al cambiar propiedades mutables. Las actualizaciones condicionales pueden ser mutables o inmutables, en función de, por ejemplo, qué otras propiedades actualizó. Para obtener más información, consulte la documentación de tipo de recurso relevante.
Especificación de recursos
La especificación para cada tipo de recurso incluye los siguientes campos.
"
Resource type name
": { "Attributes": { "AttributeName
": { "ItemType": "Return list or map type (non-primitive)
", "PrimitiveItemType": "Return list or map type (primitive)
", "PrimitiveType": "Return value type (primitive)
", "Type": "Return value type (non-primitive)
", } }, "Documentation": "Link to the relevant documentation
", "Properties": { Property specifications } }
Attributes
-
Una lista de atributos de recursos que puede utilizar en una función Fn::GetAtt. Para cada atributo, esta sección proporciona el nombre de atributo y el tipo de valor que CloudFormation devuelve.
ItemType
-
Si el valor del campo
Type
esList
, indica el tipo de lista que devuelve la funciónFn::GetAtt
para el atributo si la lista contiene tipos no primitivos. El tipo válido es un nombre de una propiedad. PrimitiveItemType
-
Si el valor del campo
Type
esList
, indica el tipo de lista que devuelve la funciónFn::GetAtt
para el atributo si la lista contiene tipos primitivos. Para listas que contienen tipos no primitivos, la propiedadItemType
indica el tipo de valor válido. Los tipos primitivos válidos para listas sonString
,Long
,Integer
,Double
,Boolean
oTimestamp
.Por ejemplo, si el valor del tipo es
List
y el valor del tipo de elemento primitivo esString
, la funciónFn::GetAtt
devuelve una lista de cadenas. PrimitiveType
-
Para valores devueltos primitivos, el tipo de valor que la función
Fn::GetAtt
devuelve para el atributo. Un tipo primitivo es un tipo de datos básico para valores de propiedades de recursos. Los tipos primitivos válidos sonString
,Long
,Integer
,Double
,Boolean
,Timestamp
oJson
. Type
-
Para valores devueltos no primitivos, el tipo de valor que la función
Fn::GetAtt
devuelve para el atributo. Los tipos válidos son un nombre propiedad oList
.Una lista es una lista de valores separados por comas. El tipo de valor para listas se indica mediante el campo
ItemType
oPrimitiveItemType
.
Documentation
-
Un enlace a la Guía del usuario de AWS CloudFormation que proporciona información sobre el recurso.
Properties
-
Una lista de especificaciones de la propiedad para el recurso. Para obtener más información, consulte Especificación de propiedad.
Especificación de recursos de ejemplo
Los siguientes ejemplos resaltan y explican partes de la especificación de recursos AWS::Elasticsearch::Domain
.
El tipo de recurso AWS::Elasticsearch::Domain
contiene subpropiedades, por lo que la especificación incluye una sección PropertyTypes
. A esta sección le sigue la sección ResourceSpecificationVersion
, que muestra la versión de la especificación como 1.0.0
. Después de la versión de la especificación está la sección ResourceType
que especifica el tipo de recurso, ofrece un enlace a la documentación y los detalles de las propiedades de los recursos.
{ "PropertyTypes": { ... }, "ResourceSpecificationVersion": "1.0.0", "ResourceType": { "AWS::Elasticsearch::Domain": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html", "Properties": { ... } } } } }
Centrándonos ahora en la sección ResourceType
, el siguiente ejemplo muestra dos propiedades del tipo de recurso AWS::Elasticsearch::Domain
. La propiedad AdvancedOptions
no es necesaria y acepta una asignación de cadena a cadena. Una asignación es un conjunto de pares clave-valor, donde las claves son siempre cadenas. El tipo de valor se indica mediante el campo ItemType
, que es String
. Por lo tanto, el tipo es una asignación de cadena a cadena. El comportamiento de actualización de esta propiedad es mutable. Si actualiza esta propiedad, CloudFormation mantiene el recurso en lugar de crear uno nuevo y, a continuación, elimina el antiguo (una actualización inmutable).
La propiedad SnapshotOptions
no es necesaria y acepta una subpropiedad denominada SnapshotOptions
. Se proporcionan detalles de la subpropiedad SnapshotOptions
en la sección PropertyTypes
.
{ "PropertyTypes": { ... }, "ResourceSpecificationVersion": "1.0.0", "ResourceType": { "AWS::Elasticsearch::Domain": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html", "Properties": { ... "AdvancedOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-advancedoptions", "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", "UpdateType": "Mutable" }, ... "SnapshotOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-snapshotoptions", "Required": false, "Type": "SnapshotOptions", "UpdateType": "Mutable" }, ... } } } }
En PropertyTypes
, la especificación enumera todas las subpropiedades de un recurso (incluidas las subpropiedades anidadas). El siguiente ejemplo proporciona detalles de la subpropiedad AWS::Elasticsearch::Domain.SnapshotOptions
. Contiene una propiedad denominada AutomatedSnapshotStartHour
, que no es necesaria y acepta tipos de valores enteros.
"PropertyTypes": { ... "AWS::Elasticsearch::Domain.SnapshotOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html", "Properties": { "AutomatedSnapshotStartHour": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html#cfn-elasticsearch-domain-snapshotoptions-automatedsnapshotstarthour", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" } } }, ... }
Para su referencia, el siguiente ejemplo proporciona la especificación del recurso AWS::Elasticsearch::Domain
completa.
{ "PropertyTypes": { "AWS::Elasticsearch::Domain.EBSOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html", "Properties": { "EBSEnabled": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-ebsenabled", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Mutable" }, "Iops": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-iops", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "VolumeSize": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-volumesize", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "VolumeType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-ebsoptions.html#cfn-elasticsearch-domain-ebsoptions-volumetype", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" } } }, "AWS::Elasticsearch::Domain.ElasticsearchClusterConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html", "Properties": { "DedicatedMasterCount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-dedicatedmastercount", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "DedicatedMasterEnabled": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-dedicatedmasterenabled", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Mutable" }, "DedicatedMasterType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-dedicatedmastertype", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "InstanceCount": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-instancecount", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" }, "InstanceType": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-instancetype", "PrimitiveType": "String", "Required": false, "UpdateType": "Mutable" }, "ZoneAwarenessEnabled": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-elasticsearchclusterconfig.html#cfn-elasticsearch-domain-elasticseachclusterconfig-zoneawarenessenabled", "PrimitiveType": "Boolean", "Required": false, "UpdateType": "Mutable" } } }, "AWS::Elasticsearch::Domain.SnapshotOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html", "Properties": { "AutomatedSnapshotStartHour": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticsearch-domain-snapshotoptions.html#cfn-elasticsearch-domain-snapshotoptions-automatedsnapshotstarthour", "PrimitiveType": "Integer", "Required": false, "UpdateType": "Mutable" } } }, "Tag": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html", "Properties": { "Key": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-key", "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" }, "Value": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html#cfn-resource-tags-value", "PrimitiveType": "String", "Required": true, "UpdateType": "Immutable" } } } }, "ResourceType": { "AWS::Elasticsearch::Domain": { "Attributes": { "DomainArn": { "PrimitiveType": "String" }, "DomainEndpoint": { "PrimitiveType": "String" } }, "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html", "Properties": { "AccessPolicies": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-accesspolicies", "PrimitiveType": "Json", "Required": false, "UpdateType": "Mutable" }, "AdvancedOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-advancedoptions", "DuplicatesAllowed": false, "PrimitiveItemType": "String", "Required": false, "Type": "Map", "UpdateType": "Mutable" }, "DomainName": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-domainname", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "EBSOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-ebsoptions", "Required": false, "Type": "EBSOptions", "UpdateType": "Mutable" }, "ElasticsearchClusterConfig": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-elasticsearchclusterconfig", "Required": false, "Type": "ElasticsearchClusterConfig", "UpdateType": "Mutable" }, "ElasticsearchVersion": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-elasticsearchversion", "PrimitiveType": "String", "Required": false, "UpdateType": "Immutable" }, "SnapshotOptions": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-snapshotoptions", "Required": false, "Type": "SnapshotOptions", "UpdateType": "Mutable" }, "Tags": { "Documentation": "http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticsearch-domain.html#cfn-elasticsearch-domain-tags", "DuplicatesAllowed": true, "ItemType": "Tag", "Required": false, "Type": "List", "UpdateType": "Mutable" } } } }, "ResourceSpecificationVersion": "1.4.1" }