

Esta es la nueva *Guía de referencia de plantillas de CloudFormation*. Actualice sus marcadores y enlaces. Para obtener ayuda sobre cómo empezar a usar CloudFormation, consulte la [Guía del usuario de AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# Referencia de transformación
<a name="transform-reference"></a>

Las transformaciones son macros alojadas en CloudFormation. A diferencia de macros personalizables, una transformación no requiere permisos especiales para utilizarla, ya que se aloja en CloudFormation. Las transformaciones se pueden utilizar en plantillas de cualquier cuenta dentro de CloudFormation. Además, no se incurre en ningún cargo al usar transformaciones. CloudFormation trata una transformación igual que cualquier otra macro en términos de alcance y orden de evaluación.

Para obtener más información sobre cómo funcionan las macros, consulte [Uso de macros de CloudFormation para llevar a cabo un procesamiento personalizado en plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) en la *Guía del usuario de AWS CloudFormation*.

Puede utilizar las siguientes transformaciones en sus plantillas de CloudFormation.

**Topics**
+ [`AWS::CodeDeployBlueGreen`Transformación de](transform-aws-codedeploybluegreen.md)
+ [`AWS::Include`Transformación de](transform-aws-include.md)
+ [`AWS::LanguageExtensions`Transformación de](transform-aws-languageextensions.md)
+ [`AWS::SecretsManager`Transformación de](transform-aws-secretsmanager.md)
+ [`AWS::Serverless`Transformación de](transform-aws-serverless.md)
+ [`AWS::ServiceCatalog`Transformación de](transform-aws-servicecatalog.md)

# `AWS::CodeDeployBlueGreen`Transformación de
<a name="transform-aws-codedeploybluegreen"></a>

En este tema se describe cómo usar la transformación `AWS::CodeDeployBlueGreen` para habilitar las implementaciones azul/verde a través de CodeDeploy en su pila.

Para obtener más información, consulte [Implementaciones azul/verde de ECS a través de CodeDeploy con CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html) en la *Guía del usuario de AWS CloudFormation*.

## Uso
<a name="aws-codedeploybluegreen-usage"></a>

Para usar la transformación `AWS::CodeDeployBlueGreen`, debe declararla en el nivel superior de la plantilla de CloudFormation. No se puede utilizar `AWS::CodeDeployBlueGreen` como transformación integrada en ninguna otra sección de la plantilla.

El valor para la declaración de transformación debe ser una cadena literal. No puede utilizar un parámetro o función para especificar un valor de transformación.

### Sintaxis
<a name="aws-codedeploybluegreen-syntax"></a>

Para declarar esta transformación en su plantilla de CloudFormation, use la siguiente sintaxis:

#### JSON
<a name="aws-codedeploybluegreen-syntax.json"></a>

```
{
  "Transform":[
    "AWS::CodeDeployBlueGreen"
  ],
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-codedeploybluegreen-syntax.yaml"></a>

```
Transform:
  - 'AWS::CodeDeployBlueGreen'
Resources:
  ...
```

La transformación `AWS::CodeDeployBlueGreen` es una declaración independiente sin parámetros adicionales.

## Recursos relacionados
<a name="aws-codedeploybluegreen-related-resources"></a>

Para ver ejemplos completos de plantillas de CloudFormation que puede usar para habilitar las implementaciones azul/verde de ECS en su pila, consulte el [ejemplo de plantilla de implementación azul/verde](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green-template-example.html) en la *Guía del usuario de AWS CloudFormation*.

Para obtener información general sobre el uso de las macros, consulte [Procesamientos personalizados en plantillas de CloudFormation con macros de plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) en la *Guía del usuario de AWS CloudFormation*.

# `AWS::Include`Transformación de
<a name="transform-aws-include"></a>

En este tema se describe cómo usar la transformación `AWS::Include` para insertar contenido reutilizable en las plantillas de CloudFormation.

`AWS::Include` es una macro de CloudFormation que, al hacer referencia a ella en la plantilla de la pila, inserta el contenido del archivo especificado en la ubicación de la transformación en la plantilla al crear o actualizar una pila mediante un conjunto de cambios. La función `AWS::Include` se comporta de forma similar a una directiva `include`, `copy` o `import` en los lenguajes de programación.

## Uso
<a name="aws-include-usage"></a>

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 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
<a name="aws-include-syntax-top-level"></a>

Para declarar esta transformación en la parte superior de su plantilla de CloudFormation, como sección `Transform`, utilice la siguiente sintaxis:

#### JSON
<a name="aws-include-syntax-top-level.json"></a>

```
{
  "Transform":{
    "Name":"AWS::Include",
    "Parameters":{
      "Location":"s3://amzn-s3-demo-bucket/MyFileName.json"
    }
  },
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-include-syntax-top-level.yaml"></a>

```
Transform:
  Name: AWS::Include
  Parameters:
    Location: 's3://amzn-s3-demo-bucket/MyFileName.yaml'
Resources:
  ...
```

### Sintaxis cuando la transformación está integrada en una sección de una plantilla
<a name="aws-include-syntax-within-section"></a>

Para declarar esta transformación dentro de una sección de su plantilla de CloudFormation, utilice la función intrínseca `Fn::Transform` y la siguiente sintaxis:

#### JSON
<a name="aws-include-syntax-within-section.json"></a>

```
{
  "Fn::Transform":{
    "Name":"AWS::Include",
    "Parameters":{
      "Location":"s3://amzn-s3-demo-bucket/MyFileName.json"
    }
  }
}
```

#### YAML
<a name="aws-include-syntax-within-section.yaml"></a>

```
Fn::Transform:
  Name: AWS::Include
  Parameters:
    Location: s3://amzn-s3-demo-bucket/MyFileName.yaml
```

Para obtener más información, consulte [`Fn::Transform`](intrinsic-function-reference-transform.md).

### Parameters
<a name="aws-include-parameters"></a>

`Location`

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`.

## Consideraciones
<a name="aws-include-considerations"></a>

Cuando utilice `AWS::Include`, tenga en cuenta las siguientes consideraciones. Para obtener más información sobre el uso de macros, consulte [Consideraciones sobre las macros](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros-overview.html#template-macros-considerations) en la *Guía del usuario de AWS 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 utiliza `AWS::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 de objetos dentro de regiones y entre regiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html) en la *Guía del usuario de Amazon S3*.

## Ejemplos
<a name="aws-include-examples"></a>

En los siguientes ejemplos, se muestra cómo utilizar la transformación `AWS::Include` para ejecutar un identificador de condición de espera. Reemplace *amzn-s3-demo-bucket* por el nombre real de su bucket. 

En primer lugar, guarde un archivo YAML denominado `single_wait_condition.yaml` en su bucket de S3 con el siguiente contenido:

```
MyWaitCondition:
  Type: AWS::CloudFormation::WaitCondition
  Properties:
    Handle: !Ref MyWaitHandle
    Timeout: '4500'
```

A continuación, puede hacer referencia a este archivo en formato JSON o YAML.

### JSON
<a name="aws-include-example.json"></a>

```
{
   "Resources": {
      "MyWaitHandle": {
         "Type": "AWS::CloudFormation::WaitConditionHandle"
      },
      "Fn::Transform": {
         "Name": "AWS::Include",
         "Parameters": {
            "Location": "s3://amzn-s3-demo-bucket/single_wait_condition.yaml"
         }
      }
   }
}
```

### YAML
<a name="aws-include-example.yaml"></a>

```
Resources:
  MyWaitHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
  Fn::Transform:
    Name: AWS::Include
    Parameters:
      Location: "s3://amzn-s3-demo-bucket/single_wait_condition.yaml"
```

Para obtener más información, consulte [Creación de condiciones de espera en una plantilla de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html) en la *Guía del usuario de AWS CloudFormation*.

# `AWS::LanguageExtensions`Transformación de
<a name="transform-aws-languageextensions"></a>

En este tema se describe cómo usar la transformación `AWS::LanguageExtensions` para habilitar funciones y capacidades adicionales que no están disponibles de forma predeterminada. 

`AWS::LanguageExtensions` es una macro de CloudFormation que, al hacer referencia a ella en la plantilla de la pila, actualiza cualquier función intrínseca definida por la transformación a su valor resuelto dentro de la plantilla al crear o actualizar una pila mediante un conjunto de cambios. 

Al incluir esta transformación en la plantilla de CloudFormation, puede acceder a características adicionales, como `Fn::ForEach`, que permiten operaciones más avanzadas, como la iteración. También puede usar funciones intrínsecas en lugares en los que normalmente no están permitidas, como en las funciones `Ref` y `Fn::GetAtt`.

## Uso
<a name="aws-languageextensions-usage"></a>

Para usar la transformación `AWS::LanguageExtensions`, debe declararla en el nivel superior de la plantilla de CloudFormation. No se puede utilizar `AWS::LanguageExtensions` como transformación integrada en ninguna otra sección de la plantilla.

La declaración debe usar la cadena literal `AWS::LanguageExtensions` como valor. No puede utilizar un parámetro o función para especificar un valor de transformación.

### Sintaxis
<a name="aws-languageextensions-syntax"></a>

Para declarar esta transformación en su plantilla de CloudFormation, use la siguiente sintaxis:

### JSON
<a name="aws-languageextensions-syntax.json"></a>

```
{
  "Transform":"AWS::LanguageExtensions",
  "Resources":{
    ...
  }
}
```

### YAML
<a name="aws-languageextensions-syntax.yaml"></a>

```
Transform: AWS::LanguageExtensions
Resources:
  ...
```

La transformación `AWS::LanguageExtensions` es una declaración independiente sin parámetros adicionales.

## Compatibilidad con funciones adicionales
<a name="aws-languageextensions-supported-functions"></a>

La transformación `AWS::LanguageExtensions` admite las siguientes funciones adicionales:
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)

