【问题标题】:How to obtain all EC2 instance IDs from AutoScaling?如何从 AutoScaling 获取所有 EC2 实例 ID?
【发布时间】:2013-02-27 06:07:42
【问题描述】:

所以我有一个带有 3 种不同实例“类型”(服务器、代理、中继)的 AWS CloudFormation 模板

我正在使用 AutoScaling 动态启动 X 个类型的实例。

我的问题是我需要从模板的输出中获取这些服务器的所有 IP,最好按部分分类。

服务器: x.x.x.x y.y.y.y

继电器: z.z.z.z

代理: 啊啊啊啊

如何仅从输出中获取实例 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"
}
}

【问题讨论】:

    标签: amazon-web-services amazon-ec2 autoscaling amazon-cloudformation


    【解决方案1】:

    不,您不能将输出设置为 ips。云形成负责自动扩展组和自动扩展启动配置,但它无法控制各个 EC2 实例,因此您无法将它们的信息获取到输出中。

    您可以编写一些在启动时在 EC2 实例上运行的东西,以在堆栈上设置一个带有 ip 值的标签。但是当实例终止时,这可能会变得难以维护。

    【讨论】:

      【解决方案2】:

      在 bash 上并使用 AWS CLI 实用程序,您可以执行以下操作:

      #!/bin/bash
      AUTOSCALING_GROUP="mygroup"
      aws ec2 describe-instances --filters \
        "Name=tag:aws:autoscaling:groupName,Values=$AUTOSCALING_GROUP" \
        "Name=instance-state-name,Values=running" | \
      grep -o '\"i-[0-9a-f]\\+\"' | grep -o '[^\"]\\+'
      

      这将输出'mygroup'自动伸缩组中所有机器的实例ID,每行一个。

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 2021-01-25
        • 2020-10-26
        • 1970-01-01
        • 2015-05-13
        • 2018-03-13
        • 2011-07-01
        • 1970-01-01
        • 2018-10-17
        相关资源
        最近更新 更多