

# Obter valores da AWS usando pseudoparâmetros
<a name="pseudo-parameter-reference"></a>

Os pseudoparâmetros são variáveis integradas que fornecem acesso a informações importantes do ambiente da AWS, como IDs de contas, nomes de regiões e detalhes da pilha, que podem mudar entre implantações ou ambientes.

Você pode usar pseudoparâmetros em vez de valores com codificação rígida para tornar seus modelos mais portáteis e fáceis de serem reutilizados em diferentes regiões e Contas da AWS.

## Sintaxe
<a name="pseudo-parameter-syntax"></a>

Você pode referenciar pseudoparâmetros usando a função intrínseca `Ref` ou a `Fn::Sub`. 

### Ref.
<a name="pseudo-parameter-ref-syntax"></a>

A função intrínseca `Ref` usa a sintaxe geral a seguir. Para obter mais informações, consulte [Ref](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-ref.html).

#### JSON
<a name="pseudo-parameter-ref-syntax.json"></a>

```
{ "Ref" : "AWS::PseudoParameter" }
```

#### YAML
<a name="pseudo-parameter-ref-syntax.yaml"></a>

```
!Ref AWS::PseudoParameter
```

### Fn::Sub
<a name="pseudo-parameter-sub-syntax"></a>

A função intrínseca `Fn::Sub` usa um formato diferente que inclui a sintaxe `${}` em torno do pseudoparâmetro. Para obter mais informações, consulte [Fn::Sub](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-sub.html).

#### JSON
<a name="pseudo-parameter-sub-syntax.json"></a>

```
{ "Fn::Sub" : "${AWS::PseudoParameter}" }
```

#### YAML
<a name="pseudo-parameter-sub-syntax.yaml"></a>

```
!Sub '${AWS::PseudoParameter}'
```

## Pseudoparâmetros disponíveis
<a name="available-pseudo-parameters"></a>

### `AWS::AccountId`
<a name="cfn-pseudo-param-accountid"></a>

Devolve o ID da Conta da AWS da conta na qual a pilha está sendo criada, como `123456789012`.

Esse pseudoparâmetro é comumente usado ao definir perfis, políticas e outras políticas de recursos do IAM que envolvem ARNs específicos da conta.

### `AWS::NotificationARNs`
<a name="cfn-pseudo-param-notificationarns"></a>

Retorna a lista de nomes de recursos da Amazon (ARNs) dos tópicos do Amazon SNS que recebem as notificações de eventos da pilha. Você pode especificar esses ARNs usando a opção `--notification-arns` na AWS CLI ou usando o console enquanto cria ou atualiza sua pilha.

Ao contrário de outros pseudoparâmetros que retornam um valor único, `AWS::NotificationARNs` retorna uma lista de ARNs. Para acessar um ARN específico na lista, use a função intrínseca `Fn::Select`. Para obter mais informações, consulte [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-select.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-select.html).

### `AWS::NoValue`
<a name="cfn-pseudo-param-novalue"></a>