## Consideraciones
<a name="aws-languageextensions-considerations"></a>

Cuando use la transformación `AWS::LanguageExtensions`, tenga en cuenta las siguientes consideraciones:
+ Si actualiza una pila que usa la transformación `AWS::LanguageExtensions`, le recomendamos que no utilice la opción **Utilizar plantilla existente** en la consola de CloudFormation ni la opción equivalente de la línea de comandos `--use-previous-template`. La transformación `AWS::LanguageExtensions` resuelve los parámetros en valores literales durante el procesamiento. Cuando se utiliza `--use-previous-template`, CloudFormation utiliza esta plantilla procesada con los valores literales anteriores, lo que impide que se apliquen nuevos valores de parámetros y actualizaciones de parámetros de Systems Manager. En su lugar, proporcione la plantilla original para garantizar que los parámetros se vuelvan a resolver con los valores actuales.
+ La sintaxis YAML de formato corto no se admite en una plantilla para las funciones intrínsecas que proporcione la transformación `AWS::LanguageExtensions`. Use las referencias explícitas a estas funciones. Por ejemplo, utilice `Fn::Length` en lugar de `!Length`.
+ Actualmente, la AWS SAM CLI no admite la función intrínseca `Fn::ForEach` de la transformación `AWS::LanguageExtensions`.
+ Si usa varias transformaciones, use un formato de lista. Si usa macros personalizadas, coloque las transformaciones que proporcione AWS después de sus macros personalizadas. Si usa las transformaciones `AWS::LanguageExtensions` y `AWS::Serverless`, la transformación `AWS::LanguageExtensions` debe aparecer antes que la transformación `AWS::Serverless` en la lista.
+ Las funciones y los atributos proporcionados por la transformación `AWS::LanguageExtensions` solo se admiten en las secciones `Resources`, `Conditions` y `Outputs` de la plantilla.

