TL;DR - CloudFormation 模板是否可以将特定 ELB 的子网特定内部 IP 地址插入该子网内实例的 UserData 中?
我们在 Amazon VPC 中拥有一组 EC2 Web 服务器,该服务器有六个子网,一个私有子网和一个公共子网,分别位于 EU-West-1 内的三个可用区中。所有服务器均配置了 CloudFormation。
我们想配置 Apache 的 mod_rpaf 来记录X-Forwarded-For
标题(我们可以更改 LogFormat,但这不能轻易转换为 PHP 或 Apache 错误日志;RPAF 对我们来说是最简洁的解决方案)。
据我所知,ELB 的架构方式意味着它在每个配置的 AZ 中都有一个“立足点”,如果 ELB 被拆除或重新创建,这种情况可能会发生变化。
似乎 Ubuntu 12.04 存储库中的 mod_rpaf 版本尚未更新,以允许指令使用 CIDR 表示法ProxyIPS
,并且理论上 ELB 的 IP 地址可以是我们的三个公共子网内的任何地址。
剩下的一个解决方案是通过 Puppet 配置模块,使用实例的 UserData 生成的 hieradata。我知道在某种程度上你可以在 CloudFormation 模板中插入引用和变量,但我不确定是否可以有效地说“给我这个子网中这个 ELB 的私有 IP 地址”。
答案1
不幸的是,不行。我和我们的 AWS 解决方案工程师反复沟通过这个问题,目前无法查询 ELB 的内部 IP。我目前正在抓取日志文件来查找它们。
答案2
我们遇到了同样的问题,下面是我用来获取 ELB“LAMP-Prod”内部 IP 的命令
aws ec2 describe-network-interfaces --filters "Name=description,Values=ELB LAMP-Prod" |grep -wE 'Description|PrivateIpAddress'
或者使用 JQ,无需指定 ELB 名称
aws ec2 describe-network-interfaces --filters Name=requester-id,Values='amazon-elb' | jq -r '.NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress'
答案3
如果您想获取 elb 的私有 IP 地址,请检查 ec2 仪表板中网络和安全下的网络接口。
答案4
JQ解析版本,仅供参考。
aws ec2 describe-network-interfaces --filters "Name=description,Values=ELB your-elb-name" --output json | jq ".NetworkInterfaces[].PrivateIpAddresses[].PrivateIpAddress"