

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

# Referência de transformação
<a name="transform-reference"></a>

As transformações são macros hospedadas pelo CloudFormation. Ao contrário de macros personalizadas, a transformação não requer permissões especiais para ser usada, pois é hospedada pelo CloudFormation. As transformações podem ser usadas em modelos em qualquer conta dentro do CloudFormation. Além disso, não há cobrança ao utilizar transformações. O CloudFormation trata a transformação da mesma forma que qualquer outra macro em termos de escopo e ordem de avaliação.

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

É possível usar as transformações a seguir em seus modelos do CloudFormation.

**Topics**
+ [`AWS::CodeDeployBlueGreen`Transformação](transform-aws-codedeploybluegreen.md)
+ [`AWS::Include`Transformação](transform-aws-include.md)
+ [`AWS::LanguageExtensions`Transformação](transform-aws-languageextensions.md)
+ [`AWS::SecretsManager`Transformação](transform-aws-secretsmanager.md)
+ [`AWS::Serverless`Transformação](transform-aws-serverless.md)
+ [`AWS::ServiceCatalog`Transformação](transform-aws-servicecatalog.md)

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

Este tópico descreve como usar a transformação `AWS::CodeDeployBlueGreen` para habilitar implantações azuis/verdes do ECS por meio do CodeDeploy em sua pilha.

Para obter mais informações, consulte [Executar implantações azuis/verdes do ECS por meio do CodeDeploy usando o CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html) no *Guia do usuário do AWS CloudFormation*.

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

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

O valor da declaração de transformação deve ser uma sequência literal. Você não pode usar um parâmetro ou uma função para especificar um valor de transformação.

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

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

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

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

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

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

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

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

Para obter exemplos completos de modelos do CloudFormation que podem ser usados para habilitar implantações azul/verde do ECS em sua pilha, consulte [Exemplo de modelo de implantação azul/verde](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green-template-example.html) no *Guia do usuário do AWS CloudFormation*.

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

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

Este tópico descreve como usar a transformação `AWS::Include` para inserir conteúdo clichê em seus modelos do CloudFormation.

`AWS::Include` é uma macro do CloudFormation que, quando referenciada no seu modelo de pilha, insere o conteúdo do arquivo especificado no local da transformação no modelo quando você cria ou atualiza uma pilha usando um conjunto de alterações. A função `AWS::Include` comporta-se de forma semelhante a uma diretiva `include`, `copy` ou `import` em linguagens de programação.

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

É possível usar a transformação `AWS::Include` em qualquer lugar do modelo do CloudFormation, exceto na seção de parâmetros do modelo ou na versão do modelo. Por exemplo, use `AWS::Include` na seção de mapeamentos.

### Sintaxe no nível superior de um modelo
<a name="aws-include-syntax-top-level"></a>

Para declarar essa transformação no nível superior do seu modelo do CloudFormation, como a seção `Transform`, use a seguinte sintaxe:

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

### Sintaxe quando a transformação está incorporada em uma seção de um modelo
<a name="aws-include-syntax-within-section"></a>

Para declarar essa transformação em uma seção do seu modelo do CloudFormation, use a função intrínseca `Fn::Transform` e a seguinte sintaxe:

#### 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 obter mais informações, consulte [`Fn::Transform`](intrinsic-function-reference-transform.md).

### Parâmetros
<a name="aws-include-parameters"></a>

`Location`

Um local é um URI do Amazon S3, com um nome de arquivo específico em um bucket do S3. Por exemplo, `s3://amzn-s3-demo-bucket/MyFile.yaml`.

## Considerações
<a name="aws-include-considerations"></a>