## Ejemplos
<a name="aws-languageextensions-examples"></a>

En los siguientes ejemplos se muestra cómo usar la transformación `AWS::LanguageExtensions` para usar la función intrínseca `Fn::Length`, definida por la transformación.

### JSON
<a name="aws-languageextensions-example.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "QueueList": {
            "Type": "CommaDelimitedList"
        },
        "QueueNameParam": {
            "Description": "Name for your SQS queue",
            "Type": "String"
        }
    },
    "Resources": {
        "Queue": {
            "Type": "AWS::SQS::Queue",
            "Properties": {
                "QueueName": {
                    "Ref": "QueueNameParam"
                },
                "DelaySeconds": {
                    "Fn::Length": {
                        "Ref": "QueueList"
                    }
                }
            }
        }
    }
}
```

### YAML
<a name="aws-languageextensions-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  QueueList:
    Type: CommaDelimitedList
  QueueNameParam:
    Description: Name for your SQS queue
    Type: String
Resources:
  Queue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: !Ref QueueNameParam
      DelaySeconds:
        'Fn::Length': !Ref QueueList
```

## Recursos relacionados
<a name="aws-languageextensions-related-resources"></a>

Para ver más ejemplos, consulte los siguientes temas.
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ [`Ref`](intrinsic-function-reference-ref.md)
+ [`Fn::GetAtt`](intrinsic-function-reference-getatt.md)
+ [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md)

