Transformación AWS::Include
Utilice la transformación AWS::Include
, que es una macro alojado por AWS CloudFormation, para insertar contenido reutilizable en las plantillas. La transformación AWS::Include
le permite crear una referencia a un fragmento de plantilla en un bucket de Amazon S3. Cuando Creación de un conjunto de cambios o Actualización de pilas de CloudFormation con conjuntos de cambios, y las plantillas hacen referencia a AWS::Include
, CloudFormation ingresa el contenido del archivo especificado en la ubicación de la transformación en la plantilla. La función AWS::Include
se comporta de forma similar a una directiva include
, copy
o import
en los lenguajes de programación.
Por ejemplo, puede tener una función de Lambda que desee reutilizar en una o varias plantillas de CloudFormation.
Uso
Puede utilizar la transformación AWS::Include
en cualquier lugar de la plantilla de CloudFormation, salvo en la sección de los parámetros de las plantillas o en el campo de la versión de la plantilla. Por ejemplo, puede utilizar AWS::Include
en la sección de mapeos.
Sintaxis de nivel superior de una plantilla
Para incluir la transformación AWS::Include
en la parte superior de una plantilla, utilice la siguiente sintaxis en la sección Transform
.
JSON
{ "Transform" : { "Name" : "AWS::Include", "Parameters" : { "Location" : "s3://
amzn-s3-demo-bucket
/MyFileName
.json" } } }
YAML
Transform: Name: 'AWS::Include' Parameters: Location: '
s3://amzn-s3-demo-bucket/MyFileName.yaml
'
Sintaxis cuando la transformación está integrada en una sección de una plantilla
Para incluir una transformación que está integrada en una sección, utilice la función intrínseca Fn::Transform
y la siguiente sintaxis.
JSON
{ "Fn::Transform" : { "Name" : "AWS::Include", "Parameters" : { "Location": "
s3://amzn-s3-demo-bucket/MyFileName.json
" } } }
YAML
'Fn::Transform': Name: 'AWS::Include' Parameters: Location: s3://
amzn-s3-demo-bucket
/MyFileName.yaml
Parámetros
Ubicación
La ubicación es una URI de Amazon S3 con un nombre de archivo específico en un bucket de S3. Por ejemplo, s3://
.amzn-s3-demo-bucket
/MyFile.yaml
Observaciones
Cuando utilice AWS::Include
, tenga en cuenta las siguientes consideraciones. Para consideraciones generales acerca de cómo usar macros, consulte Consideraciones sobre la creación de definiciones de macros de CloudFormation.
-
En la actualidad, se admiten URI de Amazon S3, pero en ningún otro formato de Amazon S3 (como ARN de Amazon S3). Debe ser un bucket de Amazon S3, en lugar de algo parecido a un repositorio de GitHub.
-
Cualquier persona que tenga acceso a la dirección URL de Amazon S3 puede incluir el fragmento en su plantilla.
-
Sus fragmentos de plantilla tienen que ser un JSON válido.
-
Sus fragmentos de plantilla tienen que ser objetos de clave–valor válidos; por ejemplo,
"KeyName": "keyValue"
. -
No puede utilizar
AWS::Include
para hacer referencia a un fragmento de código de la plantilla que también utilizaAWS::Include
. -
Si los fragmentos cambian, la pila no aplica automáticamente esos cambios. Para obtener esos cambios, debe actualizar la pila con los fragmentos actualizados. Si actualiza la pila, asegúrese de que los fragmentos que ha incluido no han cambiado sin que usted lo sepa. Para verificarlo antes de actualizar la pila, compruebe el conjunto de cambios.
-
Al crear plantillas y fragmentos, puede combinar los lenguajes de plantillas YAML y JSON.
-
Actualmente no admitimos el uso de notaciones abreviadas para los fragmentos de YAML.
-
Puede proporcionar una URI de Amazon S3 de replicación entre regiones con
AWS::Include
. Asegúrese de comprobar los nombres de los buckets de Amazon S3 al obtener acceso a los objetos de la replicación entre regiones. Para obtener más información, consulte Replicación entre regiones.
Ejemplo
El siguiente ejemplo muestra cómo utilizar la transformación AWS::Include
para ejecutar un identificador de condición de espera.
Tanto la versión JSON como la versión YAML utilizan el siguiente fragmento de la condición de espera. Guarde el archivo como single_wait_condition.yaml
y almacénelo en un bucket de S3. Reemplace amzn-s3-demo-bucket
por el nombre real de su bucket.
WebServerWaitHandle: Type: 'AWS::CloudFormation::WaitConditionHandle'
JSON
{ "Resources": { "MyWaitHandle": { "Type": "AWS::CloudFormation::WaitConditionHandle" }, "Fn::Transform": { "Name": "AWS::Include", "Parameters": { "Location": "s3://
amzn-s3-demo-bucket
/single_wait_condition.yaml" } } } }
YAML
Resources: MyWaitHandle: Type: 'AWS::CloudFormation::WaitConditionHandle' 'Fn::Transform': Name: 'AWS::Include' Parameters: Location: "s3://
amzn-s3-demo-bucket
/single_wait_condition.yaml"