

# Obtención de valores de AWS mediante pseudoparámetros
<a name="pseudo-parameter-reference"></a>

Los seudoparámetros son variables integradas que proporcionan acceso a información importante del entorno de AWS, como los ID de las cuentas, los nombres de las regiones y los detalles de las pilas, que pueden cambiar de una implementación a otra o de un entorno a otro.

Puede usar seudoparámetros en lugar de valores codificados de forma rígida para que sus plantillas sean más portátiles y fáciles de reutilizar en diferentes regiones y Cuentas de AWS.

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

Puede hacer referencia a los seudoparámetros mediante la función intrínseca `Ref` o la función intrínseca `Fn::Sub`. 

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

La función intrínseca `Ref` utiliza la siguiente sintaxis general. Para obtener más información, 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>

La función intrínseca `Fn::Sub` utiliza un formato diferente que incluye la sintaxis `${}` alrededor del seudoparámetro. Para obtener más información, 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 disponibles
<a name="available-pseudo-parameters"></a>

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

Devuelve el ID de Cuenta de AWS de la cuenta en la que se está creando la pila como, por ejemplo `123456789012`.

Este seudoparámetro se suele utilizar al definir los roles de IAM, las políticas y otras políticas de recursos que implican ARN específicos de la cuenta.

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

Devuelve la lista de Nombres de recursos de Amazon (ARN) de los temas de Amazon SNS que reciben notificaciones de eventos de pilas. Puede especificar estos ARN mediante la opción `--notification-arns` en la AWS CLI o a través de la consola mientras crea o actualiza la pila.

A diferencia de otros seudoparámetros que devuelven un único valor, `AWS::NotificationARNs` devuelve una lista de ARN. Para acceder a un ARN específico de la lista, utilice la función intrínseca `Fn::Select`. Para obtener más información, 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>

Elimina la propiedad de recurso correspondiente cuando se especifica como valor devuelto en la función intrínseca `Fn::If`. Para obtener más información, 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).

Este seudoparámetro es particularmente útil para crear propiedades de recursos condicionales que solo deberían incluirse en determinadas condiciones.

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

Devuelve la partición en la que se encuentra el recurso. Para las Regiones de AWS estándar, la partición es `aws`. Para recursos en otras particiones, la partición es `aws-`*partitionname*. Por ejemplo, la partición de los recursos de la región China (Pekín y Ningxia) es `aws-cn` y la partición de los recursos en la región AWS GovCloud (Oeste de EE. UU.) es `aws-us-gov`.

La partición forma parte del ARN de los recursos. El uso de `AWS::Partition` garantiza que las plantillas funcionen correctamente en diferentes particiones de AWS.

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

Devuelve una cadena que representa la región en la que se crea el recurso que abarca, como por ejemplo `us-west-2`.

Este es uno de los seudoparámetros más utilizados, ya que permite que las plantillas se adapten a diferentes Regiones de AWS sin modificaciones.

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

Devuelve el ID (ARN) de la pila, como `arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123`.

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

Devuelve el nombre de la pila, como `teststack`.

El nombre de la pila se suele utilizar para crear nombres de recursos únicos que se puedan identificar fácilmente como pertenecientes a una pila específica.

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

Devuelve el sufijo del dominio AWS en la Región de AWS donde se implementa la pila. El sufijo normalmente es `amazonaws.com`, pero para la región China (Pekín), el sufijo es `amazonaws.com.cn`.

Este parámetro resulta especialmente útil a la hora de crear direcciones URL para los puntos de conexión de servicios de AWS.

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

**Topics**
+ [Uso básico](#pseudo-parameter-basic-example)
+ [Uso de AWS::NotificationARNs](#pseudo-parameter-notification-example)
+ [Propiedades condicionales con AWS::NoValue](#pseudo-parameter-novalue-example)

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

En los siguientes ejemplos se crean dos recursos: un tema de Amazon SNS y una alarma de CloudWatch que envía notificaciones a ese tema. Se utiliza `AWS::StackName`, `AWS::Region` y `AWS::AccountId` para insertar dinámicamente el nombre de la pila, la Región de AWS actual y el ID de la cuenta en los nombres, las descripciones y los ARN de los 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}
```

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

En los siguientes ejemplos se configura un grupo de escalado automático para enviar notificaciones de eventos de lanzamiento de instancias y errores de lanzamiento. La configuración usa el seudoparámetro `AWS::NotificationARNs`, que proporciona una lista de los ARN de los temas de Amazon SNS que se especificaron al crear la pila. La función `Fn::Select` elige el primer ARN de esa 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
```

### Propiedades condicionales con AWS::NoValue
<a name="pseudo-parameter-novalue-example"></a>

En el siguiente ejemplo se crea una instancia de base de datos de Amazon RDS que utiliza una instantánea solo si se proporciona un ID de instantánea. Si la condición `UseDBSnapshot` se evalúa como true, CloudFormation utiliza el valor del parámetro `DBSnapshotName` para la propiedad `DBSnapshotIdentifier`. Si se evalúa la condición como false, CloudFormation elimina la propiedad `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
```