Para obtener información general sobre el uso de las macros, consulte [Procesamientos personalizados en plantillas de CloudFormation con macros de plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) en la *Guía del usuario de AWS CloudFormation*.

# `Fn::FindInMap enhancements`
<a name="intrinsic-function-reference-findinmap-enhancements"></a>

La transformación de `AWS::LanguageExtensions` mejora la funcionalidad de la función intrínseca `Fn::FindInMap` de las plantillas de CloudFormation.

La función `Fn::FindInMap` se utiliza para recuperar un valor de una asignación definida en la sección `Mappings` de una plantilla de CloudFormation. Sin embargo, la función `Fn::FindInMap` estándar tiene limitaciones, como la incapacidad de gestionar las asignaciones que faltan o de utilizar una función `Fn::FindInMap` que contenga algunas funciones intrínsecas.

La transformación de `AWS::LanguageExtensions` aborda estas limitaciones mediante la introducción de las siguientes mejoras:
+ **Compatibilidad con valores predeterminados**: puede especificar un valor predeterminado que se devolverá si no se encuentra una asignación.
+ **Compatibilidad con funciones intrínsecas**: también puede utilizar una gama más amplia de funciones intrínsecas para definir los campos de `Fn::FindInMap` con la función estándar `Fn::FindInMap`.

## Declaración
<a name="intrinsic-function-reference-findinmap-enhancements-declaration"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-enhancements-syntax.json"></a>

```
{ "Fn::FindInMap" : [
    "MapName",
    "TopLevelKey",
    "SecondLevelKey",
    {"DefaultValue": "DefaultValue"}
  ]
}
```

### YAML
<a name="intrinsic-function-reference-findinmap-enhancements-syntax.yaml"></a>

Sintaxis del nombre de función completo:

```
Fn::FindInMap:
  - MapName
  - TopLevelKey
  - SecondLevelKey
  - DefaultValue: DefaultValue
```

Sintaxis de la forma abreviada:

```
!FindInMap
  - MapName
  - TopLevelKey
  - SecondLevelKey
  - DefaultValue: DefaultValue
```

## Parameters
<a name="intrinsic-function-reference-findinmap-enhancements-parameters"></a>

DefaultValue  <a name="DefaultValue"></a>
El valor que `Fn::FindInMap` resolverá si `TopLevelKey` o `SecondLevelKey` no se pueden encontrar en el mapa de `MapName`. Este campo es opcional.

Todos los parámetros `MapName`, `TopLevelKey`, `SecondLevelKey` y `DefaultValue` pueden ser una función intrínseca siempre que pueda resolverse en un valor válido durante la transformación.

## Ejemplos
<a name="w2aac28c16c20c15"></a>

Los siguientes ejemplos muestran cómo definir los campos de `Fn::FindInMap` cuando se agrega la transformación de `AWS::LanguageExtensions`.

### Uso de un valor predeterminado
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

A continuación se muestra un ejemplo del uso de un valor predeterminado en la función `Fn::FindInMap`.

#### JSON
<a name="intrinsic-function-reference-findinmap-default-value-example.json"></a>

```
{
  //...
    "Transform": "AWS::LanguageExtensions",
    //...
    "Fn::FindInMap": [
      "RegionMap",
      { "Ref": "AWS::Region" },
      "InstanceType",
      { "DefaultValue": "t3.micro" }
    ]
  //...
}
```

#### YAML
<a name="intrinsic-function-reference-findinmap-default-value-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
    !FindInMap 
        - 'RegionMap'
        - !Ref 'AWS::Region'
        - 'InstanceType'
        - DefaultValue: t3.micro
