简体   繁体   中英

How to add conditions in Parameters section in AWS CloudFormation?

So what I am trying to do is, I defined a Parameter called EnvType with allowed values test or production.

What should happen is when the user selects one of these environments test or production, lets say test then he should be able to select another parameter called InstanceType in which allowed values would be all the 't' type instances in the drop-down list while creating the stack.

If the user selects production as the EnvType then the allowed values under the same parameter called InstanceType must be all instances types except 't' type for eg ('m' type).

And the same must apply for rds as well. Let's say user chooses EnvType as test then allowed values under parameter called DBInstanceType must be 'db.t' type instances otherwise 'db.r' type instances.

Parameters

Parameters:
  
  EnvType: 
    Default: test
    Type: String
    AllowedValues: 
      - production
      - test
  
  InstanceType:
    Type: String
    AllowedValues: !FindInMap 
      - InstanceTypeMap
      - !Ref EnvType
      - instanceType
      
  DBInstanceType:
    Type: String
    AllowedValues: !FindInMap 
      - InstanceTypeMap
      - !Ref EnvType
      - dbinstanceType
       

Mapping

    InstanceTypeMap:
      production:
        instanceType: [m1.small, m1.medium, m1.large, m1.xlarge, m2.xlarge, m2.2xlarge, m2.4xlarge]
        dbinstancetype: [db.r5.large, db.r5.xlarge]
      test:
        instanceType: [t1.micro, t2.nano, t2.micro, t2.small, t2.medium, t2.large]
        dbinstancetype: [db.t2.small, db.t2.medium, db.t3.small]
      
        
        

Resources

Resources:
  WebServer:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: !Ref InstanceType
   

  DBInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBInstanceClass: !FindInMap 
        - MyEnvironmentMap
        - !Ref EnvType
        - dbinstanceType 
     

Well i know the template is not valid, and is prone to errors in allowed values in InstanceType and DBInstanceType parameters but i am seeking an alternative of doing this.

Please help!!

Simply, such functionality is not possible in CloudFormation (CFN). Sadly, there is no alternative in CFN for that. You would have to develop a custom solution for deployment of such templates.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM