掌握未来:评估基于IaC技术的LLM生成的数据架构

掌握未来:评估基于IaC技术的LLM数据架构生成的数据架构

评估使用LLMs生成基础设施即代码来提供、配置和部署现代应用的适用性

ZHENYU LUO在Unsplash上的照片

介绍

在本文中,我们将讨论LLMs在从基础设施供应到配置管理和部署等真实应用的生命周期中的适用性。这项工作的源代码已在GitHub¹¹上公开。基础设施即代码(IaC)解决方案通过代码而不是手动过程来简化基础设施的管理和供应¹。它们越来越常见,各大云服务提供商都实现了自己的IaC解决方案以与其服务进行交互。在这方面,AWS CloudFormation、Google Cloud Deployment Manager和Azure Resource Manager Templates简化了云服务的供应,消除了IT运维手动启动服务器、数据库和网络的需求。然而,这些许多可能性引入了供应商锁定的风险,因为给定云服务提供商所需的IaC定义不具备可移植性,如果需要使用不同的云服务提供商,则需要进行翻译。在这方面,像Terraform²或Pulumi³这样的工具提供了对不同云服务提供商的各个实现的抽象,并促进了可移植部署的开发。这样,供应商锁定的风险大大降低,组织可以根据需要动态应对而不会产生重大的实施成本。此外,IaC技术还带来了许多益处⁴:

  • 一致性:它允许通过实现可重复的部署来自动化基础设施的供应。
  • 降低风险:它促进了对基础设施管理的不易出错的逼近,因为手动干预被最小化。
  • 成本优化:它能够更容易地识别不必要的资源,并根据账单变化更快地迁移云服务提供商。
  • 改善协作:脚本可以集成到版本控制工具中,促进个人和团队之间的协作。

然而,应用程序生命周期不仅仅限于基础设施供应。下图显示了不同IaC技术支持的应用程序生命周期⁵。

基础设施即代码技术支持的应用程序生命周期。 | 来源: Josu Diaz-de-Arcaya等⁵

在这种情况下,IaC技术的目标超出了仅仅提供基础设施资源的供应。在提供所需基础设施后,配置管理阶段确保所有要求都得到适当安装。这通常使用诸如ansible⁶、chef⁷或puppet⁸等工具完成。最后,应用程序部署负责协调应用程序在各种基础设施设备上的进行。

了解LLMs

大型语言模型(LLMs)是一类人工智能模型,旨在理解并生成基于输入的类似人类的文本。这些模型以其数量庞大的参数而闻名,使其能够捕捉语言中的复杂模式和细微差别⁹。

  • 文本生成:LLMs生成的文本可以与其周围环境具有连贯性和相关性。它们被用于完成文本、生成材料,甚至进行创造性写作等活动。
  • 语言理解:LLMs能够理解并从文本中提取信息。它们可以进行态度分析、文本分类和信息检索。
  • 翻译:LLMs能够将一种语言的文本翻译成另一种语言。这对于机器翻译应用非常有益。
  • 回答问题:LLMs能够根据给定上下文回答问题。它们被用于聊天机器人和虚拟助手来回答用户的查询。
  • 文本摘要:LLMs能够将长篇文本摘要成更简短、更连贯的摘要。这对于压缩信息以便快速消化非常有用。

在上述能力中,我们将重点关注文本生成。特别是,在基于输入提示生成正确的IaC代码方面,大型语言模型(LLMs)在自然语言处理领域取得了重大进展,但也引发了一些挑战和关注。当时与LLMs相关的一些关键问题和关注点包括:

  • 偏见和公平性:LLMs可以学习它们所训练数据中存在的偏见,这可能导致偏见或不公平的结果。
  • 错误信息和虚假信息:LLMs可能会生成虚假或误导性信息,这可能有助于在网上传播错误信息和虚假信息。这些模型有可能创建看似可信但事实上不正确的内容。
  • 安全和隐私:LLMs可以被滥用来生成恶意内容,例如deepfake文本、假新闻或钓鱼邮件。

以下表格展示了不同LLMs之间的比较¹⁰

使用LLMs生成IaC