#...
```

#### Uso de funciones intrínsecas para definir la clave de nivel superior
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

El siguiente es un ejemplo del uso de una función `Fn::FindInMap` con las funciones intrínsecas `Fn::Select` y `Fn::Split` incrustadas para definir la clave de nivel superior:

##### JSON
<a name="intrinsic-function-reference-findinmap-enhancement-example.json"></a>

```
{
  //...
  "Transform": "AWS::LanguageExtensions",
  //...
      "Fn::FindInMap": [
        "MyMap",
        {
          "Fn::Select": [
            0,
            {
              "Fn::Split": [
                "|",
                { "Ref": "InputKeys" }
              ]
            }
          ]
        },
        "SecondKey"
      ]
//...
}
```

##### YAML
<a name="intrinsic-function-reference-findinmap-enhance-example.yaml"></a>

```
Transform: 'AWS::LanguageExtensions'
#...
    !FindInMap: [MyMap, !Select [0, !Split [|, !Ref InputKeys]], SecondKey]
#...
```

## Funciones compatibles
<a name="intrinsic-function-reference-findinmap-enhancements-supported-functions"></a>

Puede utilizar las siguientes funciones en los parámetros de las mejoras de `Fn::FindInMap:`:
+ ``Fn::FindInMap``
+ ``Fn::Join``
+ ``Fn::Sub``
+ ``Fn::If``
+ ``Fn::Select``
+ ``Fn::Length``
+ ``Fn::ToJsonString``
+ ``Fn::Split``: a menos que se use como valor predeterminado, `Fn::Split` debe usarse junto con funciones intrínsecas que producen una cadena, como ``Fn::Join`` o ``Fn::Select``.
+ ``Ref``

## Recursos relacionados
<a name="w2aac28c16c20c19"></a>

Para obtener más información y ejemplos que muestran cómo usar la función intrínseca `Fn::FindInMap`, consulte [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md).

Para obtener más información sobre la transformación de `AWS::LanguageExtensions`, consulte [`AWS::LanguageExtensions`Transformación de](transform-aws-languageextensions.md).

# `AWS::SecretsManager`Transformación de
<a name="transform-aws-secretsmanager"></a>

En este tema se describe cómo utilizar la transformación `AWS::SecretsManager` y el tipo de recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) para especificar una función de Lambda para realizar la rotación de secretos.

La transformación `AWS::SecretsManager` es una macro de CloudFormation que, cuando se hace referencia a ella en la plantilla de la pila, genera automáticamente una función de Lambda para la rotación de secretos al crear o actualizar una pila mediante un conjunto de cambios. La función de Lambda se coloca en una pila anidada en la plantilla procesada. Utiliza una plantilla de funciones del repositorio [AWS Secrets Manager Rotation Lambda Functions](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas), basada en el valor de la propiedad [RotationType](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-rotationtype) del recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html).

## Uso
<a name="aws-secretsmanager-usage"></a>

Para usar la transformación `AWS::SecretsManager`, debe declararla en el nivel superior de la plantilla de CloudFormation. No se puede utilizar `AWS::SecretsManager` como transformación integrada en ninguna otra sección de la plantilla.

La declaración debe usar la cadena literal `AWS::SecretsManager-2020-07-23` o `AWS::SecretsManager-2024-09-16` como valor. No puede utilizar un parámetro o función para especificar un valor de transformación.

### Sintaxis
<a name="aws-secretsmanager-syntax"></a>

Para declarar esta transformación en su plantilla de CloudFormation, use la siguiente sintaxis:

#### JSON
<a name="aws-secretsmanager-syntax.json"></a>

```
{
  "Transform":"AWS::SecretsManager-2020-07-23",
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-secretsmanager-syntax.yaml"></a>

```
Transform: AWS::SecretsManager-2020-07-23
Resources:
  ...
```

La transformación `AWS::SecretsManager` es una declaración independiente sin parámetros adicionales. En su lugar, debe configurar la propiedad [HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) del recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) en la plantilla de la pila. La propiedad [HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) especifica la función de Lambda para realizar la rotación de secretos.

## Nuevas características de `AWS::SecretsManager-2024-09-16`
<a name="aws-secretsmanager-new-version"></a>

