這是新的 AWS CloudFormation 範本參考指南。請更新您的書籤和連結。如需開始使用 CloudFormation 的說明,請參閱 AWS CloudFormation 使用者指南。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Fn::FindInMap
內部函數 Fn::FindInMap 傳回對應 Mappings 區段中所宣告之兩個層級映射之索引鍵的值。
宣告
JSON
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
YAML
完整函式名稱的語法:
Fn::FindInMap: [MapName,TopLevelKey,SecondLevelKey]
短格式的語法:
!FindInMap [MapName,TopLevelKey,SecondLevelKey]
注意
您無法以短形式巢套兩個函數的兩個執行個體。
參數
- MapName
-
在 Mappings 區段中宣告的映射邏輯名稱,包含索引鍵和值。
- TopLevelKey
-
最上層的索引鍵名稱。其值為鍵/值對的清單。
- SecondLevelKey
-
第二層的索引鍵名稱,設定為指派給
TopLevelKey之清單中的其中一個索引鍵。
傳回值
指派給 SecondLevelKey 的值。
範例
以下範例會示範 Fn::FindInMap 函數的使用方式。
Fn::FindInMap 搭配區域特定值使用
下列範例示範如何在包含兩個映射的範本Fn::FindInMap中使用 : AWSInstanceType2Arch和 AWSRegionArch2AMI。它還包含 InstanceType 參數,可讓您在 t3.micro和 之間進行選擇t4g.nano。預設值為 t3.micro,但可以在堆疊建立期間覆寫。
Fn::FindInMap 先根據選取的執行個體類型決定架構 (HVM64 或 ARM64),然後在目前的 中查詢該架構的正確 AMI ID AWS 區域。
注意
這些範例中顯示的 AMI IDs 是做為示範之用的預留位置。盡可能考慮使用參數的 AWS Systems Manager 動態參考作為Mappings區段的替代方案。若要避免在每次要使用變更的 AMI 時,使用新 ID 來更新所有範本,請在建立或更新堆疊時,使用 AWS Systems Manager 參數來擷取最新的 AMI ID。Systems Manager 中也提供最新版本的常用 AMIs 做為公有參數。如需詳細資訊,請參閱使用動態參考取得存放在其他服務中的值。
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
將 Fn::FindInMap用於環境特定的組態
下列範例示範如何將 Fn::FindInMap用於包含單一映射的 Mappings區段的 範本SecurityGroups。它還包含 EnvironmentType 參數,可讓您指定環境是 Dev還是 Prod。其預設為 ,Dev但可以在堆疊建立期間覆寫。
Fn::FindInMap SecurityGroupIds會根據 EnvironmentType 參數傳回適當的 。 Fn::Split 然後將逗號分隔的安全群組 IDs 字串分割為清單,這是 的預期格式SecurityGroupIds。
如果您在 EnvironmentType設定為 的情況下部署此堆疊Dev, SecurityGroupIds的 EC2Instance 將是 sg-12345678。如果您將 EnvironmentType設定為 Prod,則會使用 sg-abcdef01和 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 ]
支援的函數
您可以在 Fn::FindInMap 函數中善用以下函數:
-
Fn::FindInMap -
Ref
相關資源
若要在函數中使用其他內部函數或預設值Fn::FindInMap,您必須在範本中宣告AWS::LanguageExtensions轉換。如需詳細資訊,請參閱Fn::FindInMap
enhancements。
當您開發使用 Fn::FindInMap函數的範本時,這些相關主題會很有幫助。
-
AWS CloudFormation 《 使用者指南》中的 CloudFormation 範本Mappings語法