

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

# `Ref`
<a name="intrinsic-function-reference-ref"></a>

La función intrínseca `Ref` devuelve el valor de un parámetro, recurso u otra función intrínseca específicos. Esta función se suele utilizar para crear referencias entre los recursos de una plantilla de CloudFormation. 

## Declaración
<a name="ref-declaration"></a>

### JSON
<a name="intrinsic-function-reference-ref-syntax.json"></a>

```
{ "Ref" : "logicalName" }
```

```
{ "Ref" : "IntrinsicFunction" }
```

### YAML
<a name="intrinsic-function-reference-ref-syntax.yaml"></a>

Sintaxis del nombre de función completo:

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

Sintaxis de la forma abreviada:

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

## Parameters
<a name="ref-parameters"></a>

logicalName  
El nombre lógico del recurso o parámetro del que quiera quitar la referencia.

IntrinsicFunction  
La función intrínseca que se resuelve en una cadena válida. Debe contener referencias a parámetros o identificadores, y no debe contener identificadores lógicos de recursos.

## Valor devuelto
<a name="ref-return-value"></a>

El valor devuelto de `Ref` depende del tipo de entidad a la que se hace referencia:
+ Al especificar el nombre lógico de un parámetro, devuelve el valor del parámetro. Para obtener más información, consulte [Sintaxis de Parameters de la plantilla de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html).
+ Al especificar el nombre lógico de un recurso, devuelve un valor que se utiliza para identificar dicho recurso. Normalmente, ese es el nombre del recurso. Sin embargo, para algunos recursos, se devuelve un identificador que tenga otro significado importante en el contexto del recurso. Por ejemplo, el recurso `AWS::EC2::EIP` devuelve la dirección IP, y `AWS::EC2::Instance` devuelve el ID de la instancia. Para obtener más información acerca de los valores de devolución de `Ref` para un recurso, consulte la documentación de dicho recurso en la [Referencia de recursos y propiedades](aws-template-resource-type-ref.md).
+ Al especificar una función intrínseca, devuelve la salida de esa función.

## Ejemplos
<a name="ref-examples"></a>

### Creación de referencias entre recursos
<a name="intrinsic-function-reference-ref-example"></a>

La siguiente declaración de recursos para una dirección IP elástica necesita el ID de instancia de una instancia de EC2. Utiliza la función `Ref` para especificar el ID de instancia del recurso `MyEC2Instance` declarado en otra parte de la plantilla.