La última versión de la transformación `AWS::SecretsManager` (`AWS::SecretsManager-2024-09-16`) presenta las siguientes mejoras:
+ **Actualizaciones de Lambda automáticas**: al actualizar las pilas de CloudFormation, las funciones de Lambda ahora actualizan automáticamente su configuración de tiempo de ejecución y sus dependencias internas. Esto garantiza que utilice las versiones más seguras y fiables del código que administra la rotación de secretos en Secrets Manager.
+ **Compatibilidad con atributos adicionales**: la nueva transformación admite atributos de recurso adicionales para el tipo de recurso `AWS::SecretsManager::RotationSchedule` cuando se usa con la propiedad `HostedRotationLambda`, incluido el atributo `DependsOn`.
**nota**  
Ambas versiones admiten los atributos `DeletionPolicy` y `UpdateReplacePolicy`.

Para obtener más información sobre esta nueva versión de la transformación `AWS::SecretsManager`, consulte [Introducing an enhanced version of theAWS Secrets Manager transform: AWS::SecretsManager-2024-09-16](https://aws.amazon.com/blogs/security/introducing-an-enhanced-version-of-the-aws-secrets-manager-transform-awssecretsmanager-2024-09-16/) en AWS Security Blog.

## Ejemplos
<a name="aws-secretsmanager-examples"></a>

En el siguiente ejemplo se muestra cómo usar la transformación `AWS::SecretsManager` (`AWS::SecretsManager-2024-09-16`) y el recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) en la plantilla. En este ejemplo, CloudFormation generará automáticamente una función de Lambda para la rotación de secretos de un solo usuario de MySQL.

El secreto está configurado para rotar automáticamente todos los días a medianoche (UTC). El proceso de rotación puede tardar hasta dos horas en completarse. La actualización del programa de rotación no iniciará una rotación inmediata.

### JSON
<a name="aws-secretsmanager-example.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Transform":"AWS::SecretsManager-2024-09-16",
  "Resources":{

  ...

    "MySecretRotationSchedule":{
      "Type":"AWS::SecretsManager::RotationSchedule",
      "DependsOn":"logical name of AWS::SecretsManager::SecretTargetAttachment resource",
      "Properties":{
        "SecretId":{
          "Ref":"logical name of AWS::SecretsManager::Secret resource"
        },
        "HostedRotationLambda":{
          "RotationType":"MySQLSingleUser",
          "RotationLambdaName":"name of Lambda function to be created",
          "VpcSecurityGroupIds":{
            "Fn::GetAtt":[
              "logical name of AWS::EC2::SecurityGroup resource",
              "GroupId"
            ]
          },
          "VpcSubnetIds":{
            "Fn::Join":[
              ",",
              [
                {
                  "Ref":"logical name of primary subnet"
                },
                {
                  "Ref":"logical name of secondary subnet"
                }
              ]
            ]
          }
        },
        "RotationRules":{
          "ScheduleExpression":"cron(0 0 * * ? *)",
          "Duration":"2h"
        },
        "RotateImmediatelyOnUpdate":false
      }
    }
  }
}
```

### YAML
<a name="aws-secretsmanager-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::SecretsManager-2024-09-16
Resources:

  ...

  MySecretRotationSchedule:
    Type: AWS::SecretsManager::RotationSchedule
    DependsOn: logical name of AWS::SecretsManager::SecretTargetAttachment resource
    Properties:
      SecretId: !Ref logical name of AWS::SecretsManager::Secret resource
      HostedRotationLambda:
        RotationType: MySQLSingleUser
        RotationLambdaName: name of Lambda function to be created
        VpcSecurityGroupIds: !GetAtt logical name of AWS::EC2::SecurityGroup resource.GroupId
        VpcSubnetIds:
          Fn::Join:
          - ","
          - - Ref: logical name of primary subnet
            - Ref: logical name of secondary subnet
      RotationRules:
        ScheduleExpression: cron(0 0 * * ? *)
        Duration: 2h
      RotateImmediatelyOnUpdate: false
```

## Recursos relacionados
<a name="aws-secretsmanager-related-resources"></a>

