

Il s’agit du nouveau *Guide de référence des modèles CloudFormation *. Veuillez mettre à jour vos favoris et vos liens. Pour obtenir de l'aide pour démarrer CloudFormation, consultez le [guide de AWS CloudFormation l'utilisateur](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

La fonction intrinsèque `Ref` renvoie la valeur d’un paramètre, d’une ressource ou d’une autre fonction intrinsèque spécifiée. Cette fonction est couramment utilisée pour créer des références entre les ressources d'un CloudFormation modèle. 

## Déclaration
<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>

Syntaxe pour le nom complet de la fonction :

```
Ref: logicalName
```

```
Ref:
   IntrinsicFunction
```

Syntaxe pour la forme courte :

```
!Ref logicalName
```

```
!Ref
   IntrinsicFunction
```

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

logicalName  
Le nom logique de la ressource ou du paramètre que vous souhaitez référencer.

IntrinsicFunction  
La fonction intrinsèque qui se résout dans une chaîne valide. Elle doit contenir des références aux paramètres ou aux identifiants, et ne doit pas contenir d'identifiants de ressources logiques.

## Valeur renvoyée
<a name="ref-return-value"></a>

La valeur renvoyée par `Ref` dépend du type d’entité référencée :
+ Lorsque vous spécifiez le nom logique d'un paramètre, elle renvoie la valeur du paramètre. Pour plus d'informations, consultez la section [ParametersSyntaxe du CloudFormation modèle](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html).
+ Lorsque vous spécifiez le nom logique d’une ressource, elle renvoie une valeur que vous utilisez pour identifier cette ressource. Il s’agit généralement du nom de la ressource. Cependant, pour certaines ressources, la valeur renvoyée est un identifiant ayant une signification particulière dans le contexte de la ressource. Par exemple, la ressource `AWS::EC2::EIP` renvoie l’adresse IP et `AWS::EC2::Instance` renvoie l’ID de l’instance. Pour plus d’informations sur les valeurs renvoyées `Ref` pour chaque ressource, consultez la documentation de cette ressource dans [Référence des propriétés et des ressources](aws-template-resource-type-ref.md).
+ Lorsque vous spécifiez une fonction intrinsèque, elle renvoie la sortie de cette fonction.

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

### Création de références entre ressources
<a name="intrinsic-function-reference-ref-example"></a>

La déclaration de ressource suivante pour une adresse IP Elastic nécessite l’ID d’une instance EC2. Elle utilise la fonction `Ref` pour indiquer l’ID de l’instance issue de la ressource `MyEC2Instance`, déclarée ailleurs dans le modèle.

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

### Renvoi d’un identifiant de ressource dans les sorties de pile
<a name="intrinsic-function-reference-ref-example-2"></a>

Les exemples suivants montrent comment utiliser la fonction `Ref` pour renvoyer, en sortie de pile, le nom d’un compartiment Amazon S3 ayant pour nom logique `MyBucket`. 

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

### Utilisation de la fonction intrinsèque `Fn::Join` dans la fonction `Ref`
<a name="ref-example-intrinsic-functions-multiple-stages"></a>

**Note**  
Lorsque vous utilisez la transformation `AWS::LanguageExtensions`, vous pouvez utiliser `Ref` en combinaison avec d’autres fonctions intrinsèques. Pour les fonctions prises en charge, consultez [Fonctions prises en charge](#ref-supported-functions).

Les exemples suivants montrent comment définir les identifiants des ressources en utilisant la fonction intrinsèque `Fn::Sub`, des conditions et la valeur d’entrée du paramètre `Stage`. Les `Fn::GetAtt` fonctions `Ref` et font ensuite référence aux valeurs appropriées, en fonction de la scène. `Fn::Sub`est d'abord utilisé `Fn::GetAtt` pour obtenir l'ARN de la file d'attente Amazon SQS appropriée afin de définir les dimensions de l'alarme Amazon CloudWatch. Ensuite, [`Fn::Join`](intrinsic-function-reference-join.md) est utilisé avec `Ref` pour créer le nom de la rubrique SNS pour la propriété `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
```

## Fonctions prises en charge
<a name="ref-supported-functions"></a>

Lorsque vous utilisez la [transformation AWS::LanguageExtensions](transform-aws-languageextensions.md), vous pouvez utiliser les fonctions suivantes dans la fonction `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`