cloudformation从LoadBalancerArn获取DNSName

时间:2018-07-15 22:56:55

标签: amazon-web-services amazon-cloudformation

我的负载均衡器已经存在,并且不是使用cloudformation创建的。

我将完整的arn作为参数传递给像侦听器一样需要它的资源:

  Listener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      DefaultActions:
      - Type: forward
        TargetGroupArn: !Ref MyTargetGroup
      LoadBalancerArn: !Ref LoadBalancerARN
      Port: 80
      Protocol: HTTP

在这个使用LoadBalacnerArn的模板中,我还希望它输出该负载均衡器的DNSName,这可能吗?

这样做,我可以返回作为参数传入的ARN:

Outputs:
  LoadBalancerName:
    Description: The DNS Name of the ALB where this container was deploy
    Value: !Ref LoadBalancerARN

我试图这样做以获得这样的DNS名称,但出现错误:

Outputs:
  LoadBalancerName:
    Description: The DNS Name of the ALB where this container was deploy
    Value: !GetAtt !Ref LoadBalancerARN.DNSName

有没有办法像这样的!Ref的!GetAtt?

结合其他尝试:

Value:
  !GetAtt
    - DNSName
    - !Ref LoadBalancerARN

这也不起作用

Value:
  !GetAtt
  - !Ref LoadBalancerARN
  - LoadBalancerARN.DNSName

也许我可以做些棘手的事情,例如解析arn以获取dns名称?

2 个答案:

答案 0 :(得分:0)

除非负载均衡器是由Cloudformation创建的,否则不能将其称为cloudformation资源。

您将需要通过cloudformation重新创建负载均衡器,以引用诸如DNS名称之类的资源属性。

答案 1 :(得分:0)

除了使用Arn之外,您还可以使用类似的

Fn::Join: [ "", [ "http://", !GetAtt <<LoadBalancerResourceName>>.DNSName ] ]