Fn::FindInMap - AWS CloudFormation

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Fn::FindInMap

Fungsi intrinsik Fn::FindInMap mengembalikan nilai yang sesuai dengan kunci dalam peta dua tingkat yang dideklarasikan di bagian. Mappings

Pernyataan

JSON

{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }

YAML

Sintaks untuk nama fungsi penuh:

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

Sintaks untuk bentuk pendek:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
catatan

Anda tidak dapat me-nest dua instans dari dua fungsi dalam bentuk singkat.

Parameter

MapName

Nama logis dari pemetaan dinyatakan di bagian Pemetaan yang berisi kunci dan nilai.

TopLevelKey

Nama kunci tingkat atas. Nilainya adalah daftar pasangan nilai kunci.

SecondLevelKey

Nama kunci tingkat kedua, yang diatur ke salah satu kunci dari daftar yang ditetapkan untuk TopLevelKey.

Nilai yang dikembalikan

Nilai yang ditetapkan untukSecondLevelKey.

Contoh

Contoh berikut menunjukkan cara menggunakan fungsi Fn::FindInMap.

Gunakan Fn::FindInMap dengan nilai spesifik wilayah

Contoh berikut menunjukkan cara menggunakan Fn::FindInMap template dengan Mappings bagian yang berisi peta tunggalRegionMap, yang terkait AMIs dengan AWS Wilayah.

  • Peta ini memiliki 5 kunci tingkat atas yang sesuai dengan berbagai AWS Wilayah.

  • Setiap kunci tingkat atas diberi daftar dengan dua kunci tingkat kedua, "HVM64" dan"HVMG2", yang sesuai dengan arsitektur. AMI

  • Masing-masing kunci tingkat kedua diberi nama yang sesuaiAMI.

Contoh templat berisi sumber daya AWS::EC2::Instance yang properti ImageId-nya diatur berdasarkan fungsi FindInMap.

MapNamediatur ke peta yang menarik, "RegionMap" dalam contoh ini. TopLevelKeydiatur ke Wilayah tempat tumpukan dibuat, yang ditentukan dengan menggunakan parameter "AWS::Region" semu. SecondLevelKeydiatur ke arsitektur yang diinginkan, "HVM64" untuk contoh ini.

FindInMapmengembalikan yang AMI ditugaskan keFindInMap. HVM64Misalnya di FindInMap us-east-1, akan kembali. "ami-0ff8a91507f77f867"

catatan

Pertimbangkan AWS Systems Manager parameter sebagai alternatif untuk Mappings bagian ini. Untuk menghindari memperbarui semua templat Anda dengan ID baru setiap kali perubahan AMI yang ingin Anda gunakan, gunakan tipe AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> parameter untuk mengambil AMI ID terbaru saat tumpukan dibuat atau diperbarui. Versi terbaru yang umum digunakan juga AMIs tersedia sebagai parameter publik di Systems Manager. Untuk informasi selengkapnya, lihat Referensikan sumber daya yang ada dan parameter Systems Manager dengan CloudFormation tipe parameter yang disediakan.

JSON

{ ... "Mappings" : { "RegionMap" : { "us-east-1" : { "HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c" }, "us-west-1" : { "HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1" }, "eu-west-1" : { "HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435" }, "ap-southeast-1" : { "HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309" }, "ap-northeast-1" : { "HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "HVM64" ] }, "InstanceType" : "t2.micro" } } } }

YAML

Mappings: RegionMap: us-east-1: HVM64: "ami-0ff8a91507f77f867" HVMG2: "ami-0a584ac55a7631c0c" us-west-1: HVM64: "ami-0bdb828fd58c52235" HVMG2: "ami-066ee5fd4a9ef77f1" eu-west-1: HVM64: "ami-047bb4163c506cd98" HVMG2: "ami-0a7c483d527806435" ap-southeast-1: HVM64: "ami-08569b978cc4dfa10" HVMG2: "ami-0be9df32ae9f92309" ap-northeast-1: HVM64: "ami-06cd52961ce9f0d85" HVMG2: "ami-053cdd503598e4a9d" Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - HVM64 InstanceType: t2.micro

Gunakan Fn::FindInMap untuk konfigurasi khusus lingkungan

Contoh berikut menunjukkan bagaimana menggunakan Fn::FindInMap untuk template dengan Mappings bagian yang berisi peta tunggal,SecurityGroups. Ini juga berisi EnvironmentType parameter yang memungkinkan Anda menentukan apakah lingkungan tersebut Dev atauProd. Defaultnya Dev tetapi dapat diganti selama pembuatan tumpukan.

Fn::FindInMapmengembalikan yang sesuai SecurityGroupIds berdasarkan EnvironmentType parameter. Fn::Splitkemudian membagi string grup keamanan yang dipisahkan koma IDs ke dalam daftar, yang merupakan format yang diharapkan untuk SecurityGroupIds.

Jika Anda menerapkan tumpukan ini dengan EnvironmentType set toDev, SecurityGroupIds for EC2Instance akan menjadisg-12345678. Jika Anda mengatur EnvironmentType keProd, itu akan menggunakan sg-abcdef01 dansg-ghijkl23.

JSON

{ ... "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": "ami-0a70b9d193ae8a799", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }

YAML

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: ami-0a70b9d193ae8a799 InstanceType: t2.micro SecurityGroupIds: Fn::Split: - "," - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]

Fungsi yang didukung

Anda dapat menggunakan fungsi berikut di fungsi Fn::FindInMap:

  • Fn::FindInMap

  • Ref

Sumber daya terkait

Untuk menggunakan fungsi intrinsik lainnya atau nilai default dalam suatu Fn::FindInMap fungsi, Anda harus mendeklarasikan AWS::LanguageExtensions transformasi dalam template Anda. Untuk informasi selengkapnya, lihat Fn::FindInMap enhancements.

Topik terkait ini dapat membantu saat Anda mengembangkan templat yang menggunakan Fn::FindInMap fungsi tersebut.