#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. Это работает. Я принимаю ваш ответ как решенный.