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
.
MapName
diatur ke peta yang menarik, "RegionMap"
dalam contoh ini. TopLevelKey
diatur ke Wilayah tempat tumpukan dibuat, yang ditentukan dengan menggunakan parameter "AWS::Region"
semu. SecondLevelKey
diatur ke arsitektur yang diinginkan, "HVM64"
untuk contoh ini.
FindInMap
mengembalikan 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::FindInMap
mengembalikan yang sesuai SecurityGroupIds
berdasarkan EnvironmentType
parameter. Fn::Split
kemudian 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.