Ref
A função intrínseca Ref
retorna o valor do recurso ou parâmetro especificado. Quando a transformação Transformação AWS::LanguageExtensions é usada, é possível usar funções intrínsecas como parâmetro para Ref e Fn::GetAtt.
-
Quando você especifica um nome lógico do parâmetro, ele retorna o valor do parâmetro.
-
Quando você especifica o nome lógico de um recurso, ele retorna um valor que você pode geralmente usa para fazer referência a esse recurso, como uma ID física.
-
Quando você especifica uma função intrínseca, ela retorna a saída dessa função.
Quando você estiver declarando um recurso em um modelo e precisar especificar outro recurso de modelo pelo nome, use o Ref
para fazer referência àquele outro recurso. Em geral, o Ref
retorna o nome do recurso. Por exemplo, uma referência a um AWS::AutoScaling::AutoScalingGroup retorna o nome do recurso do grupo de Auto Scaling.
Para alguns recursos, um identificador é retornado com outro significado importante no contexto do recurso. Um recurso AWS::EC2::EIP, por exemplo, retorna o endereço IP, e um AWS::EC2::Instance retorna o ID da instância.
dica
Você também pode usar Ref
para adicionar valores a mensagens Referência de sintaxe de seção Outputs para modelos do CloudFormation.
Para obter mais informações sobre valores de retorno Ref
para um recurso ou uma propriedade específica, consulte a documentação desse recurso ou dessa propriedade na Referência de propriedades e recursos.
Declaração
JSON
{ "Ref" : "
logicalName
" }
{ "Ref" : "
IntrinsicFunction
" }
YAML
Sintaxe para o nome da função completo:
Ref:
logicalName
Ref:
IntrinsicFunction
Sintaxe para a forma resumida:
!Ref
logicalName
!Ref
IntrinsicFunction
Parâmetros
- logicalName
-
O nome lógico do recurso ou parâmetro que você deseja referenciar.
- IntrinsicFunction
-
A função intrínseca que é resolvida como uma string válida. Ela deve conter referências a parâmetros ou identificadores e não deve conter identificadores lógicos de recursos.
Valor de retorno
Quando o parâmetro é um logicalName
, o valor de retorno é o ID físico do recurso ou o valor do parâmetro.
Quando o parâmetro é uma IntrinsicFunction
, o valor de retorno é o valor de retorno da função intrínseca
Exemplos
Exemplo
A declaração de recurso a seguir para um endereço IP elástico precisa do ID de instância de uma instância do EC2 e usa a função Ref
para especificar o ID da instância do recurso MyEC2Instance
:
JSON
"MyEIP" : { "Type" : "AWS::EC2::EIP", "Properties" : { "InstanceId" : { "Ref" : "MyEC2Instance" } } }
YAML
MyEIP: Type: "AWS::EC2::EIP" Properties: InstanceId: !Ref MyEC2Instance
Exemplo de geração de identificador para vários estágios
Este exemplo demonstra como usar a função intrínseca Fn::Sub
para substituir valores do identificador em diferentes estágios. As funções Ref
e Fn::GetAtt
podem então ser usadas para referenciar os valores apropriados, com base na entrada do estágio. Fn::Sub
é usada primeiramente com Fn::GetAtt
para obter o ARN da fila apropriada do Amazon SQS para definir as dimensões do alarme do Amazon CloudWatch. Em seguida, Fn::Join é usada com Ref
para criar a string de ID lógico do parâmetro 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
Exemplo de uso da função Fn::Sub
intrínseca dentro da função Ref
Este exemplo demonstra como usar a função Fn::Sub
intrínseca para substituir valores para a função Ref
. As funções Ref
e Fn::GetAtt
podem então ser usadas para fazer referência aos valores apropriados, com base na entrada do estágio. Fn::Sub
é usada primeiro para obter o ARN do tópico apropriado do Amazon SNS para definir as dimensões do alarme do Amazon CloudWatch. Em seguida, Fn::Join é usada com Ref
para criar a string de ID lógico do parâmetro 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}'
Funções compatíveis
Quando a transformação Transformação AWS::LanguageExtensions é usada dentro da função Ref
, é possível usar as funções a seguir.