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