Fn::GetAtt - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fn::GetAtt

La fonction intrinsèque Fn::GetAtt renvoie la valeur d'un attribut à partir d'une ressource du modèle. Lorsque la transformation Transformation AWS::LanguageExtensions est utilisée, vous pouvez utiliser des fonctions intrinsèques en tant que paramètre pour Fn::GetAtt. Pour de plus amples informations sur les valeurs de retour GetAtt pour une ressource particulière, reportez-vous à la documentation de cette ressource dans Référence des propriétés et des ressources.

Déclaration

JSON

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

YAML

Syntaxe pour le nom complet de la fonction :

Fn::GetAtt: [ logicalNameOfResource, attributeName ]

Syntaxe pour la forme courte :

!GetAtt logicalNameOfResource.attributeName

Paramètres

logicalNameOfResource

Nom logique (également appelé ID logique) de la ressource qui contient l'attribut souhaité.

attributeName

Nom de l'attribut spécifique à une ressource dont vous voulez la valeur. Consultez la page de référence de la ressource pour plus d'informations sur les attributs disponibles pour ce type de ressource.

Valeur renvoyée

Valeur de l'attribut.

Exemples

Renvoi d'une chaîne

Cet exemple d'extrait renvoie une chaîne contenant le nom DNS de l'équilibreur de charge avec le nom logique myELB.

JSON

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

YAML

!GetAtt myELB.DNSName

Renvoi de plusieurs chaînes

Le modèle d'exemple suivant renvoie SourceSecurityGroup.OwnerAlias et SourceSecurityGroup.GroupName de l'équilibreur de charge avec le nom logique 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

Exemple : utilisez un identifiant standard pour plusieurs ressources en utilisant Fn::Sub dans Fn::GetAtt, Ref et Fn::ForEach

Les exemples suivants montrent comment utiliser Fn::GetAtt avec Fn::Sub, conjointement avec Fn::ForEach, dans la section Outputs d'un modèle pour réduire la longueur et la quantité de détails du modèle. L'utilisation de Fn::Sub dans Fn::GetAtt permet au modèle de contenir une fonction intrinsèque qui peut faire référence à un compartiment différent à chaque itération de l'appel 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

Fonctions prises en charge

Lorsque la transformation Transformation AWS::LanguageExtensions n'est pas utilisée :

  • Le nom de ressource logique Fn::GetAtt ne peut pas utiliser de fonctions. Vous devez spécifier une chaîne qui correspond à l'ID logique d'une ressource. Pour le nom d'attribut Fn::GetAtt, vous pouvez utiliser la fonction Ref.

  • Le nom d'attribut Fn::GetAtt peut utiliser la fonction Ref.

Lorsque la transformation Transformation AWS::LanguageExtensions est utilisée, vous pouvez utiliser les fonctions suivantes dans la fonction Fn::GetAtt. Cela est vrai à la fois pour le nom de la ressource logique Fn::GetAtt et le nom de l'attribut Fn::GetAtt.