La función intrínseca Fn::GetAtt
devuelve el valor de un atributo de un recurso de la plantilla.
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. Para obtener información acerca de los valores de devolución de GetAtt
para los recursos, consulte la documentación de los recursos en la Referencia de recursos y propiedades.
Ejemplos
Devolución de un valor de atributo
En los siguientes ejemplos se devuelve una cadena que contiene el nombre de DNS del equilibrador de carga con el nombre lógico myELB
.
JSON
"Fn::GetAtt" : [ "myELB" , "DNSName" ]
YAML
!GetAtt myELB.DNSName
Devolución de varios valores de atributo
Em los siguientes ejemplos se devuelve el SourceSecurityGroup.OwnerAlias
y el SourceSecurityGroup.GroupName
del equilibrador 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
Uso de Fn::Sub
dentro de la función Fn::GetAtt
nota
Cuando utilice la transformación AWS::LanguageExtensions
, podrá utilizar Fn::GetAtt
en combinación con otras funciones intrínsecas. Para ver las funciones compatibles, consulte Funciones compatibles.
En los siguientes ejemplos se muestra cómo usar Fn::GetAtt
con Fn::Sub, en combinación con Fn::ForEach, en la sección Outputs
de una plantilla para reducir la longitud y nivel de detalle de la plantilla. El uso de Fn::Sub
dentro de Fn::GetAtt
permite que la plantilla contenga una única 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 se usa la transformación AWS::LanguageExtensions, se pueden usar las siguientes funciones dentro de la función Fn::GetAtt
. Esto se aplica tanto al nombre de recurso lógico de Fn::GetAtt
como al nombre de atributo de Fn::GetAtt
.
Cuando no se usa la transformación AWS::LanguageExtensions
:
-
El nombre de atributo de
Fn::GetAtt
solo puede usar la función Ref. -
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.