Fn::FindInMap - AWS CloudFormation

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à.

Fn::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"] }

YAML

Sintassi per il nome completo della funzione:

Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]

Sintassi per la forma breve:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
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.

Valore restituito

Il valore assegnato a SecondLevelKey.

Esempi

I seguenti esempi illustrano come utilizzare la funzione Fn::FindInMap.

Utilizza 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 AMI IDs 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 di quelle comunemente utilizzate AMIs 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-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

Utilizza 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::FindInMaprestituisce il valore appropriato in SecurityGroupIds base al EnvironmentType parametro. Fn::Splitquindi divide la stringa separata da virgole del gruppo di sicurezza IDs 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-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 ]

Funzioni supportate

È possibile utilizzare le funzioni seguenti in una funzione Fn::FindInMap.

  • Fn::FindInMap

  • Ref

Risorse correlate

Per utilizzare altre funzioni intrinseche o un valore predefinito in una funzione Fn::FindInMap, è necessario dichiarare la trasformazione AWS::LanguageExtensions all’interno del modello. Per ulteriori informazioni, consulta Fn::FindInMap enhancements.

Questi argomenti correlati possono essere utili per sviluppare modelli che utilizzano la funzione Fn::FindInMap.