为了测试当前LLM工具在IaC领域的表现,设计了一个使用案例。最终目标是使用FastAPI框架在虚拟机中构建一个允许客户端通过HTTP方法在Elasticsearch集群中执行搜索和删除任务的API。该集群将由三个节点组成,每个节点在其自己的虚拟机中,并且在另一台机器上将是Kibana,一个支持可视化的集群管理工具。所有内容都必须在AWS云中。以下图显示了这个架构:

用于测试由LLMs生成IaC可行性的使用案例

挑战是成功地使用LLM工具完成以下三个任务。在本文中,我们使用了OpenAI的ChatGPT。

  1. 使用Terraform代码在AWS上构建一个由五个虚拟机组成的基础架构。
  2. 使用FastAPI应用程序的源代码通过API的HTTP方法执行文档搜索和删除操作。
  3. 使用Ansible代码部署和安装一个Elasticsearch集群,包括三个节点、一个Kibana节点和一个剩余节点上的FastAPI应用。

任务#1

为了挑战此任务,我们使用了以下提示:

我需要通过Terraform在您想要的公共云提供商中创建五台虚拟机。这些虚拟机的目的是:其中三台用于部署一个每天要引入2G数据的Elasticsearch集群;另一台用于Kibana;最后一台用于部署一个FastAPI应用程序。您应该选择每台虚拟机的硬件和云提供商。对于您不知道的变量,请使用占位符变量。使用便宜的实例。

最初的回答是一次不错的尝试,但我们需要持续迭代。例如,我们希望所有变量在一个单独的文件中进行定义,结果得到了以下图像。

包含要配置的变量的variables.tf代码片段。

类似地,我们想要知道部署的IP地址,并且想要将此配置放在一个单独的文件中。

包含新创建的虚拟机的IP地址的output.tf代码片段。

AI在描述我们需要的实例以及用每个实例所需的安全组进行配置方面做得非常好。

包含要创建的虚拟机的main.tf代码片段。

它还为我们想要的安全组创建了必要的资源,并在定义各个端口时使用占位符。

包含要使用的安全组的main.tf代码片段。

总体而言,ChatGPT在完成这个任务上做得很好。然而,我们花了一些时间才获得可行的配置,以正确获取网络配置。例如,我们希望连接到每个创建的虚拟机,我们以以下方式指示了这一点。

我想从我的笔记本电脑访问它们的ssh,而kibana实例需要从我的笔记本电脑访问http和https。

上述提示生成的代码几乎正确,因为人工智能对进入和外出政策感到困惑。不过,这很容易发现和修复。

在能够访问虚拟机后,我们遇到了无法连接虚拟机的权限问题。这导致了一场更长的对话,结果发现自己添加这些代码行更容易。

任务 #2

对于这个挑战,我们使用了以下提示:

我需要创建一个FastAPI应用程序。这个API的目的是将单个JSON文档存储在Elasticsearch集群中,存储多个文档并进行删除。Elasticsearch集群部署在3个节点上,并且具有基本身份验证,用户为“tecnalia”,密码为“iac-llm”。

这个提示的结果非常成功。该应用程序使用了Elasticsearch的Python包¹²与Elasticsearch集群进行交互,并且完全有效。我们只需记住需要更改群集部署的节点的IP地址。在下图中,第一个方法已被创建,用于将单个文档插入到Elasticsearch中。

存储单个文档方法的代码片段。

然后,第二个方法用于在单个调用中批量插入多个文档。

存储多个文档方法的代码片段。

最后一个方法可以用于从Elasticsearch集群中删除单个文档。

删除文档方法的代码片段。

我们认为这个实验非常成功,因为它正确选择了一个适合完成任务的库。然而,需要进一步的手动改进才能将这段代码转化为生产就绪的软件。

任务 #3

对于这个挑战,我们使用了以下提示:

生成ansible代码以在三个节点上安装Elasticsearch集群。请添加一个连接到集群的Kibana节点。

这个提示完成了所需的ansible脚本。它以优秀的方式将源代码组织成不同的文件。首先是包含有关所有节点详细信息的清单。请记住,此文件需要根据任务 #1中生成的正确IP地址进行调整。

