

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

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