#validation #debugging #amazon-cloudformation
Вопрос:
Я использую линтер, и мой шаблон выглядит допустимым, однако мое развертывание завершается ошибкой с «исключением проверки AWS::ElasticLoadBalancingV2::ListenerRule». Похоже, что в консоли формирования облака нет места для дальнейшей детализации этого исключения. Как определить, почему мое развертывание недопустимо?
Шаблон формирования облака
Parameters: Env: Type: String Mappings: EnvMap: sandbox: ... Resources: HttpsListener: Type: AWS::ElasticLoadBalancingV2::Listener Properties: Certificates: - CertificateArn: !FindInMap [EnvMap, !Ref Env, CertificateArn] DefaultActions: - Type: forward ForwardConfig: # TODO: read all this stuff off HTTP listener TargetGroupStickinessConfig: Enabled: false TargetGroups: - TargetGroupArn: !FindInMap [EnvMap, !Ref Env, LoadBalancerDefaultTargetArn] Weight: 1 TargetGroupArn: !FindInMap [EnvMap, !Ref Env, LoadBalancerDefaultTargetArn] LoadBalancerArn: !FindInMap [EnvMap, !Ref Env, LoadBalancerArn] Port: 443 Protocol: HTTPS HttpsListenerRule: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: Actions: - Type: forward ForwardConfig: TargetGroupStickinessConfig: Enabled: false TargetGroups: - TargetGroupArn: !FindInMap [EnvMap, !Ref Env, LoadBalancerRouteTargetArn] Weight: 1 TargetGroupArn: !FindInMap [EnvMap, !Ref Env, LoadBalancerRouteTargetArn] Conditions: - Field: path-pattern PathPatternConfig: Values: - /* Values: - /* ListenerArn: !Ref HttpsListener Priority: 50000
Ошибка
«Причина статуса» из события.
Resource handler returned message: "Invalid request provided: AWS::ElasticLoadBalancingV2::ListenerRule Validation exception" (RequestToken: 16bd4239-0d41-b16f-2963-b0a774009dfd, HandlerErrorCode: InvalidRequest)
Комментарии:
1. Каков фактический шаблон и полное сообщение об ошибке?
2. Только что обновлено… Может быть, это потому, что я ссылаюсь на ARNS ресурсов, управляемых за пределами моего стека?
3. попробуйте запустить cfn-lint против вашего шаблона
4. была ли ваша проблема решена? попробуйте решение, приведенное ниже 😉
Ответ №1:
Попробуйте удалить PathConfigPattern
из Conditions
ключа:
HttpsListenerRule: Type: AWS::ElasticLoadBalancingV2::ListenerRule Properties: Actions: - Type: "forward" ForwardConfig: TargetGroupStickinessConfig: Enabled: false TargetGroups: - TargetGroupArn: !FindInMap [ EnvMap, !Ref Env, LoadBalancerRouteTargetArn ] Weight: 1 TargetGroupArn: !FindInMap [ EnvMap, !Ref Env, LoadBalancerRouteTargetArn ] Order: 1 Conditions: - Field: path-pattern Values: - "/*" ListenerArn: !Ref HttpsListener Priority: 50000
Кроме того, убедитесь, что ваша EnvMap
карта выглядит следующим образом:
Parameters: Env: Type: String Default: sandbox Mappings: EnvMap: sandbox: LoadBalancerRouteTargetArn: "arn:aws:elasticloadbalancing:eu-west-1:111111111111:targetgroup/my-tg-1/222222222222" prod: LoadBalancerRouteTargetArn: "arn:aws:elasticloadbalancing:eu-west-1:333333333333:targetgroup/my-tg-2/444444444444"