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.
Ventilateur : FindInMap
La fonction intrinsèque Fn::FindInMap renvoie la valeur correspondant aux clés dans un mappage à deux niveaux déclaré dans la section Mappings.
Déclaration
JSON
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
Si vous souhaitez spécifier une valeur de remplacement lorsqu'une clé n'est pas trouvée dans le mappage, incluez DefaultValue :
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey", {"DefaultValue": "DefaultValue"}] }
YAML
Syntaxe pour le nom complet de la fonction :
Fn::FindInMap: [MapName,TopLevelKey,SecondLevelKey]
Syntaxe pour la forme courte :
!FindInMap [MapName,TopLevelKey,SecondLevelKey]
Si vous souhaitez spécifier une valeur de remplacement lorsqu'une clé n'est pas trouvée dans le mappage, incluez DefaultValue :
Syntaxe pour le nom complet de la fonction :
Fn::FindInMap: -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Syntaxe pour la forme courte :
!FindInMap -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Note
Vous ne pouvez pas imbriquer deux instances de deux fonctions sous une forme courte.
Parameters
- MapName
-
Nom logique d'un mappage déclaré dans la section Mappings, qui contient les clés et les valeurs.
- TopLevelKey
-
Nom de la clé de niveau supérieur. Sa valeur est une liste des paires clé-valeur.
- SecondLevelKey
-
Nom de la clé de deuxième niveau, qui est l'une des clés de la liste assignée à
TopLevelKey. - DefaultValue
-
La valeur
Fn::FindInMaprenvoyée si le mappage spécifiéSecondLevelKeyest introuvableTopLevelKeyou non. Ce paramètre est facultatif. En cas d'omission,Fn::FindInMapune erreur est générée lorsqu'aucune clé n'est trouvée.Le quatrième paramètre doit être une carte avec la clé
DefaultValue. Par exemple :{"DefaultValue": "us-east-1"}.
Valeur renvoyée
La valeur qui est assignée à SecondLevelKey. Si le TopLevelKey ou n'SecondLevelKeyest pas trouvé et que a DefaultValue est spécifié, DefaultValue il est renvoyé à la place.
Exemples
Les exemples suivants montrent comment utiliser la fonction Fn::FindInMap.
Rubriques
Utilisation Ventilateur : FindInMap avec des valeurs spécifiques à la région
L’exemple suivant montre comment utiliser Fn::FindInMap dans un modèle qui inclut deux mappages : AWSInstanceType2Arch et AWSRegionArch2AMI. Il inclut également un paramètre InstanceType qui vous permet de choisir entre t3.micro et t4g.nano. La valeur par défaut est t3.micro, mais elle peut être remplacée lors de la création de la pile.
Fn::FindInMap détermine d’abord l’architecture (HVM64 ou ARM64) en fonction du type d’instance sélectionné, puis recherche l’ID d’AMI correct pour cette architecture dans la Région AWS actuelle.
Note
Les ID d’AMI présentés dans ces exemples sont des espaces réservés à des fins de démonstration. Dans la mesure du possible, envisagez d’utiliser des références dynamiques aux paramètres AWS Systems Manager comme alternative à la section Mappings. Pour éviter de mettre à jour tous vos modèles avec un nouvel identifiant chaque fois que l'AMI que vous souhaitez utiliser change, utilisez un AWS Systems Manager paramètre pour récupérer le dernier ID d'AMI lors de la création ou de la mise à jour de la pile. Les dernières versions des AMI couramment utilisées sont également disponibles en tant que paramètres publics dans Systems Manager. Pour plus d’informations, consultez Obtenir des valeurs stockées dans d’autres services à l’aide de références dynamiques.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "InstanceType": { "Description": "The EC2 instance type", "Type": "String", "AllowedValues": [ "t3.micro", "t4g.nano" ], "Default": "t3.micro" } }, "Mappings": { "AWSInstanceType2Arch": { "t3.micro": { "Arch": "HVM64" }, "t4g.nano": { "Arch": "ARM64" } }, "AWSRegionArch2AMI": { "us-east-1" : { "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" }, "us-west-1" : { "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890" }, "eu-west-1" : { "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" }, "ap-southeast-1" : { "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" }, "ap-northeast-1" : { "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" } } }, "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : { "Ref": "InstanceType" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: InstanceType: Description: The EC2 instance type Type: String AllowedValues: - t3.micro - t4g.nano Default: t3.micro Mappings: AWSInstanceType2Arch: t3.micro: Arch: HVM64 t4g.nano: Arch: ARM64 AWSRegionArch2AMI: us-east-1: HVM64:ami-12345678901234567ARM64:ami-23456789012345678us-west-1: HVM64:ami-34567890123456789ARM64:ami-45678901234567890eu-west-1: HVM64:ami-56789012345678901ARM64:ami-67890123456789012ap-southeast-1: HVM64:ami-78901234567890123ARM64:ami-89012345678901234ap-northeast-1: HVM64:ami-90123456789012345ARM64:ami-01234567890123456Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - Fn::FindInMap: - AWSInstanceType2Arch - Ref: InstanceType - Arch
Utilisation Ventilateur : FindInMap pour des configurations spécifiques à l'environnement
L’exemple suivant montre comment utiliser Fn::FindInMap dans un modèle contenant une section Mappings constituée d’un seul mappage, SecurityGroups. Le modèle comporte également un paramètre EnvironmentType qui permet de spécifier si l’environnement est Dev ou Prod. La valeur par défaut est Dev, mais elle peut être remplacée lors de la création de la pile.
Fn::FindInMap renvoie la valeur SecurityGroupIds appropriée en fonction du paramètre EnvironmentType. Fn::Split divise ensuite la chaîne de valeurs séparées par des virgules (les ID de groupes de sécurité) en une liste, ce qui correspond au format requis pour SecurityGroupIds.
Si vous déployez cette pile avec EnvironmentType défini sur Dev, la valeur SecurityGroupIds utilisée par EC2Instance sera sg-12345678. Si vous définissez EnvironmentType sur Prod, elle utilisera sg-abcdef01 et sg-ghijkl23.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters":{ "EnvironmentType":{ "Description":"The environment type (Dev or Prod)", "Type":"String", "Default":"Dev", "AllowedValues":[ "Dev", "Prod" ] } }, "Mappings":{ "SecurityGroups":{ "Dev":{ "SecurityGroupIds":"sg-12345678" }, "Prod":{ "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23" } } }, "Resources":{ "Ec2Instance":{ "Type":"AWS::EC2::Instance", "Properties":{ "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroups: Dev: SecurityGroupIds:sg-12345678Prod: SecurityGroupIds:sg-abcdef01,sg-ghijkl23Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: t2.micro SecurityGroupIds: Fn::Split: - "," - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]
Utilisation Ventilateur : FindInMap avec une valeur par défaut
L'exemple suivant utilise a DefaultValue pour fournir une solution de secours lorsqu'aucune clé n'est trouvée dans le mappage. Si le courant n' Région AWS est pas défini dans le RegionMap mappage, Fn::FindInMap renvoie t3.micro au lieu de générer une erreur.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "RegionMap": { "us-east-1": { "InstanceType": "t3.large" }, "eu-west-1": { "InstanceType": "t3.medium" } } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "InstanceType", { "DefaultValue": "t3.micro" } ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionMap: us-east-1: InstanceType: t3.large eu-west-1: InstanceType: t3.medium Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: !FindInMap - RegionMap - !Ref AWS::Region - InstanceType - DefaultValue: t3.micro
Fonctions prises en charge
Vous pouvez utiliser les fonctions suivantes dans une fonction Fn::FindInMap :
-
Fn::FindInMap -
Ref
Ressources connexes
Pour utiliser des fonctions intrinsèques au-delà Fn::FindInMap et Ref dans les paramètres d'une Fn::FindInMap fonction, vous devez déclarer la AWS::LanguageExtensions transformation dans votre modèle. Pour de plus amples informations, veuillez consulter Fn : : FindInMap améliorations.
Ces rubriques connexes peuvent vous être utiles pour développer des modèles utilisant la fonction Fn::FindInMap.
-
CloudFormationMappingssyntaxe du modèle dans le guide de AWS CloudFormation l'utilisateur