【问题标题】:Retrieve public IP of another EC2 instance in Saltstack formula在 Saltstack 公式中检索另一个 EC2 实例的公共 IP
【发布时间】:2015-10-15 17:14:50
【问题描述】:
我正在使用 Cloudformation 设置 VPN 节点并使用 Saltstack 配置它们。我们称它们为左右节点。配置左节点时,我需要知道右节点的公共 IP,反之亦然。有没有办法在 Saltstack 公式中检索另一个 EC2 实例的 IP?两个实例都有与之关联的标签。
或者有其他方法可以实现这一点吗?我只想省略任何硬编码。
【问题讨论】:
标签:
amazon-web-services
amazon-ec2
salt-stack
amazon-cloudformation
【解决方案2】:
您可以将 Saltstack shell 输出到命令行以使用 aws 命令行工具吗?我们在 Chef 中一直这样做是为了根据标签获取对其他资源的引用。
您希望为执行调用的 EC2 实例提供一个 IAM 角色,该角色有权调用 ec2:DescribeInstances 操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": [
"*"
]
}
]
}
那么你只需要在Salt中添加一些东西来根据标签获取实例信息:
aws --region us-east-1 ec2 describe-instances --filter Name=tag:MyTagKey,Values=MyTagValue --query Reservations[0].Instances[0].PublicIpAddress
请小心,因为您希望每个节点都了解另一个节点(循环依赖),因此您可能会遇到竞争条件。您必须想办法人为地延迟每次 Salt 运行,直到两个实例都使用公共 IP 运行。