所以我有一个 AWS CloudFormation 模板,其中包含 3 种不同的实例“类型”(服务器、代理、中继)
我正在使用 AutoScaling 动态启动 X 个类型的实例。
我的问题是我需要来自模板输出的这些服务器的所有 IP,最好按部分分类。
IE。
服务器:
xxx
y.y.y.y
继电器:
z.z.z.z
代理商:
a.a.a.a
如何仅从输出中获取实例 ID? (我可以从 ID 中获取 IP)
附模板:
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Description" : "uDeploy Agent-Relay-Server",
"Parameters" : {
"keyName" : {
"Description" : "SSH key to enable access on the servers",
"Type" : "String",
"Default" : "nick-portal"
},
"ServerInstanceCount" : {
"Description" : "Number of Servers to start",
"Type" : "Number",
"Default" : "1"
},
"RelayInstanceCount" : {
"Description" : "Number of Agent Relays to start",
"Type" : "Number",
"Default" : "2"
},
"AgentInstanceCount" : {
"Description" : "Number of Agents to start",
"Type" : "Number",
"Default" : "4"
},
"ServerAMI" : {
"Description" : "",
"Type" : "String",
"Default" : "ami-7539b41c"
},
"RelayAMI" : {
"Description" : "",
"Type" : "String",
"Default" : "ami-7539b41c"
},
"AgentAMI" : {
"Description" : "",
"Type" : "String",
"Default" : "ami-7539b41c"
},
"ServerUserData" : {
"Description" : "",
"Type" : "String",
"Default" : "#!/bin/bash"
},
"RelayUserData" : {
"Description" : "",
"Type" : "String",
"Default" : "#!/bin/bash"
},
"AgentUserData" : {
"Description" : "",
"Type" : "String",
"Default" : "#!/bin/bash"
},
"Zone" : {
"Description" : "",
"Type" : "String",
"Default" : "us-east-1d"
}
},
"Resources" : {
"ServerLaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"KeyName" : { "Ref" : "keyName" },
"ImageId" : { "Ref" : "ServerAMI" },
"UserData" : { "Fn::Base64" : { "Ref" : "ServerUserData" } },
"SecurityGroups" : [ { "Ref" : "ServerSecurityGroup" }, { "Ref" : "SshSecurityGroup" } ],
"InstanceType" : "t1.micro"
}
},
"RelayLaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"KeyName" : { "Ref" : "keyName" },
"ImageId" : { "Ref" : "RelayAMI" },
"UserData" : { "Fn::Base64" : { "Ref" : "RelayUserData" } },
"SecurityGroups" : [ { "Ref" : "RelaySecurityGroup" }, { "Ref" : "SshSecurityGroup" } ],
"InstanceType" : "t1.micro"
}
},
"AgentLaunchConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Properties" : {
"KeyName" : { "Ref" : "keyName" },
"ImageId" : { "Ref" : "AgentAMI" },
"UserData" : { "Fn::Base64" : { "Ref" : "AgentUserData" } },
"SecurityGroups" : [ { "Ref" : "AgentSecurityGroup" }, { "Ref" : "SshSecurityGroup" } ],
"InstanceType" : "t1.micro"
}
},
"ServerAutoScalingGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : [ { "Ref" : "Zone" } ],
"LaunchConfigurationName" : { "Ref" : "ServerLaunchConfig" },
"MinSize" : { "Ref" : "ServerInstanceCount" },
"MaxSize" : { "Ref" : "ServerInstanceCount" }
}
},
"RelayAutoScalingGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : [ { "Ref" : "Zone" } ],
"LaunchConfigurationName" : { "Ref" : "RelayLaunchConfig" },
"MinSize" : { "Ref" : "RelayInstanceCount" },
"MaxSize" : { "Ref" : "RelayInstanceCount" }
}
},
"AgentAutoScalingGroup" : {
"Type" : "AWS::AutoScaling::AutoScalingGroup",
"Properties" : {
"AvailabilityZones" : [ { "Ref" : "Zone" } ],
"LaunchConfigurationName" : { "Ref" : "AgentLaunchConfig" },
"MinSize" : { "Ref" : "AgentInstanceCount" },
"MaxSize" : { "Ref" : "AgentInstanceCount" }
}
},
"RelaySecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Enable inbound 20080 and 7916 from Agents",
"SecurityGroupIngress" :
[
{
"IpProtocol" : "tcp",
"FromPort" : "20080",
"ToPort" : "20080",
"SourceSecurityGroupName" : { "Ref" : "AgentSecurityGroup" }
},
{
"IpProtocol" : "tcp",
"FromPort" : "7916",
"ToPort" : "7916",
"SourceSecurityGroupName" : { "Ref" : "AgentSecurityGroup" }
}
]
}
},
"ServerSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Enable inbound 8080 all and 7918 from Relays",
"SecurityGroupIngress" : [
{
"IpProtocol" : "tcp",
"FromPort" : "7918",
"ToPort" : "7918",
"SourceSecurityGroupName" : { "Ref" : "RelaySecurityGroup" }
},
{
"IpProtocol" : "tcp",
"FromPort" : "8080",
"ToPort" : "8080",
"CidrIp" : "0.0.0.0/0"
}
]
}
},
"AgentSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Enable no inbound",
"SecurityGroupIngress" : []
}
},
"SshSecurityGroup" : {
"Type" : "AWS::EC2::SecurityGroup",
"Properties" : {
"GroupDescription" : "Enable SSH from all",
"SecurityGroupIngress" : [
{
"IpProtocol" : "tcp",
"FromPort" : "22",
"ToPort" : "22",
"CidrIp" : "0.0.0.0/0"
}
]
}
}
},
"Outputs" : {
"Ip"
}
}
最佳答案
不,您不能将输出设置为 ips。云形成负责自动扩展组和自动扩展启动配置,但它无法控制单个 EC2 实例,因此您无法从它们获取信息到输出中。
您可以编写一些在启动时在 EC2 实例上运行的内容,以使用 ip 值在堆栈上设置标签。但是当实例终止时,这可能很难维护。
关于amazon-web-services - 如何从 AutoScaling 获取所有 EC2 实例 ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15349187/