• 欢迎访问情深深几许的博客网站,这里有免费网络资源信息,WordPress教程,Python、MySQL教程
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本网站吧

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

技术日志 luckzk 1年前 (2023-03-30) 451次浏览 0个评论

背景
平时在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脚本内容,

#!/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搜索 也不错。


情深几许 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:通过AWS CLI自动替换EC2实例IP地址
喜欢 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址