Ao usar `AWS::Include`, tenha as seguintes considerações em mente. Para obter mais considerações sobre o uso de macros, consulte [Considerações sobre macros](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros-overview.html#template-macros-considerations) no *Guia do usuário do AWS CloudFormation*.
+ No momento, oferecemos suporte ao URI do Amazon S3, mas não há outro formato do Amazon S3 (como o Nome de região da Amazon (ARN) do Amazon S3). Ele deve ser um bucket do Amazon S3, em vez de algo como um repositório GitHub.
+ Qualquer pessoa com acesso ao URI do Amazon S3 pode incluir o trecho em seu modelo.
+ Os trechos do modelo devem ser em JSON válido.
+ Os trechos do seu modelo devem ser objetos de chave–valor válidos, por exemplo, `"KeyName": "keyValue"`.
+ Você não pode usar `AWS::Include` para fazer referência a um trecho de modelo que também usa `AWS::Include`.
+ Se os trechos forem alterados, a pilha não selecionará automaticamente essas alterações. Para obter as alterações, atualize a pilha com os trechos atualizados. Se você atualizar a pilha, verifique se os trechos incluídos não foram alterados sem o seu conhecimento. Para confirmar antes de atualizar a pilha, verifique o conjunto de alterações.
+ Ao criar modelos e trechos, você pode combinar linguagens de modelos YAML e JSON.
+ No momento, não oferecemos suporte ao uso de notações abreviadas para trechos YAML.
+ Você pode fornecer um URI do Amazon S3 de replicação entre regiões com o `AWS::Include`. Verifique os nomes do bucket do Amazon S3 ao acessar objetos de replicação entre regiões. Para obter mais informações, consulte [Replicar objetos dentro de uma região e entre regiões](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html) no * Guia do usuário do Amazon S3*.

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

Os exemplos a seguir mostram como usar a transformação `AWS::Include` para executar um identificador de condição de espera. Substitua *amzn-s3-demo-bucket* pelo nome do bucket real. 

Primeiro, salve um arquivo YAML chamado `single_wait_condition.yaml` no seu bucket do S3 com o seguinte conteúdo:

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

Em seguida, é possível fazer referência a esse arquivo usando o formato JSON ou 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 obter mais informações, consulte [Criar condições de espera em um modelo do CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html) no *Guia do usuário do AWS CloudFormation*.

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

Este tópico descreve como usar a transformação `AWS::LanguageExtensions` para habilitar funções e recursos adicionais que não estão disponíveis por padrão. 

`AWS::LanguageExtensions` é uma macro do CloudFormation que, quando referenciada no seu modelo de pilha, atualiza qualquer função intrínseca definida pela transformação para seu valor resolvido dentro do modelo quando você cria ou atualiza uma pilha usando um conjunto de alterações. 

Ao incluir essa transformação em seu modelo do CloudFormation, você pode acessar recursos adicionais, como `Fn::ForEach`, o qual permite operações mais avançadas, como iterações. Você também pode usar funções intrínsecas em locais onde elas normalmente não são permitidas, como nas funções `Ref` e `Fn::GetAtt`.

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

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

A declaração deve usar a string literal `AWS::LanguageExtensions` 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-languageextensions-syntax"></a>

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

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

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

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

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

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

## Suporte para funções adicionais
<a name="aws-languageextensions-supported-functions"></a>

A transformação `AWS::LanguageExtensions` é compatível com as seguintes funções adicionais:
+ [`Fn::ForEach`](intrinsic-function-reference-foreach.md)
+ [`Fn::Length`](intrinsic-function-reference-length.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)

## Considerações
<a name="aws-languageextensions-considerations"></a>

Ao usar a transformação `AWS::LanguageExtensions`, tenha em mente as seguintes considerações:
+ Ao atualizar uma pilha que usa a transformação `AWS::LanguageExtensions`, recomendamos que você não use a opção **Usar modelo existente** no console do CloudFormation ou a opção de linha de comando equivalente `--use-previous-template`. A transformação `AWS::LanguageExtensions` resolve os parâmetros em valores literais durante o processamento. Quando você usa `--use-previous-template`, o CloudFormation usa esse modelo processado com os valores literais antigos, impedindo que novos valores de parâmetros e atualizações de parâmetros do Systems Manager sejam aplicados. Em vez disso, forneça o modelo original para garantir que os parâmetros sejam resolvidos novamente com os valores atuais.
+ A sintaxe YAML de formato curto não é compatível com um modelo para funções intrínsecas disponíveis apenas na transformação `AWS::LanguageExtensions`. Use referências explícitas a essas funções. Por exemplo, use `Fn::Length` em vez de `!Length`.
+ No momento, a CLI do AWS SAM não oferece suporte à função intrínseca `Fn::ForEach` da transformação `AWS::LanguageExtensions`.
+ Se você estiver usando várias transformações, use um formato de lista. Se você estiver usando macros personalizadas, posicione as transformações fornecidas pela AWS depois das macros personalizadas. Se você estiver usando ambas as transformações `AWS::LanguageExtensions` e `AWS::Serverless`, a transformação `AWS::LanguageExtensions` deve vir antes da transformação `AWS::Serverless` na lista.
+ As funções e os atributos fornecidos pela transformação `AWS::LanguageExtensions` só são compatíveis com as seções `Resources`, `Conditions` e `Outputs` do seu modelo.

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

Os exemplos a seguir mostram como usar a transformação `AWS::LanguageExtensions` para usar a função intrínseca `Fn::Length` definida pela transformação.

### 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 obter mais exemplos, consulte os tópicos a seguir.
+ [`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 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*.

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

A transformação `AWS::LanguageExtensions` aprimora a funcionalidade da função intrínseca `Fn::FindInMap` nos modelos do CloudFormation.

A função `Fn::FindInMap` é usada para recuperar um valor de um mapeamento definido na seção `Mappings` de um modelo do CloudFormation. No entanto, a função `Fn::FindInMap` padrão tem limitações, como a incapacidade de lidar com mapeamentos ausentes ou usar uma função `Fn::FindInMap` com algumas funções intrínsecas incorporadas.

A transformação `AWS::LanguageExtensions` aborda essas limitações introduzindo os seguintes aprimoramentos:
+ **Suporte ao valor padrão**: você poderá especificar um valor padrão a ser retornado se um mapeamento não for encontrado.
+ **Suporte à função intrínseca**: também é possível usar uma variedade maior de funções intrínsecas para definir os campos de `Fn::FindInMap` do que com a função `Fn::FindInMap` padrão.

## Declaração
<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>

Sintaxe para o nome da função completo:

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

Sintaxe para a forma resumida:

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

## Parâmetros
<a name="intrinsic-function-reference-findinmap-enhancements-parameters"></a>

DefaultValue  <a name="DefaultValue"></a>
O valor para o qual `Fn::FindInMap` será resolvido se a `TopLevelKey` e/ou a `SecondLevelKey` não puderem ser encontradas no mapa `MapName`. Esse campo é opcional.

Todos os parâmetros `MapName`, `TopLevelKey`, `SecondLevelKey` e `DefaultValue` podem ser uma função intrínseca, desde que possam ser resolvidos para um valor válido durante a transformação.

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

Os exemplos a seguir demonstram como definir os campos de `Fn::FindInMap` quando você adiciona a transformação `AWS::LanguageExtensions`.

### Usar um valor padrão
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

Este é um exemplo do uso dos valores padrão na função `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 das funções intrínsecas para definir a chave de nível superior
<a name="intrinsic-function-reference-findinmap-enhancements-example"></a>

Este é um exemplo do uso de uma função `Fn::FindInMap` com as funções intrínsecas `Fn::Select` e `Fn::Split` incorporadas nela para definir a chave de nível 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]
#...
```

## Funções compatíveis
<a name="intrinsic-function-reference-findinmap-enhancements-supported-functions"></a>

Você pode usar as seguintes funções nos parâmetros de melhorias de `Fn::FindInMap:`:
+ ``Fn::FindInMap``
+ ``Fn::Join``
+ ``Fn::Sub``
+ ``Fn::If``
+ ``Fn::Select``
+ ``Fn::Length``
+ ``Fn::ToJsonString``
+ ``Fn::Split``: a menos que seja usada para o valor padrão, `Fn::Split` deve ser usada em conjunto com funções intrínsecas que produzam uma string, como ``Fn::Join`` ou ``Fn::Select``.
+ ``Ref``

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

Consulte mais informações e exemplos que mostram como usar a função intrínseca `Fn::FindInMap` em [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md).

Para mais informações sobre a transformação `AWS::LanguageExtensions`, consulte [`AWS::LanguageExtensions`Transformação](transform-aws-languageextensions.md).

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

Este tópico descreve como usar a transformação `AWS::SecretsManager` e o tipo de recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) para especificar uma função do Lambda para executar a alternância de segredos.

A transformação `AWS::SecretsManager` é uma macro do CloudFormation que, quando referenciada em seu modelo de pilha, gera automaticamente uma função do Lambda para alternância de segredos quando você cria ou atualiza uma pilha usando um conjunto de alterações. A função do Lambda é colocada em uma pilha aninhada no modelo processado. Ela usa um modelo de função do repositório [Funções do Lambda de alternância do AWS Secrets Manager](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas) com base no valor da propriedade [RotationType](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-rotationtype) do recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html).

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

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

A declaração deve usar a string literal `AWS::SecretsManager-2020-07-23` ou `AWS::SecretsManager-2024-09-16` 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-secretsmanager-syntax"></a>

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

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

A transformação `AWS::SecretsManager` é uma declaração independente sem parâmetros adicionais. Em vez disso, você configura a propriedade [HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) do recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) em seu modelo de pilha. A propriedade [HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) especifica a função do Lambda para executar a rotação de segredos.

## Novos recursos no `AWS::SecretsManager-2024-09-16`
<a name="aws-secretsmanager-new-version"></a>

A versão mais recente da transformação `AWS::SecretsManager` (`AWS::SecretsManager-2024-09-16`) apresenta os seguintes aperfeiçoamentos:
+ **Atualizações automáticas do Lambda**: quando você atualiza as pilhas do CloudFormation, as funções do Lambda agora atualizam automaticamente as configurações de runtime e as dependências internas. Isso garante que você esteja usando as versões mais seguras e confiáveis do código que gerencia a alternância de segredos no Secrets Manager.
+ **Compatibilidade com atributos adicionais**: a nova transformação é compatível com atributos de recurso adicionais para o tipo de recurso `AWS::SecretsManager::RotationSchedule` quando é usada com a propriedade `HostedRotationLambda`, incluindo o atributo `DependsOn`.
**nota**  
Ambas as versões oferecem suporte aos atributos `DeletionPolicy` e `UpdateReplacePolicy`.

Para saber mais sobre essa nova versão da transformação `AWS::SecretsManager`, consulte [Introdução a uma versão aprimorada da transformação AWS Secrets Manager: 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/) no Blog de Segurança da AWS.

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

Os exemplos a seguir mostram como usar a transformação `AWS::SecretsManager` (`AWS::SecretsManager-2024-09-16`) e o recurso [AWS::SecretsManager::RotationSchedule](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) em seu modelo. Neste exemplo, o CloudFormation gerará automaticamente uma função do Lambda para a alternância de segredos de usuário único do MySQL.

O segredo está configurado para alternar automaticamente todos os dias à meia-noite (UTC). O processo de alternância pode levar até 2 horas para ser concluído. A atualização do cronograma de alternância não iniciará uma alternância imediata.

### 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 exemplos completos de modelos do CloudFormation que você pode usar para configurar alternâncias de segredos, consulte a seção [Exemplos](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html#aws-resource-secretsmanager-rotationschedule--examples) do recurso `AWS::SecretsManager::RotationSchedule`.

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

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

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

Este tópico descreve como usar a transformação `AWS::ServiceCatalog` para fazer referência a saídas de um produto provisionado do AWS Service Catalog existente em seu modelo do CloudFormation.

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

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

Quando for necessário ter um valor de saída, você fornece o nome do produto provisionado e o nome da chave de saída.

É possível fazer referência a vários produtos provisionados e nomes de chaves em seu modelo, no máximo 20 por modelo. Durante o provisionamento, a transformação recupera o valor de cada produto e chave provisionados que foram indicados na referência, substituindo o valor de saída em seu modelo do CloudFormation.

A declaração deve usar a string literal `AWS::ServiceCatalog` 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-servicecatalog-syntax"></a>

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

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

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

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

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

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

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

Os exemplos a seguir mostram como é possível fazer referência a saídas de um produto provisionado existente do Service Catalog em um modelo do CloudFormation.

Nestes exemplos, `SampleProvisionedProduct` é um produto provisionado criado anteriormente. `SampleOutputKey` é uma chave de saída desse produto provisionado.

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

Este exemplo é uma versão funcional.

Versões de modelo que não envolverem o valor como uma string literal falharão.

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

Os exemplos 1–4 são modelos válidos. Nos exemplos 1 e 2, a transformação e o valor são strings literais.

O exemplo 5 não é um modelo válido. O valor deve ser envolvido em uma string `'`, `"` ou `>-`. Caso contrário, o usuário receberá um erro.

```
// 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]]
```