Para ver ejemplos completos de plantillas de CloudFormation que puede usar para configurar rotaciones secretas, consulte la sección [Ejemplos](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html#aws-resource-secretsmanager-rotationschedule--examples) del recurso `AWS::SecretsManager::RotationSchedule`.

Para obtener información general sobre el uso de las macros, consulte [Procesamientos personalizados en plantillas de CloudFormation con macros de plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) en la *Guía del usuario de AWS CloudFormation*.

# `AWS::Serverless`Transformación de
<a name="transform-aws-serverless"></a>

En este tema se describe cómo usar la transformación `AWS::Serverless` para procesar una plantilla escrita en la sintaxis de AWS Serverless Application Model (AWS SAM) y transformarla en una plantilla compatible con CloudFormation. 

Para obtener más información sobre el uso de la transformación `AWS::Serverless`, consulte [AWS SAM transform](https://github.com/aws/serverless-application-model) en GitHub.

## Uso
<a name="aws-serverless-usage"></a>

Para usar la transformación `AWS::Serverless`, debe declararla en el nivel superior de la plantilla de CloudFormation. No se puede utilizar `AWS::Serverless` como transformación integrada en ninguna otra sección de la plantilla.

La declaración debe usar la cadena literal `AWS::Serverless-2016-10-31` como valor. No puede utilizar un parámetro o función para especificar un valor de transformación.

### Sintaxis
<a name="aws-serverless-syntax"></a>

Para declarar esta transformación en su plantilla de CloudFormation, use la siguiente sintaxis:

#### JSON
<a name="aws-serverless-syntax.json"></a>

```
{
  "Transform":"AWS::Serverless-2016-10-31",
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-serverless-syntax.yaml"></a>

```
Transform: AWS::Serverless-2016-10-31
Resources:
  ...
```

La transformación `AWS::Serverless` es una declaración independiente sin parámetros adicionales.

## Ejemplos
<a name="aws-serverless-examples"></a>

En los siguientes ejemplos se muestra cómo usar la transformación `AWS::Serverless` y la sintaxis de AWS SAM para simplificar la declaración de una función de Lambda y su rol de ejecución.

### JSON
<a name="aws-serverless-example.json"></a>

```
{
  "Transform":"AWS::Serverless-2016-10-31",
  "Resources":{
    "MyFunction":{
      "Type":"AWS::Serverless::Function",
      "Properties":{
        "Handler":"index.handler",
        "Runtime":"nodejs20.x",
        "CodeUri":"s3://amzn-s3-demo-bucket/MySourceCode.zip"
      }
    }
  }
}
```

### YAML
<a name="aws-serverless-example.yaml"></a>

```
Transform: AWS::Serverless-2016-10-31
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs20.x
      CodeUri: 's3://amzn-s3-demo-bucket/MySourceCode.zip'
```

Al crear un conjunto de cambios de la plantilla, CloudFormation amplía la sintaxis de AWS SAM, tal y como se define en la transformación. La plantilla procesada amplía el recurso `AWS::Serverless::Function`, declarando una función de Lambda y un rol de ejecución.

```
{
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Handler": "index.handler",
        "Code": {
          "S3Bucket": "amzn-s3-demo-bucket",
          "S3Key": "MySourceCode.zip"
        },
        "Role": {
          "Fn::GetAtt": ["MyFunctionRole", "Arn"]
        },
        "Runtime": "nodejs20.x"
      }
    },
    "MyFunctionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [{
            "Action": ["sts:AssumeRole"],
            "Effect": "Allow",
            "Principal": {
              "Service": ["lambda.amazonaws.com"]
            }
          }]
        }
      }
    }
  }
}
```

## Uso de `AWS::Serverless` con `AWS::LanguageExtensions`
<a name="aws-serverless-language-extensions"></a>

Cuando se utilizan ambas transformaciones `AWS::Serverless` y `AWS::LanguageExtensions`, hacer referencia a recursos como `AWS::ApiGateway::Stage` requiere una sintaxis especial cuando el nombre de la etapa se pasa como un valor que no es un parámetro `NoEcho`.

En lugar de usar la sintaxis AWS SAM para la referencia (`MyApi.Stage`), utilice `Fn::Sub` para generar la referencia de ID lógica. Por ejemplo, `"Ref": {"Fn::Sub": "${MyApi}${StageName}Stage"}`. Esto crea el ID lógico correcto en tiempo de ejecución.

El motivo de este formato especial es que estas dos transformaciones gestionan los valores de forma diferente:
+ `AWS::LanguageExtensions` resuelve las funciones intrínsecas con sus valores reales.
+ `AWS::Serverless` crea distintos ID lógicos en función de si recibe un valor estático o una función intrínseca.

## Recursos relacionados
<a name="aws-serverless-related-resources"></a>

Para obtener más información sobre las aplicaciones sin servidor y AWS Serverless Application Model (AWS SAM), consulte la [Guía para desarrolladores de AWS Serverless Application Model](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html).

Para conocer los tipos de recursos y propiedades específicos de AWS SAM, consulte [AWS SAM resources and properties](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-resources-and-properties.html) en la *Guía para desarrolladores de AWS Serverless Application Model*.

Para obtener información general sobre el uso de las macros, consulte [Procesamientos personalizados en plantillas de CloudFormation con macros de plantillas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) en la *Guía del usuario de AWS CloudFormation*.

# `AWS::ServiceCatalog`Transformación de
<a name="transform-aws-servicecatalog"></a>

En este tema se describe cómo usar la transformación `AWS::ServiceCatalog` para hacer referencia a las salidas de un producto aprovisionado de AWS Service Catalog existente en su plantilla de CloudFormation.

## Uso
<a name="aws-servicecatalog-usage"></a>

Para usar la transformación `AWS::ServiceCatalog`, debe declararla en el nivel superior de la plantilla de CloudFormation. No se puede utilizar `AWS::ServiceCatalog` como transformación integrada en ninguna otra sección de la plantilla.

Cuando se requiere un valor de salida, debe proporcionar el nombre del producto aprovisionado y el nombre de la clave de salida.

Puede hacer referencia a varios productos aprovisionados y nombres clave en la plantilla, hasta un máximo de 20 por plantilla. Durante el aprovisionamiento, la transformación recupera el valor de cada producto y clave aprovisionados a los que se hace referencia, sustituyendo el valor de salida en la plantilla de CloudFormation.

La declaración debe usar la cadena literal `AWS::ServiceCatalog` como valor. No puede utilizar un parámetro o función para especificar un valor de transformación.

### Sintaxis
<a name="aws-servicecatalog-syntax"></a>

Para declarar esta transformación en su plantilla de CloudFormation, use la siguiente sintaxis:

#### JSON
<a name="aws-servicecatalog-syntax.json"></a>

```
{
  "Transform":"AWS::ServiceCatalog",
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-servicecatalog-syntax.yaml"></a>

```
Transform: AWS::ServiceCatalog
Resources:
  ...
```

La transformación `AWS::ServiceCatalog` es una declaración independiente sin parámetros adicionales.

## Ejemplos
<a name="aws-servicecatalog-examples"></a>

En los siguientes ejemplos se muestra cómo un usuario puede hacer referencia a las salidas de un producto aprovisionado de Service Catalog existente en una plantilla de CloudFormation.

En estos ejemplos, `SampleProvisionedProduct` es un producto aprovisionado previamente creado. `SampleOutputKey` es una clave de salida de este producto aprovisionado.

### JSON
<a name="aws-servicecatalog-example.json.json"></a>

Este ejemplo es una versión de trabajo.

Las versiones de plantilla que no encapsulen el valor como un literal de cadena fallarán.

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Transform":"AWS::ServiceCatalog",
  "Resources":{
    "ExampleParameter":{
      "Type":"AWS::SSM::Parameter",
      "Properties":{
        "Type":"String",
        "Value":"[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]"
      }
    }
  }
}
```

### YAML
<a name="aws-servicecatalog-example.yaml"></a>

Los ejemplos del 1 al 4 son plantillas válidas. En los Ejemplos 1 y 2, la transformación y el valor son literales de cadena.

El ejemplo 5 no es una plantilla válida. El valor debe estar encapsulado en una cadena `'` o `"` o `>-`. De lo contrario, el usuario recibe un error.

```
// Example 1 
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::ServiceCatalog'
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: '[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]'
     
// Example 2
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: '[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]'
     
     
// Example 3 
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: "[[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]"
     
     
// Example 4 
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: >-
        [[servicecatalog:provisionedproduct:SampleProvisionedProduct:SampleOutputKey]]
     
     
// Example 5 
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::ServiceCatalog
Resources:
  ExampleParameter2:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: [[servicecatalog:provisionedproduct:SSMProductProvisionedProduct:SampleOutputKey]]
```