Cloudformation conditions yaml

0

I have to create an auto scaling group in two regions and the only difference between the two are the subnets. us-east-1 has 1 subnet whereas us-east-2 has two. How can I use the condition to call the subnet value from region map. Here's my broken code. Any help is appreciated.

Mappings:
  RegionMap:
    us-east-1:
      AMI: "ami-066f487d3b6819b0d"
      Subnet1: "subnet-0e6f12f64042ea5b1"
    us-east-2:
      AMI: "ami-0aef5e0adcbc7cc0f"
      Subnet1: "subnet-0e6f12f64042ea5b1"
      Subnet2: "subnet-0bc661bb8d98f3f03"

Conditions:
  region: !Equals [!Ref us-east-2, Subnet2]

  autoscaling:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      AutoScalingGroupName: asg1
      VPCZoneIdentifier: 
        - !FindInMap [RegionMap, !Ref "AWS::Region", Subnet1]
        - If regions = us-east-2 then !FindInMap [RegionMap, !Ref "AWS::Region", Subnet2] # This is what I need to figure out

I couldn't find any examples of this. Has anyone used a region map and used conditionals with it?

posta un anno fa363 visualizzazioni
2 Risposte
0

How about this? I have not tested the template.

Mappings:
  RegionMap:
    us-east-1:
      AMI: "ami-066f487d3b6819b0d"
      Subnets: ["subnet-0e6f12f64042ea5b1"]
    us-east-2:
      AMI: "ami-0aef5e0adcbc7cc0f"
      Subnets: ["subnet-0e6f12f64042ea5b1", "subnet-0bc661bb8d98f3f03"]

Resources:
  autoscaling:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      AutoScalingGroupName: asg1
      VPCZoneIdentifier: !FindInMap [RegionMap, !Ref "AWS::Region", Subnets]

I added the following on 2022-12-10.

I verified that the stack creation completes successfully using the following template. I confirmed with us-east-1 and us-east-2. Note: I changed the AMI IDs and Subnet IDs to the values of my AWS account.

AWSTemplateFormatVersion: "2010-09-09"
Mappings:
  RegionMap:
    us-east-1:
      AMI: "ami-0b0dcb5067f052a63"
      Subnets: ["subnet-xxxxx28b"]  # mask
    us-east-2:
      AMI: "ami-0beaa649c482330f7"
      Subnets: ["subnet-xxxxxb61", "subnet-xxxxx9e5"]  # mask

Resources:
  autoscaling:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      LaunchTemplate:
        LaunchTemplateId: !Ref myLaunchTemplate
        Version: !GetAtt myLaunchTemplate.LatestVersionNumber
      MaxSize: "1"
      MinSize: "0"
      DesiredCapacity: "1"
      VPCZoneIdentifier: !FindInMap [RegionMap, !Ref "AWS::Region", Subnets]
  myLaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties:
      LaunchTemplateName: launch-template-test
      LaunchTemplateData:
        ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", AMI]
        InstanceType: t2.micro
profile picture
con risposta un anno fa
  • Thank you for your response. I had initially tried it but ran it a problem while creating it with the following error.

    "Value of property VPCZoneIdentifier must be of type List of String"

  • @learner00 I added the template I verified to my answer. The template worked as expected. If you could share the entire template with us, it might help us figure out the cause of your error.

0

Hello, for error "Value of property VPCZoneIdentifier must be of type List of String", consider removing [ ] enclosing the subnets in the Mappings section. Also, the following template can be used in both us-east-1 and us-east-2 regions that you can consider testing:

Note: Displayed limited resource properties for simplicity. Make sure to add the required properties and replace your subnets IDs and AMI IDs.

Mappings:
  RegionMap:
    us-east-1:
      AMI: ami-xxxx
      Subnets: "subnet-xxxx"
    us-east-2:
      AMI: ami-xxxx
      Subnets: "subnet-xxxx, subnet-xxxxx"
Parameters:
  region:
    Type: String
    AllowedValues:
      - us-east-1
      - us-east-2
Conditions:
  UE1: !Equals 
    - !Ref region
    - us-east-1
Resources:
  autoscaling:
    Type: 'AWS::AutoScaling::AutoScalingGroup'
    Properties:
      AutoScalingGroupName: name-of-asg
      VPCZoneIdentifier:
        - !If 
          - UE1
          - !FindInMap 
            - RegionMap
            - !Ref region
            - Subnets
          - !FindInMap 
            - RegionMap
            - !Ref region
            - Subnets
 #with other required properties in this resource type
AWS
TECNICO DI SUPPORTO
con risposta un anno fa

Accesso non effettuato. Accedi per postare una risposta.

Una buona risposta soddisfa chiaramente la domanda, fornisce un feedback costruttivo e incoraggia la crescita professionale del richiedente.

Linee guida per rispondere alle domande