Remove a propriedade do recurso correspondente quando especificada como um valor de retorno na função intrínseca `Fn::If`. Para obter mais informações, consulte [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/intrinsic-function-reference-conditions.html#intrinsic-function-reference-conditions-if).

Esse pseudoparâmetro é particularmente útil para criar propriedades de recursos condicionais que só devem ser incluídas em determinadas condições.

### `AWS::Partition`
<a name="cfn-pseudo-param-partition"></a>

Retorna a partição onde o recurso se encontra. Para Regiões da AWS padrão, a partição é `aws`. Para recursos em outras partições, a partição é `aws-`*nomedapartição*. Por exemplo, a partição dos recursos na região da China (Pequim e Ningxia) é `aws-cn`, e a partição para recursos na região AWS GovCloud (EUA-Oeste) é `aws-us-gov`.

A partição faz parte do ARN dos recursos. Usar `AWS::Partition` garante que seus modelos funcionem corretamente em diferentes partições da AWS.

### `AWS::Region`
<a name="cfn-pseudo-param-region"></a>

Retorna uma sequência que representa a região na qual o recurso abrangente está sendo criado, como `us-west-2`.

Este é um dos pseudoparâmetros mais usados, pois permite que os modelos se adaptem a diferentes Regiões da AWS sem modificação.

### `AWS::StackId`
<a name="cfn-pseudo-param-stackid"></a>

Retorna o ID (ARN) da pilha, como `arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123`.

### `AWS::StackName`
<a name="cfn-pseudo-param-stackname"></a>

Retorna o nome da pilha, como `teststack`.

O nome da pilha é normalmente usado para criar nomes de recursos exclusivos que são facilmente identificáveis como pertencentes a uma pilha específica.

### `AWS::URLSuffix`
<a name="cfn-pseudo-param-urlsuffix"></a>

Retorna o sufixo para o domínio da AWS na Região da AWS onde a pilha está implantada. O sufixo é normalmente `amazonaws.com`, mas para a região China (Pequim), o sufixo é `amazonaws.com.cn`.

Esse parâmetro é particularmente útil ao criar URLs para endpoints de serviços da AWS.

## Exemplos
<a name="pseudo-parameter-examples"></a>

**Topics**
+ [Uso básico](#pseudo-parameter-basic-example)
+ [Usar o AWS::NotificationARNs](#pseudo-parameter-notification-example)
+ [Propriedades condicionais com AWS::NoValue](#pseudo-parameter-novalue-example)

### Uso básico
<a name="pseudo-parameter-basic-example"></a>

Os exemplos a seguir criam dois recursos: um tópico do Amazon SNS e um alarme do CloudWatch que envia notificações para esse tópico. Eles usam `AWS::StackName`, `AWS::Region` e `AWS::AccountId` para inserir dinamicamente o nome da pilha, a Região da AWS atual e o ID da conta nos ARNs, nas descrições e nos nomes dos recursos.

#### JSON
<a name="pseudo-parameter-basic-example.json"></a>

```
{
    "Resources": {
        "MyNotificationTopic": {
            "Type": "AWS::SNS::Topic",
            "Properties": {
                "DisplayName": { "Fn::Sub": "Notifications for ${AWS::StackName}" }
            }
        },
        "CPUAlarm": {
            "Type": "AWS::CloudWatch::Alarm",
            "Properties": {
                "AlarmDescription": { "Fn::Sub": "Alarm for high CPU in ${AWS::Region}" },
                "AlarmName": { "Fn::Sub": "${AWS::StackName}-HighCPUAlarm" },
                "MetricName": "CPUUtilization",
                "Namespace": "AWS/EC2",
                "Statistic": "Average",
                "Period": 300,
                "EvaluationPeriods": 1,
                "Threshold": 80,
                "ComparisonOperator": "GreaterThanThreshold",
                "AlarmActions": [{ "Fn::Sub": "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${MyNotificationTopic}" }]
            }
        }
    }
}
```

#### YAML
<a name="pseudo-parameter-basic-example.yaml"></a>

```
Resources:
  MyNotificationTopic:
    Type: AWS::SNS::Topic
    Properties:
      DisplayName: !Sub Notifications for ${AWS::StackName}
  CPUAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: !Sub Alarm for high CPU in ${AWS::Region}
      AlarmName: !Sub ${AWS::StackName}-HighCPUAlarm
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Statistic: Average
      Period: 300
      EvaluationPeriods: 1
      Threshold: 80
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${MyNotificationTopic}
```

### Usar o AWS::NotificationARNs
<a name="pseudo-parameter-notification-example"></a>

Os exemplos a seguir configuram um grupo do Auto Scaling para enviar notificações de eventos de inicialização de instâncias e erros de inicialização. A configuração usa o pseudoparâmetro `AWS::NotificationARNs`, que fornece uma lista de ARNs de tópicos do Amazon SNS que foram especificados durante a criação da pilha. A função `Fn::Select` escolhe o primeiro ARN dessa lista.

#### JSON
<a name="pseudo-parameter-notification-example.json"></a>

```
"myASG": {
   "Type": "AWS::AutoScaling::AutoScalingGroup",
   "Properties": {
      "LaunchTemplate": {
         "LaunchTemplateId": { "Ref": "myLaunchTemplate" },
         "Version": { "Fn::GetAtt": [ "myLaunchTemplate", "LatestVersionNumber" ] }
       },
       "MaxSize": "1",
       "MinSize": "1",
       "VPCZoneIdentifier": [
          "subnetIdAz1",
          "subnetIdAz2",
          "subnetIdAz3"
      ],
      "NotificationConfigurations" : [{
         "TopicARN" : { "Fn::Select" : [ "0", { "Ref" : "AWS::NotificationARNs" } ] },
         "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR" ]
      }]
   }
}
```

#### YAML
<a name="pseudo-parameter-notification-example.yaml"></a>

```
myASG:
  Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    LaunchTemplate:
      LaunchTemplateId: !Ref myLaunchTemplate
      Version: !GetAtt myLaunchTemplate.LatestVersionNumber
    MinSize: '1'
    MaxSize: '1'
    VPCZoneIdentifier:
      - subnetIdAz1
      - subnetIdAz2
      - subnetIdAz3
    NotificationConfigurations:
      - TopicARN:
          Fn::Select:
          - '0'
          - Ref: AWS::NotificationARNs
        NotificationTypes:
        - autoscaling:EC2_INSTANCE_LAUNCH
        - autoscaling:EC2_INSTANCE_LAUNCH_ERROR
```

### Propriedades condicionais com AWS::NoValue
<a name="pseudo-parameter-novalue-example"></a>

Os exemplos a seguir criam uma instância de banco de dados do Amazon RDS que usará um snapshot apenas se o ID do snapshot for fornecido. Se a condição `UseDBSnapshot` for avaliada como verdadeira, o CloudFormation usará o valor do parâmetro `DBSnapshotName` para a propriedade `DBSnapshotIdentifier`. Se a condição for avaliada como falsa, o CloudFormation removerá a propriedade `DBSnapshotIdentifier`. 

#### JSON
<a name="pseudo-parameter-novalue-example.json"></a>

```
"MyDB" : {
  "Type" : "AWS::RDS::DBInstance",
  "Properties" : {
    "AllocatedStorage" : "5",
    "DBInstanceClass" : "db.t2.small",
    "Engine" : "MySQL",
    "EngineVersion" : "5.5",
    "MasterUsername" : { "Ref" : "DBUser" },
    "MasterUserPassword" : { "Ref" : "DBPassword" },
    "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" },
    "DBSnapshotIdentifier" : {
      "Fn::If" : [
        "UseDBSnapshot",
        {"Ref" : "DBSnapshotName"},
        {"Ref" : "AWS::NoValue"}
      ]
    }
  }
}
```

#### YAML
<a name="pseudo-parameter-novalue-example.yaml"></a>

```
MyDB:
  Type: AWS::RDS::DBInstance
  Properties:
    AllocatedStorage: '5'
    DBInstanceClass: db.t2.small
    Engine: MySQL
    EngineVersion: '5.5'
    MasterUsername:
      Ref: DBUser
    MasterUserPassword:
      Ref: DBPassword
    DBParameterGroupName:
      Ref: MyRDSParamGroup
    DBSnapshotIdentifier:
      Fn::If:
        - UseDBSnapshot
        - Ref: DBSnapshotName
        - Ref: AWS::NoValue
```