CloudFormation! Выберите с помощью! Функция разделения с балансировщиком нагрузки arn

Я пытаюсь создать облачный будильник для Network ELB, используя шаблон облачной информации. Я использую функцию Select с комбинацией функции разделения для получения требуемого элемента.

NLB: - arn:aws:elasticloadbalancing:eu-west-1:123456:loadbalancer/net/dev-nlb-3HGD5SO64D/7GL51FD3

NLBTargetGroup: - arn:aws:elasticloadbalancing:eu-west-1:123456:targetgroup/dev-nlb-2A6W3JC4R/9DH34SJY

  Alarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      ActionsEnabled: True
      AlarmDescription: test alarm
      ComparisonOperator:  GreaterThanOrEqualToThreshold
      Dimensions:
        - Name: LoadBalancer
          Value: !Select ["5", !Split [":", !Ref NLB]]
        - Name: TargetGroup
          Value: !Select ["5", !Split [":", !Ref NLBTargetGroup]]
      EvaluationPeriods: 1
      MetricName: HealthyHostCount
      Namespace: AWS/NetworkELB
      AlarmActions:
        - arn:aws:sns:eu-west-1:123456:TestSNS
      OKActions:
        - arn:aws:sns:eu-west-1:123456:TestSNS
      Period: 60
      Statistic: Average
      Threshold: 2.0
      TreatMissingData: missing

С помощью приведенной выше конфигурации я могу выбрать значение TargetGroup как targetgroup / dev-nlb-2A6W3JC4R / 9DH34SJY, но для LoadBalancer значение становится как loadbalancer / net / dev-nlb-3HGD5SO64D / 7GL51FD3. Моя цель - получить только net / dev-nlb-3HGD5SO64D / 7GL51FD3

Как я могу этого добиться?


person Sagar Jadhav    schedule 09.08.2020    source источник


Ответы (2)


Вы можете получить его, используя для NLB:

!GetAtt YourNLB.LoadBalancerFullName

и для целевая группа:

!GetAtt YourTG.TargetGroupFullName

Таким образом вы можете:

      Dimensions:
        - Name: LoadBalancer
          Value: !GetAtt YourNLB.LoadBalancerFullName
        - Name: TargetGroup
          Value: !GetAtt YourTG.TargetGroupFullName

Если вам действительно нужно разделить строку, для NLB ваша комбинация Split-Join будет:

 Value: !Join
      - '/'
      - - !Select [1, !Split [ '/', !Select ["5", !Split [":", !Ref NLB]]]]
        - !Select [2, !Split [ '/', !Select ["5", !Split [":", !Ref NLB]]]]
        - !Select [3, !Split [ '/', !Select ["5", !Split [":", !Ref NLB]]]]

и для TargetGroup:

  Value: !Join
    - '/'
    - - !Select [1, !Split [ '/', !Select ["5", !Split [":", !Ref NLBTargetGroup]]]]
      - !Select [2, !Split [ '/', !Select ["5", !Split [":", !Ref NLBTargetGroup]]]]    
person Marcin    schedule 09.08.2020
comment
Большое спасибо, ребята, за ваш вклад. Сначала я пробовал использовать функцию соединения, но в итоге получил ошибку «Fn :: Select не может выбрать несуществующее значение в индексе 5». Затем я использовал '! GetAtt YourNLB.LoadBalancerFullName', который решил мою проблему. - person Sagar Jadhav; 09.08.2020
comment
@SagarJadhav Нет проблем. Рад, что все получилось. Мы будем благодарны за принятие любого ответа, если это будет полезно. В противном случае ваш вопрос останется без ответа для других. - person Marcin; 10.08.2020

Если эти ресурсы находятся в том же стеке CloudFormation, что и ваш будильник, вы можете использовать указанные ниже функции, чтобы получить имена обоих этих ресурсов:

  • !GetAtt: NLB.LoadBalancerFullName
  • !GetAtt: NLBTargetGroup.TargetGroupFullName

Для вашего стека это станет

  Alarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      ActionsEnabled: True
      AlarmDescription: test alarm
      ComparisonOperator:  GreaterThanOrEqualToThreshold
      Dimensions:
        - Name: LoadBalancer
          Value: NLB.LoadBalancerFullName
        - Name: TargetGroup
          Value: NLBTargetGroup.TargetGroupFullName
      EvaluationPeriods: 1
      MetricName: HealthyHostCount
      Namespace: AWS/NetworkELB
      AlarmActions:
        - arn:aws:sns:eu-west-1:123456:TestSNS
      OKActions:
        - arn:aws:sns:eu-west-1:123456:TestSNS
      Period: 60
      Statistic: Average
      Threshold: 2.0
      TreatMissingData: missing

Если это часть вложенного стека, вы, конечно, также можете использовать эти значения как вывод.

В противном случае, если они являются частью отдельного стека (а не вложенного стека), и вы просто копируете эти значения в (или ссылаетесь на экспорт), вам нужно будет выполнить несколько разделений, чтобы получить информацию, которую вы ищете.

person Chris Williams    schedule 09.08.2020