Questa è la nuova Guida di riferimento ai modelli CloudFormation . Aggiorna i segnalibri e i link. Per informazioni su come iniziare CloudFormation, consulta la Guida AWS CloudFormation per l'utente.
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à.
Ventilatore:: FindInMap
La funzione intrinseca Fn::FindInMap restituisce i valori corrispondenti alle chiavi in una mappatura a due livelli dichiarata nella sezione Mappings.
Dichiarazione
JSON
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
Se desideri specificare un valore di riserva per quando una chiave non viene trovata nella mappatura, includi un: DefaultValue
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey", {"DefaultValue": "DefaultValue"}] }
YAML
Sintassi per il nome completo della funzione:
Fn::FindInMap: [MapName,TopLevelKey,SecondLevelKey]
Sintassi per la forma breve:
!FindInMap [MapName,TopLevelKey,SecondLevelKey]
Se desideri specificare un valore di riserva per quando una chiave non viene trovata nella mappatura, includi: DefaultValue
Sintassi per il nome completo della funzione:
Fn::FindInMap: -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Sintassi per la forma breve:
!FindInMap -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Nota
Non è possibile nidificare due istanze di due funzioni in forma breve.
Parameters
- MapName
-
Il nome logico di una mappatura dichiarata nella sezione Mappature che contiene le chiavi e i valori.
- TopLevelKey
-
Il nome della chiave di livello superiore. Il valore è un elenco di coppie chiave-valore.
- SecondLevelKey
-
Il nome della chiave di secondo livello, che è impostato su una delle chiavi dall’elenco assegnato a
TopLevelKey. - DefaultValue
-
Il valore che
Fn::FindInMaprestituisce seTopLevelKeyo nonSecondLevelKeyviene trovato nella mappatura specificata. Questo parametro è facoltativo. Se omesso,Fn::FindInMapgenera un errore quando non viene trovata una chiave.Il quarto parametro deve essere una mappa con la chiave.
DefaultValueAd esempio:{"DefaultValue": "us-east-1"}.
Valore restituito
Il valore assegnato a SecondLevelKey. Se TopLevelKey o non SecondLevelKey viene trovato e DefaultValue viene specificato a, DefaultValue viene restituito invece.
Esempi
I seguenti esempi illustrano come utilizzare la funzione Fn::FindInMap.
Argomenti
Utilizzo Fn:: FindInMap con valori specifici della regione
L’esempio seguente mostra come utilizzare Fn::FindInMap in un modello che include due mappature: AWSInstanceType2Arch e AWSRegionArch2AMI. Include anche un parametro InstanceType che consente di scegliere tra t3.micro e t4g.nano. L’impostazione predefinita è t3.micro, ma può essere sovrascritta durante la creazione dello stack.
Fn::FindInMap determina innanzitutto l’architettura (HVM64 o ARM64) in base al tipo di istanza selezionato, quindi cerca l’ID AMI corretto per quell’architettura nella Regione AWS attuale.
Nota
Gli ID AMI mostrati in questi esempi sono segnaposto a scopo dimostrativo. Quando possibile, prendi in considerazione l’utilizzo di riferimenti dinamici ai parametri AWS Systems Manager come alternativa alla sezione Mappings. Per evitare di aggiornare tutti i modelli con un nuovo ID ogni volta che l'AMI che desideri utilizzare cambia, utilizza un AWS Systems Manager parametro per recuperare l'ID AMI più recente quando lo stack viene creato o aggiornato. Le versioni più recenti delle AMI di uso comune sono disponibili anche come parametri pubblici in Systems Manager. Per ulteriori informazioni, consulta Get values stored in other services using dynamic references.
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
Utilizzo Fn: FindInMap per configurazioni specifiche dell'ambiente
L’esempio seguente mostra come usare Fn::FindInMap per un modello con una sezione Mappings che contiene una singola mappa, SecurityGroups. Contiene inoltre un parametro EnvironmentType che consente di specificare se l’ambiente è Dev o Prod. L’impostazione predefinita è Dev ma può essere sovrascritta durante la creazione dello stack.
Fn::FindInMap restituisce il valore appropriato basato su SecurityGroupIds nel parametro EnvironmentType. Quindi, Fn::Split divide la stringa separata da virgole degli ID del gruppo di sicurezza in un elenco, che è il formato previsto per SecurityGroupIds.
Se implementi questo stack con il set EnvironmentType su Dev, SecurityGroupIds per EC2Instance sarà sg-12345678. Se imposti EnvironmentType su Prod, utilizzerà sg-abcdef01 e 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 ]
Utilizzo Fn: FindInMap con un valore predefinito
L'esempio seguente utilizza DefaultValue a per fornire un fallback quando non viene trovata una chiave nella mappatura. Se la corrente non Regione AWS è definita nella RegionMap mappatura, Fn::FindInMap restituisce t3.micro invece di generare un errore.
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
Funzioni supportate
È possibile utilizzare le funzioni seguenti in una funzione Fn::FindInMap.
-
Fn::FindInMap -
Ref
Risorse correlate
Per utilizzare funzioni intrinseche oltre Fn::FindInMap e Ref nei parametri di una Fn::FindInMap funzione, è necessario dichiarare la AWS::LanguageExtensions trasformazione all'interno del modello. Per ulteriori informazioni, consulta Fn:: miglioramenti FindInMap.
Questi argomenti correlati possono essere utili per sviluppare modelli che utilizzano la funzione Fn::FindInMap.
-
CloudFormationMappingssintassi del modello nella Guida per l'utente AWS CloudFormation