如何在云信息堆栈的输出中发出 EC2 实例的 IPv6 地址?

如何在云信息堆栈的输出中发出 EC2 实例的 IPv6 地址?

我有 AWS cloudformation 堆栈,其中包含完全与外部流量隔离的 ec2 实例。它们很少需要直接访问。对于确实需要访问它们的情况,我有一个堆栈来启动堡垒主机。有没有一种简单的方法,是我在文档,在堆栈输出中获取堡垒主机的 IPv6 ?

# Cloudformation snippet
Resources:
  BastionHost:
    Type: AWS::EC2::Instance
    Properties:
      KeyName: !Ref KeyName
      SubnetId: !Ref MyBastionSubnetId
      Ipv6AddressCount: 1
      ImageId: !Ref LatestAmiId
Outputs:
  BastionIP:
    # Problematically only returns an IPv4
    Value: !GetAtt BastionHost.PublicIp
    Description: Publicly addressable IP of bastion host

答案1

两者都不AWS::EC2::实例也不AWS::EC2::网络接口似乎支持它。您可以在CloudFormation 公共路线图但要实施还需要一段时间。

你最好的选择是创建一个CloudFormation 自定义资源它本质上是一个 Lambda 函数,它将实例 ID 作为参数,然后调用EC2.Client.describe_instances()并从那里返回 IPv6 地址。这应该只需要几行代码。

希望有帮助:)

答案2

作为上面的答案中提到你应该使用CloudFormation 自定义资源。您可以在以下位置找到从 EC2 服务器提取 IPv6 地址的自定义资源 https://gist.github.com/martin-garbe/57234836e23c5d53ebfdd157756cc3aa

看起来没有其他办法,而且很可能永远不会有其他办法,因为 AWS 有其他解决方案,例如针对这种情况在前面使用 ELB 并创建额外的 CNAME。

(抱歉,我没有使用评论功能,但我的声誉点太低了。)

答案3

有一项新功能请求,用于通过 Cloudformation 的 GetAtt 访问 IPv6 地址,请参阅https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues/916 也许您可以支持此功能请求。

相关内容