Шаблон YAML CF для группы безопасности формирования облака с несколькими IP-адресами CIDR

#amazon-web-services #amazon-cloudformation

Вопрос:

Я создаю шаблон cloudformation в YAML для группы безопасности со следующей целью.

Если я введу 3 IP-адреса CIDR(59.188.255.128/26,34.224.81.192/26,35.223.13.224/27) в параметре (IPs) группа безопасности должна быть создана с IP-адресами входа 3 CIDR. Если я введу 2 IP-адреса CIDR(59.188.255.128/26,34.224.81.192/26) в параметре (IP-адреса) группа безопасности должна быть создана с этими входными 2 IP-адресами CIDR. Если я введу 1 IP-адрес CIDR(59.188.255.128/26) в параметре (IP-адреса), группа безопасности должна быть создана с этим входным 1 IP-адресом CIDR.

Я получаю ошибку при проверке своего шаблона в Cloudformation designer.

 Template contains errors.: Template format error: YAML not well-formed. (line 17, column 28)  

Соответствует ли приведенный ниже шаблон поставленной цели? Также я не могу обнаружить ошибку. Кто-нибудь может мне в этом помочь.

 AWSTemplateFormatVersion: 2010-09-09 Description: Security Group for CIDR IPs Parameters:  VPC:  Type: AWS::EC2::VPC::Id  Description: VPC where the Security Group will belong  Name:  Type: String  Description: Name Tag of the Security Group  Description:  Type: String  Description: Description Tag of the Security Group  IPs:  Description: Comma-delimited list of three CIDR IPs  Type: CommaDelimitedList Conditions:  IsIPthereA: !Not [!Equals["",!Select [ 0, !Ref IPs ] ]]  IsIPthereB: !Not [!Equals["",!Select [ 1, !Ref IPs ] ]]  IsIPthereC: !Not [!Equals["",!Select [ 2, !Ref IPs ] ]] Resources:  MYSG:  Type: AWS::EC2::SecurityGroup  Properties:  GroupDescription: !Ref Description  VpcId: !Ref VPC  SecurityGroupIngress:  - IpProtocol: tcp  CidrIp: !If [IsIPthereA, !Select [ 0, !Ref IPs ], !Ref AWS::NoValue]  FromPort: 443  ToPort: 443  - IpProtocol: tcp  CidrIp: !If [IsIPthereB, !Select [ 1, !Ref IPs ], !Ref AWS::NoValue]  FromPort: 443  ToPort: 443  - IpProtocol: tcp  CidrIp: !If [IsIPthereC, !Select [ 2, !Ref IPs ], !Ref AWS::NoValue]  FromPort: 443  ToPort: 443 Outputs:  SecurityGroupID:  Description: Security Group ID  Value: !Ref MYSG  

Обновление: Исправлена ошибка аннулирования. Теперь нет никаких проблем в создании стека с 3 IP-адресами CIDR в качестве параметра. Но при создании стека с 2 IP-адресами CIDR в качестве входных параметров(54.183.255.128/26,34.223.80.192/26), Я получаю «Ошибка шаблона: Fn::Select не может выбрать несуществующее значение в индексе 2». Может кто-нибудь, пожалуйста, помочь исправить эту ошибку.

Ответ №1:

Ошибка проверки заключается в том, что после нет места !Равняется.

даже если вы устраните проблему с пространством, это приведет к сбою, когда массив IPs не будет иметь длины 3 из-за !Функция Select не может выбрать из несуществующего индекса.

чтобы заставить это работать, присоединитесь к своему списку со списком пустых строк, а затем подтвердите.

 Conditions:  IsIPthereA:   Fn::Not:   - Fn::Equals:  - Fn::Select:  - 0  - Fn::Split:  - ","  - Fn::Sub:  - "${IP},,,"  - IP: !Join [',', !Ref IPs]   - ""  IsIPthereB:   Fn::Not:   - Fn::Equals:  - Fn::Select:  - 1  - Fn::Split:  - ","  - Fn::Sub:  - "${IP},,,"  - IP: !Join [',', !Ref IPs]   - ""  IsIPthereC:   Fn::Not:   - Fn::Equals:  - Fn::Select:  - 2  - Fn::Split:  - ","  - Fn::Sub:  - "${IP},,,"  - IP: !Join [',', !Ref IPs]   - ""  

Комментарии:

1. Спасибо @Shiyas. Теперь проверка стека завершена. Нет никаких проблем в создании стека с 3 IP-адресами CIDR в качестве параметра. Но при создании стека с 2 IP-адресами CIDR в качестве входных параметров(54.183.255.128/26,34.223.80.192/26), Я получаю «Ошибка шаблона: Fn::Select не может выбрать несуществующее значение в индексе 2». Не могли бы вы, пожалуйста, помочь исправить эту ошибку.

2. Я обновил ответ, раздел не может выполнять поиск по значению, не являющемуся индексом.

3. Спасибо @Shiya. Я проверю стек и вернусь обратно.

4. есть какие-нибудь новости по этому поводу… ?

5. Спасибо @Shiyas. Это работает. Я принимаю ваш ответ как решенный.