Ref - AWS CloudFormation

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

La fonction intrinsèque Ref renvoie la valeur d'un paramètre ou d'une ressource spécifique. Lorsque la transformation Transformation AWS::LanguageExtensions est utilisée, vous pouvez utiliser des fonctions intrinsèques en tant que paramètre pour Ref et Fn::GetAtt.

  • Lorsque vous spécifiez le nom logique d'un paramètre, elle renvoie la valeur du paramètre.

  • Lorsque vous spécifiez le nom logique d'une ressource, elle renvoie une valeur que vous pouvez généralement utiliser pour faire référence à cette ressource, comme un ID physique.

  • Lorsque vous spécifiez une fonction intrinsèque, elle renvoie la sortie de cette fonction.

Lorsque vous déclarez une ressource dans un modèle et que vous devez spécifier un autre modèle ressource en fonction de son nom, vous pouvez utiliser la fonction Ref pour faire référence à cette autre ressource. En général, Ref renvoie le nom de la ressource. Par exemple, une référence à un AWS::AutoScaling::AutoScalinggroupe renvoie le nom de cette ressource de groupe Auto Scaling.

Pour certaines ressources, l'identifiant renvoyé a une autre signification dans le cadre de la ressource. Une ressource AWS : :EC2 : :EIP, par exemple, renvoie l'adresse IP et l'ID de l'instance AWS::EC2::Instance.

Astuce

Vous pouvez également utiliser Ref pour ajouter des valeurs aux messages Outputs.

Pour de plus amples informations sur les valeurs de retour Ref pour une ressource ou une propriété particulière, reportez-vous à la documentation de cette ressource ou de cette propriété dans Référence des propriétés et des ressources.

Déclaration

JSON

{ "Ref" : "logicalName" }
{ "Ref" : "IntrinsicFunction" }

YAML

Syntaxe pour le nom complet de la fonction :

Ref: logicalName
Ref: IntrinsicFunction

Syntaxe pour la forme courte :

!Ref logicalName
!Ref IntrinsicFunction

Paramètres

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

Lorsque le paramètre est un logicalName, la valeur renvoyée est l'ID physique de la ressource ou de la valeur du paramètre.

Lorsque le paramètre est un IntrinsicFunction, la valeur de retour est la valeur de retour de la fonction intrinsèque

Exemples

Exemple

La déclaration de ressource suivante pour une adresse IP Elastic nécessite l'ID d'une instance EC2 et utilise la fonction Ref pour spécifier l'ID d'instance de la ressource MyEC2Instance :

JSON

"MyEIP" : { "Type" : "AWS::EC2::EIP", "Properties" : { "InstanceId" : { "Ref" : "MyEC2Instance" } } }

YAML

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

Exemple de génération d'un identifiant pour plusieurs étapes

Cet exemple démontre comment utiliser la fonction intrinsèque Fn::Sub pour substituer des valeurs à l'identifiant pour les différentes étapes. Les Fn::GetAtt fonctions Ref et peuvent ensuite être utilisées pour référencer les valeurs appropriées, en fonction de l'entrée pour la scène. Fn::Subest 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, la fonction Fn::Join est utilisée avec Ref pour créer la chaîne d'ID logique du paramètre Stage.

JSON

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

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' ProdQueue: 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

Exemple d'utilisation d'une fonction intrinsèque Fn::Sub dans une fonction Ref

Cet exemple démontre comment utiliser la fonction intrinsèque Fn::Sub pour substituer des valeurs pour la fonction Ref. Les Fn::GetAtt fonctions Ref et peuvent ensuite être utilisées pour référencer les valeurs appropriées, en fonction de l'entrée pour la scène. Fn::Subest d'abord utilisé pour obtenir l'ARN de la rubrique Amazon SNS appropriée afin de définir les dimensions de l'alarme Amazon CloudWatch . Ensuite, la fonction Fn::Join est utilisée avec Ref pour créer la chaîne d'ID logique du paramètre Stage.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::LanguageExtensions", "Parameters": { "Stage": { "Type": "String", "Default": "Dev", "AllowedValues": [ "Dev", "Prod" ] } }, "Resources": { "TopicDev": { "Type": "AWS::SNS::Topic", "Properties": { "TopicName": "MyTopic" } } }, "Outputs": { "stageOutput": { "Value": { "Ref": { "Fn::Sub": "Topic${Stage}" } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Transform: 'AWS::LanguageExtensions' Parameters: Stage: Type: String Default: Dev AllowedValues: - Dev - Prod Resources: TopicDev: Type: 'AWS::SNS::Topic' Properties: TopicName: MyTopic Outputs: stageOutput: Value: !Ref 'Fn::Sub': 'Topic${Stage}'

Fonctions prises en charge

Lorsque la transformation Transformation AWS::LanguageExtensions est utilisée, vous pouvez utiliser les fonctions suivantes dans la fonction Ref.