Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Templat sampel
Membuat sumber daya secara kondisional untuk tumpukan produksi, pengembangan, atau tes
Dalam beberapa kasus, Anda mungkin ingin membuat tumpukan yang mirip tetapi dengan tweak kecil. Misalnya, Anda mungkin memiliki templat yang Anda gunakan untuk aplikasi produksi. Anda ingin membuat tumpukan produksi yang sama agar Anda dapat menggunakannya untuk pengembangan atau pengujian. Namun, untuk pengembangan dan pengujian, Anda mungkin tidak memerlukan semua kapasitas tambahan yang disertakan dalam tumpukan tingkat produksi. Sebaliknya, Anda dapat menggunakan parameter input jenis lingkungan guna membuat sumber daya tumpukan secara kondisional yang khusus untuk produksi, pengembangan, atau pengujian, seperti yang ditunjukkan dalam contoh berikut:
contoh JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-0ff8a91507f77f867"}, "us-west-1" : { "AMI" : "ami-0bdb828fd58c52235"}, "us-west-2" : { "AMI" : "ami-a0cfeed8"}, "eu-west-1" : { "AMI" : "ami-047bb4163c506cd98"}, "sa-east-1" : { "AMI" : "ami-07b14488da8ea02a0"}, "ap-southeast-1" : { "AMI" : "ami-08569b978cc4dfa10"}, "ap-southeast-2" : { "AMI" : "ami-09b42976632b27e9b"}, "ap-northeast-1" : { "AMI" : "ami-06cd52961ce9f0d85"} } }, "Parameters" : { "EnvType" : { "Description" : "Environment type.", "Default" : "test", "Type" : "String", "AllowedValues" : ["prod", "dev", "test"], "ConstraintDescription" : "must specify prod, dev, or test." } }, "Conditions" : { "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]}, "CreateDevResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "dev"]} }, "Resources" : { "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}, "InstanceType" : { "Fn::If" : [ "CreateProdResources", "c1.xlarge", {"Fn::If" : [ "CreateDevResources", "m1.large", "m1.small" ]} ]} } }, "MountPoint" : { "Type" : "AWS::EC2::VolumeAttachment", "Condition" : "CreateProdResources", "Properties" : { "InstanceId" : { "Ref" : "EC2Instance" }, "VolumeId" : { "Ref" : "NewVolume" }, "Device" : "/dev/sdh" } }, "NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } } } }
contoh YAML
AWSTemplateFormatVersion: "2010-09-09" Mappings: RegionMap: us-east-1: AMI: "ami-0ff8a91507f77f867" us-west-1: AMI: "ami-0bdb828fd58c52235" us-west-2: AMI: "ami-a0cfeed8" eu-west-1: AMI: "ami-047bb4163c506cd98" sa-east-1: AMI: "ami-07b14488da8ea02a0" ap-southeast-1: AMI: "ami-08569b978cc4dfa10" ap-southeast-2: AMI: "ami-09b42976632b27e9b" ap-northeast-1: AMI: "ami-06cd52961ce9f0d85" Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: [prod, dev, test] ConstraintDescription: must specify prod, dev, or test. Conditions: CreateProdResources: !Equals [!Ref EnvType, prod] CreateDevResources: !Equals [!Ref EnvType, "dev"] Resources: EC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", AMI] InstanceType: !If [CreateProdResources, c1.xlarge, !If [CreateDevResources, m1.large, m1.small]] MountPoint: Type: "AWS::EC2::VolumeAttachment" Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: "AWS::EC2::Volume" Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone
Anda dapat menentukan prod
, dev
, atau test
untuk parameter EnvType
. Untuk setiap jenis lingkungan, templat menentukan jenis instans yang berbeda. Jenis instans dapat berkisar dari instans besar yang dioptimalkan dengan komputasi hingga instans kecil untuk tujuan umum. Untuk menentukan jenis instans secara kondisional, templat menetapkan dua syarat di bagian Syarat tentang templat: CreateProdResources
, yang bernilai true jika nilai parameter EnvType
sama dengan prod
dan CreateDevResources
, yang bernilai true jika nilai parameter sama dengan dev
.
Di properti InstanceType
, templat menyimpan dua fungsi intrinsik Fn::If
untuk menentukan jenis instans yang akan digunakan. Jika syarat CreateProdResources
true, jenis instans adalah c1.xlarge
. Jika syarat salah, syarat CreateDevResources
dievaluasi. Jika syarat CreateDevResources
true, jenis instans adalah m1.large
atau m1.small
.
Selain jenis instance, lingkungan produksi membuat dan melampirkan EC2 volume Amazon ke instance. Sumber daya MountPoint
dan NewVolume
yang terkait dengan syarat CreateProdResources
sehingga sumber daya dibuat hanya jika syarat bernilai true.
Menetapkan properti sumber daya secara bersyarat
Dalam contoh ini, Anda dapat membuat instans Amazon RDS DB dari snapshot. Jika Anda menentukan DBSnapshotName
parameter, CloudFormation menggunakan nilai parameter sebagai nama snapshot saat membuat instance DB. Jika Anda menyimpan nilai default (string kosong), CloudFormation menghapus DBSnapshotIdentifier
properti dan membuat instance DB dari awal.
Contoh menetapkan parameter DBUser
dan DBPassword
dengan properti NoEcho
-nya diatur menjadi true
. Jika Anda menyetel NoEcho
atribut ketrue
, CloudFormation mengembalikan nilai parameter yang disamarkan sebagai tanda bintang (*****) untuk setiap panggilan yang menggambarkan peristiwa tumpukan atau tumpukan, kecuali untuk informasi yang disimpan di lokasi yang ditentukan di bawah ini.
penting
Menggunakan NoEcho
atribut tidak menutupi informasi apa pun yang disimpan sebagai berikut:
-
Bagian
Metadata
template. CloudFormation tidak mengubah, memodifikasi, atau menyunting informasi apa pun yang Anda sertakan diMetadata
bagian ini. Untuk informasi selengkapnya, lihat Metadata. -
Bagian
Outputs
template. Untuk informasi selengkapnya, lihat Outputs. -
Metadata
Atribut definisi sumber daya. Untuk informasi selengkapnya, lihat Metadataatribut.
Kami sangat menyarankan Anda untuk tidak menggunakan mekanisme ini untuk memasukkan informasi sensitif, seperti kata sandi atau rahasia.
penting
Daripada menyematkan informasi sensitif secara langsung di CloudFormation template Anda, kami sarankan Anda menggunakan parameter dinamis dalam template tumpukan untuk mereferensikan informasi sensitif yang disimpan dan dikelola di luar CloudFormation, seperti di AWS Systems Manager Parameter Store atau AWS Secrets Manager.
Untuk informasi lebih lanjut, lihat praktik Jangan menanamkan kredensial dalam templat Anda terbaik.
contoh JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters": { "DBUser": { "NoEcho": "true", "Description" : "The database admin account username", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*", "ConstraintDescription" : "must begin with a letter and contain only alphanumeric characters." }, "DBPassword": { "NoEcho": "true", "Description" : "The database admin account password", "Type": "String", "MinLength": "1", "MaxLength": "41", "AllowedPattern" : "[a-zA-Z0-9]*", "ConstraintDescription" : "must contain only alphanumeric characters." }, "DBSnapshotName": { "Description": "The name of a DB snapshot (optional)", "Default": "", "Type": "String" } }, "Conditions": { "UseDBSnapshot": {"Fn::Not": [{"Fn::Equals" : [{"Ref" : "DBSnapshotName"}, ""]}]} }, "Resources" : { "MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }, "MyRDSParamGroup" : { "Type": "AWS::RDS::DBParameterGroup", "Properties" : { "Family" : "MySQL5.5", "Description" : "CloudFormation Sample Database Parameter Group", "Parameters" : { "autocommit" : "1" , "general_log" : "1", "old_passwords" : "0" } } } } }
contoh YAML
AWSTemplateFormatVersion: "2010-09-09" Parameters: DBUser: NoEcho: true Description: The database admin account username Type: String MinLength: 1 MaxLength: 16 AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*" ConstraintDescription: must begin with a letter and contain only alphanumeric characters. DBPassword: NoEcho: true Description: The database admin account password Type: String MinLength: 1 MaxLength: 41 AllowedPattern: "[a-zA-Z0-9]*" ConstraintDescription: must contain only alphanumeric characters. DBSnapshotName: Description: The name of a DB snapshot (optional) Default: "" Type: String Conditions: UseDBSnapshot: !Not [!Equals [!Ref DBSnapshotName, ""]] Resources: MyDB: Type: "AWS::RDS::DBInstance" Properties: AllocatedStorage: 5 DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: 5.5 MasterUsername: !Ref DBUser MasterUserPassword: !Ref DBPassword DBParameterGroupName: !Ref MyRDSParamGroup DBSnapshotIdentifier: !If [UseDBSnapshot, !Ref DBSnapshotName, !Ref "AWS::NoValue"] MyRDSParamGroup: Type: "AWS::RDS::DBParameterGroup" Properties: Family: MySQL5.5 Description: CloudFormation Sample Database Parameter Group Parameters: autocommit: 1 general_log: 1 old_passwords: 0
Syarat UseDBSnapshot
bernilai true hanya jika DBSnapshotName
bukan sebuah string kosong. Jika UseDBSnapshot
kondisi dievaluasi ke true, CloudFormation menggunakan nilai DBSnapshotName
parameter untuk DBSnapshotIdentifier
properti. Jika kondisi dievaluasi menjadi false, CloudFormation hapus DBSnapshotIdentifier
properti. Pseudo parameter AWS::NoValue
menghapus properti sumber daya yang sesuai ketika digunakan sebagai nilai kembali.
Menggunakan sumber daya yang sudah ada secara bersyarat
Dalam contoh ini, Anda dapat menggunakan grup EC2 keamanan Amazon yang telah dibuat atau Anda dapat membuat grup keamanan baru, yang ditentukan dalam templat. Untuk parameter ExistingSecurityGroup
, Anda dapat menentukan nama grup keamanan default
atau NONE
. Jika Anda menentukandefault
, CloudFormation menggunakan grup keamanan yang telah dibuat dan diberi namadefault
. Jika Anda menentukanNONE
, CloudFormation membuat grup keamanan yang ditentukan dalam template.
contoh JSON
{ "Parameters" : { "ExistingSecurityGroup" : { "Description" : "An existing security group ID (optional).", "Default" : "NONE", "Type" : "String", "AllowedValues" : ["default", "NONE"] } }, "Conditions" : { "CreateNewSecurityGroup" : {"Fn::Equals" : [{"Ref" : "ExistingSecurityGroup"}, "NONE"] } }, "Resources" : { "MyInstance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-0ff8a91507f77f867", "SecurityGroups" : [{ "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] }] } }, "NewSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Condition" : "CreateNewSecurityGroup", "Properties" : { "GroupDescription" : "Enable HTTP access via port 80", "SecurityGroupIngress" : [ { "IpProtocol" : "tcp", "FromPort" : 80, "ToPort" : 80, "CidrIp" : "0.0.0.0/0" } ] } } }, "Outputs" : { "SecurityGroupId" : { "Description" : "Group ID of the security group used.", "Value" : { "Fn::If" : [ "CreateNewSecurityGroup", {"Ref" : "NewSecurityGroup"}, {"Ref" : "ExistingSecurityGroup"} ] } } } }
contoh YAML
Parameters: ExistingSecurityGroup: Description: An existing security group ID (optional). Default: NONE Type: String AllowedValues: - default - NONE Conditions: CreateNewSecurityGroup: !Equals [!Ref ExistingSecurityGroup, NONE] Resources: MyInstance: Type: "AWS::EC2::Instance" Properties: ImageId: "ami-0ff8a91507f77f867" SecurityGroups: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup] NewSecurityGroup: Type: "AWS::EC2::SecurityGroup" Condition: CreateNewSecurityGroup Properties: GroupDescription: Enable HTTP access via port 80 SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 Outputs: SecurityGroupId: Description: Group ID of the security group used. Value: !If [CreateNewSecurityGroup, !Ref NewSecurityGroup, !Ref ExistingSecurityGroup]
Untuk menentukan apakah akan membuat sumber daya NewSecurityGroup
, sumber daya terkait dengan syarat CreateNewSecurityGroup
. Sumber daya dibuat hanya jika syarat benar (ketika parameter ExistingSecurityGroup
sama dengan NONE
).
Di properti SecurityGroups
, templat menyimpan dua fungsi intrinsik Fn::If
untuk menentukan grup keamanan yang akan digunakan. Jika syarat CreateNewSecurityGroup
bernilai true, properti grup keamanan mereferensikan sumber daya NewSecurityGroup
. Jika syarat CreateNewSecurityGroup
bernilai false, properti grup keamanan mereferensikan parameter ExistingSecurityGroup
(grup keamanan default
).
Terakhir, template secara kondisional menghasilkan output ID grup keamanan. Jika CreateNewSecurityGroup
kondisi dievaluasi ke true, CloudFormation output ID grup keamanan sumber daya. NewSecurityGroup
Jika kondisinya salah, CloudFormation output ID grup keamanan ExistingSecurityGroup
sumber daya.