Ошибка .ebextensions Beanstalk - Неразрешенные зависимости ресурсов в блоке ресурсов шаблона - PullRequest
0 голосов
/ 29 января 2020

Что я хочу сделать - это добавить ALB ListenerRule, только если в качестве имени среды Beanstalk указано «prod» или «prod-2». Если имя среды Beanstalk отличается, я могу пропустить этот ресурс и продолжить работу без его создания.

Вот мой .ebextensions / 00-testing-condition.config:

"Conditions" : {
    "createRedirect" : {"Fn::Or" : [ {"Fn::Equals" : [{"Ref" : "AWSEBEnvironmentName"}, "prod"]}, {"Fn::Equals" : [{"Ref" : "AWSEBEnvironmentName"}, "prod-2"]} ]}
  }

Resources:
    ALBListenerSSLRule:
        Condition: createRedirect
        Type: AWS::ElasticLoadBalancingV2::ListenerRule
        Properties:
          Actions:
            - RedirectConfig:
                Host: "#{host}"
                Path: "/#{path}"
                Port: 443
                Protocol: "HTTPS"
                Query: "#{query}"
                StatusCode: HTTP_301
              Type: "redirect"
          Conditions:
          - Field: host-header
            Values:
            - "MYDOMAINNAME.com"
          ListenerArn:
              Ref: AWSEBV2LoadBalancerListener
          Priority: 1

Как результат: ListenerRule создается, если env-имя является prod или prod-2 без каких-либо проблем. Однако, если имя отличается (поэтому утверждение неверно), я получаю следующую ошибку в Beanstalk:

Service:AmazonCloudFormation, Message:Template format error: Unresolved resource dependencies [ALBListenerSSLRule] in the Resources block of the template

Есть идеи о том, что не так?

1 Ответ

0 голосов
/ 30 января 2020

Кажется, что условия в Beanstalk не работают должным образом. Поэтому я закончил настройку доменных имен и перенаправлений для каждого env и добавил этот ресурс, используя свойство среды (переменную) в Beanstalk:

Resources:
    ALBListenerSSLRule:
        Type: AWS::ElasticLoadBalancingV2::ListenerRule
        Properties:
          Actions:
            - RedirectConfig:
                Host: "#{host}"
                Path: "/#{path}"
                Port: 443
                Protocol: "HTTPS"
                Query: "#{query}"
                StatusCode: HTTP_301
              Type: "redirect"
          Conditions:
          - Field: host-header
            Values:
            - "Fn::GetOptionSetting":
                  Namespace: "aws:elasticbeanstalk:application:environment"
                  OptionName: "ENV_DOMAIN_NAME"
                  DefaultValue: {"Ref":"AWS::NoValue"}
          ListenerArn:
              Ref: AWSEBV2LoadBalancerListener
          Priority: 1
...