我有 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 也许您可以支持此功能请求。