

Este é o novo *Guia de referência de modelos do CloudFormation*. Atualize seus favoritos e links. Para obter ajuda para começar a usar o CloudFormation, consulte o [Guia do usuário do AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# `AWS::Serverless`Transformação
<a name="transform-aws-serverless"></a>

Este tópico descreve como usar a transformação `AWS::Serverless` para processar um modelo escrito na sintaxe do AWS Serverless Application Model (AWS SAM) e transformá-lo em um modelo do CloudFormation compatível. 

Para obter mais informações sobre o uso da transformação `AWS::Serverless`, consulte [AWS SAM transform](https://github.com/aws/serverless-application-model) no GitHub.

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

Para usar a transformação `AWS::Serverless`, é necessário declará-la no nível superior do seu modelo do CloudFormation. Não é possível usar `AWS::Serverless` como uma transformação incorporada em nenhuma outra seção de modelo.

A declaração deve usar a string literal `AWS::Serverless-2016-10-31` como seu valor. Você não pode usar um parâmetro ou uma função para especificar um valor de transformação.

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

Para declarar essa transformação no modelo do CloudFormation, use a seguinte sintaxe:

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

A transformação `AWS::Serverless` é uma declaração independente sem parâmetros adicionais.

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

Os exemplos a seguir mostram como usar a transformação `AWS::Serverless` e a sintaxe AWS SAM para simplificar a declaração de uma função do Lambda e seu perfil de execução.

### 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'
```

Ao criar um conjunto de alterações do modelo, o CloudFormation expande a sintaxe do AWS SAM, conforme definido pela transformação. O modelo processado expande o recurso `AWS::Serverless::Function`, declarando uma função do Lambda e um perfil de execução.

```
{
  "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"]
            }
          }]
        }
      }
    }
  }
}
```

## Usar o `AWS::Serverless` com o `AWS::LanguageExtensions`
<a name="aws-serverless-language-extensions"></a>

Ao usar as transformações `AWS::Serverless` e `AWS::LanguageExtensions`, referenciar recursos como `AWS::ApiGateway::Stage` requer uma sintaxe especial quando o nome do estágio é passado como um valor de parâmetro não `NoEcho`.

Em vez de usar a sintaxe AWS SAM para a referência (`MyApi.Stage`), use `Fn::Sub` para gerar a referência de ID lógica. Por exemplo, `"Ref": {"Fn::Sub": "${MyApi}${StageName}Stage"}`. Isso cria a ID lógica correta em runtime.

O motivo desse formato especial é porque essas duas transformações tratam os valores de forma diferente:
+ `AWS::LanguageExtensions` resolve funções intrínsecas para seus valores reais.
+ `AWS::Serverless` cria IDs lógicos diferentes dependendo de receber um valor estático ou uma função intrínseca.

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

Para obter mais informações sobre aplicações sem servidor e o AWS Serverless Application Model (AWS SAM), consulte o [Guia do desenvolvedor do AWS Serverless Application Model](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html).

Para os tipos de recursos e propriedades específicos do AWS SAM, consulte [Recursos e propriedades do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-resources-and-properties.html) no *Guia do desenvolvedor do AWS Serverless Application Model*.

Para obter mais informações sobre o uso de macros, consulte [Executar processamento personalizado em modelos do CloudFormation com macros de modelo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html) no *Guia do usuário do AWS CloudFormation*.