通过AWS CLI自动替换EC2实例IP地址

背景

平时在AWS EC2上跑了点东西,方便查学习资料(你懂的)。之所以选择AWS是因为它家提供1年免费套餐,另外海外节点稳定。起先一切看起来不错,可以实现自由冲浪。

但过不了多久就会被 屏蔽,没办法,多启几个容器吧(内存有限,一次启用5个不同的端口,发现不好用时手工切换本机客户端端口呗,5个端口都换完了就重新绑定个弹性IP,也算个解决办法。

但最近发现, 的效率变高了。基本上只要访问过一次受限网站,过不了几分钟这个端口就被封了,这让我怎么学习?没办法,不得不重新更换一个新的弹性IP地址。更换IP地址的过程是这样的:

  • 登录AWS控制台(国内访问速度比较慢)
  • 切换到EC2控制面板
  • 分配新的弹性IP地址
  • 将新地址绑定到EC2实例
  • 释放旧的IP地址

一轮操作下来,一般要十几分钟。有时候半天登录不上,痛苦啊啊啊。。。

每次重复劳动,对于我这个希望用行动改变世界的码农来说,不是我性格啊。趁今天有空,研究了一下如何用AWS命令行工具(AWS CLI)自动替换EC2实例的弹性IP地址,节省我的时间。

编写处理脚本

关于如何配置AWS CLI,请参阅钢哥之前的博文《如何利用AWS CLI进行S3的上传下载》

这里假设你已经配置好了AWS CLI,可以通过命令行连接到你的AWS账户了。简单地通过 aws configure 可以验证你的CLI是否安装正常。

解决思路也很简单:

  • 找到我的EC2实例ID (instance id)(我的EC2实例上有个标签,值为awsjp);
  • 找到对应的IP地址分配的ID(allocation id);
  • 通过命令行生成新的弹性IP地址;
  • 将新IP绑定到EC2实例上;
  • 释放旧的弹性IP地址;

以下是我的shell脚本内容,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh

# get ec2 instance id by tag
InstanceId=$(aws ec2 describe-instances --filters "Name=key-name,Values=awsjp" --query "Reservations[*].Instances[*].[InstanceId]" --output text)
OldPublicIpAddress=$(aws ec2 describe-instances --filters "Name=key-name,Values=awsjp" --query "Reservations[*].Instances[*].[PublicIpAddress]" --output text)

# generate an elastic ip address
NewPublicIpAddress=$(aws ec2 allocate-address --domain vpc --query "PublicIp" --output text)


# associate an elastic ip to an existed ec2 instance
result=$(aws ec2 associate-address --instance-id $InstanceId --public-ip $NewPublicIpAddress)

# release an existed elastic ip address
aws ec2 release-address --allocation-id $(aws ec2 describe-addresses --filters "Name=public-ip,Values=$OldPublicIpAddress" --query "Addresses[*].[AllocationId]" --output text)

echo "New Elastic IP: "$NewPublicIpAddress

简单地运行脚本后,会提示新的弹性IP地址。更新到本机客户端,这样又可以愉快的上网了~

当然,你也可以选择其他云提供商,比如:Google,微软,都有免费套餐服务和对应的命令行工具,最主要的是要有稳定的海外节点。

什么?你不知道我在说什么?好吧,其实用 biying搜索 也不错。

本文标题:通过AWS CLI自动替换EC2实例IP地址

文章作者:王方钢 / Kenny Wang

发布时间:2020年03月01日 - 18:03

最后更新:2020年03月01日 - 18:03

原始链接:https://wangfanggang.com/AWS/aws-cli-renew-ip/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

王方钢 / Kenny Wang wechat
0%