Fn::GetAtt - AWS CloudFormation

Fn::GetAtt

La función intrínseca Fn::GetAtt devuelve el valor de un atributo de un recurso de la plantilla. Cuando se usa la transformación Transformación AWS::LanguageExtensions, puede usar funciones intrínsecas como parámetro para Fn::GetAtt. Para obtener mas información acerca de los valores de devolución GetAtt para un recurso concreto, consulte la documentación de dicho recurso en la Referencia de recursos y propiedades.

Declaración

JSON

{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }

YAML

Sintaxis del nombre de función completo:

Fn::GetAtt: [ logicalNameOfResource, attributeName ]

Sintaxis de la forma abreviada:

!GetAtt logicalNameOfResource.attributeName

Parámetros

logicalNameOfResource

El nombre lógico (también denominado ID lógico) del recurso que contiene el atributo que desea.

attributeName

El nombre del atributo específico de un recurso cuyo valor desea. Consulte la página de referencia de recursos en busca de detalles sobre los atributos disponibles para ese tipo de recurso.

Valor devuelto

El valor del atributo.

Ejemplos

Devolución de una cadena

Este fragmento de código de ejemplo devuelve una cadena que contiene el nombre DNS del balanceador de carga con el nombre lógico myELB.

JSON

"Fn::GetAtt" : [ "myELB" , "DNSName" ]

YAML

!GetAtt myELB.DNSName

Devolución de varias cadenas

La siguiente plantilla de ejemplo devuelve el SourceSecurityGroup.OwnerAlias y el SourceSecurityGroup.GroupName del balanceador de carga con el nombre lógico myELB.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "myELB": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AvailabilityZones": [ "eu-west-1a" ], "Listeners": [ { "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "HTTP" } ] } }, "myELBIngressGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "ELB ingress group", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "SourceSecurityGroupOwnerId": { "Fn::GetAtt": [ "myELB", "SourceSecurityGroup.OwnerAlias" ] }, "SourceSecurityGroupName": { "Fn::GetAtt": [ "myELB", "SourceSecurityGroup.GroupName" ] } } ] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: myELB: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: AvailabilityZones: - eu-west-1a Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP myELBIngressGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: ELB ingress group SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 SourceSecurityGroupOwnerId: !GetAtt myELB.SourceSecurityGroup.OwnerAlias SourceSecurityGroupName: !GetAtt myELB.SourceSecurityGroup.GroupName

Ejemplo: usar un identificador estándar para múltiples recursos con Fn::Sub en Fn::GetAtt, Ref y Fn::ForEach

En los siguientes ejemplos se muestra cómo usar Fn::GetAtt con Fn::Sub, en conjunción con Fn::ForEach, en la sección Salidas de una plantilla para reducir la longitud y verbosidad de la plantilla. El uso de Fn::Sub dentro de Fn::GetAtt permite que la plantilla contenga una función intrínseca que puede hacer referencia a un bucket diferente en cada iteración de la llamada a Fn::ForEach.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Transform": "AWS::LanguageExtensions", "Mappings": { "Buckets": { "Properties": { "Identifiers": ["A", "B", "C"] } } }, "Resources": { "Fn::ForEach::Buckets": [ "Identifier", {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]}, { "S3Bucket${Identifier}": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "PublicRead", "MetricsConfigurations": [ { "Id": {"Fn::Sub": "EntireBucket${Identifier}"} } ], "WebsiteConfiguration": { "IndexDocument": "index.html", "ErrorDocument": "error.html", "RoutingRules": [ { "RoutingRuleCondition": { "HttpErrorCodeReturnedEquals": "404", "KeyPrefixEquals": "out1/" }, "RedirectRule": { "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com", "ReplaceKeyPrefixWith": "report-404/" } } ] } }, "DeletionPolicy": "Retain", "UpdateReplacePolicy": "Retain" } } ] }, "Outputs": { "Fn::ForEach::BucketOutputs": [ "Identifier", {"Fn::FindInMap": ["Buckets", "Properties", "Identifiers"]}, { "Fn::ForEach::GetAttLoop": [ "Property", ["Arn", "DomainName", "WebsiteURL"], { "S3Bucket${Identifier}${Property}": { "Value": { "Fn::GetAtt": [{"Fn::Sub": "S3Bucket${Identifier}"}, {"Ref": "Property"}] } } } ] } ] } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Transform: 'AWS::LanguageExtensions' Mappings: Buckets: Properties: Identifiers: - A - B - C Resources: 'Fn::ForEach::Buckets': - Identifier - Fn::FindInMap: - Buckets - Properties - Identifiers - 'S3Bucket${Identifier}': Type: 'AWS::S3::Bucket' Properties: AccessControl: PublicRead MetricsConfigurations: - Id: Fn::Sub: 'EntireBucket${Identifier}' WebsiteConfiguration: IndexDocument: index.html ErrorDocument: error.html RoutingRules: - RoutingRuleCondition: HttpErrorCodeReturnedEquals: '404' KeyPrefixEquals: out1/ RedirectRule: HostName: ec2-11-22-333-44.compute-1.amazonaws.com ReplaceKeyPrefixWith: report-404/ DeletionPolicy: Retain UpdateReplacePolicy: Retain Outputs: 'Fn::ForEach::BucketOutputs': - Identifier - Fn::FindInMap: - Buckets - Properties - Identifiers - 'Fn::ForEach::GetAttLoop': - Property - - Arn - DomainName - WebsiteURL - 'S3Bucket${Identifier}${Property}': Value: !GetAtt - !Sub 'S3Bucket${Identifier}' - !Ref Property

Funciones compatibles

Cuando no se usa la transformación Transformación AWS::LanguageExtensions:

  • El nombre de recurso lógico de Fn::GetAtt no puede usar funciones. Debe especificar una cadena que sea el ID lógico de un recurso. Para el nombre de atributo Fn::GetAtt, puede utilizar la función Ref.

  • El nombre de atributo de Fn::GetAtt puede usar la función Ref.

Cuando se usa la transformación Transformación AWS::LanguageExtensions, dentro de la función Fn::GetAtt, se pueden usar las siguientes funciones. Esto se aplica tanto al nombre de recurso lógico de Fn::GetAtt como al nombre de atributo de Fn::GetAtt.