首页 > 编程语言 >用 IaC 的方式管理 EC2 实例 - 每天5分钟玩转 GPT 编程系列(1)

用 IaC 的方式管理 EC2 实例 - 每天5分钟玩转 GPT 编程系列(1)

时间:2023-07-03 20:57:05浏览次数:50  
标签:aws IaC 实例 DevChat EC2 key GPT

目录

写在前面

咳咳,开个系列吧,就叫 《每天5分钟玩转 GPT 编程》。在这个系列里我们将分享各种借助 GPT 解决实际工作问题的经验,包括但不限于让 GPT 辅助写代码。

咳咳,敲黑板:本系列文章欢迎大家投稿,分享出你使用 GPT 的各种“奇淫技巧”,“sao 操作”,秀出你是如何借力 GPT 提升工作效率,解决实际工作问题的!

咳咳,我知道你想问:投稿有奖励吗?有,必须有,不过我还来不及备礼。我决定等收到第一篇投稿时再思考这个问题。

如果这是你第一次听说“DevChat”,那么我推荐你先阅读这篇文章《DevChat:将 GPT-4 无缝融入 VS Code,极致提升你的编程体验》

你听我说

今天心血来潮,我准备安装下 KubeSphere,于是我打开了 KS 的官网,找到了这篇文章:

看到了吗?第一步是“Prepare a Linux Machine”。我相信很多人都有过这样的需求:

“我需要一台 Linux 机子,系统是 xxx,规格配置是 xxx,网络要求是 xxx,预装软件是 xxx……”

但是我们的 PC 基本都是 Mac or Windows,我们也不希望将一些重量级,服务器端部署的应用跑到自己的 PC 上。这时候要么你的公司有成熟的运维体系,你只要提需求,或者走流程,就有人帮你准备好 Linux 环境;要么,你和我一样,手里有一个 AWS 账号,然后自力更生。(如果你更惨一点,只能在本地倒腾虚拟机,咳咳,哥们珍重。)

AWS 上创建一个合适的 EC2 实例,这个事情说难不难,不过也够让 AWS 新手头疼一会,毕竟至少他得:

  1. 熟悉 AWS 基础概念,基础操作;
  2. 熟悉 EC2,key pair, security group 等概念和基本操作;
  3. 熟悉怎么连接 EC2 实例,知道 Public IP 等概念;

除此之外,也可能一个不小心陷入 IAM、VPC 等复杂的概念里,从入门到放弃。

可能在这个过程中你会遇到一些坑,一个不小心捣鼓失败了,但是碍于“创建一个云主机”这个需求听起来就很“初级”,咱也不好意思请教别人,于是……

没事,以后这类问题一律抛给 DevChat,有事 AI 干。

Hello DevChat

我尝试告诉 DevChat 我的需求和现状,让 DevChat 给出解决方案。

DevChat 是一个对接了 GPT-4 的 VS Code 插件

第一轮

  • My prompt
我需要一个 EC2 实例用于部署单机版的 KubeSphere,这个实例的要求是:
1. 系统是 Ubuntu 22.04;
2. 规格不小于:2 CPU cores, 4 GB memory, and 40 GB disk space;
3. 可以用 ssh 连接;
4. 所有端口都可以从公网访问;

请给出创建这个 EC2 实例和其所需的 ssh key 对应的 Terraform 配置。
  • DevChat 给出了它的解决方案(直接点“Insert Code”可以插入这段代码):

  • DevChat 给出的完整回答:

首先,我们需要明确以下需求:

  • 创建一个 EC2 实例,用于部署单机版的 KubeSphere。
  • EC2 实例的操作系统需要是 Ubuntu 22.04。
  • EC2 实例的规格需要至少为:2 CPU cores, 4 GB memory, and 40 GB disk - space。
  • EC2 实例需要能够通过 ssh 连接。
  • EC2 实例的所有端口都需要能够从公网访问。

以下是创建 EC2 实例和其所需的 ssh key 对应的 Terraform 配置:

provider "aws" {
  region = "us-west-2"
}

resource "aws_key_pair" "deployer" {
  key_name   = "deployer-key"
  public_key = file("~/.ssh/id_rsa.pub")
}

