amazon-web-services - 如何在Cloudformation模板中将EIP分配给VPC的Autoscaling组

标签 amazon-web-services amazon-ec2 amazon-vpc aws-cloudformation

我想将我保留的弹性 IP(ec2 classic ip)之一分配给 VPC 中的自动扩展组。使用 AWS Cli 我将 ip 移动到 vpc:

$ aws ec2 move-address-to-vpc --public-ip 23.23.23.23

并在aws conole中看到,该IP已传递到VPC。 并在资源中的Cloudformation模板中的AutoscalingGroup标签中分配:

"Process": {
        "Type" : "AWS::AutoScaling::AutoScalingGroup",
        "Properties": {
            "LaunchConfigurationName": {"Ref": "PreprocessorLC"},
            "LoadBalancerNames": [{"Ref": "ProcessELB"}],
            "VPCZoneIdentifier" : [{ "Fn::Join" : [",", [ { "Ref" : "PublicSubnet1"}, { "Ref" : "PublicSubnet2"} ]]}],
            "AvailabilityZones": {"Ref": "AZs"},
            "MinSize" : "1",
            "MaxSize" : "1",
            "HealthCheckGracePeriod": 300,
            "Tags" : [
                {"Key": "Name", "Value": {"Fn::Join": ["", [{"Ref": "Env"}, "-Process"]]}, "PropagateAtLaunch": true},
                {"Key": "WorkersScalingGroup", "Value": {"Fn::Join": ["", ["Offering-", {"Ref": "Env"},  "-Process-Worker"]]}, "PropagateAtLaunch": true},
                {"Key": "EIP", "Value": {"Ref": "ProcessIP"}, "PropagateAtLaunch": true},
                {"Key": "Environment", "Value": {"Ref": "Env"}, "PropagateAtLaunch": true}
            ]
        }
    }

参数中“ProcessIP”的附加值:

"ProcessIP":{
            "Description": "DEV: 23.23.23.23",
            "Type": "String",
            "Default": "23.23.23.23",
            "AllowedValues": ["23.23.23.23"]
}

但它不起作用。仍然获得随机IP。 如果有人可以告诉我哪里错了或者应该添加什么才能使它工作?

谢谢!

最佳答案

就我而言,我需要保留一组未分配的 EIP,并在 EC2 启动时将它们随机分配给它们。这样我就始终知道我的服务器将使用特定的 IP 列表,我可以在其他地方将其列入白名单。

如果您创建多个名为“prod-pool”的 EIP,则可以使用此脚本。

apt install -y jq awscli
ALLOCATION_ID=`aws ec2 describe-addresses --filters="Name=tag:Name,Values=prod-pool" | jq -r '.Addresses[] | "\(.InstanceId) \(.AllocationId)"' | grep null | awk '{print $2}' | xargs shuf -n1 -e`

if [ ! -z $ALLOCATION_ID ]; then
    aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOCATION_ID --allow-reassociation
fi

您可以将此策略附加到您的 IAM 用户

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowEIPAttachment",
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Action": [
        "ec2:AssociateAddress",
        "ec2:DisassociateAddress"
      ]
    }
  ]
}

关于amazon-web-services - 如何在Cloudformation模板中将EIP分配给VPC的Autoscaling组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849360/

相关文章:

amazon-web-services - 将 IAM 用户限制在单个 VPC 内

amazon-web-services - 解析 S3FileAdapter

javascript - S3 访问被拒绝

amazon-web-services - AWS : Find IP address of all connections to RDS instances

amazon-web-services - 将弹性IP分配给自动伸缩组使用cloudformation脚本创建的实例

amazon-web-services - Cloudformation - 构建堆栈时 Rds 失败

php - 在 Amazon Elastic Beanstalk 上运行的 PHP 应用程序与一般实例或服务器有什么区别?

python - Elastic Beanstalk 中用于接收 AWS Worker Tier 请求的 Django POST 监听器

ruby-on-rails - AWS ElasticBeanstalk EC2 给出 postgresql 连接错误

amazon-web-services - 私有(private)子网中具有公共(public) IP 的实例可以接收互联网流量吗?