Amazon web services 如何将自动缩放的EC2实例自动添加到安全组?

Amazon web services 如何将自动缩放的EC2实例自动添加到安全组?,amazon-web-services,amazon-ec2,ec2-api-tools,Amazon Web Services,Amazon Ec2,Ec2 Api Tools,我想将AWS设置为自动缩放EC2实例(Windows Server 2012)。问题是,他们需要将IP地址添加到安全组中,以便能够与另一个EC2通信 AWS是否有办法通过其自动缩放功能自动处理此问题?(我能找到的最接近的方法是为新实例分配IAM角色,但我不知道我可以向安全组添加IAM角色,我只能添加IP地址。) 我目前正在研究的方法是使用AWS CLI(命令行)作为启动脚本 ec2-authorize mySecurityGroup -p 1433 -s xx.xx.xx.xx/32 但是如

我想将AWS设置为自动缩放EC2实例(Windows Server 2012)。问题是,他们需要将IP地址添加到安全组中,以便能够与另一个EC2通信

  • AWS是否有办法通过其自动缩放功能自动处理此问题?(我能找到的最接近的方法是为新实例分配IAM角色,但我不知道我可以向安全组添加IAM角色,我只能添加IP地址。)

  • 我目前正在研究的方法是使用AWS CLI(命令行)作为启动脚本

    ec2-authorize mySecurityGroup -p 1433 -s xx.xx.xx.xx/32
    

  • 但是如何获取当前实例的公共IP?是否有AWS CLI命令来获取此信息?我不想依赖像“curl echoip.com”这样的外部网站。我听说过ec2元数据,但我认为它不适用于Windows,我不想使用其他第三方软件。

    创建一个名为web的安全组。举个例子,假设该组的id为:sg-7aa91911


    创建一个名为db的安全组。 向源为sg-7aa91911的端口1433的db安全组添加新规则

    创建自动缩放启动配置,并将SecurityGroups设置为sg-7aa91911和您需要的任何其他配置

    使用该启动配置创建自动缩放组

    我编写了一个快速的CloudFormation模板来完成这项任务。您应该能够运行它,它将创建一个具有连接的安全组的自动缩放组。它还将创建一个空白实例,您可以在其中存储数据库

    如果您不想使用CloudFormation模板,只需查看安全组的定义位置。它显示了两个安全组的连接方式

    {
      "AWSTemplateFormatVersion" : "2010-09-09",
    
      "Description" : "test tempalte",
    
      "Parameters" : {
        "KeyName" : {
          "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance",
          "Type" : "String"
        }
      },
    
      "Mappings" : {
        "RegionMap" : {
          "us-east-1"      : { "AMI" : "ami-7f418316" },
          "us-west-1"      : { "AMI" : "ami-951945d0" },
          "us-west-2"      : { "AMI" : "ami-16fd7026" },
          "eu-west-1"      : { "AMI" : "ami-24506250" },
          "sa-east-1"      : { "AMI" : "ami-3e3be423" },
          "ap-southeast-1" : { "AMI" : "ami-74dda626" },
          "ap-northeast-1" : { "AMI" : "ami-dcfa4edd" }
        }
      },
    
      "Resources" : {
        "WebServerGroup" : {
          "Type" : "AWS::AutoScaling::AutoScalingGroup",
          "Properties" : {
            "AvailabilityZones" : { "Fn::GetAZs" : "" },
            "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
            "MinSize" : "1",
            "MaxSize" : "10",
            "DesiredCapacity" : "1"
          }
        },
    
        "LaunchConfig" : {
          "Type" : "AWS::AutoScaling::LaunchConfiguration",
          "Properties" : {
            "InstanceType" : "m1.small",
            "KeyName" : { "Ref" : "KeyName" },
            "SecurityGroups" : [ {"Ref" : "websg"} ],
            "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]}
          }
        },
        "Ec2Instance" : {
          "Type" : "AWS::EC2::Instance",
          "Properties" : {
            "KeyName" : { "Ref" : "KeyName" },
            "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]},
            "UserData" : { "Fn::Base64" : "80" }
          }
        },
    
        "websg" : {
          "Type" : "AWS::EC2::SecurityGroup",
          "Properties" : {
            "GroupDescription" : "Enable SSH and access, 8080, and 80",
            "SecurityGroupIngress" : [
              {"IpProtocol" : "tcp", "FromPort" : "8080", "ToPort" : "8080", "CidrIp" : "0.0.0.0/0"},
              {"IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "CidrIp" : "0.0.0.0/0"},
              {"IpProtocol" : "tcp", "FromPort" : "22", "ToPort" : "22", "CidrIp" : "0.0.0.0/0"}
            ]
          }
        },
        "dbsg" : {
          "Type" : "AWS::EC2::SecurityGroup",
          "Properties" : {
            "GroupDescription" : "Port opened only to security group",
            "SecurityGroupIngress" : [
              {"IpProtocol" : "tcp", "FromPort" : "1433", "ToPort" : "1433", "SourceSecurityGroupName" : {"Ref" : "websg"}
              }
            ]
          }
        }
      }
    }
    

    是否存在无法添加规则以授权给定安全组中所有实例的原因?你想设置跨地区的访问权限吗?我对这个选项持开放态度。我住在同一个地区。我只是不知道怎么做(我对AWSEC2很陌生)。我想我只能向安全组添加IP地址。它的工作原理与添加IP类似,相反,您需要指定您的安全组id(以sg-XXXXXX开头)。Arg最终解决了问题。当您在规则中使用安全组(而不是IP地址)时,有一个怪癖,即您不能使用公共IP引用该实例。我一直在用公共IP引用这个实例(因为它使用IP地址安全规则),而这正是让我一直感到厌烦的地方。他们应该更好地记录这种怪癖@wisbucky您可以始终使用公共主机名。当从同一AWS区域内解析时,它将解析为专用IP。感谢您的详细示例。最后,我最大的问题是我试图用它的公共IP连接到“DB”。我终于意识到,当您使用安全组规则时有一个怪癖,您必须使用公共DNS或私有DNS/IP。