resource "aws_security_group" "allow_all" {
  name        = "allow_all"
  description = "Allow all inbound traffic"

  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "kubesphere" {
  ami           = "ami-0dba2cb6798deb6d8" # Ubuntu 22.04 LTS
  instance_type = "t2.medium" # 2 vCPU, 4 GB RAM

  key_name = aws_key_pair.deployer.key_name

  vpc_security_group_ids = [aws_security_group.allow_all.id]

  root_block_device {
    volume_size = 40 # 40 GB disk
  }

  tags = {
    Name = "KubeSphere"
  }
}

注意事项:

  • 请将 region 替换为你的 AWS 区域。
  • 请将 public_key 替换为你的公钥文件路径。
  • ami 是 Ubuntu 22.04 LTS 的 AMI ID,可能会因区域不同而不同,你需要根据你的 AWS 区域进行替换。
  • instance_type 是 EC2 实例的类型,这里选择的是 t2.medium,它有 2 vCPU 和 4 GB RAM。如果你需要更大的规格,可以选择其他类型。
  • volume_size 是根卷的大小,这里设置为 40 GB。如果你需要更大的磁盘空间,可以增加这个值。
  • 这个配置将创建一个安全组,允许所有的入站和出站流量。在生产环境中,你可能需要更严格的安全策略。

第二轮

  • My prompt
你给出的配置看起来整体正确,在此之上我还有几点要求:
1. 我想用 ap-southeast-1 region;
2. 我需要在 EC2 实例创建成功后通过 ssh 登录,所以我需要这个实例的 IP 地址;
3. 你提到我需要注意 AMI ID,但是我不想自己去寻找;我希望你在 Terraform 配置里先查询这个 ID,然后再引用,以确保其正确。
  • DevChat 给出了它的解决方案:

翻车了,看到出现了 focal 我就知道又掉了“GPT-4 的训练数据截止日期是2021年9月”这个坑了。“Focal Fossa”是“Ubuntu 20.04 LTS”版本的代号,而“Ubuntu 22.04 LTS”版本的代号是“Jammy Jellyfish”

第三轮

  • My prompt
你给出的配置看起来基本正确了,AMI ID 的获取方式也正确,但是 Ubuntu 22.04 不是 Focal,而是 Jammy,请再次更新配置。
  • DevChat 有一次给出了它的解决方案(可以点“Replace”直接替换当前文件里的全部代码):

  • DevChat 给出的完整回答:

对不起,我犯了一个错误。Ubuntu 22.04 的代号确实是 Jammy,而不是 Focal。我已经在下面的配置中修正了这个错误:

provider "aws" {
  region = "ap-southeast-1"
}

data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

resource "aws_key_pair" "deployer" {
  key_name   = "deployer-key"
  public_key = file("~/.ssh/id_rsa.pub")
}

resource "aws_security_group" "allow_all" {
  name        = "allow_all"
  description = "Allow all inbound traffic"

  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "kubesphere" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.medium" # 2 vCPU, 4 GB RAM

  key_name = aws_key_pair.deployer.key_name

  vpc_security_group_ids = [aws_security_group.allow_all.id]

  root_block_device {
    volume_size = 40 # 40 GB disk
  }

  tags = {
    Name = "KubeSphere"
  }
}

output "instance_public_ip" {
  description = "The public IP of the KubeSphere instance"
  value       = aws_instance.kubesphere.public_ip
}

注意事项:

  • 请将 public_key 替换为你的公钥文件路径。
  • instance_type 是 EC2 实例的类型,这里选择的是 t2.medium,它有 2 vCPU 和 4 GB RAM。如果你需要更大的规格,可以选择其他类型。
  • volume_size 是根卷的大小,这里设置为 40 GB。如果你需要更大的磁盘空间,可以增加这个值。
  • 这个配置将创建一个安全组,允许所有的入站和出站流量。在生产环境中,你可能需要更严格的安全策略。
  • 在 EC2 实例创建成功后,你可以通过 terraform output instance_public_ip 命令获取其公共 IP 地址。
  • aws_ami 数据源会自动查询最新的 Ubuntu 22.04 LTS (Jammy) AMI ID,你不需要手动查找。

这回看起来差不多了,我的 public_key 确实就在“~/.ssh/id_rsa.pub”里,所以这里也不需要修改,接着就来执行一下这段代码,看能不能出来正确的 EC2 实例吧。

成果检验

  • 依次执行:
terraform init
terraform apply
  • 执行结果:

  • 测试 ssh 登录:

完美。(其实不够完美,差就差在 GPT-4 模型的训练数据不是最新的)

总结一下

  1. 如果 GPT-4 能够每隔几个月就用新数据训练一下,那就太漂亮了;
  2. 要让 GPT-4 给出可用的代码,关键是描述清楚自己的需求;
  3. 人生苦短,少些代码。有事 AI 干,没事***(被和谐了)。

BTW:

标签:aws,IaC,实例,DevChat,EC2,key,GPT
From: https://www.cnblogs.com/daniel-hutao/p/17524003.html

相关文章

  • chatgpt账号额度问题
    platform.openai.com登录官网起步105块  30刀大概能处理35万单词这样子起步105块https://openai.com/pricing  https://jiemahao.com/chatgp-openai-high-credit-limit/ 新注册账户–5美元新注册的OpenAI账号都有5美元免费额度,有效期为3个月,可用于API调用......
  • ChatGPT指令—饼图、柱状图、流程图
    今天分享生成图表的ChatGPT指令(提示词、Prompt),包括生成饼图、柱状图、流程图等。生成饼图指令:你现在是图形生成器,我将输入查询语言,你只显示该图像的预览,仅此而已。不要写解释,除非我指示你这样做,否则不要键入命令。当我需要用中文告诉你一些事情时,我会把文字放在大括号内{like......
  • ChatGPT炒股:爬取氢能行业企业名录
    全球氢能网有氢能源相关企业的列表,怎么全部爬取下来呢?先看翻页规律:http://h2.china-nengyuan.com/company/company_0.htmlhttp://h2.china-nengyuan.com/company/company_1.htmlhttp://h2.china-nengyuan.com/company/company_21.html很简单,就是最后一个数字。然后看每页的结构和企......
  • MediaCodec 编解码器的加载流程
    MediaCode的CreateByComponentName和CreateByType会调用mediacodec的构造方法//staticsp<MediaCodec>MediaCodec::CreateByType(constsp<ALooper>&looper,constAString&mime,boolencoder,status_t*err,pid_tpid,uid_tuid){......
  • 在Jupyter笔记本中使用Python与GPT-4进行交互
    在这篇文章中,我们将讨论如何在Jupyter笔记本中使用Python与GPT-4(一种强大的自然语言处理模型)结合进行处理。尽管OpenAI并未特地发布名为"GPT-4"的模型,但我们可以使用现有的GPT-3作为参考。如OpenAI未来发布了GPT-4,其与GPT-3的用法将会非常相似。在Jupyter笔记本中使用Python与GPT......
  • 将ChatGPT应用于你的企业的8种策略
     将ChatGPT应用于你的企业的8种策略1.工作坊→举办一个ChatGPT工作坊→找一个团队成员来做,或者外聘人员2.为每个人购买ChatGPTPlus账户→这可能是你能得到的最高的投资回报率→有些公司已经这么做,并且已经看到了结果3.在Chrome中将ChatGPT设为每个人的主页→......
  • [GPT] Linux 如何查看 crontab 的运行记录
     要查看crontab的运行记录,可以使用以下命令: $grepCRON/var/log/syslog或者 $tail /var/log/syslog 这将在/var/log/syslog文件中查找包含"CRON"关键字的日志条目,其中包含有关crontab任务运行的信息。请注意,这个命令假设你的系统日志文件位于/var/log/syslog......
  • [GPT] 用 document.querySelector('.xxx') 选择下级的第二个 div 要怎么写
     要选择类名为.xxx的元素下的第二个子<div>元素,可以将querySelectorAll()方法与CSS选择器一起使用。 以下是一个示例:constsecondChildDiv=document.querySelectorAll('.xxx>div')[1];在本例中,document.querySelectorAll('.xxx>div')选择类名为.xxx的元素下的所有直......
  • ChatGPT炒股:监控水泥等原材料价格每日变动情况
    水泥、钢铁等大宗商品原材料价格对于很多企业的业绩影响较大,这些产品的价格变动情况需要高频监控,来评估企业未来业绩变动趋势。下面以水泥网的水泥指数,来说明如何通过ChatGPT来编写Python程序,实现监控价格变动的功能。打开水泥网,右键检查:查看水泥指数的对应源代码。找到后,就可以通......
  • 文心一言 VS 讯飞星火 VS chatgpt (53)-- 算法导论6.2 5题
    五、MAX-HEAPIFY的代码效率较高,但第10行中的递归调用可能例外,它可能使某些编译器产生低效的代码。请用循环控制结构取代递归,重写MAX-HEAPIFY代码。文心一言:以下是使用循环控制结构取代递归调用的MAX-HEAPIFY代码:defmax_heapify(A,i):heap_size=len(A)le......