#### JSON
<a name="intrinsic-function-reference-ref-example.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Resources":{
  
      ...
  
    "MyEIP":{
      "Type":"AWS::EC2::EIP",
      "Properties":{
        "InstanceId":{
          "Ref":"MyEC2Instance"
        }
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-ref-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:

  ...

  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyEC2Instance
```

### Devolución de un identificador de recurso como salida de la pila
<a name="intrinsic-function-reference-ref-example-2"></a>

En los siguientes ejemplos se muestra cómo utilizar la función `Ref` para devolver el nombre de un bucket de Amazon S3 con el nombre lógico `MyBucket` como salida de la pila. 

#### JSON
<a name="intrinsic-function-reference-ref-example-2.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Resources":{
    "MyBucket":{
      "Type":"AWS::S3::Bucket",
      "Properties":{
        "BucketName":{
          "Fn::Sub": "${AWS::StackName}-mybucket"
        }
      }
    }
  },
  "Outputs":{
    "BucketNameOutput":{
      "Description":"The name of the S3 bucket",
      "Value":{
        "Ref":"MyBucket"
      }
    }
  }
}
```

#### YAML
<a name="intrinsic-function-reference-ref-example-2.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub ${AWS::StackName}-mybucket

Outputs:
  BucketNameOutput:
    Description: The name of the S3 bucket
    Value: !Ref MyBucket
```

### Uso de la función intrínseca `Fn::Join` dentro de la función `Ref`
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**nota**  
Cuando utilice la transformación `AWS::LanguageExtensions`, podrá utilizar `Ref` en combinación con otras funciones intrínsecas. Para ver las funciones compatibles, consulte [Funciones compatibles](#ref-supported-functions).

En los siguientes ejemplos se muestra cómo establecer los identificadores de los recursos mediante la función intrínseca `Fn::Sub`, las condiciones y la entrada del parámetro `Stage`. A continuación, las funciones `Ref` y `Fn::GetAtt` hacen referencia a los valores apropiados, en función de la etapa. `Fn::Sub` se usa primero con `Fn::GetAtt` para obtener el ARN de la cola de Amazon SQS adecuada para establecer las dimensiones de la alarma de Amazon CloudWatch. A continuación, [`Fn::Join`](intrinsic-function-reference-join.md) se utiliza con `Ref` para crear el nombre del tema de SNS de la propiedad `AlarmActions`. 

#### JSON
<a name="ref-example-intrinsic-functions-multiple-stages.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Transform": "AWS::LanguageExtensions",
    "Parameters": {
        "Stage": {
            "Type": "String",
            "Default": "Dev",
            "AllowedValues": [
                "Dev",
                "Prod"
            ]
        }
    },
    "Conditions": {
        "isProd": {
            "Fn::Equals": [
                {"Ref": "Stage"},
                "Prod"
            ]
        },
        "isDev": {
            "Fn::Equals": [
                {"Ref": "Stage"},
                "Dev"
            ]
        }
    },
    "Resources": {
        "DevQueue": {
            "Type": "AWS::SQS::Queue",
            "Condition": "isDev",
            "Properties": {
                "QueueName": {"Fn::Sub": "My${Stage}Queue"}
            }
        },
        "ProdQueue": {
            "Type": "AWS::SQS::Queue",
            "Condition": "isProd",
            "Properties": {
                "QueueName": {"Fn::Sub": "My${Stage}Queue"}
            }
        },
        "DevTopic": {
            "Condition": "isDev",
            "Type": "AWS::SNS::Topic"
        },
        "ProdTopic": {
            "Condition": "isProd",
            "Type": "AWS::SNS::Topic"
        },
        "MyAlarm": {
            "Type": "AWS::CloudWatch::Alarm",
            "Properties": {
                "AlarmDescription": "Alarm if queue depth grows beyond 10 messages",
                "Namespace": "AWS/SQS",
                "MetricName": "ApproximateNumberOfMessagesVisible",
                "Dimensions":[
                    {
                        "Name": {"Fn::Sub": "${Stage}Queue"},
                        "Value": {"Fn::GetAtt": [{"Fn::Sub": "${Stage}Queue"}, "QueueName"]}
                    }
                ],
                "Statistic": "Sum",
                "Period": 300,
                "EvaluationPeriods": 1,
                "Threshold": 10,
                "ComparisonOperator": "GreaterThanThreshold",
                "AlarmActions": [
                    {
                        "Ref": {"Fn::Join": ["", [{"Ref": "Stage"}, "Topic"]]}
                    }
                ]
            }
        }
    }
}
```

#### YAML
<a name="ref-example-intrinsic-functions-multiple-stages.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Parameters:
  Stage:
    Type: String
    Default: Dev
    AllowedValues:
      - Dev
      - Prod
Conditions:
  isProd: !Equals 
    - !Ref Stage
    - Prod
  isDev: !Equals 
    - !Ref Stage
    - Dev
Resources:
  DevQueue:
    Type: AWS::SQS::Queue
    Condition: isDev
    Properties:
      QueueName: !Sub My${Stage}Queue
  ProdQueu:
    Type: AWS::SQS::Queue
    Condition: isProd
    Properties:
      QueueName: !Sub My${Stage}Queue
  DevTopic:
    Condition: isDev
    Type: AWS::SNS::Topic
  ProdTopic:
    Condition: isProd
    Type: AWS::SNS::Topic
  MyAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: Alarm if queue depth grows beyond 10 messages
      Namespace: AWS/SQS
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: !Sub '${Stage}Queue'
          Value: !GetAtt 
            - !Sub '${Stage}Queue'
            - QueueName
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 10
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Ref 
          'Fn::Join':
            - ''
            - - !Ref Stage
              - Topic
```

## Funciones compatibles
<a name="ref-supported-functions"></a>

Cuando se usa la [transformación AWS::LanguageExtensions](transform-aws-languageextensions.md), se pueden usar las siguientes funciones dentro de la función `Ref`.
+ [`Fn::Base64`](intrinsic-function-reference-base64.md)
+ [`Fn::FindInMap`](intrinsic-function-reference-findinmap.md)
+ [`Fn::If`](intrinsic-function-reference-conditions.md#intrinsic-function-reference-conditions-if)
+ [`Fn::ImportValue`](intrinsic-function-reference-importvalue.md)
+ [`Fn::Join`](intrinsic-function-reference-join.md)
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [`Fn::ToJsonString`](intrinsic-function-reference-ToJsonString.md)
+ `Ref`