Fn::GetAtt - AWS CloudFormation

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Fn::GetAtt

La funzione intrinseca Fn::GetAtt restituisce il valore di un attributo di una risorsa nel modello. Quando viene utilizzata la trasformazione Trasformazione AWS::LanguageExtensions, è possibile utilizzare le funzioni intrinseche come parametro per Fn::GetAtt. Per ulteriori informazioni sui valori GetAtt restituiti per una risorsa specifica, consulta la documentazione per la risorsa in Informazioni di riferimento su proprietà e risorse.

Dichiarazione

JSON

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

YAML

Sintassi per il nome completo della funzione:

Fn::GetAtt: [ logicalNameOfResource, attributeName ]

Sintassi per la forma breve:

!GetAtt logicalNameOfResource.attributeName

Parametri

logicalNameOfResource

Il nome logico (noto anche come ID logico) della risorsa che contiene l'attributo desiderato.

attributeName

Il nome dell'attributo specifico della risorsa di cui desideri il valore. Consulta la pagina di riferimento della risorsa per i dettagli sugli attributi disponibili per quel tipo di risorsa.

Valore restituito

Il valore dell'attributo.

Esempi

Restituzione di una stringa

Questo frammento di esempio restituisce una stringa contenente il nome DNS del sistema di load balancer con il nome logico myELB.

JSON

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

YAML

!GetAtt myELB.DNSName

Restituzione di più stringhe

Il seguente modello di esempio restituisce SourceSecurityGroup.OwnerAlias e SourceSecurityGroup.GroupName del sistema di load balancer con il nome logico 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

Esempio: Utilizzo di un identificatore standard per più risorse tramite Fn::Sub all'interno di Fn::GetAtt, Ref e Fn::ForEach

Gli esempi seguenti mostrano come utilizzare Fn::GetAtt con Fn::Sub, in combinazione conFn::ForEach, nel Output di un modello per ridurne la lunghezza e la verbosità. L'uso di Fn::Sub all'interno di Fn::GetAtt consente al modello di contenere una funzione intrinseca che può fare riferimento a un bucket diverso a ogni iterazione della chiamata 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

Funzioni supportate

Quando la trasformazione Trasformazione AWS::LanguageExtensions non viene utilizzata:

  • Per il nome logico della risorsa Fn::GetAtt, non puoi utilizzare funzioni. Devi specificare invece una stringa che è un ID logico della risorsa. Per il nome dell'attributo Fn::GetAtt, puoi utilizzare la funzione Ref.

  • Per il nome dell'attributo Fn::GetAtt, puoi utilizzare la funzione Ref.

Quando la trasformazione Trasformazione AWS::LanguageExtensions viene utilizzata all'interno della funzione Fn::GetAtt, puoi utilizzare le seguenti funzioni. Questo vale sia per il nome della risorsa logica Fn::GetAtt che per il nome dell'attributo Fn::GetAtt.