Il s’agit du nouveau Guide de référence des modèles CloudFormation. Veuillez mettre à jour vos favoris et vos liens. Pour obtenir de l'aide pour démarrer CloudFormation, consultez le guide de AWS CloudFormation l'utilisateur.
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.
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 :
!GetAttlogicalNameOfResource.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. Pour plus d’informations sur les valeurs renvoyées GetAtt pour les ressources, consultez la documentation des ressources dans Référence des propriétés et des ressources.
Exemples
Renvoi d’une valeur d’attribut
Les exemples suivants renvoient une chaîne contenant le nom DNS de l’équilibreur de charge dont le nom logique est myELB.
JSON
"Fn::GetAtt" : [ "myELB" , "DNSName" ]
YAML
!GetAtt myELB.DNSName
Renvoi de plusieurs valeurs d’attribut
Les exemples suivants renvoient les valeurs SourceSecurityGroup.OwnerAlias et SourceSecurityGroup.GroupName de l’équilibreur de charge dont le nom logique est 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
Utilisation de Fn::Sub dans la fonction Fn::GetAtt
Note
Lorsque vous utilisez la transformation AWS::LanguageExtensions, vous pouvez utiliser Fn::GetAtt en combinaison avec d’autres fonctions intrinsèques. Pour les fonctions prises en charge, consultez Fonctions prises en charge.
Les exemples suivants montrent comment utiliser Fn::GetAtt avec Fn::Sub, conjointement avec Fn::ForEach, dans la section Outputs d’un modèle afin de réduire la longueur et la verbosité 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 vous utilisez la transformation AWS::LanguageExtensions, 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.
Lorsque la transformation AWS::LanguageExtensions n'est pas utilisée :
-
Le nom d’attribut
Fn::GetAttne peut utiliser que la fonction Ref. -
Le nom de ressource logique
Fn::GetAttne peut pas utiliser de fonctions. Vous devez spécifier une chaîne qui correspond à l'ID logique d'une ressource.