清单文件的代码摘录

然后,下图显示了安装Elasticsearch的主要ansible脚本的一部分。这是其中的摘录,完整的示例可以在存储库¹¹中找到。

elasticsearch_playbook.yml的代码摘录

另一方面,每个Elasticsearch节点的必要配置已方便地生成为Jinja文件。在这种情况下,由于权限问题,我们不得不手动添加path.logs和path.data配置,否则Elasticsearch无法启动。

elasticsearch.yml.j2的代码摘录。

类似地,ChatGPT还能为Kibana实例生成类似的配置文件。不过,在这种情况下,我们手动将配置分成一个单独的文件以提高便利性。以下图像显示了此文件的摘录。

kibana_playbook.yml的代码摘录。

同样,下面的jinja文件引用了Kibana实例,虽然最好将IP地址参数化。

kibana.yml.j2的代码摘录

总的来说,我们发现ChatGPT在生成项目的骨架方面非常出色。然而,仍然需要进行大量的操作才能将该骨架转化为生产级应用程序。在这方面,需要对所使用的技术有深入的专业知识以调整该项目。

结论

本文讨论了使用LLM来监督应用程序的生命周期。下面讨论了这一工作的优缺点。

优点

  • 在启动项目时,使用LLM来支持应用程序生命周期的各个阶段特别有益,尤其是在已知的技术中。
  • 初始骨架结构良好,提供了否则不会被使用的结构和方法。

缺点

  • LLM受到与使用AI解决方案相关的偏差风险的影响;在这种情况下,ChatGPT选择了AWS而不是类似的选项。
  • 将项目打磨到能够投入生产可能会很困难,有时手动调整代码更容易,这要求对所使用的技术有广泛的了解。

致谢

本工作由巴斯克自治区政府(ELKARTEK 2022 KK-2022/00007)的SIIRSE Elkartek项目(面向工业5.0的稳健、安全和道德智能工业系统:规范、设计、评估和监控的先进范式)资助。

作者贡献

本文的构思、分析、调查和撰写是Juan Lopez de ArmentiaAna TorreGorka Zárate的共同努力。

参考文献

  1. What is Infrastructure as Code (IaC)? (2022). https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac
  2. Terraform by HashiCorp. (n.d.). 2023年10月5日检索自https://www.terraform.io
  3. Pulumi — Universal Infrastructure as Code. (n.d.). 2023年10月5日检索自https://www.pulumi.com/
  4. The 7 Biggest Benefits of Infrastructure as Code — DevOps. (n.d.). 2023年10月5日检索自https://duplocloud.com/blog/infrastructure-as-code-benefits/
  5. Diaz-De-Arcaya, J., Lobo, J. L., Alonso, J., Almeida, A., Osaba, E., Benguria, G., Etxaniz, I., & Torre-Bastida, A. I. (2023). IEM: A Unified Lifecycle Orchestrator for Multilingual IaC Deployments ACM Reference Format. https://doi.org/10.1145/3578245.3584938
  6. Ansible is Simple IT Automation. (n.d.). 2023年10月5日检索自https://www.ansible.com/
  7. Chef Software DevOps Automation Solutions | Chef. (n.d.). 2023年10月5日检索自https://www.chef.io/
  8. Puppet Infrastructure & IT Automation at Scale | Puppet by Perforce. (n.d.). 2023年10月5日检索自https://www.puppet.com/
  9. Kerner, S. M. (n.d.). What are Large Language Models? | Definition from TechTarget. 2023年10月5日检索自https://www.techtarget.com/whatis/definition/large-language-model-LLM
  10. Sha, A. (2023). 12 Best Large Language Models (LLMs) in 2023 | Beebom. https://beebom.com/best-large-language-models-llms/
  11. Diaz-de-Arcaya, J., Lopez de Armentia, J., & Zarate, G. (n.d.). iac-llms GitHub. 2023年10月5日检索自https://github.com/josu-arcaya/iac-llms
  12. Elastic Client Library Maintainers. (2023). elasticsearch · PyPI. https://pypi.org/project/elasticsearch/